¿Por qué me quedo con Lisp (y tú también deberías)?

Un lenguaje maduro puede ser usado por pocos. Pero sigue siendo parte de mi código base.





Como usuario desde hace mucho tiempo (y firme partidario) de Scheme / Common Lisp / Racket, a veces me preguntan por qué los prefiero. Afortunadamente, siempre he dirigido mis propias organizaciones de ingeniería, por lo que nunca tuve que justificar esto ante la gerencia. Pero hay una audiencia aún más importante: mis propios compañeros ingenieros que nunca han tenido el placer de utilizar estos lenguajes. Si bien no necesitan una excusa, todavía preguntan por curiosidad intelectual, y a veces por sorpresa, por qué no estoy loco por la próxima característica interesante que se agregará este mes a Python o Scala, o lo que sea. .





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 es un poco más difícil que aprender Python (pero mucho más fácil que aprender Java / JavaScript). Sin embargo, si hace esto, se convertirá en un programador mucho mejor y aprenderá a apreciar la belleza de estos lenguajes de una manera que nada más será suficiente.





Anurag Mendhekar (emprendedor tecnológico y artista de software)








All Articles