I’m loser, baby.

So why don't you kill me?

ジェダイへの道 まだベッドから出られない

今日はまずは無謀と判りつつMoving Forth: Part 1を読んでみた、って言っても半分くらい寝ながら読んでいた。

これはForthを自分で作ってしまうための文章なので難易度は高いんだけど、取り敢えず、1章の内容は移植するターゲットCPUの話、スレッデッドコード、レジスタの話であることは判った(そんだけかい。)スレッデッドコードについてはウィキペディアの項目では読んでいたけれど、実際それぞれの方式がどう動くかは、英語とはいえ具体的に書いてあるのでイメージしやすかった。

 

その後、全然判ってないC言語の勉強を兼ねてForthを作ってみる2 / 対話環境を作る - moiの頭の中の写経からやるべえ、と思って瞬時に写経したのはいいけれど、折角だから"bye"で終了するようにしようと思ったらいきなり躓く。(すみません、本当にこのレベルなんです。)

文字の比較にstring.hが必要なことはすぐに判ったんだけれども、「bye」と打ち込んでも終わらないんで、書き捨ての文字列比較のプログラムを色々書いて悩んでいたんですが、とあるHPに「C言語には文字列というものは無い」という一節があるのを読んでようやく理解した。

あー、ならポインタ重要だよね、とか、だからlispにはeq、eql、equal、equalpがあるのか、とか。いや、確かに色々見てきたHPとかに文字列の説明とか配列の説明とかはあったはずなのだけれど、判ってなかったというか、なんかさらっと流されてしまっていた(流していたとも言うが)ので理解に至ってないのだった。こんなんだから、なんともはやなんですが、ただ失敗から学びまくりというか学ばないことがありえない状況なので幸せな状況とも言える。

一応、プログラミングは齧っていたんだけど、スクリプト言語で何かする、ということとハードウェアを理解した上でプログラムを組むというのには凄い距離があるということはつくづく感じる。しばしばプログラムを書くのには理系的なセンスは必須ではないという言い方をするのを見るけれど、それはそのスクリプト言語に与えられた中で何かをする場合には確かにそうなのだけど、コンピュータを使う、というレベルに行くには、ハードウェアを理解する理系的センスは必須だと思いました。

また、なんで今自分がforthや1チップマイコンに惹かれたり、VMに興味を持っているのかも良く判った。ちゃんとハードウェアを理解したいからなのね。1回斜め読みしただけのこの本を何度も読むべきだということが良く判った。 

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

 

 

その後はもう一度、実際に手を動かしながらgforthのチュートリアルを読み進める。gforthのローカル変数ってとても便利だと思うのだけれど、他の実装では無いんだろうか。(ローカル変数を他の実装で扱えるようなライブラリはgforthに付いてくるけど)

あと配列の説明のところで「初心者は絶対配列を実装しようとするけど、勉強にはなるけどforthじゃ使わんよ(超要約)」とか書いてあって笑った。

でも、チュートリアル母国語であるというのは、取っ付きやすさという意味では絶大ですね。もちろん、英語で書かれた素晴らしくかつ判りやすいチュートリアルはいっぱいありますが、チュートリアルをやるという事はその言語を初めて触るかどうかというような段階なわけだから、上手く行かないのは英語が判ってないのか自分が間違えているのかで悩まなくていいのは時間の節約という点では大きいです。ただ訳が間違ってたりすると最低ですが。

 

という訳で道に出る前に、家から出る前に、まずベットから出てない状況で、ハイハイがやっとでございます。道は長い。