Warum bleibe ich bei Lisp (und du solltest es auch)

Eine ausgereifte Sprache kann nur von wenigen verwendet werden. Aber es bleibt Teil meiner Codebasis.





Als langjähriger Benutzer (und starker Unterstützer) von Scheme / Common Lisp / Racket werde ich manchmal gefragt, warum ich sie bevorzuge. Glücklicherweise habe ich immer meine eigenen technischen Organisationen geführt, so dass ich dies gegenüber dem Management nie rechtfertigen musste. Aber es gibt ein noch wichtigeres Publikum - meine eigenen Ingenieure, die noch nie das Vergnügen hatten, diese Sprachen zu verwenden. Obwohl sie keine Entschuldigung brauchen, fragen sie immer noch aus intellektueller Neugier und manchmal aus Überraschung, warum ich nicht verrückt nach dem nächsten coolen Feature bin, das diesen Monat zu Python oder Scala hinzugefügt wird, oder was auch immer. War ihr Typ .





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





Ich gebe zu, dass das Erlernen von Scheme / Lisp / Racket etwas schwieriger ist als das Erlernen von Python (aber viel einfacher als das Erlernen von Java / JavaScript). Wenn Sie dies jedoch tun, werden Sie ein viel besserer Programmierer und lernen, die Schönheit dieser Sprachen so zu schätzen, dass nichts anderes ausreicht.





Anurag Mendhekar (Tech Entrepreneur und Software Artist)








All Articles