> However, a senior programming educator and a former engineer told me that 
> such a language is impossible due to the "Church-Turing thesis".

In all honesty, this is a bad and unrelated answer (and kind of a cop-out). Nim 
is not trying to question conundrums of computability, Nim is questioning 
conundrums of language design and engineering.

Really, I like to think of Nim as **taking up the mantle where Lisp tried and 
failed.** My honest view, after five years of using Nim, is that Nim is really 
a kind of Lisp aiming to rectify against Lisp's historical follies; for example:

  * the dynamic typing-by default model (some Lisps tried to adopt an optional 
typing model, but it's really important that the base language itself has a 
strong "ground floor" in and of itself and not to just depend on DSLs of 
questionable integrity)
  * the overall lack of attention given to memory management (Lisp pioneered 
the use of refcounting in programming, but failed to adapt itself to its 
conclusions)
  * a syntax that focuses more on _human readability_ instead of being _just_ a 
visualized form of the AST



So why call Nim a "Lisp?" Because what makes Lisp stand out from the most 
popular languages of today is not the typing model or idea of using GC (both of 
which are ubiquitous), but the belief in entrusting the programmers with a 
really flexible metaprogramming model beyond mere generics or substitution 
macros, and thus hope to remove certain excuses as for why a language couldn't 
do "XYZ" when the programmer has the ability at hand to reconfigure a good 
chunk of what the compiler as-is affords them to do in the first place.

Lisp - through its macro system, sought to be the "one language to rule them 
all." Lisp implementations obviously vary wildly (which is indeed part of the 
problem with using Lisp), but Lisp's historical aspirations extend over [game 
engines](https://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp), [social 
media platforms](https://github.com/reddit-archive/reddit1.0), 
[DBs](http://datomic.com), [text editor 
scripting](https://www.gnu.org/software/emacs/manual/html_node/eintr/) and 
[operating systems](https://en.wikipedia.org/wiki/Genera_\(operating_system\)) 
alike.

Yet Lisp, even with its historical head start, failed tragically. The Lisp 
community continues to miss the point as to why it was outcompeted by 
everything else. Nim's hope, as I see it, is that it can fill the niche that 
Lisp sought after by observing its peers more closely and rapidly augmenting 
itself so that it doesn't lie in the dust. For instance, Nim was "just a GC'd 
language" for a long time, which is a no-go for many users right out of the 
box; but Nim was able to take realtime concerns more seriously, firstly with 
the development of the "controlled-pause" GC and later with the development of 
ARC.

FWIW, trying to be "that language" is an increasingly difficult task. Lisp 
couldn't do it, and there were many Lisp programmers historically than there 
are Nim programmers now. Obviously there is more to a programming language that 
is not provided by the merit of how its individual features are designed. But, 
of course, the hope is that eventually that it will count for something - and 
that Nim would be known not only for its features, but as a language that one 
not only _could_ write for these different multivarious, non-intersecting 
applications, but as a language where you _would actually want to._

Reply via email to