読者です 読者をやめる 読者になる 読者になる

こんにちはマイコン制御

May FORTH be with you.

ジェダイへの道 factorを徐々にイジりだす

f:id:SenjiNiban:20151021190607p:plain

なぜfactorにしたのか
  • 標準Forthにこだわらなくなったから。
    • チャック・ムーアからして「ANSIとか悪いことをした。みんなが自分でカスタマイズしてForthを使えばいい」と言っているし、そのために基本構文が簡単なのだし拡張が簡単なのだから使いたいと思う処理系を使えば良いと思うようになりました。
    • 作る方としても、音楽用Forthを作りたいので汎用Forthである必要はないし、そのお手本になりそうなのがibnizとRetroになりそうなのでやっぱり標準的なForthではなくて良いかと思うのです。
  • いろんな意味でポータブルだから
    • WindowsLinuxBSDOSXで動きます。
    • いわゆるインストールが不要なのでUSBメモリに入れて持ち歩きも可能です。
    • F1キーで呼び出せるヘルプがよく出来ているのであまり余計な資料がいらない。
    • 実行可能スクリプトも書けます。
    • 単独実行可能ファイルもデュプロイできます。
  • 実用性を志向しているから
    • 多目的に使えるようにライブラリが充実しています。サウンド回りもちゃんとありました。
      • audioとsynthというライブラリがあります。
    • EmacsVIMのモード設定ファイルが用意されています。
    • 多言語との連携も考慮されていてC言語pythonのインターフェースなどもありました。
    • webサービスAPI用ライブラリもいろいろあってgoogleYouTubeRedditWikipedia、wolfram-alphaなんかまであります。
    • 関数言語とかオブジェクト指向言語とか他言語のいいとこどりをしているので柔軟にプログラムが書けます。
実際のところどうなの?

これまで散々いろいろなForthの処理系を触っていたので入口のところでは特に戸惑いはありませんでした。Forthは基本はとてもシンプルでどんどん自分で拡張して使う言語だと思います。schemeとかに似ているかも。factorでは{}で配列、[]でオブジェクトを記述できるのが標準的なForthと違うところですが、リスナーからF1キーで呼び出せるブラウザ兼ヘルプがとてもよくできているのでこれを読めば大丈夫。
f:id:SenjiNiban:20151021191635j:plain
でも英語が得意過ぎて日本語だとかったるいって人以外は、インフォサイエンスさんのスタートガイド日本語訳に添って一通り試してみるのが一番だと思います。oss.infoscience.co.jp
スタートガイドの「 Your first program」で回文かどうかをチェックするプログラムを作ってみるのですが開発用のイメージファイルを作るところからテストユニットの作成まで、非常に簡潔にまとまっていて使いやすいと思います。

前回のエントリーで「"demos" run」でデモランチャーが走ることは紹介しましたが、これだけでなく「factor\extra」の中にサンプルが大量にあるので「"フォルダ名" run」で色々と動かしてみると面白いです。サンプルがライブラリの場合はC言語でいうところのmainが無いよって言われます。
factorではこのような形でコアファイル、基本ファイル、サンプル+ライブラリがフォルダ単位で管理されているのですが、コアが42ワード、基本が159ワード、ライブラリ+サンプルが257ワード定義されています。言語仕様自体はシンプルでもこれだけライブラリ回りが充実していれば書き捨ての日常業務用スクリプトも書けそうです。

謎の不具合もあったりしました。
  • 前回も書きましたが、WindowsLinuxともにdllやsoファイルの不具合が出るサンプルがありました。
  • サンプルによっては大量のライブラリ読み込みが必要で立ち上げに時間が掛かるものも。
    • そうしたサンプルもデプロイして単独ファイルにすると非常に軽快に起動します。
  • ところがものによってはデプロイすると起動しないものも。
    • Windows版にいくつかそうした例が見られました
    • LinuxだとWindows版ではなかった「イメージファイルがない」というアラートが出て、今のところ全て起動できず

ということでまだ自分がよく判っていないための不具合なども多そうですが、100%期待通りには動いていません。
でもスクリプト言語的な使い方であれば概ね好印象です。