ENUM関数とパイプライン演算子の組み合わせによるプログラミングパラダイムの起源


ジョイスはバリス、エリクサー、ダシュビットのチーフ採用役員の作成者;
インタビュアー:北九州大学准教授の山崎進.
Japanese Translation

2021年12月17日。注:ジョス


こんにちは、ジョ
森雅一(Elixirconf US 2021 [ 1 ])でプレゼンテーションを行い、北九州大学における「プログラミング理論」について講演する.もちろん、コースの主なトピックの一つは“なぜエリキシル?”です.Elixir [ 2 ]をプログラミングするとき、デイブトマスは「データを隠したくないです.私はそれを変えたいです.」この考察を関数プログラミングの代わりに新しいプログラミングパラダイムとして特定した.
そこで、このトピックを含む電子メールでエリキシルをデザインすることについてのあなたの考えの歴史についてあなたにインタビューしたいと思います.Elixirの創立10周年記念記事の1つとして、このインタビューを編集し出版する予定です.
1 .森雅一:フェニックスによる20分間の会員サイト、phx_gen_auth、Elixirconf 2021をライブでコーディング.この映画はhttps://youtu.be/t5TT0-mI2O4で入手可能です
[ 2 ]デイブトマス:プログラミングElixir 1.6:|>並行242479142実用的な|>楽しい、第2版、実用的な本棚、2018.https://pragprog.com/titles/elixir16/programming-elixir-1-6/
まず最初に、データ変換にベースをもたらすエリクサーの本質的な特徴は、|>関数とパイプライン演算子の組み合わせです.ご存知のように、プログラミングに強烈な喜びをもたらす!実際には、誰かがエリキシルを選択する理由の一つです.しかし、10年前エリクソンの最初のバージョンは機能的ではなく、オブジェクト指向です.そして、エリクサーの最初の理想は、データ変換に対する考え方を含んでいないかもしれない.そこで、私の最初の質問は、あなたの思考プロセスについてです.

Note: José said that Elixir was on born May 24, 2012.


2021年12月28日ジョスとヴァリム


When did you form the idea, and what brought it?


私は、考えが形成されたとき、ある特定の瞬間があると思いません.むしろ、それはゆっくりとオブジェクト指向を解明したいくつかの考えと概念への露出でした.そのような瞬間の1つは、金持ちのヒッキー(クロシェの作者)による話でした.もう一方はSimple Made Easyという本を読んでいました
本では、彼らは新しい概念とその利点を1つずつ導入することによってプログラミング言語を構築する.オブジェクト指向に関しては、オブジェクト指向は既知のモジュールへのディスパッチのためのシンタックスシュガー以外の何ものでもないと主張します.例えば、
car = new Car()
car.method()
以下のようになります:
car = new Car()
Car.method(car)
あなたがシンタックス砂糖としてオブジェクト指向を見るならば、あなたは質問に答えなければなりません:構文砂糖はそれの価値がありますか?この構文シュガー(およびオブジェクト指向)の問題は、それが状態とふるまいを結びつけるということです.状態(車)は、与えられた実体(クラス車)によってのみ扱うことができます.これは多くの場合、機能として販売されますが、真実は、開発者は、この結合を元に戻すか、理由をしようとする多くの時間を費やすことです.例えば、継承の必要性は、この結合によって直接引き起こされる.しかし、継承の導入は、独自の問題をもたらした、複数の継承(mixins)、オープンクラス(猿のパッチ)などの概念を導入するには、主要な言語も自分自身の欠陥を持つすべて!
パズルの他の部分は、機能的なプログラミングは、ソフトウェアの複雑さを計算し、アルゴリズムではないことを示している.システムが共有された状態を持っていない場合、システムが副作用を持たない場合、あなたのコードについての理由を、人間とコンパイラの両方にとってより簡単になります.したがって、状態をカプセル化することによって、オブジェクトは我々のシステムの複雑な部分を隠すことを教えました.それだけでなく、我々はしばしばこの状態をいくつかのオブジェクトに分割します.そして、それは我々のアプリケーションが非常に一生懸命に働く方法を理解して、視覚化します!
最後に、業界は何十年もアカデミーで知られていた何かを学んだ:カプセル化、抽象化、および多形性などのオブジェクト指向に積極的に関連しているプロパティは、実際にオブジェクトに固有ではなく、他のパラダイムにおいても、より多くの成功を収めている場合もある.
だから、私たちの元の質問に戻る:この構文は、砂糖の価値ですか?オブジェクト指向は価値がありますか?私に対する答えは明らかでありません、下側は上側より多くです.そして、オブジェクトなしで、我々が持つすべては、別々の実体として状態(データ)と機能(変換)です.Elixirプログラミングモードは、それの直接の結果として来る.
Elixirもパイプライン演算子を提供します.これを変換します:
Enum.frequencies(String.graphemes("Elixir"))
これを:
"Elixir" |> String.graphemes() |> Enum.frequencies()
ある意味では、それは";オブジェクト指向言語ではなく、状態と動作の結合なし.この場合、“Elixir”文字列として始まる状態は、文字列型を受け入れる任意の動作に送信できます.