BrainFuck Part.3 <[+-.,]>
■ このスレッドは過去ログ倉庫に格納されています
BrainFuckとは 難解プログラミング言語の一つ。 オシシメサイトはhttp://www.google.co.jp/ 以下俺的見解 ・スレッドタイトルに全命令が入る素敵な言語。 ・1レス内に全命令のリファレンスが入る素敵な言語。 > ポインタをインクリメント < ポインタをデクリメント + ポインタが示すメモリ位置のデータをインクリメント - ポインタが示すメモリ位置のデータをデクリメント . ポインタが示すメモリ位置のデータを出力 , ポインタが示すメモリ位置のデータに入力 [ ポインタが示すメモリ位置のデータがヌルなら対応する]までジャンプ ] ポインタが示すメモリ位置のデータがヌルじゃないなら対応する[までジャンプ 前スレ: BrainFuck Part.2 <[+-.,]> http://pc11.2ch.net/test/read.cgi/tech/1177988460/ 過去スレ: BrainFuck <[+-.,]> http://pc11.2ch.net/test/read.cgi/tech/1036013915/
"Syntactic sugar causes cancer of the semicolon." (>)|(>>) 1つ後の値と二つ後の値のビット論理和を現在の場所に代入 (>)||(>>) ビット論理和じゃなくて普通の論理和 ((>)|(>>))|((<<)|(<)) 1つ後の値と二つ後の値のビット論理和と 2つ前の値と一つ前の値のビット論理和の ビット論理和を現在の場所に代入 メモリフィールドが階層的になってて 特定の番地を全ての階層で同期とかできると楽しそう オブジェクト指向のBrainFuckとか作れないかな? brainfuck拡張するなら既存の言語でいいじゃん? ぐ ポインタをインクリメント ぬ ポインタをデクリメント 入力された文字列の文字数の取得なんてできるんですかね [;>+<]. わかんね そもそもint[]の要素数とか無いだろ 文字入力は入力された一文字をポインタが指すメモリに代入するだけだろ 文字列を入力しているのは処理系がバッファを使ってるだけなんでは >>515 最後は「>.」じゃないかな あと、文字数が256以上の時と、マルチバイト文字を含む場合にも対応できるようにしたいね ためしに 256回回る空ループを書いてみてくれ それを見れば >>514 も安心して成仏することだろう 文字入力は呼び出し側の責任としても ループ回数はコード内に書かれるべき…じゃないのか BFのコンパイラ書いているのですが、最適化の議論ってどこかにありますか。 思いついて実装したのは、 @連続する+-や<>をまとめる(これは自明。>>>>> をadd r0, #5 にするとか) Aメモリからレジスタに値をロード済みかを覚えておいてロード命令を減らす です。 考えているだけのは、ループの頭でポインタの位置が不変かを判断し、ポインタの移動範囲を検出して、レジスタに割り当てるというものです。 例えば[>+<-]のようなループの場合、ポインタは当初の値(0)と次の値(+1)にしか移動しないので、これらの指すデータをレジスタに割り当て、 ループ脱出時にメモリに書き戻してやればいいかなと考えています。 動的コード生成をしているので軽い処理がいいのですがそうでないのも知りたいです。 対象CPUはARMで、使用マシンはなぜかHP50gっていうグラフ電卓です。 いっそC++へのトランスレータにして、後はC++コンパイラの最適化に任せるのはどうだろう。 >522 アイデアが出たらぜひ教えて下さい。 >523 それって既にあるのでは。BFでプログラムするのと同様でパズルみたいなものと思ってください。 [>+<-]をコンパイルした実行命令数(N=ループ回数) @素朴版 12N+3 Aロード最適化 11N+3 B>+< を最適化 9N+3 Cレジスタ最適化 5N+6 D手動コンパイル 4N+6 詳細は、 http://pastebin.com/pk8fST8h レジスタ割当: r0: 汎用 r1: ポインタ r2: [r1, #1] Aはr0と[r1]がエイリアスになっているかを覚えてロード命令を削減 Bは>+<のようなパターンでポインタのinc/decを省く。 CはAに加えてr2と[r1,#1]をエイリアスにする。 Dは自動化は考えずに手でガリガリ記述 脳内コンパイラがこんなコードを生成しました。 ローカルな最適化では定数部を除いてこれ以上は無理そうですね。 ldrb r0, [r1] ldrb r2, [r1, #1] cmp r0, r0, #1 b l1 l0: add r2, #1 subs r0, #1 l1: bne l0 strb r0, [r1] strb r2, [r1, #1] 実行命令数 7 + 3N 本来なら、 ldrb r0, [r1] ldrb r2, [r1, #1] add r2, r0 strb r2, [r1, #1] mov r0, #0 strb r0, [r1] 実行命令数 6 とか定数命令でできるのですが、、、 万能言語ならぬ全能言語 world* CreateWorld (darkness* Darkness) { world* World = new World(Darkness); World->Day = 1; light* Light = CreateLight(); if (isGood(Light)) add(World, Light); else throw BadCreation(Light); Light->Name = "Day"; Darkness->Name = "Night"; ++(World->Day); // World->Day = 2 /* 中略 */ bone* AdamsRib = (Adam->Rib[12])->Remove(); woman* Eve = CreateWoman(AdamsRib); Eve->Name = "Eve"; add(World, Eve); ++(World->Day); // World->Day = 7 World->Sabbath->Interval = 7; rest(); return World; } 誤爆申し訳ない 世界はBrainFuckで記述されたのかもしれない だれか BrainFuck の LLVM フロントエンド作らないかな BFオワタ・・・ http://pc.watch.impress.co.jp/docs/news/yajiuma/20140620_654252.html IT'S SHOWTIME HEY CHRISTMAS TREE isLessThan10 YOU SET US UP @NO PROBLEMO HEY CHRISTMAS TREE n YOU SET US UP 0 STICK AROUND isLessThan10 GET TO THE CHOPPER n HERE IS MY INVITATION n GET UP 1 ENOUGH TALK TALK TO THE HAND n GET TO THE CHOPPER isLessThan10 HERE IS MY INVITATION 10 LET OFF SOME STEAM BENNET n ENOUGH TALK CHILL YOU HAVE BEEN TERMINATED , [eax,ebx,ecx,edx,esi,edi][*ptr&0x0f] = ptr[1] if *ptr>>4 ==0 ptr[1] = [eax,ebx,ecx,edx,esi,edi][*ptr&0x0f] if *ptr>>4 ==1 in eax, ptr[1] if *ptr>>4 ==2 ... みたいな感じでいけそう サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ https://www.youtube.com/watch?v=NDq1QoJY0nY 宇ドナルドアナリストパワーストーンコーチングとしまえん サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足 サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題 春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残 コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題 マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了 校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント 高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 67IJR ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる