Ajhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ました
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
[1] 自己紹介[1] 自己紹介[1] 自己紹介[1] 自己紹介[1] 自己紹介
☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/
☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務
☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた
☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer
☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます
☆ OSSに興味のあるエンジニア募集中です!☆ OSSに興味のあるエンジニア募集中です!☆ OSSに興味のあるエンジニア募集中です!☆ OSSに興味のあるエンジニア募集中です!☆ OSSに興味のあるエンジニア募集中です!
経歴経歴経歴経歴経歴
☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業
☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学
☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務
☆ 2012年—: 現職☆ 2012年—: 現職☆ 2012年—: 現職☆ 2012年—: 現職☆ 2012年—: 現職
宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?
http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/
☆ 関数型プログラミングに関する同人誌☆ 関数型プログラミングに関する同人誌☆ 関数型プログラミングに関する同人誌☆ 関数型プログラミングに関する同人誌☆ 関数型プログラミングに関する同人誌
☆ これまで4巻出しました☆ これまで4巻出しました☆ これまで4巻出しました☆ これまで4巻出しました☆ これまで4巻出しました
☆ 結構好評みたいです☆ 結構好評みたいです☆ 結構好評みたいです☆ 結構好評みたいです☆ 結構好評みたいです
☆ ネタある人は @xhl_kogitsune さんまで!☆ ネタある人は @xhl_kogitsune さんまで!☆ ネタある人は @xhl_kogitsune さんまで!☆ ネタある人は @xhl_kogitsune さんまで!☆ ネタある人は @xhl_kogitsune さんまで!
☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ
http://www.paraiso-lang.org/ikmsm/books/c84.htmlhttp://www.paraiso-lang.org/ikmsm/books/c84.htmlhttp://www.paraiso-lang.org/ikmsm/books/c84.htmlhttp://www.paraiso-lang.org/ikmsm/books/c84.htmlhttp://www.paraiso-lang.org/ikmsm/books/c84.html
おしながきおしながきおしながきおしながきおしながき
☆ [1] 自己紹介☆ [1] 自己紹介☆ [1] 自己紹介☆ [1] 自己紹介☆ [1] 自己紹介
☆ [2] Ajhcコンパイラとは☆ [2] Ajhcコンパイラとは☆ [2] Ajhcコンパイラとは☆ [2] Ajhcコンパイラとは☆ [2] Ajhcコンパイラとは
☆ [3] kernelに強い型が必要なのか☆ [3] kernelに強い型が必要なのか☆ [3] kernelに強い型が必要なのか☆ [3] kernelに強い型が必要なのか☆ [3] kernelに強い型が必要なのか
☆ [4] Ajhcコンパイラとマイコン☆ [4] Ajhcコンパイラとマイコン☆ [4] Ajhcコンパイラとマイコン☆ [4] Ajhcコンパイラとマイコン☆ [4] Ajhcコンパイラとマイコン
☆ [5] Ajhcのすゝめ☆ [5] Ajhcのすゝめ☆ [5] Ajhcのすゝめ☆ [5] Ajhcのすゝめ☆ [5] Ajhcのすゝめ
[2] Ajhcコンパイラとは[2] Ajhcコンパイラとは[2] Ajhcコンパイラとは[2] Ajhcコンパイラとは[2] Ajhcコンパイラとは
http://ajhc.metasepi.org/http://ajhc.metasepi.org/http://ajhc.metasepi.org/http://ajhc.metasepi.org/http://ajhc.metasepi.org/
☆ Ajhc := A fork of jhc☆ Ajhc := A fork of jhc☆ Ajhc := A fork of jhc☆ Ajhc := A fork of jhc☆ Ajhc := A fork of jhc
☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/☆ http://repetae.net/computer/jhc/
☆ jhcはフットプリントが小さく、☆ jhcはフットプリントが小さく、☆ jhcはフットプリントが小さく、☆ jhcはフットプリントが小さく、☆ jhcはフットプリントが小さく、
☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい
☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも
どうしてAjhcコンパイラを作るの?どうしてAjhcコンパイラを作るの?どうしてAjhcコンパイラを作るの?どうしてAjhcコンパイラを作るの?どうしてAjhcコンパイラを作るの?
☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため
http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/http://metasepi.org/
☆ UNIXモドキkernelを強い型によって設計☆ UNIXモドキkernelを強い型によって設計☆ UNIXモドキkernelを強い型によって設計☆ UNIXモドキkernelを強い型によって設計☆ UNIXモドキkernelを強い型によって設計
☆ 言語: HaskellとかOCamlとかMLtonとか☆ 言語: HaskellとかOCamlとかMLtonとか☆ 言語: HaskellとかOCamlとかMLtonとか☆ 言語: HaskellとかOCamlとかMLtonとか☆ 言語: HaskellとかOCamlとかMLtonとか
[3] kernelに強い型が必要なのか[3] kernelに強い型が必要なのか[3] kernelに強い型が必要なのか[3] kernelに強い型が必要なのか[3] kernelに強い型が必要なのか
☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?
☆ しかし大規模組込開発は苦しんでいる☆ しかし大規模組込開発は苦しんでいる☆ しかし大規模組込開発は苦しんでいる☆ しかし大規模組込開発は苦しんでいる☆ しかし大規模組込開発は苦しんでいる
☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用
☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー
☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難
kernelにこそ型安全が必要kernelにこそ型安全が必要kernelにこそ型安全が必要kernelにこそ型安全が必要kernelにこそ型安全が必要
☆ ほとんどのkernelはC言語で設計される☆ ほとんどのkernelはC言語で設計される☆ ほとんどのkernelはC言語で設計される☆ ほとんどのkernelはC言語で設計される☆ ほとんどのkernelはC言語で設計される
☆ ユーザー空間でエラー → SEGV☆ ユーザー空間でエラー → SEGV☆ ユーザー空間でエラー → SEGV☆ ユーザー空間でエラー → SEGV☆ ユーザー空間でエラー → SEGV
☆ kernel空間でエラー → システム停止☆ kernel空間でエラー → システム停止☆ kernel空間でエラー → システム停止☆ kernel空間でエラー → システム停止☆ kernel空間でエラー → システム停止
☆ kernelの設計には細心の注意が必要☆ kernelの設計には細心の注意が必要☆ kernelの設計には細心の注意が必要☆ kernelの設計には細心の注意が必要☆ kernelの設計には細心の注意が必要
☆ C言語は安全なのか?☆ C言語は安全なのか?☆ C言語は安全なのか?☆ C言語は安全なのか?☆ C言語は安全なのか?
☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/
改造工数を小さくしたい改造工数を小さくしたい改造工数を小さくしたい改造工数を小さくしたい改造工数を小さくしたい
OSSを使った製品開発あるあるOSSを使った製品開発あるあるOSSを使った製品開発あるあるOSSを使った製品開発あるあるOSSを使った製品開発あるある
C言語の表現力は非力C言語の表現力は非力C言語の表現力は非力C言語の表現力は非力C言語の表現力は非力
モダンな言語機能を使いたいモダンな言語機能を使いたいモダンな言語機能を使いたいモダンな言語機能を使いたいモダンな言語機能を使いたい
☆ パターンマッチ☆ パターンマッチ☆ パターンマッチ☆ パターンマッチ☆ パターンマッチ
☆ 純粋関数☆ 純粋関数☆ 純粋関数☆ 純粋関数☆ 純粋関数
☆ 高階関数☆ 高階関数☆ 高階関数☆ 高階関数☆ 高階関数
☆ 型推論☆ 型推論☆ 型推論☆ 型推論☆ 型推論
☆ 対話環境☆ 対話環境☆ 対話環境☆ 対話環境☆ 対話環境
☆ STM☆ STM☆ STM☆ STM☆ STM
型付けされていれば未来は広がる型付けされていれば未来は広がる型付けされていれば未来は広がる型付けされていれば未来は広がる型付けされていれば未来は広がる
☆ 単体テストしやすい☆ 単体テストしやすい☆ 単体テストしやすい☆ 単体テストしやすい☆ 単体テストしやすい
☆ 型による契約プログラミング☆ 型による契約プログラミング☆ 型による契約プログラミング☆ 型による契約プログラミング☆ 型による契約プログラミング
☆ 検証しやすい☆ 検証しやすい☆ 検証しやすい☆ 検証しやすい☆ 検証しやすい
☆ 証明器による設計☆ 証明器による設計☆ 証明器による設計☆ 証明器による設計☆ 証明器による設計
なぜGHCを使わないのかなぜGHCを使わないのかなぜGHCを使わないのかなぜGHCを使わないのかなぜGHCを使わないのか
GHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きい
$ ajhc --version
ajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.1
$ echo 'main = print "Hello"' > Hello.hs
$ ajhc Hello.hs -o Hello_ajhc
$ ghc Hello.hs -o Hello_ghc
$ size Hello_ajhc Hello_ghc
text data bss dec hex filename
19440 1324 744 21508 5404 Hello_ajhc
709612 40840 46776 797228 c2a2c Hello_ghc
$ ldd Hello_ajhc | wc -l
3
$ ldd Hello_ghc | wc -l
9
$ ajhc --version
ajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.1
$ echo 'main = print "Hello"' > Hello.hs
$ ajhc Hello.hs -o Hello_ajhc
$ ghc Hello.hs -o Hello_ghc
$ size Hello_ajhc Hello_ghc
text data bss dec hex filename
19440 1324 744 21508 5404 Hello_ajhc
709612 40840 46776 797228 c2a2c Hello_ghc
$ ldd Hello_ajhc | wc -l
3
$ ldd Hello_ghc | wc -l
9
$ ajhc --version
ajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.1
$ echo 'main = print "Hello"' > Hello.hs
$ ajhc Hello.hs -o Hello_ajhc
$ ghc Hello.hs -o Hello_ghc
$ size Hello_ajhc Hello_ghc
text data bss dec hex filename
19440 1324 744 21508 5404 Hello_ajhc
709612 40840 46776 797228 c2a2c Hello_ghc
$ ldd Hello_ajhc | wc -l
3
$ ldd Hello_ghc | wc -l
9
$ ajhc --version
ajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.1
$ echo 'main = print "Hello"' > Hello.hs
$ ajhc Hello.hs -o Hello_ajhc
$ ghc Hello.hs -o Hello_ghc
$ size Hello_ajhc Hello_ghc
text data bss dec hex filename
19440 1324 744 21508 5404 Hello_ajhc
709612 40840 46776 797228 c2a2c Hello_ghc
$ ldd Hello_ajhc | wc -l
3
$ ldd Hello_ghc | wc -l
9
$ ajhc --version
ajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.1
$ echo 'main = print "Hello"' > Hello.hs
$ ajhc Hello.hs -o Hello_ajhc
$ ghc Hello.hs -o Hello_ghc
$ size Hello_ajhc Hello_ghc
text data bss dec hex filename
19440 1324 744 21508 5404 Hello_ajhc
709612 40840 46776 797228 c2a2c Hello_ghc
$ ldd Hello_ajhc | wc -l
3
$ ldd Hello_ghc | wc -l
9
ML系はあまり調べきれていません...ML系はあまり調べきれていません...ML系はあまり調べきれていません...ML系はあまり調べきれていません...ML系はあまり調べきれていません...
型で設計されたOSは他にないのか型で設計されたOSは他にないのか型で設計されたOSは他にないのか型で設計されたOSは他にないのか型で設計されたOSは他にないのか
デスクトップとして使用可能なレベルではないデスクトップとして使用可能なレベルではないデスクトップとして使用可能なレベルではないデスクトップとして使用可能なレベルではないデスクトップとして使用可能なレベルではない
☆ Funk (OCaml製)☆ Funk (OCaml製)☆ Funk (OCaml製)☆ Funk (OCaml製)☆ Funk (OCaml製)
http://home.gna.org/funk/http://home.gna.org/funk/http://home.gna.org/funk/http://home.gna.org/funk/http://home.gna.org/funk/
☆ snowflake-os (OCaml製)☆ snowflake-os (OCaml製)☆ snowflake-os (OCaml製)☆ snowflake-os (OCaml製)☆ snowflake-os (OCaml製)
http://code.google.com/p/snowflake-os/http://code.google.com/p/snowflake-os/http://code.google.com/p/snowflake-os/http://code.google.com/p/snowflake-os/http://code.google.com/p/snowflake-os/
☆ House (Haskell製)☆ House (Haskell製)☆ House (Haskell製)☆ House (Haskell製)☆ House (Haskell製)
http://programatica.cs.pdx.edu/House/http://programatica.cs.pdx.edu/House/http://programatica.cs.pdx.edu/House/http://programatica.cs.pdx.edu/House/http://programatica.cs.pdx.edu/House/
☆ HaLVM (Haskell製)☆ HaLVM (Haskell製)☆ HaLVM (Haskell製)☆ HaLVM (Haskell製)☆ HaLVM (Haskell製)
http://corp.galois.com/halvm/http://corp.galois.com/halvm/http://corp.galois.com/halvm/http://corp.galois.com/halvm/http://corp.galois.com/halvm/
実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために
☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発
[4] Ajhcコンパイラとマイコン[4] Ajhcコンパイラとマイコン[4] Ajhcコンパイラとマイコン[4] Ajhcコンパイラとマイコン[4] Ajhcコンパイラとマイコン
Ajhcの使い方は以下のような感じAjhcの使い方は以下のような感じAjhcの使い方は以下のような感じAjhcの使い方は以下のような感じAjhcの使い方は以下のような感じ
$ cabal install ajhc
$ ajhc --version
ajhc 0.8.0.1 (80aa12fb9b57622bba2f0e911d7ebc0c04ddb662)
compiled by ghc-7.4 on a x86_64 running linux
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ cabal install ajhc
$ ajhc --version
ajhc 0.8.0.1 (80aa12fb9b57622bba2f0e911d7ebc0c04ddb662)
compiled by ghc-7.4 on a x86_64 running linux
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ cabal install ajhc
$ ajhc --version
ajhc 0.8.0.1 (80aa12fb9b57622bba2f0e911d7ebc0c04ddb662)
compiled by ghc-7.4 on a x86_64 running linux
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ cabal install ajhc
$ ajhc --version
ajhc 0.8.0.1 (80aa12fb9b57622bba2f0e911d7ebc0c04ddb662)
compiled by ghc-7.4 on a x86_64 running linux
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ cabal install ajhc
$ ajhc --version
ajhc 0.8.0.1 (80aa12fb9b57622bba2f0e911d7ebc0c04ddb662)
compiled by ghc-7.4 on a x86_64 running linux
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
☆ このままだと面白くない☆ このままだと面白くない☆ このままだと面白くない☆ このままだと面白くない☆ このままだと面白くない
☆ クロスコンパイルして、☆ クロスコンパイルして、☆ クロスコンパイルして、☆ クロスコンパイルして、☆ クロスコンパイルして、
☆ マイコンでHaskellコード実行してみる?☆ マイコンでHaskellコード実行してみる?☆ マイコンでHaskellコード実行してみる?☆ マイコンでHaskellコード実行してみる?☆ マイコンでHaskellコード実行してみる?
まずはデモでもどうぞまずはデモでもどうぞまずはデモでもどうぞまずはデモでもどうぞまずはデモでもどうぞ
デモ動画: http://www.nicovideo.jp/watch/sm20336813
デモソースコード: https://github.com/ajhc/demo-cortex-m3
デモ動画: http://www.nicovideo.jp/watch/sm20336813
デモソースコード: https://github.com/ajhc/demo-cortex-m3
デモ動画: http://www.nicovideo.jp/watch/sm20336813
デモソースコード: https://github.com/ajhc/demo-cortex-m3
デモ動画: http://www.nicovideo.jp/watch/sm20336813
デモソースコード: https://github.com/ajhc/demo-cortex-m3
デモ動画: http://www.nicovideo.jp/watch/sm20336813
デモソースコード: https://github.com/ajhc/demo-cortex-m3
☆ LEDをぐりんぐりん☆ LEDをぐりんぐりん☆ LEDをぐりんぐりん☆ LEDをぐりんぐりん☆ LEDをぐりんぐりん
☆ LEDにモールス信号☆ LEDにモールス信号☆ LEDにモールス信号☆ LEDにモールス信号☆ LEDにモールス信号
デモソースコードデモソースコードデモソースコードデモソースコードデモソースコード
なんじゃこりゃ...なんじゃこりゃ...なんじゃこりゃ...なんじゃこりゃ...なんじゃこりゃ...
foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()
foreign import ccall "c_extern.h &jhc_zeroAddress"
c_jhc_zeroAddress16 :: Ptr Word16
gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,
gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,
led10 :: Word16
gpioPin8 = 0x0100
--snip--
led3 = gpioPin9
--snip--
brrPtr, bsrrPtr :: Ptr Word16
brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028
bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018
ledOff, ledOn :: Word16 -> IO ()
ledOff = poke brrPtr
ledOn = poke bsrrPtr
foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()
foreign import ccall "c_extern.h &jhc_zeroAddress"
c_jhc_zeroAddress16 :: Ptr Word16
gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,
gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,
led10 :: Word16
gpioPin8 = 0x0100
--snip--
led3 = gpioPin9
--snip--
brrPtr, bsrrPtr :: Ptr Word16
brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028
bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018
ledOff, ledOn :: Word16 -> IO ()
ledOff = poke brrPtr
ledOn = poke bsrrPtr
foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()
foreign import ccall "c_extern.h &jhc_zeroAddress"
c_jhc_zeroAddress16 :: Ptr Word16
gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,
gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,
led10 :: Word16
gpioPin8 = 0x0100
--snip--
led3 = gpioPin9
--snip--
brrPtr, bsrrPtr :: Ptr Word16
brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028
bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018
ledOff, ledOn :: Word16 -> IO ()
ledOff = poke brrPtr
ledOn = poke bsrrPtr
foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()
foreign import ccall "c_extern.h &jhc_zeroAddress"
c_jhc_zeroAddress16 :: Ptr Word16
gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,
gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,
led10 :: Word16
gpioPin8 = 0x0100
--snip--
led3 = gpioPin9
--snip--
brrPtr, bsrrPtr :: Ptr Word16
brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028
bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018
ledOff, ledOn :: Word16 -> IO ()
ledOff = poke brrPtr
ledOn = poke bsrrPtr
foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()
foreign import ccall "c_extern.h &jhc_zeroAddress"
c_jhc_zeroAddress16 :: Ptr Word16
gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,
gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,
led10 :: Word16
gpioPin8 = 0x0100
--snip--
led3 = gpioPin9
--snip--
brrPtr, bsrrPtr :: Ptr Word16
brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028
bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018
ledOff, ledOn :: Word16 -> IO ()
ledOff = poke brrPtr
ledOn = poke bsrrPtr
図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス
図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き
図にしましょう: もっと簡単に図にしましょう: もっと簡単に図にしましょう: もっと簡単に図にしましょう: もっと簡単に図にしましょう: もっと簡単に
AjhcはC言語への変換器AjhcはC言語への変換器AjhcはC言語への変換器AjhcはC言語への変換器AjhcはC言語への変換器
クロスコンパイルクロスコンパイルクロスコンパイルクロスコンパイルクロスコンパイル
ランタイムランタイムランタイムランタイムランタイム
☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!
☆ 組み込み用途に向いている☆ 組み込み用途に向いている☆ 組み込み用途に向いている☆ 組み込み用途に向いている☆ 組み込み用途に向いている
マイコンデモでのメモリマップマイコンデモでのメモリマップマイコンデモでのメモリマップマイコンデモでのメモリマップマイコンデモでのメモリマップ
モールス信号デモの場合モールス信号デモの場合モールス信号デモの場合モールス信号デモの場合モールス信号デモの場合
GCGCGCGCGC
http://www.slideshare.net/dec9ue/gc-16298437http://www.slideshare.net/dec9ue/gc-16298437http://www.slideshare.net/dec9ue/gc-16298437http://www.slideshare.net/dec9ue/gc-16298437http://www.slideshare.net/dec9ue/gc-16298437
☆ @dec9ue という人がすごい詳しい☆ @dec9ue という人がすごい詳しい☆ @dec9ue という人がすごい詳しい☆ @dec9ue という人がすごい詳しい☆ @dec9ue という人がすごい詳しい
☆ マークオンリーGCらしい☆ マークオンリーGCらしい☆ マークオンリーGCらしい☆ マークオンリーGCらしい☆ マークオンリーGCらしい
☆ GCのくせにmalloc使う☆ GCのくせにmalloc使う☆ GCのくせにmalloc使う☆ GCのくせにmalloc使う☆ GCのくせにmalloc使う
☆ AjhcではGCを修正して省メモリ化☆ AjhcではGCを修正して省メモリ化☆ AjhcではGCを修正して省メモリ化☆ AjhcではGCを修正して省メモリ化☆ AjhcではGCを修正して省メモリ化
デモ: GC頻度をgdbで調べるデモ: GC頻度をgdbで調べるデモ: GC頻度をgdbで調べるデモ: GC頻度をgdbで調べるデモ: GC頻度をgdbで調べる
☆ GCを実行する関数にbreak pointはる☆ GCを実行する関数にbreak pointはる☆ GCを実行する関数にbreak pointはる☆ GCを実行する関数にbreak pointはる☆ GCを実行する関数にbreak pointはる
(gdb) break gc_perform_gc(gdb) break gc_perform_gc(gdb) break gc_perform_gc(gdb) break gc_perform_gc(gdb) break gc_perform_gc
(gdb) continue(gdb) continue(gdb) continue(gdb) continue(gdb) continue
☆ どれぐらいGCが起きてるかな?☆ どれぐらいGCが起きてるかな?☆ どれぐらいGCが起きてるかな?☆ どれぐらいGCが起きてるかな?☆ どれぐらいGCが起きてるかな?
不足している機能/不具合不足している機能/不具合不足している機能/不具合不足している機能/不具合不足している機能/不具合
☆ Haskell Platform移植☆ Haskell Platform移植☆ Haskell Platform移植☆ Haskell Platform移植☆ Haskell Platform移植
☆ GHCコンパチ☆ GHCコンパチ☆ GHCコンパチ☆ GHCコンパチ☆ GHCコンパチ
☆ 再入☆ 再入☆ 再入☆ 再入☆ 再入
☆ 並列実行☆ 並列実行☆ 並列実行☆ 並列実行☆ 並列実行
☆ GC中の割り込み☆ GC中の割り込み☆ GC中の割り込み☆ GC中の割り込み☆ GC中の割り込み
☆ リージョン推論☆ リージョン推論☆ リージョン推論☆ リージョン推論☆ リージョン推論
研究開発テーマの山ですね!研究開発テーマの山ですね!研究開発テーマの山ですね!研究開発テーマの山ですね!研究開発テーマの山ですね!
[5] Ajhcのすゝめ[5] Ajhcのすゝめ[5] Ajhcのすゝめ[5] Ajhcのすゝめ[5] Ajhcのすゝめ
☆ Ajhc使ってみませんか?☆ Ajhc使ってみませんか?☆ Ajhc使ってみませんか?☆ Ajhc使ってみませんか?☆ Ajhc使ってみませんか?
☆ マニュアルはイカ☆ マニュアルはイカ☆ マニュアルはイカ☆ マニュアルはイカ☆ マニュアルはイカ
ajhc.metasepi.org/manual_ja.htmlajhc.metasepi.org/manual_ja.htmlajhc.metasepi.org/manual_ja.htmlajhc.metasepi.org/manual_ja.htmlajhc.metasepi.org/manual_ja.html
☆ バグ/機能要望ありましたらイカまで☆ バグ/機能要望ありましたらイカまで☆ バグ/機能要望ありましたらイカまで☆ バグ/機能要望ありましたらイカまで☆ バグ/機能要望ありましたらイカまで
https://github.com/ajhc/ajhc/issueshttps://github.com/ajhc/ajhc/issueshttps://github.com/ajhc/ajhc/issueshttps://github.com/ajhc/ajhc/issueshttps://github.com/ajhc/ajhc/issues
☆ もちろんpull requestも大歓迎です!☆ もちろんpull requestも大歓迎です!☆ もちろんpull requestも大歓迎です!☆ もちろんpull requestも大歓迎です!☆ もちろんpull requestも大歓迎です!
https://github.com/ajhc/ajhchttps://github.com/ajhc/ajhchttps://github.com/ajhc/ajhchttps://github.com/ajhc/ajhchttps://github.com/ajhc/ajhc

Ajhcコンパイラの押売りに来ました