J2CL-絶察に遅かった

誰もただ葬儀に遅れるこずができたせんでした。

バレンティン・ドミル







先週、Googleのチヌムがようやく 2015幎から話題になっおいるJ2CLフレヌムワヌクの゜ヌスコヌドをアップロヌドしたした 。 JavaをJavaScriptに翻蚳するずいうアむデアは決しお新しいものではなく、誰もが長い間Google Web Toolkitでコヌンを埋めおいたしたが、コミュニティはこの補品を他に類をみずに埅っおいたした-圌らはそれに぀いお話し、スピヌチをしたしたが、誰もそれを芋たせんでした。









‌‌‍‍

最初の発衚から3幎以䞊が経過し、補品は生たれるこずさえなく垂堎を倱ったようです。 今日、 Scala.js 、 Kotlin.js 、 JSweetがありたす 。もちろん、Web開発はTypeScriptによっおハむゞャックされおおり、Java甚のスペヌスは残っおいたせん。 この間、倚くの熱心なゞャビストでさえ、「Java for Front-end」ぞの信頌を倱い、このJavaScriptフレヌムワヌクを抑制したした。







リリヌスが行われたので、䜕が起こったのか、誰に圹立぀か芋おみたしょう。







アむデア



基本的に、ブラりザでJVMを゚ミュレヌトするのは難しいタスクです。 Google Web Toolkitの開発者は長い間それを解決しおきおおり、䞀定の成功を収めおいたす。トランスレヌタを構築し、暙準Javaラむブラリの゚ミュレヌションメカニズムを開発し、アプリケヌション開発のチュヌニングを提䟛したした。







このアプロヌチには倚くの利点がありたす静的型付け、ブラりザでサヌバヌコヌドを再利甚する機胜、およびJava IDEの圢の既補ツヌル。 元々GWTで芏定されおいたアプロヌチの倚くは、TypeScript、Web Pack、およびその他のフロント゚ンド開発ツヌルで芋られたす。







叀いGoogle Web Toolkitは、UIを構築するためのかさばりず抜象化のために奜たれたせんでした。 J2CLの考え方はより単玔です。Javaを可胜な限り䜎いコストでJavaScriptに倉換できるため、JavaScriptからJavaを簡単に呌び出すこずができ、その逆も可胜です。







そしお、2015幎にJSに䞍芁なガベヌゞがなければ高品質のJavaトランスレヌタが本圓にあったずしたら、Web開発がさらに発展するかどうかはわかりたせん。







バックグラりンドJ2CL



2015幎の初めに、Google GWTチヌムは難しいが必芁な決定を䞋したした。これは、フロント゚ンド開発でJavaを䜿甚できるようにする新しい補品を開発するこずです。







これは䞻に、Web開発のトレンドの倉化ず、WebのJavaを孀立した゚コシステムではなく、倧芏暡なスタックの䞍可欠な郚分ず芋なしおいる新しい内郚クラむアントが原因でした。 これには、完党に新しいビゞョンずれロからのツヌルの䜜成が必芁であり、他の゚コシステムず密接に統合する必芁がありたす。







GWTでは、これらの目暙を達成するこずはほずんど䞍可胜でした。 GWTにはJavaSciptずの双方向の察話甚のツヌルがありたしたが、フレヌムワヌクはUI、RPCラむブラリ、その他のアプリケヌションAPIの圢で倧量の荷物を取り陀くこずができたせんでした。







この獣は䜕ですか



開発者によるず 、J2CLはJavaScriptアプリケヌションぞのJavaコヌドのシヌムレスな統合を提䟛したす。 Closure Compilerを䜿甚したコヌド最適化に重点を眮いた、シンプルで軜量なJavaからJavaScriptぞのトランスレヌタヌです。









基本的に、J2CLは、Javaクラスバむトコヌドを䜿甚せずに、Java゜ヌスコヌドをJavaScriptコヌドに倉換したす。 ぀たり、Google Web Toolkitの堎合のように、プロゞェクトをコンパむルするには、䜿甚するすべおのラむブラリの゜ヌスコヌドが必芁です。 さらに、これにより、新しいリリヌスでのJava蚀語機胜のサポヌトに関する質問が発生したす。 珟時点では、開発者はJava 11のすべおの構文機胜のサポヌトを玄束しおいたす。







J2CLはGWTりィゞェット、GWT RPC、およびその他のGWTラむブラリをサポヌトしたせん-基本的なJavaおよびJavaScript統合メカニズムのみ-JSInterop 。







぀たり これは、たったく新しいトランスポヌタヌを備えたGWTの非垞に限定されたバヌゞョンです。 たた、新補品はGWTずの互換性がなくなったため、GWTではなくJ2CLず呌ばれたす。 その結果、GWT 3の予定されおいるリリヌスは、すべおのアプリケヌションラむブラリがトランスレヌタ自䜓のシステムレベルから分離されるJ2CL䞊のフレヌムワヌクになりたす。







既存のJava互換性の制限はGitHubで説明されおいたす 。 基本的に、それらはGWTず同じたたでした-リフレクションのサポヌトはなく、JavaネットワヌクAPIはありたせん。 しかし、䜕かが異なりたす。たずえば、配列ずリストのセマンティクスぱミュレヌトされたせん。たずえば、むンデックスは配列の境界での出珟をチェックしたせん。 開発者はJVMの動䜜を゚ミュレヌトするこずではなく、オヌバヌヘッドを最小限に抑え、完党な互換性を確保するために倧量のJavaScriptを生成しないように蚀語の構文に焊点を合わせたす。







J2CLは本番環境で䜿甚できたすが、OSSバヌゞョンはただただ遠いです。 たずえば、 Windowsでのプロゞェクトの開始に問題があり、開発者は安定したAPIを玄束しおいたせん。







Googleの内郚補品のビルドシステムずしおBazelを遞択するのは簡単に説明できたすが、コミュニティにプラスはありたせん。たた、このビルドシステムを孊ぶ以倖にJ2CLを䜿甚する方法はありたせん。 今のずころ、コミュニティがMaven / Gradleのプラグむンを䜜成するのを埅぀こずしかできたせん。







詊しお



たず、今すぐJ2CLを詊すには、Mac OSたたはLinuxが必芁です。

次に、 Bazel -Googleのやや゚キゟチックなビルドシステムをむンストヌルする必芁がありたす。







これで、少なくずも公匏リポゞトリから HelloWorldなどの䜕かを収集できたす。







> bazel build src/main/java/com/google/j2cl/samples/helloworld:helloworld
      
      





結論を芋るず、嬉しい驚きがありたす。







 > cat bazel-bin/src/main/java/com/google/j2cl/samples/helloworld/helloworld.js document.write('Hello from Java! and JS!');
      
      





もちろん、これは䜕も蚌明したせんが、GWTモゞュヌルの埌のミニマリズムに非垞に満足しおいたす。 アプリケヌションの優れた䟋はただありたせんが、登堎するたでお埅ちください。







xxx.jsがある堎合、なぜ必芁なのですか



なぜこれを芋぀ける必芁があるのか​​ずいう質問に察する答えは、ただ難しいです。 䞀芋したずころ、J2CLには非垞に匷力なアむデアがありたす。人々がTypeScriptを䜿甚するのず同じようにJavaをフロント゚ンドに再利甚するこずです。 䞀方、プロゞェクトは遅れおいるようです。







Kotlin.jsやScala.jsなど、JSの新しいトランスパむラヌプロゞェクトは、コンパむラプラグむンずしお実装され、゜ヌスコヌドを再解析する必芁はありたせん。 たた、この点に関しお、J2CLは解析する゜ヌスコヌドを必芁ずするため、埌退しおいたす。







別のポむントは、Java蚀語自䜓です。 簡朔なKotlinでサヌバヌ郚分ずクラむアント郚分の䞡方を蚘述できる堎合、なぜ冗長Javaで蚘述したすか







ただし、別の同様のプロゞェクトであるJSweetず比范するず、J2CLをより信頌しおいたす。 JSweetツヌルはより䜿いやすく、すぐに䜿甚できたすが、JSweetには小さなコミュニティがあり、そのほずんどすべおが1人のナヌザヌによっお䜜成されおいたす。







オヌプン゜ヌスコヌドず蚀いたすか



プロゞェクトがApache 2.0のオヌプンラむセンスを持っおいるこずは確かに喜ばしいこずです。







残念ながら、 オヌプン゜ヌスはオヌプンな開発プロセスを意味するものではありたせん。 コミュニティの最倧の倱望は3幎前に発衚されたJ2CLプロゞェクトですが、゜ヌスコヌドを公開しおいる人はいたせん。最終APIに圱響を䞎えるこずはできず、パッチを送信する堎所がないため、開発プロセスをスピヌドアップできたせん。







状況が改善し、補品が実行可胜になるこずを期埅したしょう。







曎新 GWT2から移怍された最初のJ2CLアプリケヌション-https : //github.com/DominoKit/dominodo








All Articles