ド素人がiOSでSmalltalkを動かせるか調べてみた。

はじめに

サーバーサイド・フロントエンドを3〜4年、iOS/Androidアプリエンジニアとして5年ほど。
Smalltalkは大学生の頃に授業の課題で耳にしたことと、Objective-Cのルーツであることくらいしか知らない。
オブジェクト指向の話題でSmalltalkが出てくるが、あまりにも知らなすぎたので今回調べてみることに。

iSqueak というものを発見

いきなりですが、 iOSエンジニアなので今持っている得意なスキル+Smalltalkで何か出来ないか考えて最初に思いついたのがこれです。

https://isqueak.org/HomePage
https://www.mobilewikiserver.com/Scratch.html

iPhoneで動くらしいです。

これを今最新の Xcode 10.1, iOS12 対応できたら面白そうだと作業開始。

湧き出るコンパイルエラー

つらい・・・あきらめ・・・

(iSqueak と Scratch App for IOS は同じもの?)

Pyonkee を知る

Pyonkee というのを教えてもらい試してみました。

https://github.com/SoftUmeYa/Pyonkee

ベースとなっているのはこちらのScratch.app for iOS

AppStore でも公開されていて、ソースコードも公開されていました。

Xcode 10.1, iOS12 対応しようと思い、ビルド開始。

一発でビルド成功・・・! iSqueakのときの絶望はなんだったのか

Smalltalkは歴史があるからか、動かないソフトウェアが大半だと思っていましたが、しっかりメンテナンスがされているようです。

すばらしい。

DeprecatedになったAPIのワーニングは出てましたが、動作は問題なさそうです。

あれこれ用語について

Squeak とは

https://squeak.org/
https://ja.wikipedia.org/wiki/Squeak

Squeak(スクイーク)はSmalltalk環境のひとつで、Apple Smalltalkから派生したもの。
Squeak(およびSmalltalk)環境においては、データもアプリケーションも、そして環境自体(つまりシステム)すら、すべてSmalltalk言語で記述されたオブジェクトで構成されているため、通常のコンピュータ環境でいうところのアプリケーションソフトという概念は希薄であるが、それでもそう呼ぶに相応しいオブジェクト群を見ることができる。

すごく興味深いことが書いてありました。

Smalltalkを開発するための環境すらSmalltalkで記述されたもの。

面白い。

Scratch とは

https://ja.wikipedia.org/wiki/Scratch_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)

Squeak EtoysをベースにMITで開発されたプログラミング環境。
小学生向けのワークショップなども多数開催されている。

Scratch 3.0が2019年に正式公開

まだまだ改善が重ねられウェブ版でかなり進化しているようです。

Demo

https://beta.scratch.mit.edu/
https://llk.github.io/scratch-gui/master/

SourceCode

https://github.com/LLK/scratch-gui

拡張も可能
https://github.com/LLK/scratch-vm/wiki/Scratch-3.0-Extensions-Specification

Google Blockly

https://developers.google.com/blockly/

GUIでブロックをつなぎ合わせてプログラミングが出来るライブラリ。

雑記

Smalltalkはgccやllvmなどでコンパイルして実行するようなものではなく、
Smalltalkで作られた統合開発環境でSmalltalkで記述されたコンパイラでSmalltalkで書かれたプログラムを実行する。
鶏と卵状態じゃないかと。

他の言語と比べSmalltalkの場合、言語仕様だけでなく開発環境自体にも慣れる必要があって敷居が高い印象。
でも、環境構築とか全くいらないし、その空いた時間を環境慣れに使うとすれば、以外とそうでもない?

長く愛され様々な言語に影響を与えた言語であるため、普段使っている言語のルーツをたどる・思想を理解することで得られる事は大きいと思いました。

子供のプログラミングが盛んな昨今。うちの子ももう少し大きくなったら、 Scratch 3.0 で遊んでみようと思います。