2011年12月13日火曜日

Nimrod is efficient


全国の Nimrod ファンのみなさんこんにちは。
Nimrod Advent Calendar の 13日目を担当している、@takano32 a.k.a. TAKANO Mitsuhiro です。


今回はNimrodへようこそ - Prologueの続きとして、Nimrodの十八番の特徴である `Efficient' についての文章を翻訳してみます。

Nimrodは効率的な処理ができます

  • Nimrodでは仮想マシンに依存しないネイティブコードの生成(現在はC言語を用いて生成しています)を行います。
  • 再帰的ではなく、漸進的で世代型のガベージコレクタを搭載しており、ゲーム作成のようなちょっとしたリアルタイム性が要求されるシステムにも向いています。
  • システムをプログラミングする上での特徴もあります。メモリアクセスを自分で制御し、直接ハードウェアを扱う能力もあるのです。また、ガベージコレクタが管理しているメモリ領域と自分で制御するメモリ空間はきちんと区別されています。
  • オーバーヘッドがないイテレータも搭載しています。
  • マルチターゲットの仕組みも搭載しています。
  • 仮想メソッドのテーブルを使わないインラインのダイナミックなメソッドの定義にも対応しています。
  • ユーザが定義した関数についてコンパイル時間を計測することもできます。
  • 生成された実行可能なファイルには使われる機能のみが組み込まれ、すべてのプログラムからデットコードを消す仕組みをもっています。
  • 値を基本にしたデータ型、たとえばオブジェクト型や配列型などをヒープではなくスタックに配置することができます。

うえのような特徴をもっているそうです。うひー、はじめて知った特徴多いな・・・
14日目の記事はsyanbi a.k.a. @xga さんの記事になります。お楽しみに!

2011年12月10日土曜日

なんと Nimrod で Python が使えるの!?

全国の Nimrod ファンのみなさんこんにちは。
Nimrod Advent Calendar の 10日目を担当している、@takano32 a.k.a. TAKANO Mitsuhiro です。

今回はexamplesにふくまれているpythonex.nimについてお話します。
Nimrod/examplesにはさまざまなサンプルプログラムが収録されています。fizzbuzz.nimなどの基本的なものからkeyval.nimのような正規表現の利用例などがあります。
おやおや、なにか気になる名前のサンプルがあります。"pythonex.nim" とあります。これはいったいなにをするプログラムなのでしょう。

おお、どうやらPythonの処理系をプログラムに組み込み実行するサンプルのようです。ほんとに実用的なのかな?と思って以下のような意地悪をしてみました。


おお、わりと複雑なパースが必要なはずなのに動いています!すごいですね。これはRubyistとしてはrubyex.nimを作成する使命を感じます。おっと、次回予告か死亡フラグとなってしまいそうです。今回はこれまでとさせてください。

11日目の記事はsyanbi a.k.a. @xga さんの記事になります。お楽しみに!

2011年12月7日水曜日

Nimrodへようこそ - Prologue

全国の Nimrod ファンのみなさんこんにちは。
Nimrod Advent Calendar の 7日目を担当している、@takano32 a.k.a. TAKANO Mitsuhiro です。6日目の記事は @esehara さんの 始めてオープンソースに関わったことを話そう -- プログラミング言語番外編 です。ぜひ、こちらもご覧ください。

今日は初心にもどり、公式サイトの序文を訳してみました。
Nimrodへようこそ
Nimrod は新しい手続き型静的型付けのプログラミング言語です。Nimrodはシンプルで効率的な言語でありながら手続き型、オブジェクト指向型、関数型、そしてジェネリックプログラミングを利用できます。
特徴のひとつにはLispから発想を受け継いでいる、自身の抽象構文木(AST: abstract syntax tree)の構成がNimrodにはあります。これによって協力なマクロシステムが利用することができ、DSL(Domain Specific Language)の作成などを行うことができます。
また、Nimrodはコンパイル可能な言語でありながら、GC(garbage-collection)を搭載しつつ、生産性とパフォーマンスのバランスに優れた開発が可能なプログラミング言語です。
Nimrodの開発ポリシーは3つの「E」に象徴されています。それはEfficiency(効率)、Expressiveness(表現力)、Elegance(上品さ)のポリシーであり、挙げた順番、つまり、効率、表現力、上品さの順でそれぞれを優先して開発しています。
マルチパラダイムでありながら、生産性とパフォーマンスにすぐれた素晴らしい言語です!みなさんもぜひ使ってみてください。

8日目の記事はsyanbi a.k.a. @xga さんの記事になります。お楽しみに!

2011年12月5日月曜日

Nimrod で FizzBuzz を書こう!

全国の Nimrod ファンのみなさんこんにちは。
Nimrod Advent Calendar の 4日目を担当している、@takano32 a.k.a. TAKANO Mitsuhiro です。3日目の記事は @esehara さんの オフサイドルールこそが正義である です。ぜひ、こちらもご覧ください。

今日はサンプルのプログラムとして有名な FizzBuzz をNimrod で書いてみたときのことを紹介したいと思います。

まず、FizzBuzz というのは
プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は 「Fizz」(Bizz Buzz の場合は 「Bizz」)、5で割り切れる場合は 「Buzz」、両者で割り切れる場合は 「Fizz Buzz」 (Bizz Buzz の場合は 「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。  
Wikipediaより引用
というルールのゲームです。これをプログラムで出力します。

私がはじめに Nimrod で書いた FizzBuzz はこんなものでした。そして、 exampels のひとつとして取り込んでもらうために pull request しました。


Commit 0398a3c616d3de11f779ac36c3b0ef957052a814 to hametsu/Nimrod - GitHub
このプログラムにはいくつか問題がありました。それを Araq はとても親切に指摘してくれています。
Use 'elif' instead of 'continue'. Use 'echo a, b' instead of 'echo a & b'. Use 'const' instead of 'var'. Sorry for the nitpicking, but people like examples to be idiomatic nimrod code ;-).
日本語にすると以下のようなかんじでしょうか。
'continue' の代わりに 'elif' を使って、'echo a & b' の代わりには 'echo a, b' を使おう。あと、'var' の代わりに(変化しない変数なのだから)'const' を使うといいよ。 examples は多くの人が Nimrod の理想的なコードとして参考にするので細かい指摘ばかりになっちゃった(^−^)
とても親切に細かいところまでレビューしていただきました。その後、数度のやり取りを経て、以下のようなコードとなりました。


このコードは取り込まれ、現在、Nimrodのexamples以下にあります!みなさんもぜひexamplesになりそうなコードなどを書いてコミットしてみてはいかがでしょう。
5日目の記事はsyanbi a.k.a. @xga さんの記事になります。お楽しみに!

Auto Coin Dozer のすべて

あとで
邂逅


エロい


今後の展望

いまこそ Ruby の力じゃ! Capybara を使え!!!

この記事はRuby Advent Calendar jp: 2011 : ATNDの4日目です。前日は@hiro_asariさんのRubySpec を走らせるでした。
こんにちは、最近コミットできていない幽霊Rubyコミッタとなりつつある@takano32です。はやく復帰できるようリハビリしています。

さて、今日は Capybara というものを使ってWebでのテストなどを自動化する方法について簡単に説明したいと思います。
と、いいたいところなのですが、面倒なので説明は特に設けることなく、コメントとして説明を入れました。
なんか不足しているモジュールとかがあって走らないようでしたら、空気を読んで gem install hoge すれば動くんじゃないかな。たぶん。

本来はWebサービスのテストなどに使うのですが、今回は分かりやすいように日記やAdvent Calendarで使っているみんなも大好きな「はてな」に自動でログインするスクリプトを書いてみました。


こんなかんじで気軽に記述することができます。ヤバイですね。
特にヤバイかなぁ、ってポイントをふたつほどあげてみます。

  • Capybara.register_driver で Android端末などのUser-Agentを使うことができる
    • 「どうせ高度なアクセスはAndroidからはこないだろう」って思ってるサイトは危険かもしれません。ってーか、危険ですよ。
  • val = evaluate_script('JavaScriptVariable') のような記述をするとJavaScriptの変数がRubyの変数として使える。
    • JavaScriptの変数の中に次のサイトへの遷移のURLを入れていたりしてませんかね。危険ですよ!普通にJavaScriptの変数にアクセスしてブラウザの訪問先を変えたりできます。
今回は Ruby でブラウザの自動操作などができる Capybara を紹介してみました。最後に危険という話ばかりしていますが、よい子のみなさんはテストなどに使いましょう。ダメ、絶対。

5日目はZonu.EXE, tadsan.による記事の予定です。楽しみですね!