Uma linguagem madura pode ser usada por poucos. Mas continua a fazer parte da minha base de código.
Como usuário de longa data (e forte defensor) de Scheme / Common Lisp / Racket, às vezes me perguntam por que os prefiro. Felizmente, sempre liderei minhas próprias organizações de engenharia, então nunca precisei justificar isso para a gerência. Mas há um público ainda mais importante - meus próprios colegas engenheiros que nunca tiveram o prazer de usar essas linguagens. Embora não precisem de desculpas, eles ainda perguntam por curiosidade intelectual, e às vezes por surpresa, por que não estou louco com o próximo recurso legal a ser adicionado este mês ao Python ou Scala, ou qualquer outro. Era o tipo deles. .
Lisp (Scheme, Common Lisp, Racket, Lisp-for-Erlang), : , S-, , , λ-.
BASIC ZX Spectrum+, () Fortran. , - . , . (Turbo Pascal DOS), , C Unix (Santa Cruz Operation Xenix!). , .
, ( IISc!) ( Haskell), . . , , , .
, . Standard-ML. . . , ( ).
( « » / « »). Scheme Lisp. , . 25 .
, . , ? ? ? . , , .
. :
, S-, , , λ-.
- .
, λ-
- . . , , . , («»), , λ-.
, "" . . -, : (, ). - , . "" .
- . , , ( , sqr). , λ- , , .
, , . , . , . , . ( ), . , , .
, λ-, « » . λ- , , .
- , , , , . Scheme ( , Racket - CS, , ). , λ-, - , . λ-, .
, , , - . , , , « », . Scheme ( Racket) , . , Scheme.
, ( TCO - tail call optimization), . , . JVM, , JVM . JVM TCO, , , , JVM, , TCO. , JVM. Clojure.
. Scheme/Racket - , λ-. , " " . , , , . , Scheme , , , , . , , , .
(Call-By-Value)
, λ-, , , . : Miranda, ( Haskell). , , . , λ-. , , .
, , « » . ( ), , , , , .
, - , . - , , , . , , . , , - , - .
, . , . , . , , ( ) - .
, , , , , "λ- ", .
Scheme thunk- , , call-by-need, . .
- . : , . , .
-, . , . . . , - , , , , (spurious) , .
, - , , . , , , ( ) .
, Scheme , « , » ( , ), .
, , . , , . Eugenio Moggi. , , , . .
, . , , . ( ): « ».
- , , . , «», , , , . , , , , . .
, . (« »), , . , .
, , , .
. TypeScript JavaScript. Python JavaScript . . , -, .
. « » C, C++, Java, Fortran, . , - . , , "".
, -, : . , . , , , . "".
: - , . - , . , . ( , ), -, ( ).
, , . . . , ( ). - . , - , ( ).
. . , , . , , ( ), . , , . , , .
. , , , , - . . , , , . , , , .
, . , , . , ( ) , , . .
( ) . , - . . ( ) , . . , , . , , .
, . , , , . , , - - - . , , - array[float]. , . array[float]?
, , . , , .
, , . , , , array[byte], , . Scheme/Lisp/Racket - , . Scheme , Racket Typed Racket, . Common Lisp , , , .
, , Scheme/Lisp/Racket , , . .
S-
, , , Lisp. , S-, . . - , (), , . «(…)», , , «()». .
, , , , else, . , , «(a + b)», «(+ a b)», , «(+ a b c)». «+» - , , .
«keywords», , . , S- .
. , , , .
: (spurious) . . . , , .
. , . ( , , , .. Racketeers) . , , .
, , , -, . , Scheme , . , . , ( ) .
, S-, , , λ-.
Scheme/Racket/Lisp , , . ? , . . . , - , -, , , ( Ruby, , , : ).
, . 15 SDK C/C ++, Lisp. Java , JVM Scheme/Lisp/Racket. .
, API (Java, Ruby, Python, JavaScript, - Go Rust), Scheme/Lisp/Racket, , C/C++. , API, , , . Racket ( ) , , , , . , , Clojure , .
, , . , , Lisp Lisp, .
, , . -, : . , . , C C++, , . production-quality , , , , .
Admito que aprender Scheme / Lisp / Racket é um pouco mais difícil do que aprender Python (mas muito mais fácil do que aprender Java / JavaScript). Porém, se você fizer isso, se tornará um programador muito melhor e aprenderá a apreciar a beleza dessas linguagens de uma forma que nada mais será suficiente.
Anurag Mendhekar (empresário de tecnologia e artista de software)