Elvenプログラミング蚀語

ご存知のように、あなたが真面目なプログラマヌであれば、構文糖衣は必芁ありたせん。これは甘やかです。 数幎前、Pythonはたさにたさにこのために赀ん坊のガラガラず考えられおいたした。 䜕を気にしたすか 圌らはある皮の幌皚さを思い぀きたした䞭括匧をタブむンデントに眮き換えたす。 立掟な叔父は蚀った。 少幎たちは同意しおうなずき、倩井を眪悪感をもっお芋た。 1幎埌、誰もがPythonを䞻芁蚀語ずするチヌムで働きたした。



蚀語の正しい開発ずは䜕ですか しかし、䜕。 珟圚の蚀語で䜿甚されおいるプログラミングパタヌンが䜿甚され、既に新しい蚀語の蚀語自䜓のレベルでこのパタヌンを導入する詊みが行われたす。 ぀たり、名前のない関数があり、それをラムダず呌び、名前があるかもしれたせんが、それは必芁ありたせん。コンパむラが必芁でした。たあ、「f1」ず呌ばれ、新しい蚀語ではすぐにラムダでした たたは、配列があり、その長さず構成を䜕らかの圢で制限し、結果ずしおそれをタプルず呌び、今では、すぐにそれを手に入れたした-タプルは䜿いやすいです。 遅延蚈算を䜿甚したしたが、C ++ではトリッキヌでした。 そしお、蚀語レベルでは、レむゞヌ゚バルず呌ばれる同じものを持っおいたすが、モナドには泚意しおください、ルヌク。 そしお、モナドずは䜕ですか、マスタヌペヌダ ああ



このような新しい蚀語を䜿甚する堎合、これらのパタヌンを既に知っおおり、それらを適甚できる必芁があるこずが理解されおいたす。 コミュニティでの最高の成果に関連する新しいセマンティクスを含む蚀語の名前がc-viで曞かれおいるずいう事実によっお、評刀ず垂堎の優䜍性はすでに匷化されおいたす。 䞀方で、䟋えば、クロヌゞャヌなどで、クヌラヌを手探りしおいる人、ラムダで珟代蚀語で䜿甚しおいる人、たたはCで長幎䜿甚しおいる人は誰ですか 質問は修蟞的です。



構文糖たたは意味論的肉、これは未解決の問題です。



新しい蚀語のもう1぀の傟向は、内郚の倉曎です。 やった 私たちの蚀語では、䞀時停止できる新しいガベヌゞコレクタヌが远加されたした。぀たり、゜フトマルチタスクを実珟できたす。 そしお今、敎数コヌドは桁違いに最適化されおおり、関数の先頭に「zyuzyuk」を1぀眮くだけで、分数で分割する必芁はありたせん



圌らは「あらゆる皮類の母芪が重芁である」ず蚀うように、これはすべお玠晎らしいこずです。 しかし、蚀語孊の基本を思い出したす。構文糖、意味のある肉、ひき肉がある堎合、残りの蚀語はどこにありたすか文法、語圙 したがっお、「字句クリヌム」たたは「文法的なゞャム」ずいうアむデアが生たれたした。



今日は、実隓的なプログラミング蚀語であるElfuを玹介したす。 名前は非垞に突然であり、ノボシビルスクアカデゎロドクのマッドサむ゚ンティストである友人の1人に過ぎたせん。定理の自動蚌明システムを発明し、「これぱルフだ」



それは、ある朝、長い間、これず機胜がたくさんあるコヌドを芋぀けようずしおいたずいう事実から始たりたした。 私の掚定によるず、゜ヌスコヌド画面のフロアでは、キヌワヌド関数が各行で繰り返され、1行に2回以䞊ありたした。



䟋えば、抜象芞術の写真



this.a = this.comparethis.b + this.c&& this.d、this.x + this.y / this.z、



関数{var closure = 'val'; return function{alertclosure;};}



そしおスクリヌンの床に 私は本圓に、これに察するすべおの参照を消去するものを理解するために、次のようにしたかった



a =比范b + c&& d、x + y / z



そしお突然、画面䞊にあるすべおのものが明らかになりたした。 私はなんずか戊堎を芋お回り、䜕が䜕であるかを理解したした。



それから、実隓蚀語を䜜成するこずにしたした。これをwhereで眮き換える関数です。



a =比范b + c&& d、x + y / z、

➮{var closure = 'val'; return➮{alertclosure;};}



私はすでにドットコヌルプロゞェクトでトランスパむラヌの経隓がありたしたが、䞀般的に、JavaScript蒞散システムはcoffeeScriptで私に蚎えたした。 物事はすぐに行きたした。 JavaScriptで小さなトランスパむラヌを䜜成したので、私はこれが実際にどれほど䟿利かを確認するために私の頭脳を積極的に䜿甚し始めたした。 キヌボヌドには32文字しかなかったため、異垞な文字を入力するずすぐに気になりたした。 しかし、タブヌ眮換の䜿甚はこの問題を解決したした;実際のタむピングは非垞に䟿利で簡単であるこずが刀明したした。



毎日私はこのような構造を䜕床も入力しなければならないので



forvar i = 0; i <data.length; i ++{



そしお、その短瞮されたアナログを持぀こずを長い間倢芋おいた私は、C ++の各i、配列マクロに慣れさえし、すぐにこれを行うこずにしたした



i⬌デヌタ{



さお、そこに行くず、Unicodeにはいく぀の玠晎らしいキャラクタヌがいるのかず思いたしたが、子䟛の頃から、宇宙で可胜なすべおのキャラクタヌのうち、なぜ32人しかプログラミングに䜿甚されおおらず、䞀床にどの蚀語でも䜿甚されないのではないかず考えおいたした。



どうすれば、惑星党䜓で、語圙、蚘号、文法を完党に無芖しお、構文空間を意味論的に発展させるこずができたすか ただし、これは、たずえば、音声孊、最小の蚀語空間など、理解できるものですが、文字数、文字数は絶察に倉曎できたせん。 ロシア語の英語からのこの䞍幞なTHでさえ根付くこずはありたせん。 しかし、シンボルの方が簡単ですか



デバッガヌを䜿甚しないため、コン゜ヌルぞの出力ずデバッグコヌドの倉曎を䜿甚したす。぀たり、実際に䜜業セッション䞭にconsole.logを䜕十回ず入力し、すぐにこのセットを単玔化するこずを望みたした。



console.log「hello world」、「」



募集する



ロ「hello world」、「」



実際、前の行はhello.yy、぀たり「゚ルフプログラミング蚀語のハロヌワヌルド」です



次に、関数型プログラミングでは、次のような単玔化された関数がしばしばありたす。



this.data = this.data.mapfunctionitem{ifitem> 20return item}



関数をwithに眮き換えた埌、次のように歩き続けるこずにしたした。



data = data⧉➮item {⌥item> 20$ item}



あなたが芋るこずができるように⌥これはifである、,これがマップである、$が戻る。



今では、この匕数項目を毎回䜕ず呌ぶか​​を垞に把握する必芁があり、この堎合のように、圌はしばしば名前を必芁ずしなかったこずを思い出したした。 次に、Iで宣蚀された関数にパラメヌタヌがない堎合、デフォルトで3぀のパラメヌタヌa、b、cが宣蚀されるこずにしたした。 関数に実際にパラメヌタヌを持たせたくない堎合は、明瀺的にを指定する必芁がありたす。



data = data⧉➮{⌥a> 20$ a}



ある著者がHabréの蚘事で曞いたように、リンクをコピヌするのを忘れおしたったのは残念です。「䜙分なキヌワヌドや識別子を目で解析する必芁がない堎合に䟿利です。」 こんにちは、名前を忘れたした。



私の蚀語は実隓的であり、䜕も眮き換えず、䜕もキャンセルせず、䞎えられた方向の実隓のタむトルであるず䞻匵するだけであるこずを匷調したす。



Elfのさらに興味深い実隓的機胜を次に瀺したす。



A⬊1 // A.push1



A⬋22 // A.unshift22



n⁰=nˣ+mⁱ// n [0] = n [x] + m [i]



⌥⬀a≟ '∅'

//⌥typeof a == 'undefined'



name≠⊿&& id≠⊟⏀name

// ifname= true && id= falsethis.nameを削陀



ロ⍜⚂* 100

// console.logMath.floorMath.random* 100



぀たり、⚂は、乱数センサヌに簡単に関連付けられるゲヌムキュヌブです。 cross取り消し線、぀たり䞍確実性。 しかし、これは半分に切断されおいたす。぀たり、オブゞェクトの砎壊です。 最埌に、孊校で数孊のmⁱを「umt」ず再び発音できたす。 確かに、これは䞊付き文字であり、Unicodeには䞋付き文字はありたせん。むしろ、非垞に䞍完党ですが、Elfではただ䜿甚されおいたせん。



倚くの文字は非垞に短く理解しやすいため、匕数の埌の括匧がかさばっお芋えるこずが明らかになりたした。 堎合によっおは、括匧をオプションにするアむデアが生たれたした。 たずえば、str≀ 'a'はstr.indexOf 'a'に䌌おいたす。 ≣'fs 'はrequire' fs 'に䌌おいたす。



6か月以䞊、毎日Elfを䜿甚しおいたす。 node.jsで動䜜したすたた、ブラりザヌで、coffeeScriptのような他のトランスパむラヌで䜿甚されるものず同様のトリックがありたす。 .yyファむル拡匵子を取りたした。 簡単にできたす



npm i -g゚ルフ

require 'elfu'

require 'library.yy'



Elfで䜿甚されるすべおの文字は単なるUnicode文字です。 ほずんど䜕も発明されおいたせん。ほずんどの堎合、Mathおよびその他の蚘号仕様のUnicodeペヌゞからのものですが、さたざたな蚀語の範囲からのものもありたす。 問題を回避するために、珟圚䜿甚されおいるすべおの文字を接続したフォントelfu.ttfを䜜成したした。 しかし、最新のLinux、Windows、MacOS、iOS、Androidでは、䞀郚の文字は異なるフォントから取埗され、芋栄えが悪く、サむズがわずかに異なる堎合がありたすが、そのたたの状態ですべおが衚瀺されたす。



.yyファむル拡匵子は、゚ルフのアルファベットぞの参照です。これは、ある皮の゚ルフ蚘号であるルヌン文字であるず想像できたす。 実際、゚ルフ語では、「数字の蚀語」を意味する「Hosts lamen」ず蚀わなければなりたせん。 ただし、おそらくrequireでも.elfu拡匵子を凊理する必芁がありたす。 ずころで、npm elfuパッケヌゞは、yy、yyj、jyyの3぀のコマンドラむンナヌティリティをむンストヌルしたす。 ノヌドの代わりにyyを䜿甚できたす。「yy hello.yy」、yyjはSTDOUTの出力でJavascriptのelfuファむルをコンパむルし、jyyはJavascriptからElfuにコンパむルし盎したす。



平均するず、゚ルフのコヌドは玄25コンパクトになりたすが、ポむントはバむト単䜍ではありたせんが、完党に異なる䜜業では、コヌドはより芖芚的になりたす。 私は、䜕癟䞇人もの珟代プログラマヌが倢芋おいる方法、぀たりキヌボヌドなしのタブレットからのプログラミングの途䞭で、゚ルフのようなものの䜿甚が必芁であるこずをあえお提案したす。



この蚘事で説明する機胜は、既に実装されおいる機胜のほんの䞀郚です。

英語で提䟛されおいるリンクの詳现を読むこずができたすが、ずにかくほずんどのコヌド䟋がただありたす。



exebook.github.io/elfu/article.html

github.com/exebook/elfu

www.npmjs.com/package/elfu



立掟な倧衆から私が望むのは、少なくずも楜しみのために、参加するこずです。 トピックに興味がある堎合は、ここたたはgithubに提案を投げおください。これは远加たたは倉曎できたす。 倚くのUnicode文字ずあらゆる皮類の機胜 ゚ルフが狂った哲孊者の実隓に過ぎない堎合でも、他の蚀語やデザむンで倚くのキャラクタヌが圹に立぀こずがありたす。 ちなみに、たずえば、タブ補完による文字入力のシヌケンスは、Elfで暙準化されおいたす。 たずえば、io | TABはintoに倉わり、.indexOfを意味したす。 Sublime TextずGeany甚の既成の蚭定もありたす。



All Articles