Convert String into Int in Haskell
There is well-known function read :: Read a => String -> a. Many blogs tell you to use "read" to convert string to number or something else (if it's a instance of Read class).
There are 3 problems.
- Prelude Exception is told obsolete. use Control.Exception instead.
- "read" produces Prelude.Exception.
- In many case you are not sure you feed good stuff to "read".
In that case, use readMaybe :: Read a => String -> Maybe a. If you are not sure about Maybe, you should learn for your hereafter.
min-caml/SPARC
今はmin-camlはx86に対応しているんだけど、もともとはSPARC専用コンパイラだった。 そういうわけで今回はmin-camlが吐いたコードを適当にSPARCの上で走らせます。
はじめに
DigilentのAtlysが都合により手元にあったからこれを使いますけど、別にXilinxが好きなわけではなし。
とにかく以下を見よ
- Leon3 srccodeなど
- BCC manual ここで言うBCCはアノBCCではなく、Bare-C Cross-compilerなのだということです。
hardware setup
- install Xilinx ISE or something like so
$ export XILINX=/opt/Xilinx/14.4/ISE_DS/ISE
$ source $XILINX/../settingsXX.Xsh
- enter the directory named designs/leon3-${vendor}-${board}
- see, talk, and obey
make
's output
とにかくRTEのここでも読みなさい。
software setup
BCC manualを読みなさい。
build min-caml
$ git clone git@github.com:esumii/min-caml.git $ cd min-caml $ ./to_sparc $ make
ここで、makeが失敗しちゃいます。これは、SPARCでのself-hostingを前提に走るからです。しかし、min-camlコンパイラ自体は完成していることでしょう。 以下、ただのハックです。きちんとやった人は私に教えること(任意同行です)。
min-caml as cross-compiler
$ mkdir test/cross-test $ ../../min-caml ../fib # - ☆ $ cp ../../libmincaml.S . $ cp ../../stub.c . $ sparc-elf-gcc libmincaml.S stub.c fib.s -lm
☆で、fib.sが生成されることを確認すること。これが一番あなたがよみたかったものですよ。 これで生成されたバイナリはgrmonから食わせて走らせることができます。
こんなかんじ:
sp = 0x47f0bd28, hp = 0x40012690 832040
たねあかし
float.cで依存している、caml_copy_int32のシンボルが見つからないので、/usr/lib/ocamlを食わせたりしても、とうぜんundefined-refernceとなりますから、今回は整数を相手にしました。 OCamlをSPARC向けにコンパイルしてパチってくればよろしいはずだが、意外と面倒くさそうだからやりません。 やったら教えてください。
レスコー
なんかさあ、つらいことかんがえちゃったり、それを考えたくなくて昼ねてたら昼寝るくせがついちゃって、そのせいなのか夜眠れなかったり、いろいろあるよね。
こうやってずっとなにか胸が疼いたり、ずっとなにかちょっとここには書きたくないようなことを考えちゃって落ち着かなくなったり、それを表に出さないようにしてたりして、それでもこういう話になるとたまに激しちゃったりして、なんかさあ、もうこれが普通だって思ってて最近まで忘れてたんだけど、ちょっと健康!ってかんじじゃないんだなぁ。
お医者さんは、夜しっかり眠れば昼も起きてられて、ゆきだるま式によくなるっていってたけど、お医者さんの出したデパスはあんまり効いた気がしないし、でも夜ねれないのだけはほんとになんとかしなくちゃって思う。
実はさ、授業にもまともにでれてないんだよね。授業に向かう一歩がさ、幸せに近づいてるのかなってかんがえちゃう。戻りたい。いや、ぜんぜんそうじゃなくて、単に気力がもう他の事のためにいっぱいいっぱいになってるのかも。
よくわかんないけど、でも夜寝るべきなのだけはきっと確かなんだと思う。でもお医者さんのおくすりは、落ち着かないのをちょっと鎮めてくれてるきはするけど、きっとブラセボな気がする。まあ効果があるならなんでもいいんだけど、とにかくおやすみするのに、もっと効くおくすりがあって、友達に教わったんだけど、けっこういいかもしれない。
レスタミンコーワってゆう、アレルギーのおくすりなんだけど、副作用でねむくなるんだよね。 これを適宜いっぱいのむ。成分はドリエルと一緒なんだけど、レスコーのほうが薬価がやすいんだ。
途中でおきちゃったりもするけど、すぐねればまた寝れるし、抜けがわるいのが欠点だけど、まあ、のんでるのんでる。
いまは、耐性ついちゃったらやだなーとか、夜寝れても昼何も考えないためにねちゃうっていうのはまだあんまりなおってないなーとか、そういうことをかんがえて茶色いビンを蛍光灯に透かして眺めたりしてるんだ。
どーしたものかなあ
ブログってさ、もちょっと昔は気張ってカチッと構えちゃって、ヨシッっていって書いてたよね。 でもあんまりそれ以上のことっておぼえてなくて、正直ブログひらいちゃったけどどーしたものか考え物なんだよね。
そいえばさあ、英作文の時間ってみんなあったのかなあ。 うちの学校はさ、同期は帝国大学様とかにはいっていったかんじだし、いちおスカラ ド インテリゲンチアなかんじだったから、ちゃあんとしっかり英作文したんだよねー。あれってさ、なんか構造決まってるじゃん?「英作文!」ってかんじのさ。
でもぼくは頭回ってないくせにいっちょまえにひねくれてたから、オレサマ構造と訣別するのなんかイヤーなかんじだったんだ。結論からかくの、なんか種明かししちゃってるかんじで、「あー、オチつくって読者に『ギョッなるほど、ハハア』とか言わせたかったのになあ」って思ってたの。
だけどね、結論が最後にしかない文章って、実のところどうなんだろう、顰蹙!ってみんな思うのかな? さっきのブログもさ、 !!USE -r Flag to install with pacman into another system!! の一行簡潔な話なんだよね。 んー、それだったらオレサマブログなんていらないなあ。松屋までお散歩してこよう。今日はさむいけど、光がやさしいぞ。
/usr/libとんだ 屋根までとんだ
とんだ風船はつかまえられないし、あたらしくふくらませるしかないか。
クロスコンパイラつくってたら、/usr/lib書き換えちゃって、suさんやらpacmanさんやらを筆頭に、ELF32だからロードできないよんとかいうの。みんなスト。
でもさ、それたしかにELF32だけど、そもそもアーキテクチャIntelじゃないし、きみのよーくしってるELF32じゃないんだよ? それでさ、セルフでなおせないじゃん?pacmanとか静的リンクにしとけばよかったのかしら。 でも嘆いても遅いよね。
そーゆうわけで、寝てた同期をつついてarchlinuxのインストールUSBメモリをロッカーだかどこかから取り出してもらってさ、それでブートしたってわけ。 このディスクさ、EFIブートに対応してるんだけど、これってぼくがつくるの手伝ったやつのよーな気がするなァ。善意は人のためならずってやつだネ。
デネデネ、これで元のファイルシステムをマウントすんじゃん?でー、/usr/libをインストールしなおさないとだけど、pacstrapもなんかパッケージコンフリクトするとかいって止まっちゃうの。ウーン、眠いぞ………
pacstrapってさ、shellscriptなんだよね、でさ、ちらっと眺めてみて、はじめて pacman -rとかいうオプションしったの。いまさらかよって話だよね。
みんなの参考のためにいちお、man pageのアレはっとくね?
-r, --root <path> Specify an alternative installation root (default is /). This should not be used as a way to install software into /usr/local instead of /usr. This option is used if you want to install a package on a temporary mounted partition that is "owned" by another system. NOTE: if database path or logfile are not specified on either the command line or in pacman.conf(5), their default location will be inside this root path.
ってことで、
pacman -r /path/to/main/rootdir -S glibc gcc-libs
とかしてさ、再起動したら治ったよ。ヨカッタヨカッタ
高2病
へんぴな個人ブログに技術記事を書くよりも、適したwikiやらなんやらを改変した方が社会貢献度が高いんじゃないかとか、バイトしてつかれたとか、どーゆーふーに書けばウケるのかとか考えるのにつかれたとか、いろんな高2病を発症してブログを書かなくなって久しい。
しかしまあ、たまには男もすなるというブログをやってみようと深夜テンションでおもいついたので、しばらくあけていた、はてなにログインし、なにやら書いてみようというわけと相成ったのでございます。
さて最初のお題はといきたいけれども、眠いしなんかやる気なくなっちゃったから、ま、こいつが最初のお題ということで、これにて閉幕。