問題タブ [brainfuck]
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.
optimization - Haskell / GHC でボックス化されていない型 (Int# など) を使用している場合、注意すべきことはどれですか?
Brainfuck コードを解析して実行する小さなスクリプトを作成しようとしています。最適化の GHC オプションを理解するために、コードを最適化して、少し高速化し、そこで何が起こっているのかを理解しようとしています。
パーツの 1 つは BF コードの内部表現です。これには特別なデータ型を使用します。ソースコードは次のとおりです。変換を行う 2 つの関数が含まれています。
アイデアは、コードが何らかの入力 (文字列) から読み取られ、上記のコードによって事前に解析および単純化されてから、他の関数によって実行されるというものです。(入力が有効であると仮定します)。
この例を最適化するために、次のような domething を実行して、コンストラクターMovePointer
とコンストラクターの Int パラメーターをアンボックスしようとしました。AdjustValue
これにより、ボックス化された型が、GHcの実装の詳細であるボックス化Int
されていない生の型に変わります。Int#
私が読んだように、このオプションはいくつかの場合にのみ有効です。そのため、この種の最適化を実行する場合、どの点に注意する必要があるかを尋ねたいと思います。私の目標は、Haskell の利点を利用して BF コードを実行できるようにすることです。
editor - フル機能のBrainfuckエディターはありますか?
Brainfuck用のフル機能のエディターに相当するものを実装しようとした人はいますか?利用可能な最も近いものは何ですか?
resources - Brainfuck の簡単なプログラムのソースは?
Brainfuck プログラミング言語用の加算、階乗、フィボナッチなどの複数の単純なプログラムを入手できるソースはありますか?
ここに前に投稿された質問があることを知っています: https://stackoverflow.com/questions/3554670/tutorials-for-brainfuck
しかし、言語に慣れるための簡単なプログラム、短い一口サイズのプログラムのリストが欲しいです。どんな助けでも大歓迎です。ありがとう。
c - コンパイラ C から Brainfuck へ (教授への嫌がらせのため)?
私の教授は、私たちが使いたいと思うどんな言語でも宿題を受け入れると言っていました. 私は彼を少しいじって、ブレインファック、空白、または同等に「役立つ」言語を使用して有効な宿題を提出したいほど十分に良好な状態です.
いくつかの単純な数値解析ルーチンの C ソースと、それらが生成するコンパイル済み出力およびアセンブリ ファイルがあります。
「brainfuck ソース コード」に似たものを提供してくれる逆コンパイラ (または C->brainfuck トランスレータ) を知っている人はいますか?
brainfuck - Brainfuck で 2 つの 1 桁の数を掛けるコード
誰かがプログラミング言語brainf*ckで2つの1桁の数を掛けるコードを投稿できますか?
c++ - JITコンパイラの作成
私は次のように機能するBrainfuck実装(C ++)を作成しました:
- 入力brainfuckファイルを読む
- 些細な最適化を行う
- brainfuckをVMのマシンコードに変換します
- このマシンコードをVMで実行します
これはかなり高速ですが、ボトルネックは現在VMにあります。これはC++で記述されており、トークンを読み取り、アクションを実行します(Brainfuckを知っている場合は、それほど多くはありません)。
私がやりたいのは、VMを取り除き、その場でネイティブマシンコードを生成することです(基本的にはJITコンパイラー)。これは簡単に20倍のスピードアップになります。
これは、ステップ3がJITコンパイラに置き換えられ、ステップ4が生成されたマシンコードの実行に置き換えられることを意味します。
どこから始めればよいのかわからないので、いくつか質問があります。
- これはどのように機能し、生成されたマシンコードはどのように実行されますか?
- ネイティブマシンコードを生成するためのC++ライブラリはありますか?
brainfuck - Brainfuck 2 つの数値をより大きいか小さいかで比較する
不等式の 2 つの数値を比較するにはどうすればよいですか? (より大きいまたはより小さい)
一桁を比較したい例
等
brainfuck - 2桁の平均を計算する
Brainfuck で 2 桁の平均を計算する方法は?
たとえば、2桁の数字が
2 3
あり、その平均は2.5
2 8
私たちが持っている
ので
5.0
これはどのように行うことができますか?
brainfuck - BrainFuckでポインタを任意の量だけ移動するには?
たとえば、配列が のような場合、ポインターを移動した後0 0 0 0 ... 0 0[n]s o m e d a t a 4 9 9 9 9 9 9 8 3 7 ...
に変更せずに、ポインターを n だけ移動する方法s o m e d a t a 4 9 9 9 ...
は?
c - ブレインファック インタープリターの最適化
インタープリターと最適化について学ぶのに役立つ演習として、私はどちらも何も知りませんが、C でブレイン インタープリターを作成しました。通訳者。
このインタープリターを変更してパフォーマンスを向上させる (またはその他の方法で) には、どのような方法がありますか?
私のインタープリターの興味深い点の 1 つは (おそらく他のほとんどの人もこれを行っているでしょうが)、ソース入力を読み取り、各命令を
loop
値は、命令が a の場合は一致する]
命令のインデックスであり、命令が a の場合は一致する命令[
のインデックスであり、迅速なジャンプが可能です。この「解析」プロセス (時間はかかりません) は、必要なたびに一致する角かっこを見つけるために冗長な再解析を行うよりも実行時間を改善すると思います。[
]
ブレインファック インタープリターの速度の興味深いテストは、次のプログラムです。
- インタプリタの最初のバージョン
- Jerry Coffin's answerを実装した後のインタープリター
instruction
は、構造体instruction
を操作関数への直接ポインターにすることで、ランタイム ループの巨大なスイッチを削除します。これは、以前のバージョンよりも遅く実行されます (関数呼び出しのオーバーヘッド?) - 前の変更を元に戻し、複数の連続する非ループ操作を「折りたたむ」ための最適化を追加して、ループ サイクルを減らした後のインタプリタ-これは元のインタプリタよりもわずかに高速に実行されます