2008-07-10
■ [ruby][haskell][rubiskell] Rubiskellがgemでインストールできるようになりました
某ujihisaの発表でも紹介されたRubiskellが、
gem install rubiskell
でインストールできるようになりました。
こんな風に、Rubyスクリプトの中にHaskellのコードを埋め込めるようになります。
require 'rubiskell'
FIB = <<EOD
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-2) + fib (n-1)
EOD
fib = Haskell.new(FIB)
puts "fib 5 is #{fib[5]}."
実装は単にrunghcを起動しているだけです。
リポジトリはgithubなので、ソース読むなりforkするなりご自由にどうぞ。
■ [reac] reac (Reactive Ruby) がgemでインストールできるようになりました
RubyでReactive Programmingを実現するreacというライブラリが、
gem install reac
でインストールできるようになりました。
こんな風に、「書いた式の値が自動的に変化する」みたいな変な世界を体験することができます(笑)。
リポジトリはgithubにあるので、ダウンロードするなりforkするなりご自由に。
■ [Ruby/SDL][mac] わーい Mac OS X版Ruby/SDLスターターキットできたよー (RubyスクリプトをMacのアプリケーション化する方法)
Ruby/SDLを使ったプログラムをMacユーザ向けに配布してみるテスト。
- ダウンロード: RubySDLGame-1.zip (Intel Mac専用, Leopardでないと動かないかも...)
中に入っているアプリケーション(.app)をダブルクリックすると、 こんな感じに起動するはずです。

さらに、ターミナル等で RubySDLGame.app/Contents/Resources/testsprite.rb を編集すれば、 エディタ一つでゲーム開発が可能に! :-)
経緯
- Rubyでゲームを作りたい
- 作ったらやっぱり配布したい
- でもゲームするためだけにRubyインストールしてもらうとか辛いよね
- そこでWindowsならExerbがあるよ
- じゃあMacはどうしたらいい?
- Ruby本体とRubyスクリプトとDLLを.appに入れちゃえばいいんじゃね
以下、参考資料。
.appの作り方
このサイトが詳しいです、あなたが神か。
要するに、決まったフォルダ構造を作って必要なファイルを置けばアプリケーションと見なされるらしい。
* RubySDLGame.app/
* Contents/
* Info.plist # 後述
* MacOS/ # 実行ファイルとか。
* core.sh # 起動用シェルスクリプト。
* lib/ # SDL関係のDLL (*.dylib)。
* rsdl # rsdl(SDL用のRubyバイナリ)。
* Resources/ # 静的ファイルとか。
* hello.icns # .appのアイコン。
* testsprite.rb # Rubyスクリプト本体。これはWindowsや
# Linuxに持っていってもそのまま動く:-)
* icon.bmp # スクリプトで使ってる画像。
* lib/ # Rubyの添付ライブラリ全部。
Info.plistはこんな感じ。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>core.sh</string> # 実行ファイル名
<key>CFBundleIconFile</key>
<string>hello.icns</string> # アイコンのファイル名
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
</dict>
</plist>
自分で作るときは、「同じように書いたつもりなのに動かねー」とかよくあるので(笑)、 既に動いてる.appを元に少しずつ変更していくのがおすすめだよ。
ちなみに
RubyCocoaならこんな面倒なことしなくても、ビルドすると勝手に.appが出来てくれるらしいよ。
今後の展望とか
1行も変更せずにWindows/Linux/Macで動くのがRuby/SDLの魅力だと思ってるので、 やっぱり一つのソースからWin/Mac両方の実行ファイルを作るとかやりたいなぁ。 (Linux使いの人は自分でSDLとか入れられるよねーと思ってるんだけど、 自動でdebパッケージ化してくれるとかはあると嬉しいのかも)
あと、やってることは単に「Ruby本体とRubyスクリプトとDLLを.appにまとめました」 というだけなんで、Ruby/SDLに限らずいろんなものがパッケージ化できると思います。 例えばStar RubyとかStar Rubyとか。
■ [icfpc][lisp][scheme] ICFPCからCommon Lispが外された? と思ったら
- 「Common Lispをな ぜ 外 し た」
- 「いやディスク容量が足らなくてさぁ」
- 「俺に金曜までに別の言語を覚えろと?」
- 「CLってコンパイルできるんだろ?バイナリ提出は可能だからさ、ディスクの方はインタプリタ言語に譲ってやってくれないかな。ジャッジの環境に処理系が入ってないとマジで困るのは奴らなんだから」
- 「そういうことならいいよ」
- 「ちょwww SBCLだとHello Worldコンパイルしただけで50MBなんだがwww」←ここまで読んだ(MLより。なんかアーカイブされるのが遅いな)
Scheme処理系はMzSchemeだそうで、GaucheのAPIしか覚えてない日本人(俺とか)涙目。
Scheme使おうと思っている人はPLT Schemeのマニュアルを見ておいた方がいいかも知れませんね。 R6RSとSRFIだけで頑張るというのもアリですが…let1ないとか困るだろjk。
実際にまだ動かしてないのですが、標準出力と標準エラー出力はどうなりますか? > スターターキット
「何も考えてません」というのが答えです^^;<br><br>シェルスクリプトからRubyスクリプトを起動してるので、ファイルに保存するとかは簡単にできると思います。
Gaucheの隠し機能プリコンパイルを使ってバイナリにして提出する…のはだめなのかな? あ、でもGaucheのランタイムが必要か。
まだ試してないのですが、http://www.icfpcontest.org/live-cd.htmlにも "If you would like to use a language that is not on the CD, please do!" とあるので、処理系ごと提出すればOKっぽいような感じです。