タグ

ブックマーク / wasabiz.hatenablog.com (10)

  • マシンスタックをコピペするのはやめたほうがいい - wasabizの日記

    2016 - 03 - 04 マシンスタックをコピペするのはやめたほうがいい Picrinでcall/cc周りのissueが届いた。masterが linux 環境でsegvを起こすらしい。発生条件は2つで、-O2で コンパイル することとcall/ccを使うこと。 Mac では大丈夫っていうのもアレだけれども-O2をつけた時だけっていうのもなかなか味わい深い。 とりあえずcallccのコードを眺めてみる。基的には scheme VM のスタックとマシンスタックをがばっとコピーしてヒープに保存しているだけ。残りの処理は scheme の手続き化するためのもの。 static pic_value pic_callcc(pic_state *pic, pic_value proc) { struct fullcont *cont = pic_malloc(pic, sizeof(struct

    マシンスタックをコピペするのはやめたほうがいい - wasabizの日記
    qnighy
    qnighy 2016/03/05
  • Scalaでハードウェアを書く - wasabizの日記

    2015-07-08 Scalaでハードウェアを書く Scalaでハードウェアを書けるChiselについて紹介します。 Chisel: Constructing Hardware in an Scala Embedded Language Chisel 2.2.0 Manual Chiselとは Chiselとはハードウェア記述用のためのライブラリでありScalaのDSLとして実装されています。最近巷で話題のRISC-Vというアーキテクチャがありますが、その実装であるRocket CoreがChiselで記述されています。Chiselは単なるScalaのライブラリなので、.scalaなファイルの中でimportして使います。そして回路の仕様をScalaで記述してコンパイルするとその仕様に従ったVerilogを出力する実行ファイルが出来ます。以下のコードはChiselのトップページから引用し

    Scalaでハードウェアを書く - wasabizの日記
    qnighy
    qnighy 2015/07/08
  • DE1-SoCでUART - wasabizの日記

    2015-07-08 DE1-SoCでUART DE1-SoCを2ヶ月前に買いました。 DE1-SoCにはuart-usbが最初からついているんですがそれが悲しいことにHPS(ARM)の方につながっていて、FPGAから触るには(多分)ARMコアをverilogでinstantiateして使えば動くんじゃねみたいな状況です。いろいろめんどくさいので諦めてGPIOからUARTを叩くことにしました。 写真に写ってる上のブレッドボードが変換回路で、ほぼこれに従ってあるはず(zptさんに感謝)。ICが見えるのはnotゲートを挟んでいるから(FPGAの方でnotしたほうが絶対楽)。実はDE1-SoCのGPIOにはちゃんと保護回路が挟んであるのでわざわざ組み直す必要はない…けど、念のため。 というわけで今日id:zeptometerが動かしてくれたので記事にしておきます。これがこれからDE1-SoCで遊

    DE1-SoCでUART - wasabizの日記
    qnighy
    qnighy 2015/07/08
  • CPU実験でコアつくってOS動かしたまとめ - wasabizの日記

    2015-03-22 CPU実験でコアつくってOS動かしたまとめ 東大IS名物のCPU実験が3/17に最終発表を迎えて無事終了しました。半年のCPU実験を始めるにあたって初めにお世話になったのが先輩たちのブログだったりするので、恩返しの意味で僕もここに記録を残して置きたいと思います。基的に今後ISでCPU実験を行う人々に向けた記事なので関係ない人が読んでも面白くないかもしれません…(OBが酒の摘みにニヤニヤしながら眺めるのはアリかも)。 CPU実験復習 CPU実験といえば 情報科学科の専門課程に入って1年しか経ってないぺーぺーの学部3年生に 半年間でCPUとコンパイラをゼロから自作させて 最終発表会でその性能を競う という知る人ぞ知る超鬼畜演習です。CPU・コンパイラの「性能」はmin-rtという共通のレイトレーサープログラムを動かすことで計測します。FPUは自作することが要求されます。

    CPU実験でコアつくってOS動かしたまとめ - wasabizの日記
    qnighy
    qnighy 2015/03/22
  • とあるプログラミング言語処理系のセルフホスティング化に携わった - wasabizの日記

    2013-12-15 とあるプログラミング言語処理系のセルフホスティング化に携わった (この記事はJSX Advent Calendar 2013の一部として書かれました。) 僕がJSXというプログラミング言語の開発に携わってこの冬で早1年半になります。コンパイラとしてのjsxにはこの1年半で幾多の出来事がありましたが、その中でも一番巨大なものがセルフホスティングでしょう。つまりJSXのコンパイラをJSX自身で書きなおすということです。 メインラインのコードをまるまる入れ替えるこのセルフホスティングは大きな苦労を伴いました。実際、通常のポーティングとは違いコンパイラそのものを入れ替えてしまうわけですから、バグの出方などもなかなか味わい深いものです。 JSXセルフホスティングを行ってから既に1年が経過しようとしています。今までこの作業の苦労について外で話したことは無かったのですが、「プログラ

    qnighy
    qnighy 2013/12/15
  • Lisp Advent Calendar 12日目: 2ヶ月半でR7RS準拠のscheme処理系作ってみた - wasabizの日記

    2013-12-12 Lisp Advent Calendar 12日目: 2ヶ月半でR7RS準拠のscheme処理系作ってみた (この記事はLisp Advent Calendar 12日目のためのエントリです。) 今年もクリスマスの季節がやってきましたね! クリスマスと言えばLisp、Lispといえばクリスマスということで、scheme処理系を作りました! https://github.com/wasabiz/picrin # Picrin - a lightweight scheme interpreter ## Features - R7RS compatibility (but partial support) - reentrant design (all VM states are stored in single global state object) - bytecod

    qnighy
    qnighy 2013/12/13
  • picrinに衛生的マクロを追加しました - wasabizの日記

    2013-11-28 picrinに衛生的マクロを追加しました 近頃PicrinというモダンなR7RS処理系を開発しているのはこのブログにも書いたとおりです。PicrinはVM型のインタプリタで正確な GC、フルの継続、グローバル変数を一切使用しないリエントラントなデザインなどを特徴としており、今のところR7RSの85%ほどを実装しています。READMEにR7RS-smallに対する準拠度を示す表を掲載しているので興味があれば是非pull-requestを送ってみてください。picrinでは開発者を募集しています。 https://github.com/wasabiz/picrin さて、picrinの開発を初めてそろそろ2ヶ月になります。これまでVMや継続、GCなど割りと大きめの機能が立て続けに入ってきましたが、ようやくそのラスボスたる衛生的マクロの実装を終えました。衛生的マクロは古典的

    qnighy
    qnighy 2013/11/29
  • 1ヶ月でgaucheより速くてポータブルなR7RS準拠のscheme処理系作ってみた - wasabizの日記

    2013-11-07 1ヶ月でgaucheより速くてポータブルなR7RS準拠のscheme処理系作ってみた タイトルは釣りです。 大学のC言語の授業()で暇を持て余した上級者向けに「C言語でscheme処理系を作れ」という楽しい課題が出たのでscheme処理系つくりました。 https://github.com/wasabiz/picrin さっきコンパイルラインに-O3のオプションつけてベンチマーク測ったらgaucheよりも微妙に速かったのでブログに書きました。多分機能つけてるうちに遅くなります。 scheme $ make tak bin/picrin etc/tak.scm 1.135064 gauche $ gosh etc/tak-gosh.scm ;(time (f)) ; real 1.223 ; user 1.190 ; sys 0.000 一応R7RS準拠(予定)の処理系

    qnighy
    qnighy 2013/11/07
  • 限定継続を使ってmrubyでモナドを作ったり非決定計算したりしてみる - wasabizの日記

    2013-10-05 限定継続を使ってmrubyでモナドを作ったり非決定計算したりしてみる ** この記事はmrubyで限定継続(shift/reset)を実装した話の一部です mruby用の限定継続モジュールを作ったので色々と遊んでみます。限定継続でできることは様々です。ざっと挙げてみれば 非ローカルジャンプ イテレータ データ構造のトラバース コルーチン(ファイバー) 非決定計算 モナド 非同期処理(async/await) といったところです。静的型付き言語ならさらに型付きprintfみたいなことが出来るらしいですがよく知りません。浅井先生の論文を読んでください。非同期処理はコルーチンがあれば実装できるので一旦置いておくとして、コルーチン、モナド、非決定計算あたりを作ってみました。 モナド 参考: 函数プログラミングの集い 2012 in Tokyo で発表してきました。 限定継続を

    qnighy
    qnighy 2013/10/05
  • mrubyで限定継続(shift/reset)を実装した話 - wasabizの日記

    2013-10-03 mrubyで限定継続(shift/reset)を実装した話 mrubyという組み込み向けのruby実装があります。中身のアーキテクチャはほとんどluaに近いんですがAPIとかがとても洗練されていてソースコードが読んでいてとてもふつくしい。登場からまだあまり時間が経っておらずコードが成熟していないという事もあってなかなかハックしがいがあるソフトウェアです。今回そのmrubyに限定継続オペレータのshift/resetを実装したのでその話を書いてみます。新規性としては 限定継続は家CRubyにも実装されていない 一部の言語の一部の処理系(scheme or ML)以外での実装はほぼ存在しない "Final Shift for Call/cc: Direct Implementation of Shift and Reset"は一つのスタックの上に特殊なフレームを詰んでい

    qnighy
    qnighy 2013/10/03
  • 1