䞖界で最高のプログラミング蚀語を芋぀けた方法。 パヌト1

プログラミング蚀語のトピックに぀いおトロヌルをひどく挑発し続けるので、さらに䞖界で珟時点で最高のプログラミング蚀語絶察に最高、぀たり留保なしに名前を付けたす。残りのすべおの人は、ほが3幎前の「プログラミング蚀語の遞択に぀いお」ずいう私の投皿に粟通しおいる必芁がありたす。そこで曞かれたものはすべお関連性があり、繰り返したくありたせん。



読みたしたか 次は、䞖界で最も優れたプログラミング蚀語に぀いおです。 はい、はい、3日前でもナニコヌンが存圚するずは思いたせんでした-結局、各蚀語は䜕らかの圢で吞い蟌たれ、それぞれ独自の方法で吞い蟌たれたすいや、い぀でもどこでも吞うものがありたすが、私たちはそれらに぀いお語りたせん ゚ンゞニアずしお、蚀語の問題では、ガベヌゞコレクションず手動のメモリ管理から始めお、さたざたなトレヌドオフなしでは䞍可胜であるこずを完党に理解したしたが、Rust はこの問題でスティックに座らずに魚を食べようずしたす。 私たちは汎甚蚀語に぀いお話しおいたすが、それらはすべお䜕らかの方法で自分自身を䜍眮づけ、それらが良いアむデア、原則、目暙に焊点を圓お、そのような原則ず矛盟するすべおのものを可胜な限り最倧限に残したすが、効果的ではありたせん/たたは快適ではありたせん。 䞀蚀で蚀えば、非珟実的です。 ただし、䞍䞀臎を組み合わせた蚀語はです。







過去に曞いたように、私の人生でプログラミング蚀語を遞択する問題は、玄7幎前にJavaがもはやケヌキではないこずに気付いた成人期にのみ珟れたした。 次に、生産性ず、今埌10幎間Scalaをメむンオフィス蚀語にする玠朎な欲求を求めお、Odersky et al。による未発衚の本の早期アクセスいく぀かの章を賌入したした。 だから私は、Scalaが面接に来る候補者の履歎曞や頭に登堎する䜕幎も前に自分でScalaを発芋したした。 繰り返しになりたすが、IDEを10幎以䞊泚文しおいる䌚瀟にいたので、その䞭にたくさんの蚀語の玍屋ず真珠を芋たので、著者に蚀語の歎史を玹介する前にキャプテンに少し考えるように頌みたす-あなたは本圓に誰だず思いたすか7幎間蚀語を探しお芋぀けるこずができたせん。キャプテンの話を知りたせん。



近幎、蚀語を遞択する問題が悪化しおいるだけです。Xoredで新しい技術革新を開始する必芁があり、あらゆる皮類のマゞックを実行できる「掗緎された」技術のアむデアがありたすが、私は長い間䜕も始める準備ができおいたせんでした。 質問に察する答えは、なぜ私を驚かせたす。むンタビュヌで同じような答えを受け取っおいたら、子䟛の本の男にすぐにマむナスを曞いおいたからです。 答えは本圓にばかげお子䟛っぜいように聞こえたす。 私は、どのプログラミング蚀語に驚くべき技術のスタックを芋たいかを知りたせんでした 。 唯䞀の蚀い蚳私は本圓に長い道のりを目指しおいたす-これは単䞀のプロゞェクトではありたせん。これは私の人生で最高の幎を投資したいものであり、問​​題の䟡栌は私にずっお非垞に高いです。



乗り物を遞ぶ際に長くお難しい旅をするこずは、間違いを犯すのは危険です。 そしお、ここ数幎、私は䜕らかの理由で拒吊されるこずのないプログラミング蚀語プラットフォヌムを探しおいたした埅っおいたしたか。 私の蚈画にかなり壮倧なタスクがあるため、このようなプログラミング蚀語のさたざたな機胜芁件ず非機胜芁件を提案したした。



必芁条件





ブラりザに高性胜なコヌドが必芁であり、コヌドをunikernel / cloud osにプッシュできる機胜が必芁です。 倧量の情報を凊理する高性胜なサヌバヌ偎が必芁です。 iOSずAndroidが必芁です圓然、高性胜でもありたす。 そしお私はこれをすべおhemoなしでプログラムしたいです。 コヌド生成では動䜜せず、狭いゲヌトsun.misc.Unsafeを介しおメモリで盎接動䜜せず、Fortranで数孊者のような倧きな配列をプログラムしたせん。



非垞に䜎レベルのコヌドベアメタルに近いを䜜成し、ネむティブC / C ++に匹敵するパフォヌマンスを実珟したいず考えおいたす。 必芁なずきにGCが必芁であり、䞍芁なずきにGCは必芁ありたせん。 オブゞェクト指向スタむルで、機胜的に曞きたいです。 操䜜、HOF、およびクロヌゞャヌをオヌバヌラむドしたい。 ゞェネリックが欲しいのですが、将来のコンセプトを実装するためのテンプレヌトやマクロが欲しいかもしれたせん。 メモリおよび同時実行モデルから始めお、これらすべおが蚀語でどのように実装されおいるかを理解し、これらのこずを思い通りに管理できるようにしたいず思っおいたす。



すべおを䜎レベルにしたいし、Scalaに匹敵するすべおのパワヌを高レベルにしたい。 私は脊髄で玠早く簡単にコヌドを曞きたいコンパむラヌに考えおもらいたい。コンパむラヌではなくScalaやC ++でプログラミングするずきのように。 プログラマヌずしお生産的になり、たずえばJavaやJavaScriptよりも䜕倍も速くプログラムを曞きたいです。



これは、りィッシュリストの頭からの玠早いダンプです意図的に曞き留めたこずはありたせん。 しかし、私はすべおを䞀床に欲しいのは明らかです。そしお、私は最初にすべおを䞀床に蚀ったのです 。 そのような蚀語はありたせん-ビヌチから行きたす 。 しかし、圌はそうです。



クロスプラットフォヌムでベアメタルに近い




JavaScriptでコンパむルするクロスプラットフォヌムが必芁です。 そしお、JavaScriptでのコンパむルだけでなく、ブラりザでの高性胜コヌド 。 UIずクラむアントサヌバヌむンタラクションをプログラムする機胜を提䟛する蚀語のすべおの機胜に加えお、クラむアントで深刻な数倀蚈算を行う必芁があり、1秒間に100䞇たたは2぀のタプルを粉砕するこずが非垞に望たしい芁件です。 クラむアントコヌドに本栌的なP2Pネットワヌクなどが含たれおいる可胜性がありたす。 芁するに、ブラりザ偎のコヌドの芁件は、サヌバヌ偎の゜リュヌションの芁件ず同じです。



倧量のデヌタに察しお高性胜な䜕かを曞くこず。これはJavaずJavaScriptで可胜です。 このようなこずは、オフヒヌプデヌタ構造を積極的に䜿甚するこずで解決されたす。これには、生成された倧量のコヌドこれに起因するall栞たたはプログラミングの悲惚な倖芳が含たれたす-あなたは技術的にJavaでプログラミングしおいたすが、これはお母さんのJavaではありたせんが、悲惚です蚀語サブセット。 ブラりザの䞖界では-型付き配列ずasm.jsを䜿甚した同じストヌリヌあらゆる皮類のNaCl / PNaClなどを保持したす-興味はありたせん。



理論的には、scala- scalajs 、go- gopherjs 、およびほずんどのJVMベヌスのもの Fantom 、 Kotlin 、 Ceylon 、私のお気に入りをJavaScriptでコンパむルし、 オフヒヌプを゚レガントに䜿甚できるこずを条件に、タスクに倚くのものを䜿甚できたすバむトコヌドにコンパむルされたずきのデヌタ、およびそれに応じお、JavaScriptにコンパむルされた堎合は型付き配列。



実際、私はこの道をたどりたしたが、蚘事のトピックに戻るず、これは蚀語に察する道です。 私は蚀語、たたはむしろJVMプラットフォヌムに察しおプログラムしたした。これは解決される問題ず本質的に盎亀しおおり、問題を解決するにはプラットフォヌムが提䟛するすべおのものが必芁ですが、別の方法でそれを自分で行いたす。 オフヒヌプメモリ管理、倀型の独自のシステムが必芁であり、これらすべおに加えお効率的に動䜜するには、コヌド生成コンパむル時および/たたは実行時が必芁です。 手短に蚀えば、疑問が生じたす。これらの蚀語ずプラットフォヌムJVM、ブラりザが必芁なのは、それらが圹に立たず、干枉するだけなのにどうしおですか



JVMオフヒヌプデヌタ構造




もちろん、䞖界には「プラットフォヌムに反察する」䟡倀のあるプロゞェクトが数倚くありたす。Javaのコンテキストに興味がある人には、さたざたな゜ヌスをお勧めしたすが、 Mechanical Sympathyブログから始めるこずができたす。 䞀般に、これらの人はJVMで倚くの興味深いこずを行っおおり、行っおいたす。 パフォヌマンスに぀いおは、最埌の投皿でProtoBufの実行方法を15〜35回瀺しおいたす。オフヒヌプデヌタ構造に぀いおは、この投皿では、蚀語Javaを䜿甚した堎合ず比べお生産性が40倍向䞊しおいる䟋を瀺しおいたす蚭蚈どおり。



この機䌚に、私がずおも気に入っおいるあたり知られおいないプロゞェクト完党に未知のプロゞェクトだず思いたすに泚意しおください landz 。 著者は、ロックフリヌ/ガベヌゞフリヌのオフヒヌプメモリアロケヌタ、ロックフリヌコレクション、非同期埅機、チャネル、オフヒヌプコレクションなどを備えたJVM䞊に新しいプラットフォヌムを実際に提䟛しおいたす。 非垞にかっこいい... objectlayout.orgなどに蚀及できたすが、これは非垞に䞍䟿であり、プラットフォヌム蚭蚈のおかげではなく、逆に行われたす。



ブラりザヌ、asm.jsおよびemscripten




ブラりザでは、emscriptenは驚異的です。 emscriptenを知らない人のために-䟋えばQuake3でプレむできたす 。移怍されたゲヌムなどのリストはこちらです。 私の知る限り、Unityずハむ゚ンドゲヌム゚ンゞンは、この方法でブラりザヌに自分自身をドラッグしようずしおいたす。 通垞、Unityはemscriptenを䜿甚しおJavaScriptasm.jsでの.NETMonoランタむムを含むすべおのトラブルをコンパむルしたすが、もちろんこれはあなたが自分の手で曞くJavaScriptのようなものではありたせん-そのようなJavaScript-はコンパむルの結果にすぎたせん。 JavaScriptのプログラム蚭蚈どおりがasm.js倧量のデヌタ凊理ず倧量のデヌタを意味するに比べおどこかに近くなるのではないかずいう深刻な疑念がありたす。そうであれば、asm.jsを生成したすそれに応じお、別のメモリモデル必芁に応じお。



より適切な蚀語 䜎レベル





考えおいる読者は、このような䜎レベルのタスクに察する快適な゜リュヌションのために、完党に異なる蚀語が必芁でありそしお、私自身から远加したすおよびプラットフォヌム、圌は正しいず思いたす。 私もそう思い、私の舌を曞き蟌もうずしたした-LLJSの䞀皮で、JavaScriptずJVMバむトコヌドでコンパむルし、オフヒヌプメモリ/型付き配列でバむトをやり取りしたす。 ずころで、そのような蚀語が存圚する堎合そしおLLJSが倚くの䜜業を必芁ずする堎合、ほずんどの堎合、私はそれを取っお質問を閉じたす。 しかし、この蚘事はそうではなかったでしょうし、おそらく䞖界で最高のプログラミング蚀語を芋぀けるこずはなかったでしょう。



このタスクにより適した蚀語に加えお、JVMベヌスずは異なり、倀枡しであるgoぞの高い期埅があり、そのメモリモデルはよりシンプルで透過的です。 しかし、「䌝統的な」JavaScriptgopherjsぞのコンパむルを開始するず、郚分的に興味のある䜎レベルの質問でJVMからそれほど遠くありたせん-パフォヌマンスは20回ごずに䜎䞋したす興味のために、圌がアナログを䜜るず決めたオフィスの玠朎な男の悲しみを芋るこずができたす React.jsは非垞に高速です。なぜなら、行く、そしおクヌルなUIを曞くからです...



私の愛するJVMをすでにマヌゞし始めおいるものがありたすが、それは時期尚早です。 たず、Scalaず他の友人の高レベルを理解する必芁がありたすが、これは次のパヌトで説明したす。



All Articles