問題タブ [unsafe-perform-io]

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 投票する
8 に答える
7273 参照

haskell - Haskellは本当にunsafePerformIOを考慮した純粋な関数型言語ですか?

Haskellは一般的に、純粋に関数型言語の例として参照されます。の存在を考えると、これをどのように正当化できSystem.IO.Unsafe.unsafePerformIOますか?

編集:「純粋関数型」とは、プログラムの機能部分に不純なコードを導入することは不可能であることを意味していると思いました。

0 投票する
5 に答える
1398 参照

haskell - unsafePerformIOに対する部門の制限

unsafePerformIOとその同類の使用を禁止するという部門全体の方針にすることについて、いくつかの話がありました。個人的には、自分が使いたいと思ったら、自分のアプローチを考え直す必要があるといつも思っていたので、気にしません。

この制限は合理的に聞こえますか?主にFFI用に含まれていることをどこかで読んだことを覚えているようですが、今どこで読んだか思い出せません。

編集:わかりました、それは私のせいです。合理的に必要な場所、つまり制限されません。FFI。ポリシーのポイントは、怠惰とコードの臭いを思いとどまらせることです。

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

haskell - カウンターを作成するための IORef に関する混乱

サンプルコードを見つけて、少し変更しました

実行されるたびに、1、2、3、3 などを返します。

しかし、私はそれを

その後、実行するたびに0になります。

なぜこれが起こっているのですか?それを修正するにはどうすればよいですか?

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

haskell - 「状態」の変更を非表示にして、タイプ sig で IO を使用せずに haskell 関数を作成する方法

Word32、String (カリー化は無視) などのいくつかのパラメーターを取り、IO Word32 を出力する関数を haskell で作成しました。さて、これは真の意味での関数です:同じ入力に対して、出力は常に同じになります. 副作用はありません。関数が Word32 ではなく IO Word32 を返す理由は、関数が多くの 32 ビット リニア フィードバック シフト レジスタ (lfsr) およびその他のレジスタをループ内で数回更新して、最終的な Word32 出力を計算するためです。

私の質問は次のとおりです。この関数には実質的に副作用がないことを考えると、関数がIO Word32ではなくWord32を返すように、関数実装内でこれらのレジスタ更新を非表示にすることは可能ですか? もしそうなら、どのように?

0 投票する
5 に答える
2560 参照

haskell - unsafePerformIO の一般的な使用を回避する方法

Haskell コードでこのパターンをよく見かけます。

基本的に、プログラムの開始時に最初に設定されたオプションなどの記録があります。optionsプログラマーは怠け者なので、プログラム全体に記録を残したくありません。彼はそれMVarを維持するために を定義しています - の醜い使い方によって定義されていますunsafePerformIO。プログラマーは、操作が行われる前に状態が一度だけ設定されるようにします。unsafePerformIOここで、オプションを抽出するためだけに、プログラムの各部分を再度使用する必要があります。

私の意見では、そのような変数は実用的に純粋であると考えられています(私を打ち負かさないでください)。この概念を抽象化し、変数が一度だけ設定されるようにするライブラリがありますか。つまり、その初期化の前に呼び出しが行われず、書き込む必要がないことを保証しますunsafeFireZeMissilesAndMakeYourCodeUglyAnd DisgustingBecauseOfThisLongFunctionName

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

haskell - トレースに putStrLn を使用する方法 (Haskell)

「putStrLn」への呼び出しを追加することで、Haskell 関数が適用されるたびに表示されるようにしようとしています。

(最終的な目標は、あるバージョンの isPrime が別のバージョンよりも効率的である理由を実証することです。)

上記のコードを GHCi にロードすると、次のエラーが発生します。

Bool予想されるタイプと実際のタイプを一致させることができませんでしたm0 b0

これはn00bの間違いだと確信しています。誰かが私がやろうとしていることを達成する正しい方法を教えてもらえますか?

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

haskell - IOタイプを表示

重要な要素としてIORefを含むデータ型があります。showこれは、型クラスのメンバーにするためのクリーンな方法がないことを意味します。printこのタイプのIOモナドに関数があるので、これはそれほど悪くはありません。しかし、GHCiでは、これらのいずれかを返すたびに、表示できないというエラーが発生するという点で煩わしいです。

とにかくIOモナドで動作するGHCiに、IOアクションを使用して結果を表示させる方法はありますか?そうでない場合、書くことへの悪影響はありますshow a = unsafePerformIO $ print aか?

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

multithreading - スレッド化されたアプリケーションで unsafePerformIO が機能しない

以下はサンプルプログラムのソースです。

ghci から実行すると、printJob と printJob2 の両方が正常に実行され、10 行がテキスト ファイルに書き込まれます。

しかし、-threaded フラグを指定してコンパイルすると、プログラムは 1 行しか書き込みません。

ArchLinuxにghc 7.0.3があります

コンパイルコマンドは次のとおりです。

私は何を間違っていますか?スレッドモードで動作しないのはなぜですか?

編集: hammar は、メイン アプリケーションが生成されたすべてのスレッドよりも早く終了した場合、それらは強制終了され、メインの最後に遅延を追加するよう提案されることを指摘しました。私はそうしました、そして彼が予測したように、それはうまくいきます.

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

haskell - 明らかに純粋なHaskellインターフェースが安全でない操作を隠していることを知る方法は?

私はunsafePerformIO最近読んでいます、そして私はあなたに何かを聞きたいです。unsafePerformIO実際の言語は外部環境と相互作用できるはずなので、ある程度正当化されるという事実で私は大丈夫です。

ただし、私の知る限りでは、呼び出しを検索する際にコードを検査せずに、明らかに純粋な(タイプから判断して)インターフェイス/ライブラリが本当に純粋であるかどうかをすばやく知る方法を知りませんunsafePerformIO(ドキュメントでは言及してください)。参照透過性が保証されていることが確実な場合にのみ使用する必要があることは承知していますが、それでも知りたいと思います。

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

c - unsafePerformIO と FFI ライブラリの初期化

私は C のライブラリに FFI モジュールを作成しています。これは、1 回限りの再入不可の関数を他の何よりも先に呼び出す必要があります。この呼び出しはべき等ですが、ステートフルなので、すべての Haskell 呼び出しで呼び出すことができます。しかし、これは遅く、再入不可であるため、競合が発生する可能性があります。

では、これは unsafePerformIO を使用する適切な時期でしょうか? 安全でない IORef または MVar で Bool をラップして、後続の呼び出し (グローバルな非表示の IORef 状態が False である呼び出し) を無視することにより、これらの初期化呼び出しをべき等にすることができます。

そうでない場合、これを行う正しい方法は何ですか?