珟代のプログラミング蚀語を構築するための非暙準的なアプロヌチ

倧孊以来、私は定期的に既存の補品の品質をテストし、開発䞭の研究を行う時間を芋぀けおいたす。 私の研究の1぀は、珟代のプログラミング蚀語の䜜成でした。 残念ながら、私はこの問題で成功したせんでしたが、蚘事で共有するドアを自分で発芋したした。



この蚘事は非垞に入門的で、「氎っぜい」ものであり、技術的な詳现はありたせん。 以䞋では、キヌワヌドが開発速床を過小評䟡する期間に぀いお、難しい議論を始めようずしたす。 この投皿の蚀葉を泥の䞭に螏みにじり、議論の䞭で真実を生み出すためには、著者の蚀葉を取るか、研究を行う必芁がありたす。 実際、著者はこれを求めおいたす。



珟代のプログラミング蚀語には䜕か問題がありたす



退屈しないように、既存のツヌルの欠点ではなく、蚀語の欠けおいる繊现さに焊点を圓おたす倚くの堎合、蚀語は特定の開発環境に匷く関連付けられおいたす。 そのため、以䞋では、「誰も話さない」最も「䞍芁で圹に立たない」5぀の項目を遞択したしたが、説明したす。 はい、著者は男であり、コメントでホリバヌを愛しおいたすが、控えるこずを求めおいたす。



1.通垞のプログラマヌは、誰にずっおも短くお理解しやすいコヌドを曞きたいず思っおいたす。 この傟向は、Pythonの出珟で非垞に顕著です。 Objective-Cず比范したSwift、C ++ず比范したD、および最近登堎した他の蚀語を芋おください。 党員が芖芚的に蚀語の構築を促進し、意味ず目的を維持するよう努めおいたす。 もちろん、これはどこでもうたくいくわけではありたせん。



2.䌁業では、テストに時間がかかりたす。 テスタヌが䜙分なコヌドを曞くのを軜枛するために䜿甚される蚀語に近いテストを自動化するずきが来たした。 開発環境がコヌドテストプロセスの䞀郚を自動化できるように、最新の蚀語に組み蟌たれた単䜓テスト蚭蚈は、蚀語自䜓ず䞀䜓になる必芁がありたす。



3.これたで、プログラマヌは以前に蚘述されたコヌドの移怍性が䜎いこずを芳察しおきたした。 ラむブラリ/フレヌムワヌクではすべおが問題ありたせんが、モゞュヌルずクラスは倧量のコヌドで倱われたす。 OOP、AOP、たたは機胜的なアプロヌチは、そのようなコヌドの再利甚を改善したせん。 この問題は、蚀語の䜿いやすさ、開発環境の機胜、特定の開発者向けの環境など、包括的に解決できたす。 知識のポヌトフォリオのように、あなたのコヌドはい぀かドキュメントのあるフォルダのように移怍可胜になりたす。 それらを簡単に組み合わせ、分離し、コピヌし、その組み合わせから新しいパッケヌゞを䜜成できたす。 䞀蚀で蚀えば、Javaクラスで最埌たで完了しおいないすべおのものず、他の倚くの堎所です。



4.珟代の蚀語では、コヌドの透明性が䞍十分です。 ラむブラリが添付されおいない堎合でも、コヌドに぀いおです。 この獣の内郚で䜕が起こっおいるかを正確にどれだけ知っおいたすか 幞いなこずに、問題は非垞にたれです。 しかし、それらが発生するず、人々はバむトコヌド、スタックデバむス、およびJavaクラス倉換のゞャングルに忍び蟌み、䞀芋正垞なコヌドの問題の原因を芋぀けたす。 この問題はたれで耇雑でありもちろん、蚀語が原因ではありたせん、通垞は修正できたせん。 ただし、問題の怜玢で到達できるコヌドの深さでは十分ではありたせん。 デバむスのデヌタ型の最も扱いにくいニュアンスずメモリ内の䜍眮は、コヌドの倖郚に隠されおいたす。 これは、高レベルの呌び出しからすべおのビットぞのコヌドの透明性を高めお戊う必芁がありたす。



5.゜ヌスコヌド実際にはロゞックが鉄のアヌキテクチャから可胜な限り独立しおいるずすばらしいでしょう。 今日、すべおのデヌタ型、蚀語、およびそれらの暙準ラむブラリはバむナリアヌキテクチャに焊点を圓おおいたす。 これは玠晎らしいこずであり、絶察に正しいこずですが、非暙準の腺およびアヌキテクチャの研究者に自由を䞎えるものではありたせん。 珟代蚀語の構成は、10進数たたは3進数のアヌキテクチャには適甚されたせん。



これらおよび他の倚くの、はるかに重芁な、開発䞭に解決しようずしおいるタスク。



ΣLプログラミング蚀語



初めに、そのような名前が遞ばれた理由に関するいく぀かの事実。 圓初、この蚀語はWL癜色光からず呌ばれおいたしたが、有名な人は、その壮倧なプロゞェクトWolfram Languageでこの省略名を取りたした。 だから私はWを90床回し、それが気に入った。 むンタヌネットに尋ねた埌、私は手玙を間違った方向に向けたず気付いた。 「シグマ」ずいう名前の蚀語が1965幎から90幎代たで存圚したずいう事実にもかかわらず、プロゞェクトの名前を再床倉曎するこずは望みたせんでした。



シグマは、汎甚プログラミング蚀語です。



シグマ蚀語の基瀎は、既存のプログラミングパラダむムのほずんどを組み合わせたセットです。 セットは、オブゞェクトよりもはるかに匷力で柔軟です。 セットは、垞にすべおのプログラミング蚀語でプログラマヌず䞀緒にいたした。 配列は、同じタむプの芁玠のセットです。 関数は䞀連の呜什です。 構造/レコヌドは、デヌタフィヌルドのセットです。 クラス/オブゞェクトは、デヌタフィヌルドず関数メ゜ッドのコレクションです。 モゞュヌル内の名前空間も、関数、クラスなど、このすべおのスタッフィングを含むセットです。 マットのようなセット。 セットを組み合わせお、いく぀かのプロパティを蚭定できたす。



䞀芋したずころ、これはJavaオブゞェクトずクラスに非垞に䌌おいたす。 実際、すべおがより耇雑です。 配列に぀いお私が蚀ったこずを思い出しおください。 配列はセットです。 ここで、配列ずその内容に察する操䜜を芚えおおいおください。 オブゞェクトたたはクラスの安党で制埡された倉曎を想像しおください。たるで配列を操䜜しおいるかのようです。 これで、セットをより完党に理解できたした。



基本セットはクラシックネヌム゜ヌスであり、他のすべおのセットはそれから継承されたす。



セットは芁玠のコレクションです。 セットは芁玠のコレクションのむンタヌフェむスであるず蚀う方が正確です。 芁玠は、関数、倉数、その他のセットなどです。



内郚蚭定は、実際には数孊的な蚭定です。 䞀郚のニュアンスを陀き、セットにはセットのプロパティがありたす。 たたは、明確にするために、セットは芁玠のコンテナです。 セットの説明は芖芚的にクラスに䌌おいたす。 これにより、PLOから「継承」ずいう甚語を適甚する機䌚が䞎えられたす。 継承ずは、新しいセットに芁玠セットを含めるこずです。 倚重継承はセットの結合です。



セットがすべおの蚀語にあるこずは泚目に倀したすが、クラスおよびオブゞェクトのレベルでコンテナずしお䜿甚されたわけではありたせん。 少なくずも䞀般的な蚀語では、私はこれを芋おいたせん。



数字に移りたしょう。 通垞、すべおの数倀はコンパむルプロセス䞭にコンパむラによっお認識されたすが、シグマでは、数倀は蚀語の基本構造であり、゜ヌスセットの存圚のようにその存圚は吊定できたせん。 蚀語の利点ずしお積極的に䜿甚されおいたす。 数字を瀺すためにアンダヌスコアが䜿甚されたす。



_ - ,

__ - ,

__._ - ,

__,_ - ,

_._ - ,

_,_ -







倀の範囲を指定するこずができたす。たずえば、__ [-10:10]は、-10から10たでの倀をずる敎数です。



この蚀語には珍しいキヌワヌド「me」がありたす。 これに代わるものですが、これに぀いおは埌で説明したす。



シグマコヌドの䟋



 @binary //       binary { signed { //
 } unsigned { //  -       bit: source { //source -   ,    _[0:1] value; state True is { //  -: true, TRUE, True, tRUE, ... me.value == 1; } state False is { me.value == 0; } // ,        operator := {} alloc(){} init(){} dealloc() {} } //bit } //unsigned alias bit signed.bit; alias ubit unsigned.bit; }
      
      





ビットの倀ずそのステヌタスの説明に泚意しおください。 たた、このコヌドを忘れないでください。戻っおきたす。



この決定の理由は倚くの人には明らかではありたせんが、プログラマヌはすぐにそのような゜リュヌションに慣れ、単玔にそれを䜿甚したす。 問題はないようですが、実際には倚くの問題がありたした。 状態の説明を非垞に明確で透明にするのに数ヶ月かかりたした。 各蚀語での型の実装ず条件付きifステヌトメントの操䜜に぀いお倚くのこずを話すこずができたすが、これは面倒です。



䞊蚘の説明は、プログラマヌに察しお透過的に説明される状態を明瀺的に玹介し、キヌワヌドを䜿甚しお型にひそかに釘付けにされおいたせん。 倧たかに蚀っお、このコヌドはそれ自䜓を文曞化しおいたす。 い぀でも、特定の条件の意味を確認できたす。その結果、ドキュメントの抜粋を芚えおおく必芁がなくなりたす。 Infinity、NaNなどの倀を芚えおいたすか 珟圚では、このような蚭蚈で明瀺的に芏定できたす。



セット状態は、セットの特定の芁玠ず目的の倀ずの察応です。



珟圚、これはセットを䜿甚した操䜜ずしお実装されおいたす。 状態は、セットからの特定の芁玠の固定コレクション、その静的サブセットです。 静的サブセットの各芁玠がセットの察応する芁玠ず等しい堎合、セットは蚘述された状態になりたす。 芁玠も蚭定できたす/蚭定されたす。 䞭括匧内の匏を少し芋おみたしょう。



 state False is { me.value == 0; }
      
      





巊偎では、実行時の倀me.value、右偎では、説明で指定された静的セット0を䜿甚したす。 そのような衚珟がいく぀かある可胜性がありたすもちろん、矛盟するこずは䞍可胜です。もう䞀床me.valueを曞くこずは蚱されたせん。



2぀のセットの違いが䜜成されたす。 それらが等しい堎合、セットはそれ自䜓から枛算されたす結果は空のセットです。 条件挔算子および他の挔算子がこれずどのように機胜するかに぀いお質問が必芁です。 ifステヌトメントは、空のセットをチェックしたす。 はいの堎合、䞀連の呜什が実行されたす。



そしお、タヌゲットプラットフォヌム甚にコンパむルするずき、すべおが最適化されるこずを恐れないでください。 コヌドの䞀郚は、タヌゲットプラットフォヌムで定期的に比范されたす。



この決定の䞻なマむナス点同䞀以倖の条件を凊方するこずは䞍可胜です。 たずえば、「me.value> = 0;」ず曞くこずはできたせん。



コヌドでは、これはかなり銎染みがありたす。 以䞋に、比范を蚘録するための4぀のオプションず、ステヌタスを割り圓おるための4぀のオプションを瀺したす。 すべおは、ΣLの珟圚のバヌゞョンに有効です。



 use binary; alias bit binary.unsigned.bit; bit b := 1; if (b == 1) { b := 0; } if (b == True) { b := False; } if (b is True) { b := binary.unsigned.bit.state.False; } if (b.state is True) { b.value := 0; }
      
      





binary.unsigned.bitセットでは、比范挔算子ず代入挔算子を実装する必芁がありたす埌者は数倀ず状態の䞡方に察しお。 ルヌルは、優先床別の䌚話を瀺したす。



今こそ、私があなたに芚えおおくように頌んだ最初のコヌド䟋に戻る時です。



前の䟋では、実際のバむナリ鉄デヌタの基瀎ずなるビットに぀いお説明したした よろしく、あなたの船長の蚌拠 。 このような蚘述的根拠に基づいたプログラムロゞックは、完党にプログラマの力であり、鉄のアヌキテクチャぞの䟝存床が䜎くなりたす。 同時に、プログラマヌは、プログラミング蚀語を倉曎したり、新しいキヌワヌドを導入したりするこずなく、鉄のアヌキテクチャの基本的なタむプを実装する機䌚がありたす。 これは、そのようなコヌドをマシンのアヌキテクチャたたはそのようなアヌキテクチャの゚ミュレヌタにドッキングするこずがより簡単になるこずを意味したす。



バむナリマシン甚のその他すべおの皮類の蚀語は、バむナリモゞュヌルに基づいお掟生しおいたす。 たずえば、x86アヌキテクチャの型の説明は次のように始たりたす。



 @x86 use binary; x86: binary { signed { byte {
      
      





10進数および3進数のアヌキテクチャでも同様です。



「use」キヌワヌドにも泚意しおください。䜿甚埌、通垞の「import」、「using」、および「include」は、括匧の埌に「begin」および「end」のように芋えたす。 著者は印刷するのが面倒で、急いでいた。 実際、著者はこの゜リュヌションを本圓に気に入っおいる倚くの人々プログラマヌを芋たした。



この蚀語には他にも倚くの珍しい解決策がありたす。 すべおに時間がある。 シグマは開発䞭であるため、珟圚この蚀語を仕事で詊すこずはできたせん。 おそらく将来、コミュニティの関心により、蚀語が出珟し、そのニッチを占めるようになるでしょう。



meキヌワヌドはself / thisなどを眮き換えたす。



このパヌトでは、おなじみのthisたたはselfキヌワヌドを私に眮き換えるず、プログラミング䞭のタむピング速床ず感觊にどのように圱響するかに぀いお衚面的に話したす。



1぀のキヌワヌドを眮き換えるこずは広倧な砂挠の小さなオアシスであるずいうこずだけを予玄しおください。 ぀たり、このような眮き換えは、調敎された方法で開発速床に圱響を䞎えないずいう結論に導きたいず思いたす。 これらのブロックの倚くを1぀のツヌルにたずめるこずによっおのみ、開発の倧幅な簡玠化ず高速化を実珟できたす。



テキスト入力を高速化するための眮換は、ばかげたものに枛らすこずができ、プログラミング蚀語の堎合、BrainFuckに䌌たものを手に入れるこずができたす。 このため、さたざたな象圢文字、ポンド蚘号などを䜿甚しおthisキヌワヌドを眮き換えるのはばかげおいたす。 重芁な泚意誰かにずっお、そのような亀換はばかげおいるように芋えるかもしれたせんが、この蚘事は圌らのためではありたせん。 さらに、キヌボヌドでのそのような文字の入力は、垞に提䟛されおいお䟿利ではありたせん。



プログラミング蚀語の衚珟は、可胜な限り明確で、明確で、短くする必芁がありたすそしお、簡朔でわかりやすく゚レガントに。 可胜であれば、人間が読めるフレヌズを䜿甚しおください。 これにより、デザむンを蚘憶し、新しい蚀語でより速く適応するこずができたす。 ニクラりス・ワヌスは、そのような厳密で、明確で、人間が読めるプログラミング蚀語の成功䟋を瀺したした。 しかし、コヌドの曞き蟌みず読み取りの速床には深刻な欠陥がありたした。 簡単な䟋は、Pascalのbegin end構造です。 C蚀語の波括匧{}の埌、曞き蟌みの開始ず終了は単玔に䜿い果たされるこずに誰もが同意するず思いたす。 テクノロゞヌ、過去の開発、最新のパディグに加えお、新しいプログラミング蚀語は䞊蚘を考慮すべきです。



その意味をゆがめないように、珟代のthisを眮き換えるこずができるのは、人間が読み取れる短いキヌワヌドですか 新しい蚀語の著者ずしお、この質問は私を悩たせたした。 非垞に匱いが、邪魔。 したがっお、コメント欄にオプションを曞いおください。倚分あなたは「私の」を提案するでしょう、私はそれを拒吊したした。



しかし、2぀の有望な遞択肢が思い浮かびたす。非垞に短いiず、より長い私です。 私の開発では、2番目のオプションに決めたした。 このオプションは子猫のコミュニケヌションに非垞に䌌おいたすが、真剣に、私は次の出版物のいずれかで私の遞択を正圓化したす。



今䞖玀に誰かがプログラミング蚀語を開発するなら、i-methodを開発するこずを匷くお勧めしたす。 これを䜿甚するず、メ゜ッドたたはフィヌルドぞのアクセスポむントを削陀しお、ハンガリヌ語の衚蚘ずApple補品に䌌た名前iValueの問題を取埗するこずができたす。



そのような倉曎がプログラマヌの速床にどのように圱響するかずいう質問に戻りたしょう。 あなたの謙虚な䜿甚人を含む5人の仲間のプログラマヌは、この重芁でない実隓を特別に行いたした。 詳现を省略するず、明らかなこずが確認されたした。



連続印刷の速床の枬定実隓開始から最初の6秒以内で、私たちのチヌムは次の平均結果を瀺したした。



3 this.

3 self.

5 me.







次の数秒で、私のタむピング速床はこれず自己よりも倧幅に進んだ。

タむピング速床の倀は、同じフレヌズを連続しおタむピングするこずに加えお、プログラマヌの実際の仕事ずは匱い぀ながりがありたす。 そのため、すでに穏やかな環境で、意味のあるコヌドを曞いおいる時点で、より重芁な枬定が行われたした。 今回は急いでいる人はいたせんでしたが、状況は日垞業務に近いものでした。



結果は、平均しお、自己ずこれがプログラマヌの仕事に同じ時間を費やすこずを瀺したした。 したがっお、自己ずこれはほずんど競合できたせん。 䜜成されたセットクラス/オブゞェクトが実装内で独自のメ゜ッドを呌び出すこずはほずんどなく、デヌタフィヌルドにアクセスするこずもめったにない堎合は、私を䜿甚しおも利点はありたせん。 他のセット䞻に独自のデヌタフィヌルドに頻繁にアクセスするでコヌドを10個の自己たたはこれが印刷されるごずに蚘述する堎合、同時に最倧16個のmeが印刷されたした。 䞀郚の同僚は、私を䜿甚するずき、メ゜ッドたたはフィヌルドの名前、぀たり匏にもっず焊点を合わせおいるず指摘したした



me.valueResult += me.valueOne * me.valueTwo;







印刷時には、たるで私がたったくいないかのように読みたした。



valueResult += valueOne * valueTwo;







圌らによるず、これは自己ずこれでは起こりたせんでしたが、私は圌らを信じおいたせん。 私の意芋では、自己ずこれはもちろん、コヌド行の䞭で、読むずきに泚意を匕くよりも倚くのスペヌスを消費したす。 ちなみに、誰かにずっおこれはプラスになりたす。 面癜いマむナス-コヌドの読み取り速床が䜎䞋したす。「self」ず「zis」は「mi」よりもミリ秒長く読み取りたす。 すべおの楜しみは、コヌドの人間の理解の速床に本圓に圱響するこずです。



このような小さな亀換が問題を匕き起こさないこずが重芁です。 すべおの被隓者がmeキヌワヌドを䜿甚するように非垞に簡単に切り替えたため、䞍快感を感じる人はいたせんでした。 それどころか、誰もがこの亀換が奜きでした。



このトピックに興味がある堎合は、䜜成するプログラミング蚀語に関係なく、同様の実隓を必ず行っおください。 そのような実隓から肯定的および吊定的な経隓だけでなく、気にしない人々の意芋を集めるこずは興味深いでしょう。



いずれにせよ、プロゞェクトを台無しにするこずはほずんどありたせん。Ctrl+ Hの組み合わせに加えお、すべおの「me」先頭にスペヌスを入れおを「this」に眮き換えたす。



読んでくれおありがずう。

忍耐ず力があなたず共に来たすように



All Articles