問題タブ [ghc]

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.

0 投票する
1 に答える
259 参照

haskell - Haddock: 依存関係グラフの作成に失敗しました (* またはモジュール見出しでセクションを追加する場合)

tarball ソースから haddock-2.4.2 をコンパイルしてインストールしました。

ここのコードにいくつかの簡単なコメントを追加します。

ハドックを実行しています

収量:

物事は良さそうです。(このモジュールは、GHC に同梱されているライブラリにのみ依存し、他のソース モジュールには依存しないことに注意してください。)

ただし、「-- * test」を使用してコメントにセクション (a la http://www.haskell.org/haddock/doc/html/ch03s04.html#id289234 ) を追加しようとすると、次のようになります。

このエラー メッセージは Haddock.Interface.depanal が (hadock ソースの grep によると) Nothing を返したことだけを示しており、依存関係の分析が失敗するのを止める方法は示していないため、これを機能させるにはどこから始めればよいかわかりません。おそらく、GHC/base/containers のドキュメントや Haddock の設定ファイルで不足しているリンク先へのコマンド ライン引数や参照が必要でしょうか?

Google を検索すると、ハックのパッケージについて同じ同類の多数の cabal ビルド エラーが得られましたが、それらを修正する方法については何もありませんでした。

セクション (アスタリスク付き) を追加し、Haddock にドキュメントを生成させるにはどうすればよいですか? 私が見逃しているもの (おそらく単純なもの) は何ですか?

0 投票する
1 に答える
658 参照

haskell - わからないGHCタイプエラー

私は自分自身にHaskellを教えています。

整数平方根を持ち、開始数よりも小さい最初の数を再帰的に見つける関数を作成したいと思います。

次のようになります。

しかし、GHCは不平を言います:

での`floor'の使用から生じる(RealFrac Int)のインスタンスはありません...

ただし、GHCiに次のように入力すると、正常にコンパイルされます。

私の質問は、GHCiで正常にコンパイルされる式から型エラーが発生するのはなぜですか?

0 投票する
6 に答える
7502 参照

haskell - アーランとハスケルの混合

関数型プログラミングのパラダイムに賛同している場合は、ErlangとHaskellの両方が好きである可能性があります。どちらも純粋に機能的なコアと、マルチコアの世界にぴったりの軽量スレッドなどの他の優れた機能を備えています。しかし、いくつかの違いもあります。

Erlangは、成熟した配布モデルを備えた、商業的に証明されたフォールトトレラント言語です。ホットコードの読み込みを介して実行時にバージョンをアップグレードする機能には、一見ユニークな機能があります。(かっこいい!)

一方、Haskellは、主流の言語の中で最も洗練された型システムを備えています。(ここで、「mainstream」をO'Reillyの本が出版されている言語と定義しているので、Haskellは重要です。)その直線的なシングルスレッドのパフォーマンスはErlangよりも優れており、軽量のスレッドもさらに軽く見えます。

私は残りのコーディングライフのために開発プラットフォームをまとめようとしていますが、 ErlangとHaskellを組み合わせて最高のプラットフォームを実現できるかどうか疑問に思っていました。この質問には2つの部分があります。

  1. Erlangを一種のフォールトトレラントMPIとして使用して、GHCランタイムインスタンスを結合したいと思います。GHCランタイムごとに1つのErlangプロセスがあります。「不可能が起こった」とGHCランタイムが停止した場合、Erlangプロセスはそれを何らかの形で検出して停止します。Erlangのホットコードのロードおよび配布機能は引き続き機能します。GHCランタイムは、1つのコアのみ、ローカルマシン上のすべてのコア、またはそれらの間の任意の組み合わせを使用するように構成できます。Erlangライブラリが作成されたら、残りのErlangレベルのコードは純粋に定型的であり、アプリケーションごとに自動的に生成されます。(たとえば、Haskell DSLによるものかもしれません。)これらのことの少なくともいくつかをどのように達成するのでしょうか?
  2. ErlangとHaskellが同じガラベージコレクターを共有できるようにしたいと思います。(これは、1よりもはるかに遠い考えです。)JVMおよびCLRで実行される言語は、ランタイムを共有することにより、より多くの質量を実現します。JVMまたはCLRのいずれかでErlang(ホットコードのロード)とHaskell(より高度な種類のポリモーフィズム)を実行することには技術的な制限があることを理解しています。しかし、ガベージコレクターだけをアンバンドルするのはどうですか?(関数型言語のランタイムの開始を並べ替えます。)割り当ては明らかに高速である必要があるため、そのビットを静的にリンクする必要があります。また、可変ヒープと不変ヒープを区別するためのメカニズムが必要です( GHCがこれを必要とするため、レイジーライトワンスメモリを含む)。ガベージコレクターがヒープを共有できるように、HIPEとGHCの両方を変更することは可能でしょうか?

経験(ポジティブまたはネガティブ)、アイデア、提案で答えてください。実際、どんなフィードバックでも(まっすぐな虐待を除いて!)大歓迎です。

アップデート

これまでの4つの返信すべてに感謝します。それぞれが、私が知らなかった有用なことを少なくとも1つ教えてくれました。

残りのコーディングライフについては、議論を巻き起こすために頬に少し舌を入れましたが、実際にはそうです。死ぬまで取り組むつもりのプロジェクトがあり、安定したプラットフォームが必要です。

上で提案したプラットフォームでは、ボイラープレートErlangが自動的に生成されるため、Haskellのみを記述します。では、ハスケルはどのくらい続くのでしょうか?さて、Lispはまだ私たちと一緒にいて、すぐになくなるようには見えません。HaskellはBSD3オープンソースであり、クリティカルマスを達成しています。プログラミング自体が50年経ってもまだ存在しているのであれば、Haskell、またはHaskellの継続的な進化がまだここにあると思います。

rvirdingの投稿に応じて2を更新

同意しました-完全な「Erskell/Haslang」ユニバーサル仮想マシンを実装することは絶対に不可能ではないかもしれませんが、それは確かに非常に難しいでしょう。ガベージコレクターレベルをVMのようなものとして共有することは、それでも難しいことですが、私には桁違いに難しいことではありません。ガベージコレクションモデルでは、関数型言語には多くの共通点が必要です。不変データ(サンクを含む)の不公平性と、非常に高速な割り当ての要件です。したがって、共通性がモノリシックVMに緊密にバンドルされているという事実は、ちょっと奇妙に思えます。

VMは、クリティカルマスの達成に役立ちます。F#やScalaのような「ライト」関数型言語がどのように普及したかを見てください。ScalaはErlangの絶対的なフォールトトレランスを持っていないかもしれませんが、JVMに縛られている非常に多くの人々に逃げ道を提供します。

単一のヒープを使用するとメッセージの通過が非常に速くなりますが、他にも多くの問題が発生します。主に、GCはインタラクティブでグローバルに非中断である必要があるため、実行がより困難になり、per-と同じ単純なアルゴリズムを使用できなくなります。プロセスヒープモデル。

絶対に、それは私には完全に理にかなっています。GHC開発チームの非常に賢い人々は、並列の「世界を止める」GCで問題の一部を解決しようとしているようです。

http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel-gc/par-gc-ismm08.pdf

(明らかに、「世界を止める」は、その主なユースケースを考えると、一般的なErlangでは飛ばないでしょう。)しかし、「世界を止める」がOKのユースケースでさえ、それらのスピードアップは普遍的ではないようです。だから私はあなたに同意します、普遍的に最高のGCがある可能性は低いです、それは私が私の質問のパート1で指定した理由です

GHCランタイムは、1つのコアのみ、ローカルマシン上のすべてのコア、またはそれらの間の任意の組み合わせを使用するように構成できます。

このようにして、特定のユースケースで、ベンチマークを行った後、Erlangの方法を選択し、1つのGHCランタイム(シングルスレッドGCを使用)とコアごとに1つのErlangプロセスを実行し、Erlangにコア間でメモリをコピーさせてローカリティを高めることができます。 。

または、プロセッサあたり4コアで、プロセッサのメモリ帯域幅が良好なデュアルプロセッサマシンでは、ベンチマークにより、1つのGHCランタイム(並列GCを使用)とプロセッサあたり1つのErlangプロセスを実行することが提案される場合があります。

どちらの場合も、ErlangとGHCがヒープを共有できれば、共有はおそらく単一のコアで実行されている単一のOSスレッドにバインドされます。(私はここで私の深みから抜け出しているので、私は質問をしました。)

また、GCとは独立した関数型言語のベンチマークという別の議題もあります。OCaml v GHC v Erlang v ...のベンチマークの結果をよく読んで、結果がさまざまなGCによってどれほど混乱しているか疑問に思います。GCの選択が関数型言語の選択と直交する可能性がある場合はどうなりますか?とにかくGCはどれくらい高価ですか?この悪魔擁護者のブログ投稿を参照してください

http://john.freml.in/garbage-collection-harmful

私のLispの友人であるJohnFremlinは、魅力的に、彼の投稿タイトルに「自動ガベージコレクションはごみです」と付けています。ジョンがGCが遅く、それほど高速化していないと主張するとき、私はいくつかの数値で対抗できるようにしたいと思います。

0 投票する
6 に答える
7412 参照

haskell - GHCが中間ファイルを生成しないようにするにはどうすればよいですか?

GHCを介してhaskellソースファイルをコンパイルする場合、ghc --make foo.hs常に。以外のさまざまな中間ファイルが残りますfoo.exe。これらはfoo.hifoo.oです。

フォルダが乱雑にならないように、.hiファイルと.oファイルを削除しなければならないことがよくあります。

GHCが中間ファイルを残さないようにするためのコマンドラインオプションはありますか?(#haskellで尋ねられたとき、私が得た最良の答えはでしたghc --make foo.hs && rm foo.hi foo.o

0 投票する
2 に答える
675 参照

haskell - GHC で Network パッケージを使用する際の問題

私はこの簡単なコードを持っています:

runhaskell で実行すると失敗します:

GHCi でも同様のエラー メッセージが表示されます。私はそれについて何ができますか?

Windows 2000 で GHC 6.10.4 を使用しています。

0 投票する
4 に答える
756 参照

haskell - プログラムでGHCパッケージ情報を取得するにはどうすればよいですか?

より具体的には、任意のパッケージ名を指定すると、実行中のHaskellプログラム内からコマンドlibrary-dirsで取得できるのと同じフィールドを取得する必要があります。ghc-pkg describe

0 投票する
3 に答える
3358 参照

performance - Haskellの怠惰と末尾再帰、なぜこれがクラッシュするのですか?

これまでの合計とこれまでのカウントを保持するために2つのアキュムレータを使用して、大きなリストの要素の平均を計算するこの非常に単純な関数があります。

さて、厳密な言語では、これは末尾再帰であり、問​​題はありません。しかし、Haskellは怠惰なので、私のグーグルは、(s + x)と(l + 1)がサンクとして再帰に渡されることを理解するようになりました。したがって、このすべてがクラッシュして燃えます:

さらにグーグルした後、私は見つけましseq$!。このコンテキストでそれらを使用しようとしたすべての試みが無駄であり、エラーメッセージが無限の型について何かを言っているので、私は理解していないようです。

最後に-XBangPatterns、再帰呼び出しを変更することですべてを解決するを見つけました。

-XBangPatternsしかし、現在の拡張機能であるため、これには満足していません。を使わずに厳密に評価する方法を教えて-XBangPatternsください。(そして多分何かを学ぶことも!)

私の理解の欠如を理解するために、これが私が試したことです(コンパイルされた唯一の試みです):

私が理解できたことから、seqはここでsとlの引数の評価を強制し、サンクによって引き起こされる問題を回避する必要があります。しかし、それでもスタックオーバーフローが発生します。

0 投票する
3 に答える
5547 参照

haskell - HaskellでfromIntegerを使用するには?

Haskell で 2^8 を計算する 1 つの方法は、

このための関数を作成しようとすると、次のように定義されます...

次のエラーが表示されます。

私の推測では、どこかで fromInteger 関数を使用する必要があると思います...どこでどのように使用するのかわかりませんか? それはインターフェースですか、それともfromIntegerとは何ですか?どのように使用すればよいですか?

ありがとう

0 投票する
2 に答える
1021 参照

haskell - Snow Leopard の GHC から 64 ビットのバイナリを取得するには?

最近、OS を Snow Leopard にアップグレードしたところ、GHC が壊れてしまいました。/usr/bin/ghc (-optl -m32 -opta -m32 -optc -m32 のようなもの、ここから収集) に 32 ビット コンパイル用のフラグを追加することで、1 台のマシンで修正できました。現在、64 ビットをサポートしている他のマシン用の 64 ビット バイナリを生成できません。32 ビット フラグは壊れており、それらを削除すると壊れます。任意のヒント?

コンパイルしようとすると、次のようなものが得られます。

ありがとう!