問題タブ [frege]
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.
haskell - JVM 上の Haskell?
Haskell を JVM 上で (コンパイルまたは解釈して) 実行する方法があるかどうか疑問に思っています。
Sourceforge には JHaskell がありますが、これは空っぽで死んでいるようです。
GHC はコンパイラのバックエンドとして LLVM を使用します。LLVM を Java バイトコードにコンパイルするのは良い考えですか、それとも可能ですか? それとも、別のコンパイラ バックエンドを使用しますか?
java - java.lang.Class#getAnnotation()は、Eclipseプラグインで呼び出されたときにnullを返します
Fregeプログラミング言語をサポートするためにEclipseプラグインを作成しています。IMPメタツールプラットフォームとEclipseIndigo(3.7)を使用しています。ランタイム環境はJava1.7です。
プラグインは、トークンの解析、構文解析などにバッチコンパイラと同じコードを使用します。ただし、eclipseプラグインから実行すると動作が異なることに気付き、以前にコンパイルされたモジュールのクラスファイルを読み取る次のメソッドにトレースしました。 Javaアノテーションの形式でそこに保存されているメタ情報を取得します。
URLClassLoader
コードは、引数として渡される独自のインスタンスを作成することに注意してください。クラスパスを正しく設定しないと、getOperatorsメソッドがClassNotFoundExceptionを正しくスローするため、クラスが読み込まれることを確信できます。トレースメッセージは、クラスローダーが次のパス(デフォルトでは単なるクラスパス)で構築されていることを示しています。
fregeコンパイラによって作成されていないクラスファイルには通常MD.FregePackage
アノテーションを付けることができないため、これは通常、ユーザーがプレーンJavaクラスをインポートしようとしたことを示しており、実際にプラグインに次のメッセージが表示されます。
それでも、コマンドラインからこれをうまくコンパイルできます。問題の注釈が実際に同じ場所からロードできることの証拠として、これをここに含めました。
事実を再開する:
- 注釈をロードすることになっているコードは、コンパイラがコマンドラインインターフェイスを介して呼び出されたときに正常に機能します。
- 注釈をロードすることになっているコードは、それがプラグインから呼び出されたのか、コマンドラインから呼び出されたのかを認識していません。実際、プラグインは先週まで存在していませんでしたが、コマンドラインインターフェイスは何ヶ月も正常に機能していました。
- もちろん、注釈には注釈があり
RetentionPolicy.RUNTIME
ます。そうでない場合、コマンドラインコンパイルでも注釈は認識されません。しかし、それは確かにそうです。
したがって、私が引き出すことができる唯一の結論は、Class.getAnnotation()
どういうわけか正しく機能していないということです。これは、モジュールシステムに必要な基本機能を効果的に破壊するため、非常に残念です。
これがとにかく重要な場合:プラグインが使用するFregeコンパイラコード自体はFregeで記述されており、frege.prelude.Base
上記のクラスはすべてのモジュールに必要な基本ライブラリであるため、プラグインのアクティブ化時にすでにロードされている必要があります。別のクラスローダー。
誰かが同じような経験をしていますか?これをどのように解決することは可能ですか?これを回避する方法の提案は大歓迎です。
haskell - `deleteBy`が最も一般的なタイプを持たない正当な理由はありますか?
Haskell 2010言語レポートは、セクション20.10.1.1で次のように述べています。
実際、GHCライブラリに実装すると
ただし、実際には、タイプを注釈付きの前者に制限します。
したがって、たとえば、次のように言うことはできません。
Int
と同じではないため(Int, String)
。
これには何か正当な理由がありますか?
私が尋ねている理由は、正当な理由がない場合は、現在行っているData.ListのFregedeleteBy
ポートに、より一般的なタイプを含めるためです。しかし、多分私は何かを見落としていますか?
編集:@hammarが指摘したように、これは他のxxxBy関数にも当てはまります。
haskell - フレーゲのハスケルのgetLineに相当し、
フレーゲのハスケルに相当するものはありgetLine
ますread
か?また、標準ライブラリのコンソールからの入力を解析しますか?
現在、私は次のようにしています。
アップデート:
Fregeは進化したので、今getLine
では標準ライブラリ自体にあります。についてread
は、Stringの変換メソッドがあります。さて、元の問題は単純です、
詳細については、以下のIngoの回答を参照してください。
clojure - Fregeは末尾呼び出しの最適化を実行しますか?
Fregeで末尾呼び出しが最適化されていますか。JavaにもClojureやScalaのようなJVMバイトコードにコンパイルされる言語にもTCOがないことを私は知っています。フレーゲはどうですか?
class - Fregeクラスはどのように機能しますか?
型クラスに関するフレーゲの考え方は、Haskellとは大きく異なるようです。特に:
明らかな理由もなく、構文が異なっているように見えます。
関数型はクラスインスタンスを持つことはできません。(かなり奇妙なルールのようです...)
言語仕様は、サブクラスインスタンス宣言にスーパークラスを実装することについて何かを述べています。(ただし、ダイヤモンドの継承がある場合はそうではありません...エラーにはなりませんが、何らかの形で機能することが保証されているわけではありませんか?)
Fregeは、インスタンスがどのように見えるかについてあまり煩わしくありません。(型エイリアスは許可され、型変数は区別する必要はありませんなど)
メソッドはとして宣言できますが
native
、これの意味が完全には明確ではありません。type.method
メソッドにアクセスするために書くことができるようです。繰り返しますが、これが何を意味するのか、なぜそれが有用なのかについては何も示されていません。サブクラス宣言は、スーパークラスメソッドのデフォルトの実装を提供できます。(?)
要するに、このようなものを知っている誰かがこのようなものがどのように機能するかについての説明を書くことができれば便利でしょう。言語仕様に記載されていますが、説明は少し簡潔です。
(構文に関して:Haskellのインスタンス構文はより論理的だと思います。「XがYとZのインスタンスである場合、次のようにQのインスタンスでもあります...」Haskellのクラス構文は常に少し奇妙に見えますXが実装する場合、それはそれが実装することを意味するEq
のではなく、必要に応じて実装できることを意味します。しかし、より良いシンボルが何であるかはわかりません...)Ord
Ord
インゴの答えによると:
- スーパークラスメソッドのデフォルトの実装を提供することは、インスタンスを「一度に」宣言した場合にのみ機能すると思いますか?
たとえば、Foo
がのスーパークラスであるとしBar
ます。各クラスに3つのメソッド(、、、、、、)があり、のfoo1
デフォルトfoo2
の実装を提供するfoo3
とします。それはそれを意味するはずですbar1
bar2
bar3
Bar
foo1
動作するはずです。しかし、これはうまくいくでしょうか:
- それで
native
、クラス宣言のようにメソッドを宣言すると、そのメソッドのデフォルトの実装が設定されるだけですか?
だから私が何かをするなら
つまり、Javaネイティブクラスの空のインスタンス宣言を記述した場合、 Javaでfoo
マップするということobject.foo()
です。
特に、クラスメソッドがとして宣言されている場合でも、必要に応じて他の実装をnative
提供できますか?
- すべての型[コンストラクター]は名前空間です。それが悪名高い名前付きフィールドの問題にどのように役立つかがわかります。この名前空間のスコープで他のものを宣言したい理由がわかりません...
haskell - Frege では熱心な表現ですが、Haskell では怠け者ですか?
Haskell では、次のコードは "[1,2,3,4,5" を出力します。
しかし、Frege ではOutOfMemoryError
、次のコードでスローします。
ここでの唯一の違いは、unpacked
から変換する必要がある関数String
と[Char]
FWIWunpacked
です。関数は熱心です。Haskell のように式全体を遅延できないのはなぜですか? ここで Frege で Haskell に似たものを達成することは可能ですか?
frege - fregeで異なるモジュールをインポートするにはどうすればよいですか
haskell for Data の import コマンドに相当する frege を誰かが手伝ってくれませんか。Data.Typeable または Data.Time.Calendar... およびそのようなモジュール/組み込みプロシージャにアクセスしたいと考えています。
fregeで利用可能なモジュールを知る方法はありますか ..... 一般的に "import.frege._" を実行すると、オートフィルのような機能や、利用可能なさまざまなオプションを示唆する何らかのリストがあります。
あなたの時間と助けに感謝します
haskell - 反転のカウント:FregeのStackOverflowError、Haskellで正常に動作
数値のリストの反転をカウントしようとしています。次のFregeプログラムは、少数の数値セットに対して機能しますが、100000の数値に対してStackOverflowErrorをスローします。
Haskellの同じコードは正常に機能します:
スタックオーバーフローの原因は何でしょうか?末尾再帰ではない関数はありますか?
java - Frege からネイティブ Java コンストラクターを呼び出す
Frege の Java バインディングに関するドキュメントがどこにあるか知っていますか? Haskell 出身の私は、Frege の最も興味深い側面を見つけました。残念ながら、私が見つけたドキュメントはあまり詳しくありません。
これが私のテスト例です。基本的に、次の Java コードを翻訳したいと思います。
これが私の現在の Frege コードです。
完全を期すために、エラーメッセージは次のとおりです。