Mais conteúdo relacionado Semelhante a 組込向けHaskellコンパイラAjhc / POSIX依存から脱出しよう編 (20) 組込向け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/
などなどなどなどなどなどなどなどなどなど
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/
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を
流用するのがおすすめ
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/