SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Downloaden Sie, um offline zu lesen
組込向けHaskellコンパイラAjhc 
POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc 
POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc 
POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc 
POSIX依存から脱出しよう編
組込向けHaskellコンパイラAjhc
POSIX依存から脱出しよう編
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
☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました
☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで
おしながきおしながきおしながきおしながきおしながき
☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは
☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは
☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは
☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方
☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ
☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ
☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来
[1] Ajhcコンパイラとは[1] Ajhcコンパイラとは[1] Ajhcコンパイラとは[1] Ajhcコンパイラとは[1] 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
☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler
☆ 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コンパイラ作るの?
☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト
☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler
☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/
☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要?
☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため
[2] Metasepi kernelとは[2] Metasepi kernelとは[2] Metasepi kernelとは[2] Metasepi kernelとは[2] 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を強い型によって設計
☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う
Haskell http://www.haskell.org/Haskell http://www.haskell.org/Haskell http://www.haskell.org/Haskell http://www.haskell.org/Haskell http://www.haskell.org/
OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/
MLton http://mlton.org/MLton http://mlton.org/MLton http://mlton.org/MLton http://mlton.org/MLton http://mlton.org/
などなどなどなどなどなどなどなどなどなど
どうしてMetasepiが必要?どうしてMetasepiが必要?どうしてMetasepiが必要?どうしてMetasepiが必要?どうしてMetasepiが必要?
☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?
☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる
☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用
☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー
☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難
既存OSSの品質は高いのでは?既存OSSの品質は高いのでは?既存OSSの品質は高いのでは?既存OSSの品質は高いのでは?既存OSSの品質は高いのでは?
☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている
☆ 伽藍とバザール☆ 伽藍とバザール☆ 伽藍とバザール☆ 伽藍とバザール☆ 伽藍とバザール
☆ 「目玉の数さえ十分あれば、どんなバグも深
刻ではない」
☆ 「目玉の数さえ十分あれば、どんなバグも深
刻ではない」
☆ 「目玉の数さえ十分あれば、どんなバグも深
刻ではない」
☆ 「目玉の数さえ十分あれば、どんなバグも深
刻ではない」
☆ 「目玉の数さえ十分あれば、どんなバグも深
刻ではない」
http://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.html
☆ ところが社内開発は...☆ ところが社内開発は...☆ ところが社内開発は...☆ ところが社内開発は...☆ ところが社内開発は...
主開発からそれると品質急降下主開発からそれると品質急降下主開発からそれると品質急降下主開発からそれると品質急降下主開発からそれると品質急降下
型安全とは型安全とは型安全とは型安全とは型安全とは
☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる
☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ
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/
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言語は安全なのか?
[3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは
☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは?
☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要
☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう!
☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ
☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?
POSIX外で使いやすいコンパイラPOSIX外で使いやすいコンパイラPOSIX外で使いやすいコンパイラPOSIX外で使いやすいコンパイラPOSIX外で使いやすいコンパイラ
各数値が小さいほどPOSIX APIへの依存度
が小さい
各数値が小さいほどPOSIX APIへの依存度
が小さい
各数値が小さいほどPOSIX APIへの依存度
が小さい
各数値が小さいほどPOSIX APIへの依存度
が小さい
各数値が小さいほどPOSIX APIへの依存度
が小さい
jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個
$ nm hs.out | grep "U "
U _IO_putc@@GLIBC_2.2.5
U __libc_start_main@@GLIBC_2.2.5
U _setjmp@@GLIBC_2.2.5
U abort@@GLIBC_2.2.5
U ctime@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U fflush@@GLIBC_2.2.5
U fprintf@@GLIBC_2.2.5
U fputc@@GLIBC_2.2.5
U fputs@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U fwrite@@GLIBC_2.2.5
U getenv@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
U setlocale@@GLIBC_2.2.5
U sysconf@@GLIBC_2.2.5
U times@@GLIBC_2.2.5
$ nm hs.out | grep "U "
U _IO_putc@@GLIBC_2.2.5
U __libc_start_main@@GLIBC_2.2.5
U _setjmp@@GLIBC_2.2.5
U abort@@GLIBC_2.2.5
U ctime@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U fflush@@GLIBC_2.2.5
U fprintf@@GLIBC_2.2.5
U fputc@@GLIBC_2.2.5
U fputs@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U fwrite@@GLIBC_2.2.5
U getenv@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
U setlocale@@GLIBC_2.2.5
U sysconf@@GLIBC_2.2.5
U times@@GLIBC_2.2.5
$ nm hs.out | grep "U "
U _IO_putc@@GLIBC_2.2.5
U __libc_start_main@@GLIBC_2.2.5
U _setjmp@@GLIBC_2.2.5
U abort@@GLIBC_2.2.5
U ctime@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U fflush@@GLIBC_2.2.5
U fprintf@@GLIBC_2.2.5
U fputc@@GLIBC_2.2.5
U fputs@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U fwrite@@GLIBC_2.2.5
U getenv@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
U setlocale@@GLIBC_2.2.5
U sysconf@@GLIBC_2.2.5
U times@@GLIBC_2.2.5
$ nm hs.out | grep "U "
U _IO_putc@@GLIBC_2.2.5
U __libc_start_main@@GLIBC_2.2.5
U _setjmp@@GLIBC_2.2.5
U abort@@GLIBC_2.2.5
U ctime@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U fflush@@GLIBC_2.2.5
U fprintf@@GLIBC_2.2.5
U fputc@@GLIBC_2.2.5
U fputs@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U fwrite@@GLIBC_2.2.5
U getenv@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
U setlocale@@GLIBC_2.2.5
U sysconf@@GLIBC_2.2.5
U times@@GLIBC_2.2.5
$ nm hs.out | grep "U "
U _IO_putc@@GLIBC_2.2.5
U __libc_start_main@@GLIBC_2.2.5
U _setjmp@@GLIBC_2.2.5
U abort@@GLIBC_2.2.5
U ctime@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U fflush@@GLIBC_2.2.5
U fprintf@@GLIBC_2.2.5
U fputc@@GLIBC_2.2.5
U fputs@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U fwrite@@GLIBC_2.2.5
U getenv@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
U setlocale@@GLIBC_2.2.5
U sysconf@@GLIBC_2.2.5
U times@@GLIBC_2.2.5
jhcはC言語への変換器jhcはC言語への変換器jhcはC言語への変換器jhcはC言語への変換器jhcはC言語への変換器
クロスコンパイルも簡単クロスコンパイルも簡単クロスコンパイルも簡単クロスコンパイルも簡単クロスコンパイルも簡単
実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために実用化に辿りつくために
☆ 実行可能状態を維持しながら開発☆ 実行可能状態を維持しながら開発☆ 実行可能状態を維持しながら開発☆ 実行可能状態を維持しながら開発☆ 実行可能状態を維持しながら開発
[4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方
☆ インストールしてみましょう☆ インストールしてみましょう☆ インストールしてみましょう☆ インストールしてみましょう☆ インストールしてみましょう
Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合
$ sudo apt-get install haskell-platform libncurses5-dev libwww-
perl gcc m4
$ cabal update
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin/:$PATH
$ which ajhc
/home/ユーザ名/.cabal/bin/ajhc
$ ajhc --version
ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44)
compiled by ghc-7.4 on a x86_64 running linux
$ sudo apt-get install haskell-platform libncurses5-dev libwww-
perl gcc m4
$ cabal update
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin/:$PATH
$ which ajhc
/home/ユーザ名/.cabal/bin/ajhc
$ ajhc --version
ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44)
compiled by ghc-7.4 on a x86_64 running linux
$ sudo apt-get install haskell-platform libncurses5-dev libwww-
perl gcc m4
$ cabal update
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin/:$PATH
$ which ajhc
/home/ユーザ名/.cabal/bin/ajhc
$ ajhc --version
ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44)
compiled by ghc-7.4 on a x86_64 running linux
$ sudo apt-get install haskell-platform libncurses5-dev libwww-
perl gcc m4
$ cabal update
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin/:$PATH
$ which ajhc
/home/ユーザ名/.cabal/bin/ajhc
$ ajhc --version
ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44)
compiled by ghc-7.4 on a x86_64 running linux
$ sudo apt-get install haskell-platform libncurses5-dev libwww-
perl gcc m4
$ cabal update
$ cabal install ajhc
$ export PATH=$HOME/.cabal/bin/:$PATH
$ which ajhc
/home/ユーザ名/.cabal/bin/ajhc
$ ajhc --version
ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44)
compiled by ghc-7.4 on a x86_64 running linux
あっさりですね!あっさりですね!あっさりですね!あっさりですね!あっさりですね!
簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう
$ vi MyDiff.hs$ vi MyDiff.hs$ vi MyDiff.hs$ vi MyDiff.hs$ vi MyDiff.hs
import System.Environment
import Data.Algorithm.Diff
main :: IO ()
main = do [s1, s2] <- getArgs
c1 <- readFile s1
c2 <- readFile s2
print . filter f $ getDiff c1 c2
where
f (Both _ _) = False
f _ = True
import System.Environment
import Data.Algorithm.Diff
main :: IO ()
main = do [s1, s2] <- getArgs
c1 <- readFile s1
c2 <- readFile s2
print . filter f $ getDiff c1 c2
where
f (Both _ _) = False
f _ = True
import System.Environment
import Data.Algorithm.Diff
main :: IO ()
main = do [s1, s2] <- getArgs
c1 <- readFile s1
c2 <- readFile s2
print . filter f $ getDiff c1 c2
where
f (Both _ _) = False
f _ = True
import System.Environment
import Data.Algorithm.Diff
main :: IO ()
main = do [s1, s2] <- getArgs
c1 <- readFile s1
c2 <- readFile s2
print . filter f $ getDiff c1 c2
where
f (Both _ _) = False
f _ = True
import System.Environment
import Data.Algorithm.Diff
main :: IO ()
main = do [s1, s2] <- getArgs
c1 <- readFile s1
c2 <- readFile s2
print . filter f $ getDiff c1 c2
where
f (Both _ _) = False
f _ = True
$ ajhc -p Diff -o mydiff MyDiff.hs
$ echo "hoge" > s1.txt
$ echo "hofe0" > s2.txt
$ ./mydiff s1.txt s2.txt
[Second 'f',First 'g',Second '0']
$ ajhc -p Diff -o mydiff MyDiff.hs
$ echo "hoge" > s1.txt
$ echo "hofe0" > s2.txt
$ ./mydiff s1.txt s2.txt
[Second 'f',First 'g',Second '0']
$ ajhc -p Diff -o mydiff MyDiff.hs
$ echo "hoge" > s1.txt
$ echo "hofe0" > s2.txt
$ ./mydiff s1.txt s2.txt
[Second 'f',First 'g',Second '0']
$ ajhc -p Diff -o mydiff MyDiff.hs
$ echo "hoge" > s1.txt
$ echo "hofe0" > s2.txt
$ ./mydiff s1.txt s2.txt
[Second 'f',First 'g',Second '0']
$ ajhc -p Diff -o mydiff MyDiff.hs
$ echo "hoge" > s1.txt
$ echo "hofe0" > s2.txt
$ ./mydiff s1.txt s2.txt
[Second 'f',First 'g',Second '0']
使い方詳細使い方詳細使い方詳細使い方詳細使い方詳細
「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
を読んでみてください!を読んでみてください!を読んでみてください!を読んでみてください!を読んでみてください!
[5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ
☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう
$ vi Small.hs$ vi Small.hs$ vi Small.hs$ vi Small.hs$ vi Small.hs
main :: IO ()
main = return ()
main :: IO ()
main = return ()
main :: IO ()
main = return ()
main :: IO ()
main = return ()
main :: IO ()
main = return ()
$ ajhc -o small Small.hs
$ ./small
$ ajhc -o small Small.hs
$ ./small
$ ajhc -o small Small.hs
$ ./small
$ ajhc -o small Small.hs
$ ./small
$ ajhc -o small Small.hs
$ ./small
☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう
☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です
$ nm small | grep -c "U "
19
$ nm small | grep -c "U "
19
$ nm small | grep -c "U "
19
$ nm small | grep -c "U "
19
$ nm small | grep -c "U "
19
現状のコンパイルフロー現状のコンパイルフロー現状のコンパイルフロー現状のコンパイルフロー現状のコンパイルフロー
簡単ですね簡単ですね簡単ですね簡単ですね簡単ですね
GCCコンパイルオプションを調べるGCCコンパイルオプションを調べるGCCコンパイルオプションを調べるGCCコンパイルオプションを調べるGCCコンパイルオプションを調べる
$ ajhc --tdir rtsdir Small.hs
$ ls
Small.hs hs.out* rtsdir/
$ head -1 rtsdir/main_code.c
char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/
rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/
lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/
conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'";
$ ajhc --tdir rtsdir Small.hs
$ ls
Small.hs hs.out* rtsdir/
$ head -1 rtsdir/main_code.c
char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/
rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/
lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/
conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'";
$ ajhc --tdir rtsdir Small.hs
$ ls
Small.hs hs.out* rtsdir/
$ head -1 rtsdir/main_code.c
char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/
rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/
lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/
conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'";
$ ajhc --tdir rtsdir Small.hs
$ ls
Small.hs hs.out* rtsdir/
$ head -1 rtsdir/main_code.c
char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/
rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/
lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/
conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'";
$ ajhc --tdir rtsdir Small.hs
$ ls
Small.hs hs.out* rtsdir/
$ head -1 rtsdir/main_code.c
char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/
rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/
lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/
conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'";
jhc_c_compile文字列からGCCのコンパイル
オプションがわかる
jhc_c_compile文字列からGCCのコンパイル
オプションがわかる
jhc_c_compile文字列からGCCのコンパイル
オプションがわかる
jhc_c_compile文字列からGCCのコンパイル
オプションがわかる
jhc_c_compile文字列からGCCのコンパイル
オプションがわかる
Makefileを使ってコンパイルMakefileを使ってコンパイルMakefileを使ってコンパイルMakefileを使ってコンパイルMakefileを使ってコンパイル
Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細)
$ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile
small: rtsdir/main_code.c
gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/
rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/
cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '-
falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused-
parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
rtsdir/main_code.c: Small.hs
ajhc --tdir rtsdir -C Small.hs
clean:
rm -rf rtsdir small *~
small: rtsdir/main_code.c
gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/
rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/
cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '-
falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused-
parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
rtsdir/main_code.c: Small.hs
ajhc --tdir rtsdir -C Small.hs
clean:
rm -rf rtsdir small *~
small: rtsdir/main_code.c
gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/
rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/
cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '-
falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused-
parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
rtsdir/main_code.c: Small.hs
ajhc --tdir rtsdir -C Small.hs
clean:
rm -rf rtsdir small *~
small: rtsdir/main_code.c
gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/
rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/
cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '-
falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused-
parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
rtsdir/main_code.c: Small.hs
ajhc --tdir rtsdir -C Small.hs
clean:
rm -rf rtsdir small *~
small: rtsdir/main_code.c
gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/
rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/
cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '-
falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused-
parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
rtsdir/main_code.c: Small.hs
ajhc --tdir rtsdir -C Small.hs
clean:
rm -rf rtsdir small *~
$ make
$ nm small | grep -c "U "
19 # <= 依存度は変化なし
$ make
$ nm small | grep -c "U "
19 # <= 依存度は変化なし
$ make
$ nm small | grep -c "U "
19 # <= 依存度は変化なし
$ make
$ nm small | grep -c "U "
19 # <= 依存度は変化なし
$ make
$ nm small | grep -c "U "
19 # <= 依存度は変化なし
ランタイムのソースを限定ランタイムのソースを限定ランタイムのソースを限定ランタイムのソースを限定ランタイムのソースを限定
ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細)
$ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile
small: rtsdir/main_code.c dummy.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c -
Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
# --snip--
small: rtsdir/main_code.c dummy.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c -
Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
# --snip--
small: rtsdir/main_code.c dummy.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c -
Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
# --snip--
small: rtsdir/main_code.c dummy.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c -
Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
# --snip--
small: rtsdir/main_code.c dummy.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c -
Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small
# --snip--
$ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c
#include "jhc_rts_header.h"
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void jhc_print_profile(void) {}
$ make
$ nm small | grep -c "U "
15 # <= 依存度が4減少
$ make
$ nm small | grep -c "U "
15 # <= 依存度が4減少
$ make
$ nm small | grep -c "U "
15 # <= 依存度が4減少
$ make
$ nm small | grep -c "U "
15 # <= 依存度が4減少
$ make
$ nm small | grep -c "U "
15 # <= 依存度が4減少
ダミー関数をさらに投入ダミー関数をさらに投入ダミー関数をさらに投入ダミー関数をさらに投入ダミー関数をさらに投入
ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細)
$ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c
#include "jhc_rts_header.h"
void abort() {for (;;);}
char *setlocale(int category, const char *locale) {return NULL;}
int fputc(int c, FILE *stream) {return 0;}
int fputs(const char *s, FILE *stream) {return 0;}
int fprintf(FILE *stream, const char *format, ...) {return 0;}
int fflush(FILE* stream) {return 0;}
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE
*stream) {return 0;}
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void abort() {for (;;);}
char *setlocale(int category, const char *locale) {return NULL;}
int fputc(int c, FILE *stream) {return 0;}
int fputs(const char *s, FILE *stream) {return 0;}
int fprintf(FILE *stream, const char *format, ...) {return 0;}
int fflush(FILE* stream) {return 0;}
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE
*stream) {return 0;}
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void abort() {for (;;);}
char *setlocale(int category, const char *locale) {return NULL;}
int fputc(int c, FILE *stream) {return 0;}
int fputs(const char *s, FILE *stream) {return 0;}
int fprintf(FILE *stream, const char *format, ...) {return 0;}
int fflush(FILE* stream) {return 0;}
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE
*stream) {return 0;}
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void abort() {for (;;);}
char *setlocale(int category, const char *locale) {return NULL;}
int fputc(int c, FILE *stream) {return 0;}
int fputs(const char *s, FILE *stream) {return 0;}
int fprintf(FILE *stream, const char *format, ...) {return 0;}
int fflush(FILE* stream) {return 0;}
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE
*stream) {return 0;}
void jhc_print_profile(void) {}
#include "jhc_rts_header.h"
void abort() {for (;;);}
char *setlocale(int category, const char *locale) {return NULL;}
int fputc(int c, FILE *stream) {return 0;}
int fputs(const char *s, FILE *stream) {return 0;}
int fprintf(FILE *stream, const char *format, ...) {return 0;}
int fflush(FILE* stream) {return 0;}
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE
*stream) {return 0;}
void jhc_print_profile(void) {}
$ make
$ nm small | grep -c "U "
8 # <= 依存度が7減少
$ make
$ nm small | grep -c "U "
8 # <= 依存度が7減少
$ make
$ nm small | grep -c "U "
8 # <= 依存度が7減少
$ make
$ nm small | grep -c "U "
8 # <= 依存度が7減少
$ make
$ nm small | grep -c "U "
8 # <= 依存度が7減少
例外を無視する例外を無視する例外を無視する例外を無視する例外を無視する
例外を無視する(詳細)例外を無視する(詳細)例外を無視する(詳細)例外を無視する(詳細)例外を無視する(詳細)
$ vi Makefile
small: rtsdir/main_code.c dummy.c main.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c
main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '-
D_JHC_STANDALONE=0' -o small
$ vi main.c
#include "jhc_rts_header.h"
int
main(int argc, char *argv[])
{
hs_init(&argc,&argv);
_amain();
hs_exit();
return 0;
}
$ nm small | grep -c "U "
7 # <= 依存度が1減少
$ vi Makefile
small: rtsdir/main_code.c dummy.c main.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c
main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '-
D_JHC_STANDALONE=0' -o small
$ vi main.c
#include "jhc_rts_header.h"
int
main(int argc, char *argv[])
{
hs_init(&argc,&argv);
_amain();
hs_exit();
return 0;
}
$ nm small | grep -c "U "
7 # <= 依存度が1減少
$ vi Makefile
small: rtsdir/main_code.c dummy.c main.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c
main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '-
D_JHC_STANDALONE=0' -o small
$ vi main.c
#include "jhc_rts_header.h"
int
main(int argc, char *argv[])
{
hs_init(&argc,&argv);
_amain();
hs_exit();
return 0;
}
$ nm small | grep -c "U "
7 # <= 依存度が1減少
$ vi Makefile
small: rtsdir/main_code.c dummy.c main.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c
main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '-
D_JHC_STANDALONE=0' -o small
$ vi main.c
#include "jhc_rts_header.h"
int
main(int argc, char *argv[])
{
hs_init(&argc,&argv);
_amain();
hs_exit();
return 0;
}
$ nm small | grep -c "U "
7 # <= 依存度が1減少
$ vi Makefile
small: rtsdir/main_code.c dummy.c main.c
gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/
rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c
main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -
D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-
unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '-
D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '-
D_JHC_STANDALONE=0' -o small
$ vi main.c
#include "jhc_rts_header.h"
int
main(int argc, char *argv[])
{
hs_init(&argc,&argv);
_amain();
hs_exit();
return 0;
}
$ nm small | grep -c "U "
7 # <= 依存度が1減少
残ったPOSIX依存は何?残ったPOSIX依存は何?残ったPOSIX依存は何?残ったPOSIX依存は何?残ったPOSIX依存は何?
$ nm small | grep "U "
U __libc_start_main@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
$ nm small | grep "U "
U __libc_start_main@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
$ nm small | grep "U "
U __libc_start_main@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
$ nm small | grep "U "
U __libc_start_main@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
$ nm small | grep "U "
U __libc_start_main@@GLIBC_2.2.5
U exit@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
U malloc@@GLIBC_2.2.5
U memset@@GLIBC_2.2.5
U posix_memalign@@GLIBC_2.2.5
U realloc@@GLIBC_2.2.5
☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要
☆ mallocのない環境ではNetBSD alloc.cを
流用するのがおすすめ
☆ mallocのない環境ではNetBSD alloc.cを
流用するのがおすすめ
☆ mallocのない環境ではNetBSD alloc.cを
流用するのがおすすめ
☆ mallocのない環境ではNetBSD alloc.cを
流用するのがおすすめ
☆ mallocのない環境ではNetBSD alloc.cを
流用するのがおすすめ
これでプログラミングできるの?これでプログラミングできるの?これでプログラミングできるの?これでプログラミングできるの?これでプログラミングできるの?
以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます
☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI)
☆ Foreign.Storableクラス☆ Foreign.Storableクラス☆ Foreign.Storableクラス☆ Foreign.Storableクラス☆ Foreign.Storableクラス
FFIでお互いの関数を呼びあえるFFIでお互いの関数を呼びあえるFFIでお互いの関数を呼びあえるFFIでお互いの関数を呼びあえるFFIでお互いの関数を呼びあえる
Storableでメモリ直読み書きStorableでメモリ直読み書きStorableでメモリ直読み書きStorableでメモリ直読み書きStorableでメモリ直読み書き
[6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ
☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳
http://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.html
☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植
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
☆ cabalによるインストール☆ cabalによるインストール☆ cabalによるインストール☆ cabalによるインストール☆ cabalによるインストール
☆ 省メモリGC☆ 省メモリGC☆ 省メモリGC☆ 省メモリGC☆ 省メモリGC
☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現
[7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来
☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中
https://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guide
☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有
☆ GHCのライブラリを移植☆ GHCのライブラリを移植☆ GHCのライブラリを移植☆ GHCのライブラリを移植☆ GHCのライブラリを移植
☆ さらなる応用例の提案☆ さらなる応用例の提案☆ さらなる応用例の提案☆ さらなる応用例の提案☆ さらなる応用例の提案
☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計
☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計
宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?
☆ 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/
☆ 関数型言語の同人誌☆ 関数型言語の同人誌☆ 関数型言語の同人誌☆ 関数型言語の同人誌☆ 関数型言語の同人誌
☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか
☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり?
☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました
☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ
http://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.html
本スライドで使用した画像 #1本スライドで使用した画像 #1本スライドで使用した画像 #1本スライドで使用した画像 #1本スライドで使用した画像 #1
* sunny side up | Flickr - Photo Sharing!
http://www.flickr.com/photos/97335141@N00/4623354472/
* Mud Slide | Flickr - Photo Sharing!
http://www.flickr.com/photos/ben_salter/2676953286/
* Feelin' Safe | Flickr - Photo Sharing!
http://www.flickr.com/photos/mstyne/3654056683/
* STOP ALL WAY | Flickr - Photo Sharing!
http://www.flickr.com/photos/peterkaminski/1510724/
* Bungee jump | Flickr - Photo Sharing!
http://www.flickr.com/photos/gj_thewhite/8855033499/
* The C Programming Language | Flickr - Photo Sharing!
http://www.flickr.com/photos/mrbill/2482009942/
* The 20 Yard Line | Flickr - Photo Sharing!
http://www.flickr.com/photos/eschipul/2957264066/
* _MG_3881 | Flickr - Photo Sharing!
http://www.flickr.com/photos/63209717@N05/6873025064/
* Mini Cross | Flickr - Photo Sharing!
http://www.flickr.com/photos/hdrexperience/6727601691/
* Goal for the Sky | Flickr - Photo Sharing!
http://www.flickr.com/photos/giantsqurl/5165392772/
* Manual and driver disc | Flickr - Photo Sharing!
http://www.flickr.com/photos/tseedmund/3859079008/
* sunny side up | Flickr - Photo Sharing!
http://www.flickr.com/photos/97335141@N00/4623354472/
* Mud Slide | Flickr - Photo Sharing!
http://www.flickr.com/photos/ben_salter/2676953286/
* Feelin' Safe | Flickr - Photo Sharing!
http://www.flickr.com/photos/mstyne/3654056683/
* STOP ALL WAY | Flickr - Photo Sharing!
http://www.flickr.com/photos/peterkaminski/1510724/
* Bungee jump | Flickr - Photo Sharing!
http://www.flickr.com/photos/gj_thewhite/8855033499/
* The C Programming Language | Flickr - Photo Sharing!
http://www.flickr.com/photos/mrbill/2482009942/
* The 20 Yard Line | Flickr - Photo Sharing!
http://www.flickr.com/photos/eschipul/2957264066/
* _MG_3881 | Flickr - Photo Sharing!
http://www.flickr.com/photos/63209717@N05/6873025064/
* Mini Cross | Flickr - Photo Sharing!
http://www.flickr.com/photos/hdrexperience/6727601691/
* Goal for the Sky | Flickr - Photo Sharing!
http://www.flickr.com/photos/giantsqurl/5165392772/
* Manual and driver disc | Flickr - Photo Sharing!
http://www.flickr.com/photos/tseedmund/3859079008/
* sunny side up | Flickr - Photo Sharing!
http://www.flickr.com/photos/97335141@N00/4623354472/
* Mud Slide | Flickr - Photo Sharing!
http://www.flickr.com/photos/ben_salter/2676953286/
* Feelin' Safe | Flickr - Photo Sharing!
http://www.flickr.com/photos/mstyne/3654056683/
* STOP ALL WAY | Flickr - Photo Sharing!
http://www.flickr.com/photos/peterkaminski/1510724/
* Bungee jump | Flickr - Photo Sharing!
http://www.flickr.com/photos/gj_thewhite/8855033499/
* The C Programming Language | Flickr - Photo Sharing!
http://www.flickr.com/photos/mrbill/2482009942/
* The 20 Yard Line | Flickr - Photo Sharing!
http://www.flickr.com/photos/eschipul/2957264066/
* _MG_3881 | Flickr - Photo Sharing!
http://www.flickr.com/photos/63209717@N05/6873025064/
* Mini Cross | Flickr - Photo Sharing!
http://www.flickr.com/photos/hdrexperience/6727601691/
* Goal for the Sky | Flickr - Photo Sharing!
http://www.flickr.com/photos/giantsqurl/5165392772/
* Manual and driver disc | Flickr - Photo Sharing!
http://www.flickr.com/photos/tseedmund/3859079008/
* sunny side up | Flickr - Photo Sharing!
http://www.flickr.com/photos/97335141@N00/4623354472/
* Mud Slide | Flickr - Photo Sharing!
http://www.flickr.com/photos/ben_salter/2676953286/
* Feelin' Safe | Flickr - Photo Sharing!
http://www.flickr.com/photos/mstyne/3654056683/
* STOP ALL WAY | Flickr - Photo Sharing!
http://www.flickr.com/photos/peterkaminski/1510724/
* Bungee jump | Flickr - Photo Sharing!
http://www.flickr.com/photos/gj_thewhite/8855033499/
* The C Programming Language | Flickr - Photo Sharing!
http://www.flickr.com/photos/mrbill/2482009942/
* The 20 Yard Line | Flickr - Photo Sharing!
http://www.flickr.com/photos/eschipul/2957264066/
* _MG_3881 | Flickr - Photo Sharing!
http://www.flickr.com/photos/63209717@N05/6873025064/
* Mini Cross | Flickr - Photo Sharing!
http://www.flickr.com/photos/hdrexperience/6727601691/
* Goal for the Sky | Flickr - Photo Sharing!
http://www.flickr.com/photos/giantsqurl/5165392772/
* Manual and driver disc | Flickr - Photo Sharing!
http://www.flickr.com/photos/tseedmund/3859079008/
* sunny side up | Flickr - Photo Sharing!
http://www.flickr.com/photos/97335141@N00/4623354472/
* Mud Slide | Flickr - Photo Sharing!
http://www.flickr.com/photos/ben_salter/2676953286/
* Feelin' Safe | Flickr - Photo Sharing!
http://www.flickr.com/photos/mstyne/3654056683/
* STOP ALL WAY | Flickr - Photo Sharing!
http://www.flickr.com/photos/peterkaminski/1510724/
* Bungee jump | Flickr - Photo Sharing!
http://www.flickr.com/photos/gj_thewhite/8855033499/
* The C Programming Language | Flickr - Photo Sharing!
http://www.flickr.com/photos/mrbill/2482009942/
* The 20 Yard Line | Flickr - Photo Sharing!
http://www.flickr.com/photos/eschipul/2957264066/
* _MG_3881 | Flickr - Photo Sharing!
http://www.flickr.com/photos/63209717@N05/6873025064/
* Mini Cross | Flickr - Photo Sharing!
http://www.flickr.com/photos/hdrexperience/6727601691/
* Goal for the Sky | Flickr - Photo Sharing!
http://www.flickr.com/photos/giantsqurl/5165392772/
* Manual and driver disc | Flickr - Photo Sharing!
http://www.flickr.com/photos/tseedmund/3859079008/
本スライドで使用した画像 #2本スライドで使用した画像 #2本スライドで使用した画像 #2本スライドで使用した画像 #2本スライドで使用した画像 #2
* Simple Heart | Flickr - Photo Sharing!
http://www.flickr.com/photos/21148821@N02/2055189101/
* GNU Wallpaper | Flickr - Photo Sharing!
http://www.flickr.com/photos/jeffpro/8603895629/
* The core | Flickr - Photo Sharing!
http://www.flickr.com/photos/mukluk/484631726/
* Dummies. Someday they'll take over the world. They already have.
http://www.flickr.com/photos/keoni101/5244610841/
* Michael Caputo, "just tryin' to break the ice, with nothin'...
http://www.flickr.com/photos/sixteen-miles/3757672365/
* Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing!
http://www.flickr.com/photos/48913243@N00/4605448536/
* Carrier Pigeon | Flickr - Photo Sharing!
http://www.flickr.com/photos/enzymedesign/4983070657/
* Arrows showing up (Blender) | Flickr - Photo Sharing!
http://www.flickr.com/photos/61423903@N06/7382239368/
* Handshakes | Flickr - Photo Sharing!
http://www.flickr.com/photos/ndanger/4425413794/
* STM32 Development Board | Flickr - Photo Sharing!
http://www.flickr.com/photos/randomskk/3920434183/
* Hiking | Flickr - Photo Sharing!
http://www.flickr.com/photos/aigle_dore/5824862885/
* Simple Heart | Flickr - Photo Sharing!
http://www.flickr.com/photos/21148821@N02/2055189101/
* GNU Wallpaper | Flickr - Photo Sharing!
http://www.flickr.com/photos/jeffpro/8603895629/
* The core | Flickr - Photo Sharing!
http://www.flickr.com/photos/mukluk/484631726/
* Dummies. Someday they'll take over the world. They already have.
http://www.flickr.com/photos/keoni101/5244610841/
* Michael Caputo, "just tryin' to break the ice, with nothin'...
http://www.flickr.com/photos/sixteen-miles/3757672365/
* Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing!
http://www.flickr.com/photos/48913243@N00/4605448536/
* Carrier Pigeon | Flickr - Photo Sharing!
http://www.flickr.com/photos/enzymedesign/4983070657/
* Arrows showing up (Blender) | Flickr - Photo Sharing!
http://www.flickr.com/photos/61423903@N06/7382239368/
* Handshakes | Flickr - Photo Sharing!
http://www.flickr.com/photos/ndanger/4425413794/
* STM32 Development Board | Flickr - Photo Sharing!
http://www.flickr.com/photos/randomskk/3920434183/
* Hiking | Flickr - Photo Sharing!
http://www.flickr.com/photos/aigle_dore/5824862885/
* Simple Heart | Flickr - Photo Sharing!
http://www.flickr.com/photos/21148821@N02/2055189101/
* GNU Wallpaper | Flickr - Photo Sharing!
http://www.flickr.com/photos/jeffpro/8603895629/
* The core | Flickr - Photo Sharing!
http://www.flickr.com/photos/mukluk/484631726/
* Dummies. Someday they'll take over the world. They already have.
http://www.flickr.com/photos/keoni101/5244610841/
* Michael Caputo, "just tryin' to break the ice, with nothin'...
http://www.flickr.com/photos/sixteen-miles/3757672365/
* Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing!
http://www.flickr.com/photos/48913243@N00/4605448536/
* Carrier Pigeon | Flickr - Photo Sharing!
http://www.flickr.com/photos/enzymedesign/4983070657/
* Arrows showing up (Blender) | Flickr - Photo Sharing!
http://www.flickr.com/photos/61423903@N06/7382239368/
* Handshakes | Flickr - Photo Sharing!
http://www.flickr.com/photos/ndanger/4425413794/
* STM32 Development Board | Flickr - Photo Sharing!
http://www.flickr.com/photos/randomskk/3920434183/
* Hiking | Flickr - Photo Sharing!
http://www.flickr.com/photos/aigle_dore/5824862885/
* Simple Heart | Flickr - Photo Sharing!
http://www.flickr.com/photos/21148821@N02/2055189101/
* GNU Wallpaper | Flickr - Photo Sharing!
http://www.flickr.com/photos/jeffpro/8603895629/
* The core | Flickr - Photo Sharing!
http://www.flickr.com/photos/mukluk/484631726/
* Dummies. Someday they'll take over the world. They already have.
http://www.flickr.com/photos/keoni101/5244610841/
* Michael Caputo, "just tryin' to break the ice, with nothin'...
http://www.flickr.com/photos/sixteen-miles/3757672365/
* Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing!
http://www.flickr.com/photos/48913243@N00/4605448536/
* Carrier Pigeon | Flickr - Photo Sharing!
http://www.flickr.com/photos/enzymedesign/4983070657/
* Arrows showing up (Blender) | Flickr - Photo Sharing!
http://www.flickr.com/photos/61423903@N06/7382239368/
* Handshakes | Flickr - Photo Sharing!
http://www.flickr.com/photos/ndanger/4425413794/
* STM32 Development Board | Flickr - Photo Sharing!
http://www.flickr.com/photos/randomskk/3920434183/
* Hiking | Flickr - Photo Sharing!
http://www.flickr.com/photos/aigle_dore/5824862885/
* Simple Heart | Flickr - Photo Sharing!
http://www.flickr.com/photos/21148821@N02/2055189101/
* GNU Wallpaper | Flickr - Photo Sharing!
http://www.flickr.com/photos/jeffpro/8603895629/
* The core | Flickr - Photo Sharing!
http://www.flickr.com/photos/mukluk/484631726/
* Dummies. Someday they'll take over the world. They already have.
http://www.flickr.com/photos/keoni101/5244610841/
* Michael Caputo, "just tryin' to break the ice, with nothin'...
http://www.flickr.com/photos/sixteen-miles/3757672365/
* Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing!
http://www.flickr.com/photos/48913243@N00/4605448536/
* Carrier Pigeon | Flickr - Photo Sharing!
http://www.flickr.com/photos/enzymedesign/4983070657/
* Arrows showing up (Blender) | Flickr - Photo Sharing!
http://www.flickr.com/photos/61423903@N06/7382239368/
* Handshakes | Flickr - Photo Sharing!
http://www.flickr.com/photos/ndanger/4425413794/
* STM32 Development Board | Flickr - Photo Sharing!
http://www.flickr.com/photos/randomskk/3920434183/
* Hiking | Flickr - Photo Sharing!
http://www.flickr.com/photos/aigle_dore/5824862885/
本スライドで使用した画像 #3本スライドで使用した画像 #3本スライドで使用した画像 #3本スライドで使用した画像 #3本スライドで使用した画像 #3
* Next Kyoto 懐石 | Flickr - Photo Sharing!
http://www.flickr.com/photos/edsel_/8330803003/
* Portal 2 fly | Flickr - Photo Sharing!
http://www.flickr.com/photos/warvan/4984607550/
* Sticker Nation - 8 | Flickr - Photo Sharing!
http://www.flickr.com/photos/oskay/411003747/
* I love flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/theresasthompson/3279837886/
* flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/zanastardust/145197704/
* flickr was here | Flickr - Photo Sharing!
http://www.flickr.com/photos/sarahrosenau/185196442/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931381358/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931247866/
* Next Kyoto 懐石 | Flickr - Photo Sharing!
http://www.flickr.com/photos/edsel_/8330803003/
* Portal 2 fly | Flickr - Photo Sharing!
http://www.flickr.com/photos/warvan/4984607550/
* Sticker Nation - 8 | Flickr - Photo Sharing!
http://www.flickr.com/photos/oskay/411003747/
* I love flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/theresasthompson/3279837886/
* flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/zanastardust/145197704/
* flickr was here | Flickr - Photo Sharing!
http://www.flickr.com/photos/sarahrosenau/185196442/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931381358/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931247866/
* Next Kyoto 懐石 | Flickr - Photo Sharing!
http://www.flickr.com/photos/edsel_/8330803003/
* Portal 2 fly | Flickr - Photo Sharing!
http://www.flickr.com/photos/warvan/4984607550/
* Sticker Nation - 8 | Flickr - Photo Sharing!
http://www.flickr.com/photos/oskay/411003747/
* I love flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/theresasthompson/3279837886/
* flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/zanastardust/145197704/
* flickr was here | Flickr - Photo Sharing!
http://www.flickr.com/photos/sarahrosenau/185196442/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931381358/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931247866/
* Next Kyoto 懐石 | Flickr - Photo Sharing!
http://www.flickr.com/photos/edsel_/8330803003/
* Portal 2 fly | Flickr - Photo Sharing!
http://www.flickr.com/photos/warvan/4984607550/
* Sticker Nation - 8 | Flickr - Photo Sharing!
http://www.flickr.com/photos/oskay/411003747/
* I love flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/theresasthompson/3279837886/
* flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/zanastardust/145197704/
* flickr was here | Flickr - Photo Sharing!
http://www.flickr.com/photos/sarahrosenau/185196442/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931381358/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931247866/
* Next Kyoto 懐石 | Flickr - Photo Sharing!
http://www.flickr.com/photos/edsel_/8330803003/
* Portal 2 fly | Flickr - Photo Sharing!
http://www.flickr.com/photos/warvan/4984607550/
* Sticker Nation - 8 | Flickr - Photo Sharing!
http://www.flickr.com/photos/oskay/411003747/
* I love flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/theresasthompson/3279837886/
* flickr | Flickr - Photo Sharing!
http://www.flickr.com/photos/zanastardust/145197704/
* flickr was here | Flickr - Photo Sharing!
http://www.flickr.com/photos/sarahrosenau/185196442/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931381358/
* Hooded Cuttlefish | Flickr - Photo Sharing!
http://www.flickr.com/photos/silkebaron/931247866/

Weitere ähnliche Inhalte

Ähnlich wie 組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編

組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編Kiwamu Okabe
 
Ajhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ましたKiwamu Okabe
 
不惑の生存戦略
不惑の生存戦略不惑の生存戦略
不惑の生存戦略Hiromu Shioya
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像Kiwamu Okabe
 
mbed+Haskellどうでしょう
mbed+Haskellどうでしょうmbed+Haskellどうでしょう
mbed+HaskellどうでしょうKiwamu Okabe
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングKiwamu Okabe
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~Akihiro Kuwano
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
組込Haskellとλカ娘本の紹介
組込Haskellとλカ娘本の紹介組込Haskellとλカ娘本の紹介
組込Haskellとλカ娘本の紹介Kiwamu Okabe
 
【concrete5】CMS夏祭り2015@mttokyo
【concrete5】CMS夏祭り2015@mttokyo【concrete5】CMS夏祭り2015@mttokyo
【concrete5】CMS夏祭り2015@mttokyoShinji Sakai
 
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalkTaisuke Oe
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみたYoshiki Shibukawa
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri NanapiShuichi Wada
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューションSatoshi KOBAYASHI
 
簡単便利!Laravel Homestead
簡単便利!Laravel Homestead簡単便利!Laravel Homestead
簡単便利!Laravel HomesteadShota Inoue
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSLurasandesu
 

Ähnlich wie 組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編 (20)

組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
組込向けHaskellコンパイラAjhc / mbedマイコンどうでしょう編
 
Ajhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ましたAjhcコンパイラの押売りに来ました
Ajhcコンパイラの押売りに来ました
 
不惑の生存戦略
不惑の生存戦略不惑の生存戦略
不惑の生存戦略
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
mbed+Haskellどうでしょう
mbed+Haskellどうでしょうmbed+Haskellどうでしょう
mbed+Haskellどうでしょう
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミング
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
組込Haskellとλカ娘本の紹介
組込Haskellとλカ娘本の紹介組込Haskellとλカ娘本の紹介
組込Haskellとλカ娘本の紹介
 
【concrete5】CMS夏祭り2015@mttokyo
【concrete5】CMS夏祭り2015@mttokyo【concrete5】CMS夏祭り2015@mttokyo
【concrete5】CMS夏祭り2015@mttokyo
 
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalk
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri Nanapi
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
 
簡単便利!Laravel Homestead
簡単便利!Laravel Homestead簡単便利!Laravel Homestead
簡単便利!Laravel Homestead
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSL
 

Kürzlich hochgeladen

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Kürzlich hochgeladen (10)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編

  • 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 ☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました ☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで
  • 3. おしながきおしながきおしながきおしながきおしながき ☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは☆ [1] Ajhcコンパイラとは ☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは☆ [2] Metasepi kernelとは ☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは☆ [3] OS開発向けコンパイラとは ☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方☆ [4] Ajhcのインストールと使い方 ☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ☆ [5] AjhcコンパイラでPOSIXの外へ ☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ☆ [6] これまでのAjhcコンパイラ ☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来☆ [7] Ajhcコンパイラの未来
  • 4. [1] Ajhcコンパイラとは[1] Ajhcコンパイラとは[1] Ajhcコンパイラとは[1] Ajhcコンパイラとは[1] 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 ☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler☆ jhc := John's Haskell Compiler ☆ 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はフットプリントが小さく、 ☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい☆ 高速な実行バイナリを吐くらしい ☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも☆ 組み込みに向いてるかも
  • 5. どうしてAjhcコンパイラ作るの?どうしてAjhcコンパイラ作るの?どうしてAjhcコンパイラ作るの?どうしてAjhcコンパイラ作るの?どうしてAjhcコンパイラ作るの? ☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト☆ HaskellコミュニティではGHCがデファクト ☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler☆ GHC := Glasgow Haskell Compiler ☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/☆ http://www.haskell.org/ghc/ ☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要?☆ なぜ別のHaskellコンパイラが必要? ☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため☆ Metasepiというkernelを作るため
  • 6. [2] Metasepi kernelとは[2] Metasepi kernelとは[2] Metasepi kernelとは[2] Metasepi kernelとは[2] 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を強い型によって設計 ☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う☆ ML同等以上に強い型を持つ言語を使う Haskell http://www.haskell.org/Haskell http://www.haskell.org/Haskell http://www.haskell.org/Haskell http://www.haskell.org/Haskell http://www.haskell.org/ OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/OCaml http://caml.inria.fr/ MLton http://mlton.org/MLton http://mlton.org/MLton http://mlton.org/MLton http://mlton.org/MLton http://mlton.org/ などなどなどなどなどなどなどなどなどなど
  • 7. どうしてMetasepiが必要?どうしてMetasepiが必要?どうしてMetasepiが必要?どうしてMetasepiが必要?どうしてMetasepiが必要? ☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは?☆ LinuxやWindowsが既にあるのでは? ☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる☆ しかし組込開発は苦しんでいる ☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用☆ kernelをカスタマイズして使用 ☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー☆ kernelのランタイムエラー ☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難☆ 再現することでさえ困難
  • 8. 既存OSSの品質は高いのでは?既存OSSの品質は高いのでは?既存OSSの品質は高いのでは?既存OSSの品質は高いのでは?既存OSSの品質は高いのでは? ☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている☆ OSSは品質が高いと言われている ☆ 伽藍とバザール☆ 伽藍とバザール☆ 伽藍とバザール☆ 伽藍とバザール☆ 伽藍とバザール ☆ 「目玉の数さえ十分あれば、どんなバグも深 刻ではない」 ☆ 「目玉の数さえ十分あれば、どんなバグも深 刻ではない」 ☆ 「目玉の数さえ十分あれば、どんなバグも深 刻ではない」 ☆ 「目玉の数さえ十分あれば、どんなバグも深 刻ではない」 ☆ 「目玉の数さえ十分あれば、どんなバグも深 刻ではない」 http://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.htmlhttp://cruel.org/freeware/cathedral.html ☆ ところが社内開発は...☆ ところが社内開発は...☆ ところが社内開発は...☆ ところが社内開発は...☆ ところが社内開発は...
  • 10. 型安全とは型安全とは型安全とは型安全とは型安全とは ☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる☆ ランタイムエラーを少なくできる ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ☆ 参考:数理科学的バグ撲滅方法論のすすめ 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/
  • 11. 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言語は安全なのか?
  • 12. [3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは[3] OS開発向けコンパイラとは ☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは?☆ 強い型が使えてOSを作れるコンパイラは? ☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要☆ C言語のような使い勝手が必要 ☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう!☆ ないみたいなので作りましょう! ☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ☆ スクラッチから作るのはツライ ☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?☆ 要求に近いコンパイラはないかな?
  • 14. jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個jhcバイナリは未定義シンボル20個 $ nm hs.out | grep "U " U _IO_putc@@GLIBC_2.2.5 U __libc_start_main@@GLIBC_2.2.5 U _setjmp@@GLIBC_2.2.5 U abort@@GLIBC_2.2.5 U ctime@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U fflush@@GLIBC_2.2.5 U fprintf@@GLIBC_2.2.5 U fputc@@GLIBC_2.2.5 U fputs@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U fwrite@@GLIBC_2.2.5 U getenv@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 U setlocale@@GLIBC_2.2.5 U sysconf@@GLIBC_2.2.5 U times@@GLIBC_2.2.5 $ nm hs.out | grep "U " U _IO_putc@@GLIBC_2.2.5 U __libc_start_main@@GLIBC_2.2.5 U _setjmp@@GLIBC_2.2.5 U abort@@GLIBC_2.2.5 U ctime@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U fflush@@GLIBC_2.2.5 U fprintf@@GLIBC_2.2.5 U fputc@@GLIBC_2.2.5 U fputs@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U fwrite@@GLIBC_2.2.5 U getenv@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 U setlocale@@GLIBC_2.2.5 U sysconf@@GLIBC_2.2.5 U times@@GLIBC_2.2.5 $ nm hs.out | grep "U " U _IO_putc@@GLIBC_2.2.5 U __libc_start_main@@GLIBC_2.2.5 U _setjmp@@GLIBC_2.2.5 U abort@@GLIBC_2.2.5 U ctime@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U fflush@@GLIBC_2.2.5 U fprintf@@GLIBC_2.2.5 U fputc@@GLIBC_2.2.5 U fputs@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U fwrite@@GLIBC_2.2.5 U getenv@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 U setlocale@@GLIBC_2.2.5 U sysconf@@GLIBC_2.2.5 U times@@GLIBC_2.2.5 $ nm hs.out | grep "U " U _IO_putc@@GLIBC_2.2.5 U __libc_start_main@@GLIBC_2.2.5 U _setjmp@@GLIBC_2.2.5 U abort@@GLIBC_2.2.5 U ctime@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U fflush@@GLIBC_2.2.5 U fprintf@@GLIBC_2.2.5 U fputc@@GLIBC_2.2.5 U fputs@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U fwrite@@GLIBC_2.2.5 U getenv@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 U setlocale@@GLIBC_2.2.5 U sysconf@@GLIBC_2.2.5 U times@@GLIBC_2.2.5 $ nm hs.out | grep "U " U _IO_putc@@GLIBC_2.2.5 U __libc_start_main@@GLIBC_2.2.5 U _setjmp@@GLIBC_2.2.5 U abort@@GLIBC_2.2.5 U ctime@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U fflush@@GLIBC_2.2.5 U fprintf@@GLIBC_2.2.5 U fputc@@GLIBC_2.2.5 U fputs@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U fwrite@@GLIBC_2.2.5 U getenv@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 U setlocale@@GLIBC_2.2.5 U sysconf@@GLIBC_2.2.5 U times@@GLIBC_2.2.5
  • 18. [4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方[4] Ajhcのインストールと使い方 ☆ インストールしてみましょう☆ インストールしてみましょう☆ インストールしてみましょう☆ インストールしてみましょう☆ インストールしてみましょう Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合Ubuntu 12.04 amd64 の場合 $ sudo apt-get install haskell-platform libncurses5-dev libwww- perl gcc m4 $ cabal update $ cabal install ajhc $ export PATH=$HOME/.cabal/bin/:$PATH $ which ajhc /home/ユーザ名/.cabal/bin/ajhc $ ajhc --version ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44) compiled by ghc-7.4 on a x86_64 running linux $ sudo apt-get install haskell-platform libncurses5-dev libwww- perl gcc m4 $ cabal update $ cabal install ajhc $ export PATH=$HOME/.cabal/bin/:$PATH $ which ajhc /home/ユーザ名/.cabal/bin/ajhc $ ajhc --version ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44) compiled by ghc-7.4 on a x86_64 running linux $ sudo apt-get install haskell-platform libncurses5-dev libwww- perl gcc m4 $ cabal update $ cabal install ajhc $ export PATH=$HOME/.cabal/bin/:$PATH $ which ajhc /home/ユーザ名/.cabal/bin/ajhc $ ajhc --version ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44) compiled by ghc-7.4 on a x86_64 running linux $ sudo apt-get install haskell-platform libncurses5-dev libwww- perl gcc m4 $ cabal update $ cabal install ajhc $ export PATH=$HOME/.cabal/bin/:$PATH $ which ajhc /home/ユーザ名/.cabal/bin/ajhc $ ajhc --version ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44) compiled by ghc-7.4 on a x86_64 running linux $ sudo apt-get install haskell-platform libncurses5-dev libwww- perl gcc m4 $ cabal update $ cabal install ajhc $ export PATH=$HOME/.cabal/bin/:$PATH $ which ajhc /home/ユーザ名/.cabal/bin/ajhc $ ajhc --version ajhc 0.8.0.8 (f6c3f4b070acad8a5012682810f0f4d7b7b9ed44) compiled by ghc-7.4 on a x86_64 running linux あっさりですね!あっさりですね!あっさりですね!あっさりですね!あっさりですね!
  • 19. 簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう簡単なプログラムを作ってみましょう $ vi MyDiff.hs$ vi MyDiff.hs$ vi MyDiff.hs$ vi MyDiff.hs$ vi MyDiff.hs import System.Environment import Data.Algorithm.Diff main :: IO () main = do [s1, s2] <- getArgs c1 <- readFile s1 c2 <- readFile s2 print . filter f $ getDiff c1 c2 where f (Both _ _) = False f _ = True import System.Environment import Data.Algorithm.Diff main :: IO () main = do [s1, s2] <- getArgs c1 <- readFile s1 c2 <- readFile s2 print . filter f $ getDiff c1 c2 where f (Both _ _) = False f _ = True import System.Environment import Data.Algorithm.Diff main :: IO () main = do [s1, s2] <- getArgs c1 <- readFile s1 c2 <- readFile s2 print . filter f $ getDiff c1 c2 where f (Both _ _) = False f _ = True import System.Environment import Data.Algorithm.Diff main :: IO () main = do [s1, s2] <- getArgs c1 <- readFile s1 c2 <- readFile s2 print . filter f $ getDiff c1 c2 where f (Both _ _) = False f _ = True import System.Environment import Data.Algorithm.Diff main :: IO () main = do [s1, s2] <- getArgs c1 <- readFile s1 c2 <- readFile s2 print . filter f $ getDiff c1 c2 where f (Both _ _) = False f _ = True $ ajhc -p Diff -o mydiff MyDiff.hs $ echo "hoge" > s1.txt $ echo "hofe0" > s2.txt $ ./mydiff s1.txt s2.txt [Second 'f',First 'g',Second '0'] $ ajhc -p Diff -o mydiff MyDiff.hs $ echo "hoge" > s1.txt $ echo "hofe0" > s2.txt $ ./mydiff s1.txt s2.txt [Second 'f',First 'g',Second '0'] $ ajhc -p Diff -o mydiff MyDiff.hs $ echo "hoge" > s1.txt $ echo "hofe0" > s2.txt $ ./mydiff s1.txt s2.txt [Second 'f',First 'g',Second '0'] $ ajhc -p Diff -o mydiff MyDiff.hs $ echo "hoge" > s1.txt $ echo "hofe0" > s2.txt $ ./mydiff s1.txt s2.txt [Second 'f',First 'g',Second '0'] $ ajhc -p Diff -o mydiff MyDiff.hs $ echo "hoge" > s1.txt $ echo "hofe0" > s2.txt $ ./mydiff s1.txt s2.txt [Second 'f',First 'g',Second '0']
  • 21. [5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ[5] AjhcコンパイラでPOSIXの外へ ☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう☆ 「何もしないプログラム」を作りましょう $ vi Small.hs$ vi Small.hs$ vi Small.hs$ vi Small.hs$ vi Small.hs main :: IO () main = return () main :: IO () main = return () main :: IO () main = return () main :: IO () main = return () main :: IO () main = return () $ ajhc -o small Small.hs $ ./small $ ajhc -o small Small.hs $ ./small $ ajhc -o small Small.hs $ ./small $ ajhc -o small Small.hs $ ./small $ ajhc -o small Small.hs $ ./small ☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう☆ ではPOSIX依存を少なくしてみましょう ☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です☆ 現状では未定義シンボルは19個です $ nm small | grep -c "U " 19 $ nm small | grep -c "U " 19 $ nm small | grep -c "U " 19 $ nm small | grep -c "U " 19 $ nm small | grep -c "U " 19
  • 23. GCCコンパイルオプションを調べるGCCコンパイルオプションを調べるGCCコンパイルオプションを調べるGCCコンパイルオプションを調べるGCCコンパイルオプションを調べる $ ajhc --tdir rtsdir Small.hs $ ls Small.hs hs.out* rtsdir/ $ head -1 rtsdir/main_code.c char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/ rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/ lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/ conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'"; $ ajhc --tdir rtsdir Small.hs $ ls Small.hs hs.out* rtsdir/ $ head -1 rtsdir/main_code.c char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/ rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/ lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/ conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'"; $ ajhc --tdir rtsdir Small.hs $ ls Small.hs hs.out* rtsdir/ $ head -1 rtsdir/main_code.c char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/ rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/ lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/ conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'"; $ ajhc --tdir rtsdir Small.hs $ ls Small.hs hs.out* rtsdir/ $ head -1 rtsdir/main_code.c char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/ rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/ lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/ conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'"; $ ajhc --tdir rtsdir Small.hs $ ls Small.hs hs.out* rtsdir/ $ head -1 rtsdir/main_code.c char jhc_c_compile[] = "gcc rtsdir/rts/profile.c rtsdir/rts/ rts_support.c rtsdir/rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/ lib_cbits.c rtsdir/rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/ conc.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE'"; jhc_c_compile文字列からGCCのコンパイル オプションがわかる jhc_c_compile文字列からGCCのコンパイル オプションがわかる jhc_c_compile文字列からGCCのコンパイル オプションがわかる jhc_c_compile文字列からGCCのコンパイル オプションがわかる jhc_c_compile文字列からGCCのコンパイル オプションがわかる
  • 25. Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細)Makefileを使ってコンパイル(詳細) $ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile small: rtsdir/main_code.c gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/ rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/ cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '- falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused- parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small rtsdir/main_code.c: Small.hs ajhc --tdir rtsdir -C Small.hs clean: rm -rf rtsdir small *~ small: rtsdir/main_code.c gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/ rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/ cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '- falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused- parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small rtsdir/main_code.c: Small.hs ajhc --tdir rtsdir -C Small.hs clean: rm -rf rtsdir small *~ small: rtsdir/main_code.c gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/ rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/ cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '- falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused- parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small rtsdir/main_code.c: Small.hs ajhc --tdir rtsdir -C Small.hs clean: rm -rf rtsdir small *~ small: rtsdir/main_code.c gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/ rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/ cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '- falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused- parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small rtsdir/main_code.c: Small.hs ajhc --tdir rtsdir -C Small.hs clean: rm -rf rtsdir small *~ small: rtsdir/main_code.c gcc rtsdir/rts/profile.c rtsdir/rts/rts_support.c rtsdir/ rts/gc_none.c rtsdir/rts/jhc_rts.c rtsdir/lib/lib_cbits.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c -Irtsdir/ cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' -D_GNU_SOURCE '- falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused- parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small rtsdir/main_code.c: Small.hs ajhc --tdir rtsdir -C Small.hs clean: rm -rf rtsdir small *~ $ make $ nm small | grep -c "U " 19 # <= 依存度は変化なし $ make $ nm small | grep -c "U " 19 # <= 依存度は変化なし $ make $ nm small | grep -c "U " 19 # <= 依存度は変化なし $ make $ nm small | grep -c "U " 19 # <= 依存度は変化なし $ make $ nm small | grep -c "U " 19 # <= 依存度は変化なし
  • 27. ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細)ランタイムのソースを限定(詳細) $ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile$ vi Makefile small: rtsdir/main_code.c dummy.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c - Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small # --snip-- small: rtsdir/main_code.c dummy.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c - Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small # --snip-- small: rtsdir/main_code.c dummy.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c - Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small # --snip-- small: rtsdir/main_code.c dummy.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c - Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small # --snip-- small: rtsdir/main_code.c dummy.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c - Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' -o small # --snip-- $ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c #include "jhc_rts_header.h" void jhc_print_profile(void) {} #include "jhc_rts_header.h" void jhc_print_profile(void) {} #include "jhc_rts_header.h" void jhc_print_profile(void) {} #include "jhc_rts_header.h" void jhc_print_profile(void) {} #include "jhc_rts_header.h" void jhc_print_profile(void) {} $ make $ nm small | grep -c "U " 15 # <= 依存度が4減少 $ make $ nm small | grep -c "U " 15 # <= 依存度が4減少 $ make $ nm small | grep -c "U " 15 # <= 依存度が4減少 $ make $ nm small | grep -c "U " 15 # <= 依存度が4減少 $ make $ nm small | grep -c "U " 15 # <= 依存度が4減少
  • 29. ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細)ダミー関数をさらに投入(詳細) $ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c$ vi dummy.c #include "jhc_rts_header.h" void abort() {for (;;);} char *setlocale(int category, const char *locale) {return NULL;} int fputc(int c, FILE *stream) {return 0;} int fputs(const char *s, FILE *stream) {return 0;} int fprintf(FILE *stream, const char *format, ...) {return 0;} int fflush(FILE* stream) {return 0;} size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {return 0;} void jhc_print_profile(void) {} #include "jhc_rts_header.h" void abort() {for (;;);} char *setlocale(int category, const char *locale) {return NULL;} int fputc(int c, FILE *stream) {return 0;} int fputs(const char *s, FILE *stream) {return 0;} int fprintf(FILE *stream, const char *format, ...) {return 0;} int fflush(FILE* stream) {return 0;} size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {return 0;} void jhc_print_profile(void) {} #include "jhc_rts_header.h" void abort() {for (;;);} char *setlocale(int category, const char *locale) {return NULL;} int fputc(int c, FILE *stream) {return 0;} int fputs(const char *s, FILE *stream) {return 0;} int fprintf(FILE *stream, const char *format, ...) {return 0;} int fflush(FILE* stream) {return 0;} size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {return 0;} void jhc_print_profile(void) {} #include "jhc_rts_header.h" void abort() {for (;;);} char *setlocale(int category, const char *locale) {return NULL;} int fputc(int c, FILE *stream) {return 0;} int fputs(const char *s, FILE *stream) {return 0;} int fprintf(FILE *stream, const char *format, ...) {return 0;} int fflush(FILE* stream) {return 0;} size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {return 0;} void jhc_print_profile(void) {} #include "jhc_rts_header.h" void abort() {for (;;);} char *setlocale(int category, const char *locale) {return NULL;} int fputc(int c, FILE *stream) {return 0;} int fputs(const char *s, FILE *stream) {return 0;} int fprintf(FILE *stream, const char *format, ...) {return 0;} int fflush(FILE* stream) {return 0;} size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {return 0;} void jhc_print_profile(void) {} $ make $ nm small | grep -c "U " 8 # <= 依存度が7減少 $ make $ nm small | grep -c "U " 8 # <= 依存度が7減少 $ make $ nm small | grep -c "U " 8 # <= 依存度が7減少 $ make $ nm small | grep -c "U " 8 # <= 依存度が7減少 $ make $ nm small | grep -c "U " 8 # <= 依存度が7減少
  • 31. 例外を無視する(詳細)例外を無視する(詳細)例外を無視する(詳細)例外を無視する(詳細)例外を無視する(詳細) $ vi Makefile small: rtsdir/main_code.c dummy.c main.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '- D_JHC_STANDALONE=0' -o small $ vi main.c #include "jhc_rts_header.h" int main(int argc, char *argv[]) { hs_init(&argc,&argv); _amain(); hs_exit(); return 0; } $ nm small | grep -c "U " 7 # <= 依存度が1減少 $ vi Makefile small: rtsdir/main_code.c dummy.c main.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '- D_JHC_STANDALONE=0' -o small $ vi main.c #include "jhc_rts_header.h" int main(int argc, char *argv[]) { hs_init(&argc,&argv); _amain(); hs_exit(); return 0; } $ nm small | grep -c "U " 7 # <= 依存度が1減少 $ vi Makefile small: rtsdir/main_code.c dummy.c main.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '- D_JHC_STANDALONE=0' -o small $ vi main.c #include "jhc_rts_header.h" int main(int argc, char *argv[]) { hs_init(&argc,&argv); _amain(); hs_exit(); return 0; } $ nm small | grep -c "U " 7 # <= 依存度が1減少 $ vi Makefile small: rtsdir/main_code.c dummy.c main.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '- D_JHC_STANDALONE=0' -o small $ vi main.c #include "jhc_rts_header.h" int main(int argc, char *argv[]) { hs_init(&argc,&argv); _amain(); hs_exit(); return 0; } $ nm small | grep -c "U " 7 # <= 依存度が1減少 $ vi Makefile small: rtsdir/main_code.c dummy.c main.c gcc rtsdir/rts/rts_support.c rtsdir/rts/jhc_rts.c rtsdir/ rts/gc_jgc.c rtsdir/rts/stableptr.c rtsdir/rts/conc.c dummy.c main.c -Irtsdir/cbits -Irtsdir rtsdir/main_code.c '-std=gnu99' - D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno- unused-parameter -fno-strict-aliasing -DNDEBUG -O3 '- D_JHC_GC=_JHC_GC_JGC' '-D_JHC_CONC=_JHC_CONC_NONE' '- D_JHC_STANDALONE=0' -o small $ vi main.c #include "jhc_rts_header.h" int main(int argc, char *argv[]) { hs_init(&argc,&argv); _amain(); hs_exit(); return 0; } $ nm small | grep -c "U " 7 # <= 依存度が1減少
  • 32. 残ったPOSIX依存は何?残ったPOSIX依存は何?残ったPOSIX依存は何?残ったPOSIX依存は何?残ったPOSIX依存は何? $ nm small | grep "U " U __libc_start_main@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 $ nm small | grep "U " U __libc_start_main@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 $ nm small | grep "U " U __libc_start_main@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 $ nm small | grep "U " U __libc_start_main@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 $ nm small | grep "U " U __libc_start_main@@GLIBC_2.2.5 U exit@@GLIBC_2.2.5 U free@@GLIBC_2.2.5 U malloc@@GLIBC_2.2.5 U memset@@GLIBC_2.2.5 U posix_memalign@@GLIBC_2.2.5 U realloc@@GLIBC_2.2.5 ☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要☆ mallocなどのメモリ管理だけが実行に必要 ☆ mallocのない環境ではNetBSD alloc.cを 流用するのがおすすめ ☆ mallocのない環境ではNetBSD alloc.cを 流用するのがおすすめ ☆ mallocのない環境ではNetBSD alloc.cを 流用するのがおすすめ ☆ mallocのない環境ではNetBSD alloc.cを 流用するのがおすすめ ☆ mallocのない環境ではNetBSD alloc.cを 流用するのがおすすめ
  • 33. これでプログラミングできるの?これでプログラミングできるの?これでプログラミングできるの?これでプログラミングできるの?これでプログラミングできるの? 以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます以下2つのしくみを使ってC言語側を触れます ☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI)☆ Foreign Function Interface (FFI) ☆ Foreign.Storableクラス☆ Foreign.Storableクラス☆ Foreign.Storableクラス☆ Foreign.Storableクラス☆ Foreign.Storableクラス
  • 36. [6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ[6] これまでのAjhcコンパイラ ☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳☆ ユーザーズマニュアルの翻訳 http://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.htmlhttp://ajhc.metasepi.org/manual_ja.html ☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植☆ Cortex-M4マイコンへの移植 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 ☆ cabalによるインストール☆ cabalによるインストール☆ cabalによるインストール☆ cabalによるインストール☆ cabalによるインストール ☆ 省メモリGC☆ 省メモリGC☆ 省メモリGC☆ 省メモリGC☆ 省メモリGC ☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現☆ 再入可能とスレッドの実現
  • 37. [7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来[7] Ajhcコンパイラの未来 ☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中☆ 内部仕様ドキュメント作成中 https://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guidehttps://github.com/ajhc/ajhc-hacking-guide ☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有☆ 型によるスレッド間状態共有 ☆ GHCのライブラリを移植☆ GHCのライブラリを移植☆ GHCのライブラリを移植☆ GHCのライブラリを移植☆ GHCのライブラリを移植 ☆ さらなる応用例の提案☆ さらなる応用例の提案☆ さらなる応用例の提案☆ さらなる応用例の提案☆ さらなる応用例の提案 ☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計☆ 小さな組み込みOSを型によって再設計 ☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計☆ NetBSD kernelを型によって再設計
  • 38. 宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか?宣伝:λカ娘に記事を書きませんか? ☆ 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/ ☆ 関数型言語の同人誌☆ 関数型言語の同人誌☆ 関数型言語の同人誌☆ 関数型言語の同人誌☆ 関数型言語の同人誌 ☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか☆ HaskellとかOCamlとか圏論とか ☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり?☆ 囲碁AIの記事まで、なんでもあり? ☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました☆ C84にはAjhcの解説記事を投稿しました ☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ☆ Call For Articlesはイカ http://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.html
  • 39. 本スライドで使用した画像 #1本スライドで使用した画像 #1本スライドで使用した画像 #1本スライドで使用した画像 #1本スライドで使用した画像 #1 * sunny side up | Flickr - Photo Sharing! http://www.flickr.com/photos/97335141@N00/4623354472/ * Mud Slide | Flickr - Photo Sharing! http://www.flickr.com/photos/ben_salter/2676953286/ * Feelin' Safe | Flickr - Photo Sharing! http://www.flickr.com/photos/mstyne/3654056683/ * STOP ALL WAY | Flickr - Photo Sharing! http://www.flickr.com/photos/peterkaminski/1510724/ * Bungee jump | Flickr - Photo Sharing! http://www.flickr.com/photos/gj_thewhite/8855033499/ * The C Programming Language | Flickr - Photo Sharing! http://www.flickr.com/photos/mrbill/2482009942/ * The 20 Yard Line | Flickr - Photo Sharing! http://www.flickr.com/photos/eschipul/2957264066/ * _MG_3881 | Flickr - Photo Sharing! http://www.flickr.com/photos/63209717@N05/6873025064/ * Mini Cross | Flickr - Photo Sharing! http://www.flickr.com/photos/hdrexperience/6727601691/ * Goal for the Sky | Flickr - Photo Sharing! http://www.flickr.com/photos/giantsqurl/5165392772/ * Manual and driver disc | Flickr - Photo Sharing! http://www.flickr.com/photos/tseedmund/3859079008/ * sunny side up | Flickr - Photo Sharing! http://www.flickr.com/photos/97335141@N00/4623354472/ * Mud Slide | Flickr - Photo Sharing! http://www.flickr.com/photos/ben_salter/2676953286/ * Feelin' Safe | Flickr - Photo Sharing! http://www.flickr.com/photos/mstyne/3654056683/ * STOP ALL WAY | Flickr - Photo Sharing! http://www.flickr.com/photos/peterkaminski/1510724/ * Bungee jump | Flickr - Photo Sharing! http://www.flickr.com/photos/gj_thewhite/8855033499/ * The C Programming Language | Flickr - Photo Sharing! http://www.flickr.com/photos/mrbill/2482009942/ * The 20 Yard Line | Flickr - Photo Sharing! http://www.flickr.com/photos/eschipul/2957264066/ * _MG_3881 | Flickr - Photo Sharing! http://www.flickr.com/photos/63209717@N05/6873025064/ * Mini Cross | Flickr - Photo Sharing! http://www.flickr.com/photos/hdrexperience/6727601691/ * Goal for the Sky | Flickr - Photo Sharing! http://www.flickr.com/photos/giantsqurl/5165392772/ * Manual and driver disc | Flickr - Photo Sharing! http://www.flickr.com/photos/tseedmund/3859079008/ * sunny side up | Flickr - Photo Sharing! http://www.flickr.com/photos/97335141@N00/4623354472/ * Mud Slide | Flickr - Photo Sharing! http://www.flickr.com/photos/ben_salter/2676953286/ * Feelin' Safe | Flickr - Photo Sharing! http://www.flickr.com/photos/mstyne/3654056683/ * STOP ALL WAY | Flickr - Photo Sharing! http://www.flickr.com/photos/peterkaminski/1510724/ * Bungee jump | Flickr - Photo Sharing! http://www.flickr.com/photos/gj_thewhite/8855033499/ * The C Programming Language | Flickr - Photo Sharing! http://www.flickr.com/photos/mrbill/2482009942/ * The 20 Yard Line | Flickr - Photo Sharing! http://www.flickr.com/photos/eschipul/2957264066/ * _MG_3881 | Flickr - Photo Sharing! http://www.flickr.com/photos/63209717@N05/6873025064/ * Mini Cross | Flickr - Photo Sharing! http://www.flickr.com/photos/hdrexperience/6727601691/ * Goal for the Sky | Flickr - Photo Sharing! http://www.flickr.com/photos/giantsqurl/5165392772/ * Manual and driver disc | Flickr - Photo Sharing! http://www.flickr.com/photos/tseedmund/3859079008/ * sunny side up | Flickr - Photo Sharing! http://www.flickr.com/photos/97335141@N00/4623354472/ * Mud Slide | Flickr - Photo Sharing! http://www.flickr.com/photos/ben_salter/2676953286/ * Feelin' Safe | Flickr - Photo Sharing! http://www.flickr.com/photos/mstyne/3654056683/ * STOP ALL WAY | Flickr - Photo Sharing! http://www.flickr.com/photos/peterkaminski/1510724/ * Bungee jump | Flickr - Photo Sharing! http://www.flickr.com/photos/gj_thewhite/8855033499/ * The C Programming Language | Flickr - Photo Sharing! http://www.flickr.com/photos/mrbill/2482009942/ * The 20 Yard Line | Flickr - Photo Sharing! http://www.flickr.com/photos/eschipul/2957264066/ * _MG_3881 | Flickr - Photo Sharing! http://www.flickr.com/photos/63209717@N05/6873025064/ * Mini Cross | Flickr - Photo Sharing! http://www.flickr.com/photos/hdrexperience/6727601691/ * Goal for the Sky | Flickr - Photo Sharing! http://www.flickr.com/photos/giantsqurl/5165392772/ * Manual and driver disc | Flickr - Photo Sharing! http://www.flickr.com/photos/tseedmund/3859079008/ * sunny side up | Flickr - Photo Sharing! http://www.flickr.com/photos/97335141@N00/4623354472/ * Mud Slide | Flickr - Photo Sharing! http://www.flickr.com/photos/ben_salter/2676953286/ * Feelin' Safe | Flickr - Photo Sharing! http://www.flickr.com/photos/mstyne/3654056683/ * STOP ALL WAY | Flickr - Photo Sharing! http://www.flickr.com/photos/peterkaminski/1510724/ * Bungee jump | Flickr - Photo Sharing! http://www.flickr.com/photos/gj_thewhite/8855033499/ * The C Programming Language | Flickr - Photo Sharing! http://www.flickr.com/photos/mrbill/2482009942/ * The 20 Yard Line | Flickr - Photo Sharing! http://www.flickr.com/photos/eschipul/2957264066/ * _MG_3881 | Flickr - Photo Sharing! http://www.flickr.com/photos/63209717@N05/6873025064/ * Mini Cross | Flickr - Photo Sharing! http://www.flickr.com/photos/hdrexperience/6727601691/ * Goal for the Sky | Flickr - Photo Sharing! http://www.flickr.com/photos/giantsqurl/5165392772/ * Manual and driver disc | Flickr - Photo Sharing! http://www.flickr.com/photos/tseedmund/3859079008/
  • 40. 本スライドで使用した画像 #2本スライドで使用した画像 #2本スライドで使用した画像 #2本スライドで使用した画像 #2本スライドで使用した画像 #2 * Simple Heart | Flickr - Photo Sharing! http://www.flickr.com/photos/21148821@N02/2055189101/ * GNU Wallpaper | Flickr - Photo Sharing! http://www.flickr.com/photos/jeffpro/8603895629/ * The core | Flickr - Photo Sharing! http://www.flickr.com/photos/mukluk/484631726/ * Dummies. Someday they'll take over the world. They already have. http://www.flickr.com/photos/keoni101/5244610841/ * Michael Caputo, "just tryin' to break the ice, with nothin'... http://www.flickr.com/photos/sixteen-miles/3757672365/ * Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing! http://www.flickr.com/photos/48913243@N00/4605448536/ * Carrier Pigeon | Flickr - Photo Sharing! http://www.flickr.com/photos/enzymedesign/4983070657/ * Arrows showing up (Blender) | Flickr - Photo Sharing! http://www.flickr.com/photos/61423903@N06/7382239368/ * Handshakes | Flickr - Photo Sharing! http://www.flickr.com/photos/ndanger/4425413794/ * STM32 Development Board | Flickr - Photo Sharing! http://www.flickr.com/photos/randomskk/3920434183/ * Hiking | Flickr - Photo Sharing! http://www.flickr.com/photos/aigle_dore/5824862885/ * Simple Heart | Flickr - Photo Sharing! http://www.flickr.com/photos/21148821@N02/2055189101/ * GNU Wallpaper | Flickr - Photo Sharing! http://www.flickr.com/photos/jeffpro/8603895629/ * The core | Flickr - Photo Sharing! http://www.flickr.com/photos/mukluk/484631726/ * Dummies. Someday they'll take over the world. They already have. http://www.flickr.com/photos/keoni101/5244610841/ * Michael Caputo, "just tryin' to break the ice, with nothin'... http://www.flickr.com/photos/sixteen-miles/3757672365/ * Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing! http://www.flickr.com/photos/48913243@N00/4605448536/ * Carrier Pigeon | Flickr - Photo Sharing! http://www.flickr.com/photos/enzymedesign/4983070657/ * Arrows showing up (Blender) | Flickr - Photo Sharing! http://www.flickr.com/photos/61423903@N06/7382239368/ * Handshakes | Flickr - Photo Sharing! http://www.flickr.com/photos/ndanger/4425413794/ * STM32 Development Board | Flickr - Photo Sharing! http://www.flickr.com/photos/randomskk/3920434183/ * Hiking | Flickr - Photo Sharing! http://www.flickr.com/photos/aigle_dore/5824862885/ * Simple Heart | Flickr - Photo Sharing! http://www.flickr.com/photos/21148821@N02/2055189101/ * GNU Wallpaper | Flickr - Photo Sharing! http://www.flickr.com/photos/jeffpro/8603895629/ * The core | Flickr - Photo Sharing! http://www.flickr.com/photos/mukluk/484631726/ * Dummies. Someday they'll take over the world. They already have. http://www.flickr.com/photos/keoni101/5244610841/ * Michael Caputo, "just tryin' to break the ice, with nothin'... http://www.flickr.com/photos/sixteen-miles/3757672365/ * Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing! http://www.flickr.com/photos/48913243@N00/4605448536/ * Carrier Pigeon | Flickr - Photo Sharing! http://www.flickr.com/photos/enzymedesign/4983070657/ * Arrows showing up (Blender) | Flickr - Photo Sharing! http://www.flickr.com/photos/61423903@N06/7382239368/ * Handshakes | Flickr - Photo Sharing! http://www.flickr.com/photos/ndanger/4425413794/ * STM32 Development Board | Flickr - Photo Sharing! http://www.flickr.com/photos/randomskk/3920434183/ * Hiking | Flickr - Photo Sharing! http://www.flickr.com/photos/aigle_dore/5824862885/ * Simple Heart | Flickr - Photo Sharing! http://www.flickr.com/photos/21148821@N02/2055189101/ * GNU Wallpaper | Flickr - Photo Sharing! http://www.flickr.com/photos/jeffpro/8603895629/ * The core | Flickr - Photo Sharing! http://www.flickr.com/photos/mukluk/484631726/ * Dummies. Someday they'll take over the world. They already have. http://www.flickr.com/photos/keoni101/5244610841/ * Michael Caputo, "just tryin' to break the ice, with nothin'... http://www.flickr.com/photos/sixteen-miles/3757672365/ * Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing! http://www.flickr.com/photos/48913243@N00/4605448536/ * Carrier Pigeon | Flickr - Photo Sharing! http://www.flickr.com/photos/enzymedesign/4983070657/ * Arrows showing up (Blender) | Flickr - Photo Sharing! http://www.flickr.com/photos/61423903@N06/7382239368/ * Handshakes | Flickr - Photo Sharing! http://www.flickr.com/photos/ndanger/4425413794/ * STM32 Development Board | Flickr - Photo Sharing! http://www.flickr.com/photos/randomskk/3920434183/ * Hiking | Flickr - Photo Sharing! http://www.flickr.com/photos/aigle_dore/5824862885/ * Simple Heart | Flickr - Photo Sharing! http://www.flickr.com/photos/21148821@N02/2055189101/ * GNU Wallpaper | Flickr - Photo Sharing! http://www.flickr.com/photos/jeffpro/8603895629/ * The core | Flickr - Photo Sharing! http://www.flickr.com/photos/mukluk/484631726/ * Dummies. Someday they'll take over the world. They already have. http://www.flickr.com/photos/keoni101/5244610841/ * Michael Caputo, "just tryin' to break the ice, with nothin'... http://www.flickr.com/photos/sixteen-miles/3757672365/ * Groundskeeper sweeping, Citi Field | Flickr - Photo Sharing! http://www.flickr.com/photos/48913243@N00/4605448536/ * Carrier Pigeon | Flickr - Photo Sharing! http://www.flickr.com/photos/enzymedesign/4983070657/ * Arrows showing up (Blender) | Flickr - Photo Sharing! http://www.flickr.com/photos/61423903@N06/7382239368/ * Handshakes | Flickr - Photo Sharing! http://www.flickr.com/photos/ndanger/4425413794/ * STM32 Development Board | Flickr - Photo Sharing! http://www.flickr.com/photos/randomskk/3920434183/ * Hiking | Flickr - Photo Sharing! http://www.flickr.com/photos/aigle_dore/5824862885/
  • 41. 本スライドで使用した画像 #3本スライドで使用した画像 #3本スライドで使用した画像 #3本スライドで使用した画像 #3本スライドで使用した画像 #3 * Next Kyoto 懐石 | Flickr - Photo Sharing! http://www.flickr.com/photos/edsel_/8330803003/ * Portal 2 fly | Flickr - Photo Sharing! http://www.flickr.com/photos/warvan/4984607550/ * Sticker Nation - 8 | Flickr - Photo Sharing! http://www.flickr.com/photos/oskay/411003747/ * I love flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/theresasthompson/3279837886/ * flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/zanastardust/145197704/ * flickr was here | Flickr - Photo Sharing! http://www.flickr.com/photos/sarahrosenau/185196442/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931381358/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931247866/ * Next Kyoto 懐石 | Flickr - Photo Sharing! http://www.flickr.com/photos/edsel_/8330803003/ * Portal 2 fly | Flickr - Photo Sharing! http://www.flickr.com/photos/warvan/4984607550/ * Sticker Nation - 8 | Flickr - Photo Sharing! http://www.flickr.com/photos/oskay/411003747/ * I love flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/theresasthompson/3279837886/ * flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/zanastardust/145197704/ * flickr was here | Flickr - Photo Sharing! http://www.flickr.com/photos/sarahrosenau/185196442/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931381358/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931247866/ * Next Kyoto 懐石 | Flickr - Photo Sharing! http://www.flickr.com/photos/edsel_/8330803003/ * Portal 2 fly | Flickr - Photo Sharing! http://www.flickr.com/photos/warvan/4984607550/ * Sticker Nation - 8 | Flickr - Photo Sharing! http://www.flickr.com/photos/oskay/411003747/ * I love flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/theresasthompson/3279837886/ * flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/zanastardust/145197704/ * flickr was here | Flickr - Photo Sharing! http://www.flickr.com/photos/sarahrosenau/185196442/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931381358/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931247866/ * Next Kyoto 懐石 | Flickr - Photo Sharing! http://www.flickr.com/photos/edsel_/8330803003/ * Portal 2 fly | Flickr - Photo Sharing! http://www.flickr.com/photos/warvan/4984607550/ * Sticker Nation - 8 | Flickr - Photo Sharing! http://www.flickr.com/photos/oskay/411003747/ * I love flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/theresasthompson/3279837886/ * flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/zanastardust/145197704/ * flickr was here | Flickr - Photo Sharing! http://www.flickr.com/photos/sarahrosenau/185196442/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931381358/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931247866/ * Next Kyoto 懐石 | Flickr - Photo Sharing! http://www.flickr.com/photos/edsel_/8330803003/ * Portal 2 fly | Flickr - Photo Sharing! http://www.flickr.com/photos/warvan/4984607550/ * Sticker Nation - 8 | Flickr - Photo Sharing! http://www.flickr.com/photos/oskay/411003747/ * I love flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/theresasthompson/3279837886/ * flickr | Flickr - Photo Sharing! http://www.flickr.com/photos/zanastardust/145197704/ * flickr was here | Flickr - Photo Sharing! http://www.flickr.com/photos/sarahrosenau/185196442/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931381358/ * Hooded Cuttlefish | Flickr - Photo Sharing! http://www.flickr.com/photos/silkebaron/931247866/