Nim Nuggets: Nim talk at Strange Loop 2021

jfondren julian.fondren at gmail.com
Sun Oct 17 23:49:05 UTC 2021


On Sunday, 17 October 2021 at 21:17:43 UTC, Paulo Pinto wrote:
> The very first compiler for Lisp was created in 1960 for the 
> IBM 704.
>
> Common Lisp was just one example among others, here are a few 
> more.
>
> - Dylan, released to the public in 1995

AKA, Common Lisp.

> - Template Haskell, initially prototyped in 2002

I don't know of your other examples, but Common Lisp and Template 
Haskell are in the category with C++ templates of "this could be 
technically abused towards compile time evaluation (which still 
isn't ctfe) if someone wanted to, but people generally didn't 
because it didn't occur to them".

I gave an example of a trivial macro earlier. It's from 
https://letoverlambda.com/lol-orig.lisp , where it's preceded by

```lisp
(defun sleep-units% (value unit)
   (sleep
     (* value
        (case unit
          ((s) 1)
          ((m) 60)
          ((h) 3600)
          ((d) 86400)
          ((ms) 1/1000)
          ((us) 1/1000000)))))
```

A normal function. Which was not simply used at compile-time; 
instead, a macro version was written so that the same calculation 
could occur at compile-time. And this is what people'd tend to do 
in Common Lisp. The function actually could be used at 
compile-time but the EVAL-WHEN syntax to do that is so heavy, 
nobody would bother without ctfe having occurred to them.

An example of a language where people genuinely did write normal 
functions and then freely execute them at compile-time is Forth, 
and there the community mostly bemoaned that poor optimizers made 
it necessary to use even for constant-folding:

```forth
: rotchar ( c -- c' )
   dup  [char] a [ char m 1+ ] literal within 13 and
   over [char] A [ char M 1+ ] literal within 13 and +
   over [char] n [ char z 1+ ] literal within -13 and +
   over [char] N [ char Z 1+ ] literal within -13 and + + ;
```

WITHIN checks a half-open range, so it's getting passed 'a' and 
'z'+1, with compile-time calculation of the latter happening due 
to `[ ... ] literal`

When a better optimizer is available you'd just write `'a' 'z' 1+ 
within`

> It is useless for the community to whine who did it first, 
> because it won't increase its audience.

This is a really strange axe to grind.


More information about the Digitalmars-d mailing list