Object.create(null)

TypeError: Cannot convert object to primitive value

昼間から自己 (Self) と格闘する人

していたら夜になっていた.

Self とは

プロトタイプベースのオブジェクト指向の元祖にして JavaScript の先祖のひとつ.

Self - Wikipedia

インストール

当方 OS X Mavericks (10.9.5) です.

Self 言語のサイト http://www.selflanguage.org から OS X 用のディスクイメージ (最新版は 4.5.0 ) をダウンロードして, 中にある Self Control.app を Applications に投げれば VM 自体のインストールは OK です. 他にディスクイメージに入っている Clean.snap は後で使うのでどこかにコピーしておきましょう.

Self Control を起動するとこんな感じ. f:id:susisu:20151126194800p:plain "Choose snapshot..." から先ほどの Clean.snap を選択すると VM が起動し, デスクトップが表示されます. f:id:susisu:20151126195217p:plain 終了はデスクトップを右クリックして "Quit..." から. 間違えてデスクトップのウインドウを閉じてしまったなら "Open Terminal" でターミナルを起動して desktop open とやると再度デスクトップが開きます.

コマンドラインVM を起動する方法もあって, Self Control のメニューに "Install VM at /usr/bin/Self" というものがありますが, 今時 (El Capitan のアレもあるし) /usr/bin は無いだろうということで, 別の場所にインストールします. このメニューで作成される /usr/bin/Self の中身は

#!/bin/sh
"/Applications/Self Control.app/Contents/Resources/Self.app/Contents/MacOS/Self" $@

みたいな感じなので, こいつを別の適当な場所 (/usr/local/bin とか) に Self などという名前で放り投げておきましょう (たぶんシンボリックリンクでも良い).

使い方, 言語仕様

ほぼ Self Handbook を読むしかなさそう (あるいは私がググれていないだけ).

GUI (デスクトップ) の場合は, 表示されている shell に何か書いて "Do it" すると実行さます. "Get it" すると実行されてからそのオブジェクトのウインドウが開いて, ウインドウ左上の三角をクリックしたりしていくと色々見えます. f:id:susisu:20151126201615p:plain

コマンドラインの場合, $ Self -s Clean.snap としてやると先程と同様にデスクトップが表示されます. 詳細な使い方は $ Self -hVirtual Machine Reference — Self Handbook for Self 4.5.0 documentation を見ましょう.

$ Self だけでも VM は起動しますが, 色々な諸々がほぼ全て存在しないので, Clean.snap を読み込まないと何も出来ません. 適当に対話型インタプリタっぽく実行したい時は $ Self -s Clean.snap -p, ファイルからスクリプト言語のノリで実行したいときは $ Self -s Clean.snap -p -f <file> がよさそうです. この場合は終了は Ctrl+D で.

私もまだ全然わかっていない (特に言語仕様) ので, とりあえずいつものように Project Euler の問題を解きながら色々試してみて, ある程度まとまったら何か書きます (たぶん).

その他

Self という名前のせいでググラビリティが死ぬほど低くて, 例えばメソッド定義の方法を調べようと self, method, language, prototype などの単語を並べてみても, RubyPython, JavaScript に関する情報や, 果てには言語の自主学習の方法 (language self-study method) みたいなものばかり出てきてしまい, 非常に辛いものがあります.