なぜ私はLispにとどまるのですか(そしてあなたもそうすべきです)

成熟した言語は少数で使用できます。しかし、それは私のコードベースの一部のままです。





Scheme / Common Lisp / Racketの長年のユーザー(そして強力なサポーター)として、私は時々それらを好む理由を尋ねられます。幸いなことに、私は常に自分のエンジニアリング組織を率いてきたので、これを経営陣に正当化する必要はありませんでした。しかし、さらに重要な聴衆がいます-これらの言語を使用する喜びを一度も持ったことがない私自身の仲間のエンジニア。彼らは言い訳は必要ありませんが、それでも知的好奇心から、そして時には驚きから、PythonやScalaなどに今月追加される次のクールな機能に夢中にならない理由を尋ねます。 。





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





Scheme / Lisp / Racketの学習はPythonの学習よりも少し難しいことを認めます(ただし、Java / JavaScriptの学習よりもはるかに簡単です)。ただし、これを行うと、はるかに優れたプログラマーになり、他に何も足りない方法でこれらの言語の美しさを理解することを学ぶことができます。





Anurag Mendhekar(技術起業家およびソフトウェアアーティスト)








All Articles