Pourquoi est-ce que je reste avec Lisp (et tu devrais aussi)

Une langue mature peut être utilisée par quelques-uns. Mais cela fait toujours partie de ma base de code.





En tant qu'utilisateur de longue date (et fervent partisan) de Scheme / Common Lisp / Racket, on me demande parfois pourquoi je les préfère. Heureusement, j'ai toujours dirigé mes propres organisations d'ingénierie, je n'ai donc jamais eu à justifier cela auprès de la direction. Mais il y a un public encore plus important - mes propres collègues ingénieurs qui n'ont jamais eu le plaisir d'utiliser ces langages. Bien qu'ils n'aient pas besoin d'excuse, ils demandent toujours par curiosité intellectuelle, et parfois par surprise, pourquoi je ne suis pas fou de la prochaine fonctionnalité intéressante à ajouter ce mois-ci à Python ou Scala, ou autre. .





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 , , , , .





J'avoue que l'apprentissage de Scheme / Lisp / Racket est un peu plus difficile que d'apprendre Python (mais beaucoup plus facile que d'apprendre Java / JavaScript). Cependant, si vous faites cela, vous deviendrez un bien meilleur programmeur et apprendrez à apprécier la beauté de ces langages d'une manière que rien d'autre ne suffira.





Anurag Mendhekar (entrepreneur technologique et artiste logiciel)








All Articles