SlideShare a Scribd company logo
1 of 11
Download to read offline
組込Haskellとλカ娘本の紹介組込Haskellとλカ娘本の紹介組込Haskellとλカ娘本の紹介組込Haskellとλカ娘本の紹介組込Haskellとλカ娘本の紹介
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
私は誰?私は誰?私は誰?私は誰?私は誰?
☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q
☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催
☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者
☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer
☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました
☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた
名古屋といえば...関数型!名古屋といえば...関数型!名古屋といえば...関数型!名古屋といえば...関数型!名古屋といえば...関数型!
☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか?
☆ しましょう!☆ しましょう!☆ しましょう!☆ しましょう!☆ しましょう!
☆ Haskellなんてイカが?☆ Haskellなんてイカが?☆ Haskellなんてイカが?☆ Haskellなんてイカが?☆ Haskellなんてイカが?
組込Haskell? オイシイの?組込Haskell? オイシイの?組込Haskell? オイシイの?組込Haskell? オイシイの?組込Haskell? オイシイの?
☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい!
☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/
☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?
AjhcはGHCと何が違うの?AjhcはGHCと何が違うの?AjhcはGHCと何が違うの?AjhcはGHCと何が違うの?AjhcはGHCと何が違うの?
☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器
☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない
応用例: POSIX API応用例: POSIX API応用例: POSIX API応用例: POSIX API応用例: POSIX API
☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC
☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます
☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない...
$ ls ~/.cabal/share/ajhc-0.8.0.8/lib
Diff-0.2.0.hl haskell98-1.0.hl
HUnit-1.2.5.1.hl html-1.0.1.2.hl
QuickCheck-1.2.0.1.hl jhc-1.0.hl
applicative-1.0.hl jhc-prim-1.0.hl
containers-0.3.0.0.hl parsec-2.1.0.1.hl
deepseq-1.2.0.1.hl pretty-1.0.1.2.hl
filepath-1.3.0.1.hl safe-0.3.3.hl
flat-foreign-1.0.hl smallcheck-0.6.1.hl
haskell-extras-0.8.1.hl transformers-0.2.1.0.hl
haskell2010-0.8.1.hl xhtml-3000.2.1.hl
$ ls ~/.cabal/share/ajhc-0.8.0.8/lib
Diff-0.2.0.hl haskell98-1.0.hl
HUnit-1.2.5.1.hl html-1.0.1.2.hl
QuickCheck-1.2.0.1.hl jhc-1.0.hl
applicative-1.0.hl jhc-prim-1.0.hl
containers-0.3.0.0.hl parsec-2.1.0.1.hl
deepseq-1.2.0.1.hl pretty-1.0.1.2.hl
filepath-1.3.0.1.hl safe-0.3.3.hl
flat-foreign-1.0.hl smallcheck-0.6.1.hl
haskell-extras-0.8.1.hl transformers-0.2.1.0.hl
haskell2010-0.8.1.hl xhtml-3000.2.1.hl
$ ls ~/.cabal/share/ajhc-0.8.0.8/lib
Diff-0.2.0.hl haskell98-1.0.hl
HUnit-1.2.5.1.hl html-1.0.1.2.hl
QuickCheck-1.2.0.1.hl jhc-1.0.hl
applicative-1.0.hl jhc-prim-1.0.hl
containers-0.3.0.0.hl parsec-2.1.0.1.hl
deepseq-1.2.0.1.hl pretty-1.0.1.2.hl
filepath-1.3.0.1.hl safe-0.3.3.hl
flat-foreign-1.0.hl smallcheck-0.6.1.hl
haskell-extras-0.8.1.hl transformers-0.2.1.0.hl
haskell2010-0.8.1.hl xhtml-3000.2.1.hl
$ ls ~/.cabal/share/ajhc-0.8.0.8/lib
Diff-0.2.0.hl haskell98-1.0.hl
HUnit-1.2.5.1.hl html-1.0.1.2.hl
QuickCheck-1.2.0.1.hl jhc-1.0.hl
applicative-1.0.hl jhc-prim-1.0.hl
containers-0.3.0.0.hl parsec-2.1.0.1.hl
deepseq-1.2.0.1.hl pretty-1.0.1.2.hl
filepath-1.3.0.1.hl safe-0.3.3.hl
flat-foreign-1.0.hl smallcheck-0.6.1.hl
haskell-extras-0.8.1.hl transformers-0.2.1.0.hl
haskell2010-0.8.1.hl xhtml-3000.2.1.hl
$ ls ~/.cabal/share/ajhc-0.8.0.8/lib
Diff-0.2.0.hl haskell98-1.0.hl
HUnit-1.2.5.1.hl html-1.0.1.2.hl
QuickCheck-1.2.0.1.hl jhc-1.0.hl
applicative-1.0.hl jhc-prim-1.0.hl
containers-0.3.0.0.hl parsec-2.1.0.1.hl
deepseq-1.2.0.1.hl pretty-1.0.1.2.hl
filepath-1.3.0.1.hl safe-0.3.3.hl
flat-foreign-1.0.hl smallcheck-0.6.1.hl
haskell-extras-0.8.1.hl transformers-0.2.1.0.hl
haskell2010-0.8.1.hl xhtml-3000.2.1.hl
応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM)
https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3
☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB)
☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応
☆ OSなしで動作可能☆ OSなしで動作可能☆ OSなしで動作可能☆ OSなしで動作可能☆ OSなしで動作可能
☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで
応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ
https://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafura
☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応
☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)
応用例: Android NDK応用例: Android NDK応用例: Android NDK応用例: Android NDK応用例: Android NDK
https://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndk
☆ 現在開発中☆ 現在開発中☆ 現在開発中☆ 現在開発中☆ 現在開発中
☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ
☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える
☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!
まずは使ってみてみて!まずは使ってみてみて!まずは使ってみてみて!まずは使ってみてみて!まずは使ってみてみて!
日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html
☆ インストールは簡単☆ インストールは簡単☆ インストールは簡単☆ インストールは簡単☆ インストールは簡単
$ sudo apt-get install haskell-platform gcc make m4
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin:$PATH
$ sudo apt-get install haskell-platform gcc make m4
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin:$PATH
$ sudo apt-get install haskell-platform gcc make m4
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin:$PATH
$ sudo apt-get install haskell-platform gcc make m4
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin:$PATH
$ sudo apt-get install haskell-platform gcc make m4
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin:$PATH
☆ 使い方も簡単☆ 使い方も簡単☆ 使い方も簡単☆ 使い方も簡単☆ 使い方も簡単
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
$ echo 'main = print "hoge"' > Hoge.hs
$ ajhc Hoge.hs
$ ./hs.out
"hoge"
☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう
$ ajhc -C -o Hoge.c Hoge.hs
$ file Hoge.c
Hoge.c: C source, ASCII text, with very long lines
$ ajhc -C -o Hoge.c Hoge.hs
$ file Hoge.c
Hoge.c: C source, ASCII text, with very long lines
$ ajhc -C -o Hoge.c Hoge.hs
$ file Hoge.c
Hoge.c: C source, ASCII text, with very long lines
$ ajhc -C -o Hoge.c Hoge.hs
$ file Hoge.c
Hoge.c: C source, ASCII text, with very long lines
$ ajhc -C -o Hoge.c Hoge.hs
$ file Hoge.c
Hoge.c: C source, ASCII text, with very long lines
「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ
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/
☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説
☆ パーサの解説☆ パーサの解説☆ パーサの解説☆ パーサの解説☆ パーサの解説
☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド
☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI
☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた
ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!

More Related Content

Similar to 組込Haskellとλカ娘本の紹介

組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編Kiwamu Okabe
 
Ajhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ましたKiwamu Okabe
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia鉄次 尾形
 
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編Kiwamu Okabe
 
Vim scriptとJavaとHaskell
Vim scriptとJavaとHaskellVim scriptとJavaとHaskell
Vim scriptとJavaとHaskellaiya000
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3ichikaway
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングKiwamu Okabe
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方Ryo Tomidokoro
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたatk1234
 
HiveとImpalaのおいしいとこ取り
HiveとImpalaのおいしいとこ取りHiveとImpalaのおいしいとこ取り
HiveとImpalaのおいしいとこ取りYukinori Suda
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1ichikaway
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクトYuki Okamoto
 
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lispfukamachi
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 

Similar to 組込Haskellとλカ娘本の紹介 (20)

組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
 
Ajhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ました
 
Haskellでプレゼン
HaskellでプレゼンHaskellでプレゼン
Haskellでプレゼン
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編
 
Vim scriptとJavaとHaskell
Vim scriptとJavaとHaskellVim scriptとJavaとHaskell
Vim scriptとJavaとHaskell
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミング
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
HiveとImpalaのおいしいとこ取り
HiveとImpalaのおいしいとこ取りHiveとImpalaのおいしいとこ取り
HiveとImpalaのおいしいとこ取り
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1
 
Php apocalypse
Php apocalypsePhp apocalypse
Php apocalypse
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common LispIntegral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 

組込Haskellとλカ娘本の紹介

  • 2. 私は誰?私は誰?私は誰?私は誰?私は誰? ☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q ☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催 ☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者 ☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer ☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました ☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた☆ その昔はNetBSDでコピー機作ってた
  • 3. 名古屋といえば...関数型!名古屋といえば...関数型!名古屋といえば...関数型!名古屋といえば...関数型!名古屋といえば...関数型! ☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか?☆ 組込でも関数型しませんか? ☆ しましょう!☆ しましょう!☆ しましょう!☆ しましょう!☆ しましょう! ☆ Haskellなんてイカが?☆ Haskellなんてイカが?☆ Haskellなんてイカが?☆ Haskellなんてイカが?☆ Haskellなんてイカが?
  • 4. 組込Haskell? オイシイの?組込Haskell? オイシイの?組込Haskell? オイシイの?組込Haskell? オイシイの?組込Haskell? オイシイの? ☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい!☆ OSにも強い型をつけたい! ☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/☆ Ajhc http://ajhc.metasepi.org/ ☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?☆ ランタイムエラーを少なくできるのでは?
  • 5. AjhcはGHCと何が違うの?AjhcはGHCと何が違うの?AjhcはGHCと何が違うの?AjhcはGHCと何が違うの?AjhcはGHCと何が違うの? ☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器☆ Ajhcは Haskell→C言語 への変換器 ☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない☆ バイナリサイズ小さく、POSIX依存少ない
  • 6. 応用例: POSIX API応用例: POSIX API応用例: POSIX API応用例: POSIX API応用例: POSIX API ☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC☆ スレッドセーフ/再入可能/パラレルGC ☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます☆ pthreadを使ったスレッドが使えます ☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない...☆ でも対応ライブラリは少ない... $ ls ~/.cabal/share/ajhc-0.8.0.8/lib Diff-0.2.0.hl haskell98-1.0.hl HUnit-1.2.5.1.hl html-1.0.1.2.hl QuickCheck-1.2.0.1.hl jhc-1.0.hl applicative-1.0.hl jhc-prim-1.0.hl containers-0.3.0.0.hl parsec-2.1.0.1.hl deepseq-1.2.0.1.hl pretty-1.0.1.2.hl filepath-1.3.0.1.hl safe-0.3.3.hl flat-foreign-1.0.hl smallcheck-0.6.1.hl haskell-extras-0.8.1.hl transformers-0.2.1.0.hl haskell2010-0.8.1.hl xhtml-3000.2.1.hl $ ls ~/.cabal/share/ajhc-0.8.0.8/lib Diff-0.2.0.hl haskell98-1.0.hl HUnit-1.2.5.1.hl html-1.0.1.2.hl QuickCheck-1.2.0.1.hl jhc-1.0.hl applicative-1.0.hl jhc-prim-1.0.hl containers-0.3.0.0.hl parsec-2.1.0.1.hl deepseq-1.2.0.1.hl pretty-1.0.1.2.hl filepath-1.3.0.1.hl safe-0.3.3.hl flat-foreign-1.0.hl smallcheck-0.6.1.hl haskell-extras-0.8.1.hl transformers-0.2.1.0.hl haskell2010-0.8.1.hl xhtml-3000.2.1.hl $ ls ~/.cabal/share/ajhc-0.8.0.8/lib Diff-0.2.0.hl haskell98-1.0.hl HUnit-1.2.5.1.hl html-1.0.1.2.hl QuickCheck-1.2.0.1.hl jhc-1.0.hl applicative-1.0.hl jhc-prim-1.0.hl containers-0.3.0.0.hl parsec-2.1.0.1.hl deepseq-1.2.0.1.hl pretty-1.0.1.2.hl filepath-1.3.0.1.hl safe-0.3.3.hl flat-foreign-1.0.hl smallcheck-0.6.1.hl haskell-extras-0.8.1.hl transformers-0.2.1.0.hl haskell2010-0.8.1.hl xhtml-3000.2.1.hl $ ls ~/.cabal/share/ajhc-0.8.0.8/lib Diff-0.2.0.hl haskell98-1.0.hl HUnit-1.2.5.1.hl html-1.0.1.2.hl QuickCheck-1.2.0.1.hl jhc-1.0.hl applicative-1.0.hl jhc-prim-1.0.hl containers-0.3.0.0.hl parsec-2.1.0.1.hl deepseq-1.2.0.1.hl pretty-1.0.1.2.hl filepath-1.3.0.1.hl safe-0.3.3.hl flat-foreign-1.0.hl smallcheck-0.6.1.hl haskell-extras-0.8.1.hl transformers-0.2.1.0.hl haskell2010-0.8.1.hl xhtml-3000.2.1.hl $ ls ~/.cabal/share/ajhc-0.8.0.8/lib Diff-0.2.0.hl haskell98-1.0.hl HUnit-1.2.5.1.hl html-1.0.1.2.hl QuickCheck-1.2.0.1.hl jhc-1.0.hl applicative-1.0.hl jhc-prim-1.0.hl containers-0.3.0.0.hl parsec-2.1.0.1.hl deepseq-1.2.0.1.hl pretty-1.0.1.2.hl filepath-1.3.0.1.hl safe-0.3.3.hl flat-foreign-1.0.hl smallcheck-0.6.1.hl haskell-extras-0.8.1.hl transformers-0.2.1.0.hl haskell2010-0.8.1.hl xhtml-3000.2.1.hl
  • 7. 応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM)応用例: mbedマイコン (ARM) https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3https://github.com/ajhc/demo-cortex-m3 ☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB)☆ mbed NXP LPC1768 (RAM 32kB) ☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応☆ 他にもCortex-Mシリーズマイコンに対応 ☆ OSなしで動作可能☆ OSなしで動作可能☆ OSなしで動作可能☆ OSなしで動作可能☆ OSなしで動作可能 ☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで☆ 割り込みハンドラもHaskellで
  • 8. 応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ応用例: 非POSIXなOS上でのアプリ https://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafurahttps://github.com/metasepi/chibios-arafura ☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応☆ ChibiOS/RTに対応 ☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)☆ FreeRTOSやμITRONでも (要やる気)
  • 9. 応用例: Android NDK応用例: Android NDK応用例: Android NDK応用例: Android NDK応用例: Android NDK https://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndkhttps://github.com/ajhc/demo-android-ndk ☆ 現在開発中☆ 現在開発中☆ 現在開発中☆ 現在開発中☆ 現在開発中 ☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ☆ OpenGL ESでGUIできるとイイネ ☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える☆ pthreadがあるのでスレッド使える ☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!☆ Haskellゲームをマーケットで売りさばこう!
  • 10. まずは使ってみてみて!まずは使ってみてみて!まずは使ってみてみて!まずは使ってみてみて!まずは使ってみてみて! 日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html日本語マニュアル: http://ajhc.metasepi.org/manual_ja.html ☆ インストールは簡単☆ インストールは簡単☆ インストールは簡単☆ インストールは簡単☆ インストールは簡単 $ sudo apt-get install haskell-platform gcc make m4 $ cabal install ajhc $ export PATH=$HOME/.cabal/bin:$PATH $ sudo apt-get install haskell-platform gcc make m4 $ cabal install ajhc $ export PATH=$HOME/.cabal/bin:$PATH $ sudo apt-get install haskell-platform gcc make m4 $ cabal install ajhc $ export PATH=$HOME/.cabal/bin:$PATH $ sudo apt-get install haskell-platform gcc make m4 $ cabal install ajhc $ export PATH=$HOME/.cabal/bin:$PATH $ sudo apt-get install haskell-platform gcc make m4 $ cabal install ajhc $ export PATH=$HOME/.cabal/bin:$PATH ☆ 使い方も簡単☆ 使い方も簡単☆ 使い方も簡単☆ 使い方も簡単☆ 使い方も簡単 $ echo 'main = print "hoge"' > Hoge.hs $ ajhc Hoge.hs $ ./hs.out "hoge" $ echo 'main = print "hoge"' > Hoge.hs $ ajhc Hoge.hs $ ./hs.out "hoge" $ echo 'main = print "hoge"' > Hoge.hs $ ajhc Hoge.hs $ ./hs.out "hoge" $ echo 'main = print "hoge"' > Hoge.hs $ ajhc Hoge.hs $ ./hs.out "hoge" $ echo 'main = print "hoge"' > Hoge.hs $ ajhc Hoge.hs $ ./hs.out "hoge" ☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう☆ C言語吐き出させてみよう $ ajhc -C -o Hoge.c Hoge.hs $ file Hoge.c Hoge.c: C source, ASCII text, with very long lines $ ajhc -C -o Hoge.c Hoge.hs $ file Hoge.c Hoge.c: C source, ASCII text, with very long lines $ ajhc -C -o Hoge.c Hoge.hs $ file Hoge.c Hoge.c: C source, ASCII text, with very long lines $ ajhc -C -o Hoge.c Hoge.hs $ file Hoge.c Hoge.c: C source, ASCII text, with very long lines $ ajhc -C -o Hoge.c Hoge.hs $ file Hoge.c Hoge.c: C source, ASCII text, with very long lines
  • 11. 「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ「簡約!?λカ娘 Go!」に記事書いたよ 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/ ☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説 ☆ パーサの解説☆ パーサの解説☆ パーサの解説☆ パーサの解説☆ パーサの解説 ☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド ☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI ☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!ちょっとだけ中身のご紹介!