• Like
Ajhcコンパイラの押売りに来ました
Upcoming SlideShare
Loading in...5
×

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

  • 1,725 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,725
On Slideshare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
3
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Ajhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ましたKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
  • 2. [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に興味のあるエンジニア募集中です!
  • 3. 経歴経歴経歴経歴経歴☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業☆ 2001年: 東京都立大学 修士卒業☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学☆ 専攻: 電気・電子工学☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務☆ 2001—2012年: コピー機メーカー勤務☆ 2012年—: 現職☆ 2012年—: 現職☆ 2012年—: 現職☆ 2012年—: 現職☆ 2012年—: 現職
  • 4. 宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?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
  • 5. おしながきおしながきおしながきおしながきおしながき☆ [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のすゝめ
  • 6. [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はフットプリントが小さく、☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも
  • 7. どうして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とか
  • 8. [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のランタイムエラー☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難
  • 9. 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/
  • 10. 改造工数を小さくしたい改造工数を小さくしたい改造工数を小さくしたい改造工数を小さくしたい改造工数を小さくしたいOSSを使った製品開発あるあるOSSを使った製品開発あるあるOSSを使った製品開発あるあるOSSを使った製品開発あるあるOSSを使った製品開発あるある
  • 11. C言語の表現力は非力C言語の表現力は非力C言語の表現力は非力C言語の表現力は非力C言語の表現力は非力モダンな言語機能を使いたいモダンな言語機能を使いたいモダンな言語機能を使いたいモダンな言語機能を使いたいモダンな言語機能を使いたい☆ パターンマッチ☆ パターンマッチ☆ パターンマッチ☆ パターンマッチ☆ パターンマッチ☆ 純粋関数☆ 純粋関数☆ 純粋関数☆ 純粋関数☆ 純粋関数☆ 高階関数☆ 高階関数☆ 高階関数☆ 高階関数☆ 高階関数☆ 型推論☆ 型推論☆ 型推論☆ 型推論☆ 型推論☆ 対話環境☆ 対話環境☆ 対話環境☆ 対話環境☆ 対話環境☆ STM☆ STM☆ STM☆ STM☆ STM
  • 12. 型付けされていれば未来は広がる型付けされていれば未来は広がる型付けされていれば未来は広がる型付けされていれば未来は広がる型付けされていれば未来は広がる☆ 単体テストしやすい☆ 単体テストしやすい☆ 単体テストしやすい☆ 単体テストしやすい☆ 単体テストしやすい☆ 型による契約プログラミング☆ 型による契約プログラミング☆ 型による契約プログラミング☆ 型による契約プログラミング☆ 型による契約プログラミング☆ 検証しやすい☆ 検証しやすい☆ 検証しやすい☆ 検証しやすい☆ 検証しやすい☆ 証明器による設計☆ 証明器による設計☆ 証明器による設計☆ 証明器による設計☆ 証明器による設計
  • 13. なぜGHCを使わないのかなぜGHCを使わないのかなぜGHCを使わないのかなぜGHCを使わないのかなぜGHCを使わないのかGHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きいGHCの吐くバイナリはサイズが大きい$ ajhc --versionajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)$ ghc --versionThe 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_ghctext data bss dec hex filename19440 1324 744 21508 5404 Hello_ajhc709612 40840 46776 797228 c2a2c Hello_ghc$ ldd Hello_ajhc | wc -l3$ ldd Hello_ghc | wc -l9$ ajhc --versionajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)$ ghc --versionThe 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_ghctext data bss dec hex filename19440 1324 744 21508 5404 Hello_ajhc709612 40840 46776 797228 c2a2c Hello_ghc$ ldd Hello_ajhc | wc -l3$ ldd Hello_ghc | wc -l9$ ajhc --versionajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)$ ghc --versionThe 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_ghctext data bss dec hex filename19440 1324 744 21508 5404 Hello_ajhc709612 40840 46776 797228 c2a2c Hello_ghc$ ldd Hello_ajhc | wc -l3$ ldd Hello_ghc | wc -l9$ ajhc --versionajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)$ ghc --versionThe 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_ghctext data bss dec hex filename19440 1324 744 21508 5404 Hello_ajhc709612 40840 46776 797228 c2a2c Hello_ghc$ ldd Hello_ajhc | wc -l3$ ldd Hello_ghc | wc -l9$ ajhc --versionajhc 0.8.0.5 (210da9343b6b7e38a89eb28f85602471a325647a)$ ghc --versionThe 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_ghctext data bss dec hex filename19440 1324 744 21508 5404 Hello_ajhc709612 40840 46776 797228 c2a2c Hello_ghc$ ldd Hello_ajhc | wc -l3$ ldd Hello_ghc | wc -l9ML系はあまり調べきれていません...ML系はあまり調べきれていません...ML系はあまり調べきれていません...ML系はあまり調べきれていません...ML系はあまり調べきれていません...
  • 14. 型で設計された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/
  • 15. 実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発☆ ドッグフードを維持しながら開発
  • 16. [4] Ajhcコンパイラとマイコン[4] Ajhcコンパイラとマイコン[4] Ajhcコンパイラとマイコン[4] Ajhcコンパイラとマイコン[4] AjhcコンパイラとマイコンAjhcの使い方は以下のような感じAjhcの使い方は以下のような感じAjhcの使い方は以下のような感じAjhcの使い方は以下のような感じAjhcの使い方は以下のような感じ$ cabal install ajhc$ ajhc --versionajhc 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 --versionajhc 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 --versionajhc 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 --versionajhc 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 --versionajhc 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コード実行してみる?
  • 17. まずはデモでもどうぞまずはデモでもどうぞまずはデモでもどうぞまずはデモでもどうぞまずはデモでもどうぞデモ動画: 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にモールス信号
  • 18. デモソースコードデモソースコードデモソースコードデモソースコードデモソースコードなんじゃこりゃ...なんじゃこりゃ...なんじゃこりゃ...なんじゃこりゃ...なんじゃこりゃ...foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()foreign import ccall "c_extern.h &jhc_zeroAddress"c_jhc_zeroAddress16 :: Ptr Word16gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,led10 :: Word16gpioPin8 = 0x0100--snip--led3 = gpioPin9--snip--brrPtr, bsrrPtr :: Ptr Word16brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018ledOff, ledOn :: Word16 -> IO ()ledOff = poke brrPtrledOn = poke bsrrPtrforeign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()foreign import ccall "c_extern.h &jhc_zeroAddress"c_jhc_zeroAddress16 :: Ptr Word16gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,led10 :: Word16gpioPin8 = 0x0100--snip--led3 = gpioPin9--snip--brrPtr, bsrrPtr :: Ptr Word16brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018ledOff, ledOn :: Word16 -> IO ()ledOff = poke brrPtrledOn = poke bsrrPtrforeign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()foreign import ccall "c_extern.h &jhc_zeroAddress"c_jhc_zeroAddress16 :: Ptr Word16gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,led10 :: Word16gpioPin8 = 0x0100--snip--led3 = gpioPin9--snip--brrPtr, bsrrPtr :: Ptr Word16brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018ledOff, ledOn :: Word16 -> IO ()ledOff = poke brrPtrledOn = poke bsrrPtrforeign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()foreign import ccall "c_extern.h &jhc_zeroAddress"c_jhc_zeroAddress16 :: Ptr Word16gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,led10 :: Word16gpioPin8 = 0x0100--snip--led3 = gpioPin9--snip--brrPtr, bsrrPtr :: Ptr Word16brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018ledOff, ledOn :: Word16 -> IO ()ledOff = poke brrPtrledOn = poke bsrrPtrforeign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()foreign import ccall "c_extern.h &jhc_zeroAddress"c_jhc_zeroAddress16 :: Ptr Word16gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13,gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9,led10 :: Word16gpioPin8 = 0x0100--snip--led3 = gpioPin9--snip--brrPtr, bsrrPtr :: Ptr Word16brrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001028bsrrPtr = c_jhc_zeroAddress16 `plusPtr` 0x48001018ledOff, ledOn :: Word16 -> IO ()ledOff = poke brrPtrledOn = poke bsrrPtr
  • 19. 図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス図にしましょう: 起動シーケンス
  • 20. 図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き図にしましょう: Haskellコードの動き
  • 21. 図にしましょう: もっと簡単に図にしましょう: もっと簡単に図にしましょう: もっと簡単に図にしましょう: もっと簡単に図にしましょう: もっと簡単に
  • 22. AjhcはC言語への変換器AjhcはC言語への変換器AjhcはC言語への変換器AjhcはC言語への変換器AjhcはC言語への変換器
  • 23. クロスコンパイルクロスコンパイルクロスコンパイルクロスコンパイルクロスコンパイル
  • 24. ランタイムランタイムランタイムランタイムランタイム☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!☆ C言語コメント込み3000行 小さい!☆ 組み込み用途に向いている☆ 組み込み用途に向いている☆ 組み込み用途に向いている☆ 組み込み用途に向いている☆ 組み込み用途に向いている
  • 25. マイコンデモでのメモリマップマイコンデモでのメモリマップマイコンデモでのメモリマップマイコンデモでのメモリマップマイコンデモでのメモリマップモールス信号デモの場合モールス信号デモの場合モールス信号デモの場合モールス信号デモの場合モールス信号デモの場合
  • 26. GCGCGCGCGChttp://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を修正して省メモリ化
  • 27. デモ: 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が起きてるかな?
  • 28. 不足している機能/不具合不足している機能/不具合不足している機能/不具合不足している機能/不具合不足している機能/不具合☆ Haskell Platform移植☆ Haskell Platform移植☆ Haskell Platform移植☆ Haskell Platform移植☆ Haskell Platform移植☆ GHCコンパチ☆ GHCコンパチ☆ GHCコンパチ☆ GHCコンパチ☆ GHCコンパチ☆ 再入☆ 再入☆ 再入☆ 再入☆ 再入☆ 並列実行☆ 並列実行☆ 並列実行☆ 並列実行☆ 並列実行☆ GC中の割り込み☆ GC中の割り込み☆ GC中の割り込み☆ GC中の割り込み☆ GC中の割り込み☆ リージョン推論☆ リージョン推論☆ リージョン推論☆ リージョン推論☆ リージョン推論研究開発テーマの山ですね!研究開発テーマの山ですね!研究開発テーマの山ですね!研究開発テーマの山ですね!研究開発テーマの山ですね!
  • 29. [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