タグ

ブックマーク / shinh.hatenablog.com (5)

  • ELVM Compiler Infrastructure - 兼雑記

    最近作ってたオモチャがだいたいまとまってきました。 https://github.com/shinh/elvm 第12回 kernel/vm 勉強会で発表した時のスライド: http://shinh.skr.jp/slide/elvm/000.html これは何かというと、前作った bflisp を改良したり整理したりしたもので、 C 言語をシンプルな中間言語 (EIR) に変換する改造 8cc と、その中間言語を Brainfuck をはじめとした他言語に変換するバックエンドから成り立っています。 bflisp との差分は、 Brainfuck 以外のバックエンドを追加しやすくしたり、バックエンドを C で書いて、完全に Brainfuck だけで 8cc.bf を再現することができるようにしたり、という感じです。 特に興味深いであろうバックエンドとしては、 Brainfuck, Unl

    ELVM Compiler Infrastructure - 兼雑記
  • ELVM Compiler Infrastructure について - 兼雑記

    はじめに 言語実装 Advent Calendar 2016 用です。 ELVMは、コンパイラをフロントエンドと中間言語とバックエンドにわけて、多言語多CPUに対応しよう……というようなLLVMの考え方を、パロディと言っていいレベルにまで単純化したものです。結果として実用性は全くないが、C言語から他言語へのトランスレータを極めて簡単に書け、 Brainfuck などのような難しい言語のコードもC言語を書くだけで生成できる、というようなことを主目的としています。 当は ELVM のバックエンドを一つ足して、 Brainfuck とかのような難しいターゲットでなければ、こういう感じで手軽に足せますよーということを書こうかと思っていました。しかし、ありがたいことにそういう趣旨だったり、あるいはもっと難しいターゲットについても、既にあれこれと書いていただいたのでした。例えば Perl: http

    ELVM Compiler Infrastructure について - 兼雑記
  • Brainfuck interpreter in Ruby's Regexp - 兼雑記

    Ruby の正規表現だけで Brainfuck インタプリタを作ることができました。正規表現の実行は =~ だけなので、ループなども正規表現の内部で実行してます。 https://github.com/shinh/hack/blob/master/bf_rb_reg/bf.rb つまりどういうことができるかというと、 BF_REG という Regexp と BF_SUFFIX という文字列定数があって、 bf という文字列に格納された Brainfuck のコードを BF_REG =~ bf + BF_SUFFIX で実行することができます。出力は $~['o0'], $~['o1'], ... に入っているので、 output = '' 256.times do |i| o = $~["o#{i}"] break if !o output += o end 的なコードで取り出すことができ

    Brainfuck interpreter in Ruby's Regexp - 兼雑記
  • bflisp.bf - 兼雑記

    https://github.com/shinh/bflisp Lisp インタプリタを作りました。 Brainfuck で。 だいたい sedlisp や beflisp や makelisp と似たようなことができます。ちょっとバグあるみたいですが。 Malbolge は実装不能だと思うので、これ以上なくキツいターゲットじゃないかと思っています、ので Lisp シリーズはこれで最後でないかと。というか現世的な速度で動くとは思ってなかった。月なみですが、今のパソコン速いですねー。 実現は簡単な 16bit ハーバードアーキの CPU を定義して、魔改造した 8cc で lisp.c をその CPU のアセンブリにコンパイル、そのアセンブリなどから Brainfuck を生成、という感じになってます。実行は最適化機能つきの 8bit Brainfuck インプリタでやってます。ある程度最適

    bflisp.bf - 兼雑記
  • Haskell がアセンブリになるまで @なんとかセミナー - 兼雑記

    寝坊して14時出社で社内テックトークとか聞き逃しておきながら16時半に消えるとかどうなんかね…とか思いつつ、行かないとこうかなぁと思ったけどやっぱり行った。で面白かったです。話者の id:MaD さんありがとうございます。 GHC のコンパイラの作業の概略ということで、日語としてはたぶん割とレアな話題の資料なのでぜひぜひ公開を。 http://pira.jp/nandemo/wiki.cgi?page=62 詳しい内容は mame さんとかにおまかせで。 http://d.hatena.ne.jp/ku-ma-me/20071022/p1 色々謎とか。ぶっちゃけよくわかってない。 type check => desugar desugar が type check より先ってのは私もなんかわりとびっくりだったんだけど、でもまぁ GHC の言う desugar ってのはなんか他の言語ならあ

    Haskell がアセンブリになるまで @なんとかセミナー - 兼雑記
  • 1