IoLanguage on コマンドプロンプト
Bruce A. Tate 氏の『7つの言語 7つの世界』を読んでいる。
検索してみると結構読まれているようだ。
『404 Blog Not Found:コードについて書く方がコードを書くより読まれる現実』 があるにもかかわらず
書評ではなく、読んでコードが書かれているということは本にパワーがあるということだ*1。
観測できなければいい本ではないということはないが、いい本は観測できる。
Io とは
Io は2週目*2の言語として登場するプロトタイプ・ベース・オブジェクト指向言語。
Windows もバイナリ版が用意されているのでそれを使えばよいのだけど何故かライブラリが参照できない場合があった。
- io.exe があるディレクトリから起動した場合
Io 20110905 Io> Random value(100) ==> 17.328529828228056
- io.exe があるディレクトリにパスを通した場合
Io 20110905 Io> Random value(100) Exception: Object does not respond to 'Random' --------- Object Random Command Line 1
というわけで以下のサイトを参考にしてソース版をコンパイルしてみた。
参考: Building the Io Language on Windows · Streamhead
コンパイル環境
環境
- Windows 7 64bit
- Io のソースは Tags · IoLanguage/io · GitHub から 2011.09.12.zip をダウンロード
- MinGW は以前 mingw-get-inst-20101030.exe でインストールしたもの
- CMake はインストールしていなかったので最新版
使うツールは use.bat でパスを通すことにしている。
今回使用した環境設定部分
@echo off goto case_%1 :case_cmake set PATH=%PATH%;%INS_DIR%\cmake-2.8.7-win32-x86\bin goto :case_end :case_gcc :case_g++ doskey g++=g++ --exec-charset=cp932 -Wl,--enable-auto-import $* set GCC_VER=4.5.0 set GCC_EXEC_PREFIX=%INS_DIR%\MinGW set PATH=%PATH%;%GCC_EXEC_PREFIX%\bin set PATH=%PATH%;%GCC_EXEC_PREFIX%\libexec\gcc\mingw32\%GCC_VER% set C_INCLUDE_PATH=%C_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\include set C_INCLUDE_PATH=%C_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\%GCC_VER%\include set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\include set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\%GCC_VER%\include set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\%GCC_VER%\include\c++ set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\%GCC_VER%\include\c++\mingw32 set LIBRARY_PATH=%LIBRARY_PATH%;%GCC_EXEC_PREFIX%\lib set LIBRARY_PATH=%LIBRARY_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\%GCC_VER% goto :case_end :case_io set PATH=%PATH%;%INS_DIR%\Io\bin set PATH=%PATH%;%INS_DIR%\Io\lib goto :case_end :case_end
コンパイル
展開したソースディレクトリにいる状態から
> use gcc > gcc --version gcc (GCC) 4.5.0 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > use cmake > cmake --version cmake version 2.8.7 > mkdir build > cd build > cmake-gui
ソースディレクトリと build ディレクトリを指定して Configure ボタンを押す。
MinGW を選択する。
CMAKE_INSTALL_PREFIX に Io をインストールしたいディレクトリ*4を指定して再度 Configure ボタンを押す。
Generate ボタンを押す。
CMake を終了
> mingw32-make install ... ... ... > use io > io Io 20110905 Io> Random value(100) ==> 71.665877569466829 Io> exit
Io に少し触れてみる
Io で面白いと思ったのはが予約語がないこと。
Io でフィボナッチ数列を書いてみる。
Io> fib := method(n, if(n == 1 or n == 2, 1, fib(n-2) + fib(n-1))) ==> method(n, if(n == 1 or n == 2, 1, fib(n - 2) + fib(n - 1)) ) Io> fib(10) ==> 55
Java でいうところの 3項演算子 みたいな if なのだが
Io> fib := method(n, ... if(n == 1 or n == 2) then( ... return 1 ... ) else( ... return fib(n-2) + fib(n-1) ... ) ... ) ==> method(n, if(n == 1 or n == 2) then(return 1) else(return fib(n - 2) + fib(n - 1)) ) Io> fib(10) ==> 55
if then else のように普通の if 文のようにも記述できる。
この場合 if 文は値を返さないので return が必要になる。
という風にも読めるのだけれども実は if は Object のメソッドで then は true (または false) のメソッドだった。
Io> true then("TRUE" println) TRUE ==> nil Io> false then("TRUE" println) ==> false Io> nil else("FALSE" println) ==> nil Io> false else("FALSE" println) FALSE ==> nil
最後に
ルールがシンプルのなところに好感がもてた。
プログラマの中には九九を F の段「えふえふいーじゅういち」まで言えそうな人たちがいるので、いくらルールが複雑でも対応できる人はできるだろう。
ただ、そういう人達でも理解する側から説明する側に回ればシンプルな方を選ぶ人が多いはずだ。
弱点として読みにくいと書かれていたが本の内容の範囲ではそれほど感じなかった。