Ajhcプロジェクトはじめよう

Posted on March 16, 2013 / Tags: haskell, compiler, jhc, ajhc

Table of contents


これまで jhc のソースコードを読みながら少しずつ改造をして遊んでいたでゲソが、 そろそろpatchが増えてきてまっとうなリポジトリを用意しないと破綻しそうでゲソ。 できればpatchをjhc本家に取り込んでもらいたいところでゲソ。 ところが原作者のJohnがどうも忙しいらしく、なかなかmergeしてくれないでゲソ… 1

あまりプロジェクトのforkをしたくないところでゲソが、 このままでは作業が進まないのでjhc向けpatchを貯めるだけのプロジェクトを作ったでゲソ。 その名も Ajhc - arafura-jhc 2 でゲッソ!

まず最初の改造は?

とはいえ改造にあたって何かテーマを決めたいでゲソ。 jhcは小さなバイナリを吐けるのだから、小さなマイコンでHaskellコードを動かすとかどうでゲソ? 例えば以下のようなマイコンであればある程度メモリもあるのでなんとなるんじゃなイカ?JTAGも付いてるのでgdbでデバッグもできるでゲソ。 しかも秋月価格で¥950(税込) と無茶苦茶安いでゲソ。 ところでこの挑発的な価格はいったいなんなんでゲソ… ST、怒らせると怖い子でゲソ…

ぐぬぬぬ…ということで 移植できたでゲソ! ちゃんとHaskellヒープも使えてGCも動くでゲソ。 RAMは28kBしか使っていないでゲッソ!!!

$ pwd
/home/kiwamu/src/demo-cortex-m3/stm32f3-discovery
$ make
$ arm-none-eabi-size main.elf
   text    data     bss     dec     hex filename
  15796    1160   26876   43832    ab38 main.elf

どこらへんを修正したの?

Ajhcへの変更は このpatch だけでゲソ。 修正内容を解説するでゲソー。

  1. BLOCK_SIZEとMEGABLOCK_SIZEをMakefileから調整できるように
  2. MEGABLOCKを唯一1つだけ使い、動的確保しないように
  3. Cortex-M3では関数ポインタジャンプのアドレスbit0を1立てる (詳細)
  4. BLOCKが不足したら即時GCするNaive GCフラグ
  5. GCスタックの成長幅をMakefileから調整できるように

このpatchのあたったAjhcを使って、 いろいろこねくりまわせこんなの ができるんでゲソ。

Ajhcプロジェクトはどこへ向かうの?

完全にjhcをforkして一人歩きする予定はAjhcプロジェクトにはないでゲソ。 Ajhcはあくまでjhcにmergeされていないpatchをためておくための器にすぎないのでゲソ。 そのため有用なpatchは jhcメーリングリスト にて協議の上 jhcにmerge してもらわなければならないでゲソ。 在りし日の EGCS (Experimental/Enhanced GNU Compiler System) のように、jhc本体の活動が活発になったらAjhcは消滅すべきプロジェクトでゲソ。

Ajhcプロジェクトの ロードマップ的なにか を書いてみたでゲソが、予定は未定。どーなるかわからないでゲソ。


  1. Ajhcのファーストリリース をしたら 全部mergeしてくれたでゲソ。 Johnはやる気になればデキる男なんでゲソ!↩︎

  2. もしくは単に“A fork of jhc”を略して“Ajhc”↩︎

blog comments powered by Disqus