問題タブ [jvm-languages]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Scala スクリプトのコンパイル。Scala スクリプトはどのように機能しますか?
グルーヴィー
Groovy には というコンパイラが付属していgroovyc
ます。スクリプトごとに、 Java が実行できるように main メソッドを含むgroovyc
を拡張するクラスを生成します。groovy.lang.Script
コンパイルされたクラスの名前は、コンパイルされるスクリプトの名前と一致します。
たとえば、次のHelloWorld.groovy
スクリプトを使用します。
それは次のコードのようになります。
スカラ
Scala には というコンパイラが付属していscalac
ます。
たとえば、同じHelloWorld.scala
スクリプトを使用すると、次のようになります。
scalac
コンパイラはクラスまたはオブジェクトの定義を予期していましたが、Scala REPL インタープリターで機能するため、コードは に対して有効ではありません。どのように可能ですか?実行前にクラスにラップされていますか?
clojure - Fregeは末尾呼び出しの最適化を実行しますか?
Fregeで末尾呼び出しが最適化されていますか。JavaにもClojureやScalaのようなJVMバイトコードにコンパイルされる言語にもTCOがないことを私は知っています。フレーゲはどうですか?
java - ジャスミンでキーワードとして名前が付けられたフィールドを処理する方法
私はJavaのサブセット用のコンパイラを書いていますが、ほぼ完成しています。私が問題を抱えていることの 1 つは、jasmin-keywords のような名前のクラス、フィールド、およびメソッドの処理です。
例えば:
次のようにjasminにコンパイルされます:
問題は .class および .field ディレクティブです。名前がキーワードの場合、コンパイル エラーが発生します。それらを一重引用符と二重引用符の両方で囲んでみました。一重引用符を使用して jasmin がクラス ファイルにアセンブルしますが、検証エラーが発生します (実際には名前に引用符が含まれているようで、最適ではありません)。二重引用符を使用すると、まったくコンパイルされません。
これに対する解決策はまったくありますか、それともジャスミンでこれを行うことは不可能ですか?
java-me - J2ME プラットフォーム用の JVM 言語
現在、J2ME 環境 (CLDC 1.1 構成と IMP-NG プロファイル) 用の組み込みアプリケーションを作成しています。JVM ベースの言語 (Groovy、Scala、Clojure など) のすべての新機能に甘やかされて、自分のコードにそのうちの 1 つを使用することを検討していました。
ただし、言及されている言語のほとんどは、かなりまともな JVM 環境を必要とします。ほとんどのいわゆる「動的」言語では、VM にリフレクションが必要です。多くの人が注釈のサポートを求めています。上記の機能はいずれも J2ME では使用できません。
私が見つけたところによると、Xtendは実行可能なオプションのように見えます。そのコンパイラは、バイトコードではなくプレーンな Java を吐き出し、ランタイムのニーズにライブラリを必要としないからです。もちろん、生成された Java コードもいくつかの要件を満たす必要がありますが、Xtend Web ページはこの点で有望に見えます。
Xtend はクラスを実行するだけで、他には何もしません
Java でのインターフェース定義は、すでに素晴らしく簡潔です。それらは適切なデフォルトの可視性を備えており、他の領域でも改善する必要はほとんどありません. これらのファイルを処理できるすべての知識と優れたツールを考えると、それらを別の方法で定義する理由はありません。列挙型と注釈型にも同じことが当てはまります。
そのため、Xtend はクラスしか実行できず、Java で定義されているインターフェイス、注釈、列挙型に依存しています。Xtend は実際には Java を置き換えるものではなく、最新化するものです。
Xtend で生成されたコードを J2ME プラットフォーム用にコンパイルすることは可能ですか、それともそこで動作しない構造がありますか?
あるいは、J2ME で実行できる「豊富な」Java 修正言語をお勧めできますか?
更新:別のソース コードとして結果を生成する「コンパイラ」がトランスコンパイラと呼ばれることを知っていると、ランタイム ライブラリと特定の Java 機能を必要としないツールであるMirahを見つけることもできます。
java - Google Go for Java プラットフォーム?
JVM は優れたパフォーマンスを提供します - それは一方であります。一方、Golang は新しいパラダイムのように聞こえ、非常に生産的です。JVM のパフォーマンスと golang の生産性という 2 つの世界の最高のものを組み合わせることができれば、多くのメリットを得ることができます。Javaでgolangの実装を提供するプロジェクトを知っている人はいますか?
optimization - 高速初期化を備えた JVM のスクリプト言語
jmx接続URL、オブジェクト名、および属性名を入力および出力属性値として取得する単純なJavaアプリケーションがあります。このアプリケーションは毎分何百回も実行され、実行時間には厳しい制限があります。最近、多くの特殊なケース (ミリ秒から秒への変換、リストの折り畳みなど) が出現し、このアプリケーションを再コンパイルして再配布するのが面倒になっています。そこで、JMX をサポートするスクリプト言語に切り替えることにしました。
groovy、jython、および clojure を試してみたところ、それらの初期化時間が長いことがわかりました (groovy/clojure/jython では約 0.9/1.2/3.5)。
初期化速度が速いものはありますか、またはJavaからロードせずにこれらの言語の初期化時間を短縮する方法はありますか?
java - Javaインターフェースに新しいメソッドを追加すると、古いバージョンに依存しているクライアントが壊れてしまうのはなぜですか?
Javaでは、新しいメソッドをインターフェースに追加すると、すべてのクライアントが壊れます。抽象クラスがある場合は、新しいメソッドを追加して、その中にデフォルトの実装を提供できます。すべてのクライアントは引き続き機能します。
なぜインターフェースがこのように設計されているのだろうか?
古いメソッドはすべてまだ存在しているため、下位互換性の問題はないようです。(もちろん、特定の例外が必要ですが、クライアントを壊さずにJavaインターフェイスに新しいメソッドを追加できるようにすることは本当に良い考えだと思います...)
コメントありがとうございます。
class - Scala では、`オブジェクト` (クラスのインスタンスではない) の *name* を取得するにはどうすればよいですか?
Scala では、次のようにオブジェクトを宣言できます。
"Thingy"
Scala で (オブジェクトの名前)を取得するにはどうすればよいですか?
Lift (Scala の Web フレームワーク) にはこれができると聞いたことがあります。
groovy - groovy ++はどうなりましたか?
groovy ++に出くわしたところ、とても面白いと思いました。
残念ながら、それはさらに開発されていないようですか?
- githubによると、最後のコミットは1年以上前でした。
- メーリングリストは完全に非アクティブで、最後のメッセージは4月に戻ってきました。
- それについての最近のニュースはありません。
プロジェクトは移動し、別の名前になりましたか?groovyの改善により、廃止されましたか?それとも廃止されたばかりですか?
洞察をありがとう!
java - List[(Char, Char)] から Object への奇妙な型変換
count
Scala 2.9.2 には、次のような再帰関数があります。
入力時Seq(('(', '('))
に、関数は次をスローしますMatchError
。
これについては、Scala コンソールでコードをいじって調べました。
マッチング('a', 'b')::rest
(2 行目) が正しい型のオブジェクトを返していないように見えます。これは、Scala がマッチング方法を知らないSeq[(Char, Char)]
突然の型になったためです。java.lang.Object
この動作を説明するものは何ですか?