【読んだもの】Pythonは逐一解釈されるのか、それともコンパイルされるのか?(答えはどちらも)イエスだ。

Ned Batchelder: Is Python interpreted or compiled? Yes.

人々はコンパイル言語かインタプリタ(逐一解釈)言語か、という二分法にこだわる傾向があるが、現代の言語処理系はそんなに単純じゃないよね、という話。

ここで「コンパイル」はソースコード機械語(CPU命令セットの集まり)に変換すること、「インタプリタ」はソースから一度に一行読み込んではプログラムを実行するモノ。この単純な定義のもとタイトルのような質問が行われる、とされている。

Pythonにおいてはソースコードバイトコードに変換される。バイトコードの見かけはCPU命令セットのようだが、実際の実行は仮想マシンVM)によって行われるという点で異なる(仮想マシンはOS全体の機能をエミュレートせず、単純化したCPU命令実行環境を与えていると考えられる)。

Pythonではdisモジュールを使うとバイトコードを眺めることができる。byterunというPythonで書かれたバイトコードを実行するVMが存在する。これは教育目的だがソースを読んでみると面白いかもしれない。)

バイトコードに変換する言語といえばJavaがある。Javaコンパイル言語、Pythonインタプリタ言語と区別されるのはなにゆえか。Pythonではバイトコードへの変換は暗黙的に行われ、ユーザーがコンパイラを直接呼び出すことはなく、.py拡張子のファイルが単純に実行される。Javaはユーザーが明示的にコンパイラを呼び出し、ソースコードをクラスファイルにコンパイルする。

あとPythonの特徴としてREPLがあるというのがある。これは「コンパイルされる」言語にはあまりない特徴である。REPLでも暗黙的にバイトコードへの変換・実行が行われており、この暗黙性がPythonを「インタプリタ」たらしめている。

ただしJavaやCのような「コンパイルされる」言語がREPLを持てないのかというとそんなことはない。Javaはもともとバイトコードに変換する方法を取っていたが、いまはJust-In-Time(JIT)な手法で実行時に機械語コンパイルできる。このように考えると、コンパイル言語とインタプリタ言語の区別というのはもろいものであるように感じられる。

一つ留意すべきことは、プログラムがどのように実行されるかというのは、単に実装の話であって、プログラミング言語の特徴ではないということだ。上記Pythonに関する話はCPythonについてであり、たとえばPyPyのようなJITコンパイルされる方式の言語処理系も存在するわけである。

というわけでPythonが逐一解釈されるのかコンパイルされるのか?という疑問については、どちらもイエス。ただし世界はもっと複雑なものなのだ…という結論に落ち着く。

おやすみ

さすがになんにも書いてないのに連続更新日のために更新し続けるのは無駄なのでギッハブに一本化しようと思う。あそこは曲がりなりにも作業が進むので(モチベ低い)

トリビア:xtermのREADMEには「この門をくぐる者一切の希望を捨てよ」と書いてある

正確には英語なので"Abandon All Hope, Ye Who Enter Here"ですが。言うまでもなくダンテ「神曲」の引用です。

歴史的な経緯(察し)によりコードがめちゃんこ読みにくいからこんな注意書きが生まれたとのこと。

RWOを読むかもしれないので(自分のさじ加減一つの問題だけど)準備した。やったことは次のページのとおり。

Installation Instructions · realworldocaml/book Wiki

$ opam switch 4.01.0
$ eval (opam config env)
$ opam install core utop
$ opam install \
   async yojson core_extended core_bench \
   cohttp async_graphics cryptokit menhir

4.01.0より上のバージョンをインストールしようとすると(coreやutopをやろうとした時点で)エラーが出て無理だった。当方macOS

~/.ocamlinitに次のような設定を書いた。

#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
(* Added by OPAM. *)
let () =
  try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
  with Not_found -> ()
;;

open Core.Std

もし本当に読むとして、言語仕様をつつき回しても仕方ないので、ちゃきちゃきパーサ書くところまで読んでいきたい。

すたてぃっくさいとじぇねれーたぁ

Gutenberg

まっくではサクッとインスコできないようです。ソースからビルドしろ? めんどくさいですね。

今のところテーマは一つみたいだ。ジェネレータはテーマが使えると楽しいので増えたら遊びたい。

Keats/hyde: Port of https://github.com/poole/hyde to Gutenberg

Godot プロジェクト 参考

Godot触ってないのでよくわかりませんが。

デモプロジェクト

Godot Engine - Download

ダウンロードページにあるやつです。本体を落とした人も意外と見落としてるかもしれません。これを読むのがGodotでゲームを作る上での早道となるでしょう。

Dolphin Island

www.youtube.com

Platformer系。デモのPlatformerに比べてプロジェクト構成が見づらい気がする。

github.com

Tanks of Freedom

www.youtube.com

isometric map(クォータービュー)な戦略ゲーム。

github.com

DynaDungeons

いわゆるボンバーマン

github.com

https://raw.githubusercontent.com/akien-mga/dynadungeons/master/background.png


あとググればなんかチュートリアル動画とか出てくるようです。

今日の進捗.md

まあでもなんだかんだで継続しているのでよくやっているほうではないか。中身が伴っていないが。おやすみ。

chapter 4: rendering tabs · algebroid/learn-kilo@6f61997 · GitHub