見出し画像

Retro-gaming and so on

RE: プログラミング学習日記 2022/10/29〜

星田さんの記事に対するコメント。

> 2022/11/06


 動作確認のためにちょっと触ってみました。フォルダ内の何も無いところを右クリックで別メニューが出るとはちょっと意表を突かれましたけど、ブランチ作成と切り替えを体験。えっ!?フォルダの対象ファイルが本当にまるごと変わった(そりゃそうなんですが)。なんか不思議な感じだ・・

面白いでしょ(笑)?
ブランチを切ってファイルを書き換え、そしてブランチ間を移動すると、「修正前のファイル」に戻ってたりする。
それがgitと言う「ヴァージョン管理システム」の強み、です。
是非とも活用して下さい。
ぶっちゃけ、何か勉強する際にも、色々と「修正前」のファイルを録っておけるんで、ラクです。

> 2022/11/07

 自宅の最新版Racketでは画像を使ったファイルをモジュールとしてRequire出来るか?の調査。結果!出来ません!となると・・これはデータファイルの構造をちょっと変えないといけないな。

うん、これバグの可能性もあるんで、報告しておきました。どうなるかは知らんけど・・・・・・。
例のmoduleの話と合わせて、バグ報告してます。
次回の8.7では直されるかしらん・・・・・・。
ちなみに、かなり近い時期に8.7がリリースされる模様です。

 実験を終えた後に思いついたのが、今の構造体に直接画像を持たせる方式をやめて、画像のみをリストにして本体に持って来てページ数とリストのN番目をリンクさせる方式。これならページ構造体の見通しが良くなり別モジュールに出来るし、画像のみをリストに出来るなら画像が「超縦長」という性質なのでもっと詰めて配置することが出来る。ただ、mapが効かなかった事を考えるとlist-refで取り出せるかが不明。明日試す!

まぁ、前にも書いたけど、正攻法は画像フォルダを作っちゃって、アドレスで引っ張ってくるのが確実だとは思うんだけど・・・・・・。
2htdp/imagebitmap/fileを使えば、比較的「フツーの」プログラミングスタイルになります。 => 参考:

 えっ!?まさかのScratchの文字が。Scratchのチュートリアルって「たったこんだけかよ」って感じだったけどなぁ・・

残念!
from scratchは「ゼロから」とか「一から」なんかを意味する慣用句です。
加えると、プログラミング言語の名前なんかの「固有名詞」は大文字から始めます。

This book is inspired by other tutorials which go through the steps of building a programming language from scratch.
意訳: この本は、ゼロから一歩一歩プログラミング言語を作り上げる別の入門書に影響を受けています。

詳しい話はもとこんぐさんが解説してくれるか否か?


 翻訳と言えばコード部分も翻訳されてしまうかな?と心配してたんですけど、うまく出来ていてそこはちゃんと独立してるんですよねぇ・・ありがたい!

ちと余談。
もうLispも結構長いんで、「関数を作る」事に抵抗はないでしょう。
それで、main、が何なのか、と言う事はキチンと押さえておいて下さい。
C言語脳は、mainが何だか良く分からない内にmainに全部詰め込んで書く練習をする。と言うかせざるを得ない。何故ならC言語で関数を書くのが敷居が高いから
mainは「自分が作った大量の関数」を統合して動かす為、に存在する。その中には入出力も含まれるんだけど。
mainは確かに関数の一つではあるんだけど、アセンブリ言語/機械語で言うトコのエントリポイント、の役割を果たしてる。単純に言うと、作ったソフトウェアを端末で動かす際に、main、と名付けられた関数を端末が探すように、大体のプログラミング言語は設計されてて、それがUNIX的プログラミングの礎なのね(※1)。
それが分かれば、Pythonのif __name__ == '__main__':の意味も分かる筈。
また、Racketは実は従ってないんだけど、SRFI-22ってのがあって、これを採用してるScheme処理系ではmainって名前はC言語のように特殊な意味を持った関数になる。つまり、端末とコマンドライン引数でやり取り出来るようになるんだ。
GaucheはSRFI-22を採用してるんで、mainと名付けられたプログラムはやっぱりエントリポイントになります。



 そして環境としては・・Paizaだとコンパイルしないで良いんで楽チンで良いなぁ。とりあえずC言語はBYOLやって行きますか!Racketのドキュメントも読みたいし・・これは長生きせねば

うん、楽しんで下さい(笑)。


 これも気になる記述ですよね。Cametanさんが何度か「自分版LISP」について言及されてましたけど、そっちへの道筋をほのめかして下さってたのはこういう事だったのか?とか。

うん。
と言うか、何度か書いてるけど、全てのソフトウェアはインタプリタなのね、原理的に。
この観点を持てるかどうか、ってのが結構大事だと思う。
ソフトウェアを例えばダブルクリックで起動する。quitボタンをクリックしない限り無限ループする。マウスで何かクリックするとそれに応じた処理が、「解析されて」「選ばれて」実行される。
うん、実は構造は言語インタプリタと同じなんだ。
だから直球勝負で言語インタプリタを学ぶ、ってのが非常に大きい経験なんだけど、実は上に書いたような「意味」を把握してる人って少ないと思うんだ。
っつーか、僕も凄い悩んだんだよな。独学なんで誰も教えてくれなかったから。そして実際問題、大学とかで「何故に言語インタプリタを実装するのか」と言うその理由も、教えないみたいだ。単に「アカデミックだからそれを学ぶ」ってなってるだけ、ってのが殆どみたい。
なお、もちろん、無限ループ前提じゃないソフトウェアもある。正確な定義ではないんだけど、そういうのはスクリプトって分類してイイんじゃないのかな、って個人的には思ってる。んでそれで言うと、例えばコンパイラはスクリプトなんだわ。起動して、何か作業して、それが終われば終了する。星田さんが作ったコレとかコレはスクリプトだ。
つまり、知らんうちにコンパイラの仲間を作ってたわけだ(笑)。

一般に、コンパイラの方が何か「高等」なイメージがあるけどさにあらず。コンピュータはインタプリタが基本だ。と言うのもコンピュータ自体がハードウェアインタプリタだからだ。CPUは随時やってくるメモリに搭載された命令を「解釈」して「分岐」して「実行」する。その動作モデルはまさしくインタプリタで、これを「知る」だけでも格段にコンピュータを「理解」する事に繋がる。
そして何度も書くけど、C言語を学ぶと言う事自体とは全く関係がないんだ。

また、これも何度か書いてるけど、そもそもアドベンチャーゲームってのはインタプリタの実装に極めて近い。と言うかコンピュータサイエンスの落とし子だ。
自分で命令を定義して(物品を買う、とか敵と戦う、とか)、条件分岐で動作を変える、なんつーのは構造的にはまさしくインタプリタなんで、ナウシカの実装にもBYOLでの学習はかなり役立つとは思います。

※1: main、と言う名前は、殆どのアセンブリ言語で、エントリポイントを示すラベルがmainだった、と言う事に由来する。
なお、この辺の規約的なモノはUNIX生まれかそうじゃないか、が影響してて、例えばPascalにも当然エントリポイントは存在はするが、一方、mainと言う名前は採用していない(UNIX系言語じゃねーし)。
また、mainに対して、じゃあsubがあるんじゃねーの?と言う予想は大当たりで、関数は昔のBASICみたいな言語ではサブルーチン、と呼ばれていた。
つまり、mainはサブルーチンを呼び出すモノ、と言う意味合いも込められている。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「RE: プログラミング学習日記」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事