2011年12月19日月曜日

Nimrod is elegant


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


Nimrodは美しい言語です

  • マクロは構文解析木の構築に欠かせないパラダイムです。Nimrodはメタプログラミングにマクロの他のスタイルを併用する必要がありません。
  • マクロはNimrod自身の文法を変えることはできないようにしてあります。Nimrodの文法は充分に柔軟だからです。
  • 複文はインデントによってそれぞれの組みにわけますが、複文自体は複数行にまたがっても大丈夫です。インデントは必ずしもハードタブで行う必要はなく、コンパイラはいつもあなたに合わせたインデントを考慮してくれます。

Nimrod plays nice with others


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


今回はNimrodの `Nimrod plays nice with others'(他との協調性) についての文章を翻訳してみます。

Nimrodはさまざまなプロダクトと親和性があります

  • NimrodのコンパイラはWindows、Linux、BSD、そしてMac OS Xで動作します。他のプラットフォームに移植することも簡単です。
  • GTK2やWindows APIやPOSIX API、それからOpenGLやSDLにCairoなどのマルチメディア分野やPython、Lua、TCLなどの言語にもバインディングが用意されています。X11やlibzipやPRCEも扱えますし、ODBCやlibcurlやMySQLやSQLiteのバインディングも用意されています。
  • C言語によって書かれたプログラムをNimrodのコードに変換するユーティリティも用意されています。c2nimを用いれば新しいC言語向けのライブラリのバインディングを簡単に生成することができます。
  • Pascal言語によって書かれたプログラムをNimrodのコードに変換するユーティリティもあります。これは Object Pascal の大半の仕様に対応しており、かなりのコードをNimrodのコードに変換することができます!

2011年12月14日水曜日

Nimrod is expressive


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


今回はNimrodは効率的 - Prologueの続きとして、Nimrodの二番目の特徴としてあげられている `Expressive' についての文章を翻訳してみます。

Nimrodはとても自由に表現できます

  • Nimrodのコンパイラ、および標準ライブラリはすべてNimrod自身で記述されています。
  • 組み込みでさまざまなデータ型をもっています。たとえば、文字列やセット、シーケンスなどのデータ型があります。
  • 近代的な型システムも搭載しています。ローカル副作用型、タプル型、多相型、ジェネリックス型などがあります。
  • ユーザは演算子を定義することもできます。ユーザが定義した新しい演算子によって組み込みの演算子を再定義したコードよりも読みやすくなる場合も多々あります。たとえば、 =~ の演算子は re モジュール(正規表現モジュール)のなかで定義されています。
  • 強力なマクロ機能も搭載しており、これを使えばコンパイルするときに抽象構文木を書き換えることも可能です。

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.による記事の予定です。楽しみですね!

2011年12月1日木曜日

カレンダー罰

どうみてもやりすぎです。本当にありがとうございました。

まず定番。

Ruby Advent Calendar jp: 2011
四日目だったかな。わんつーすりーの12/3狙っていたら  $ ruby -e (0..2).each {|i| puts 2**i} になった。
こっから完全に罰。

Nimrod Advent Calendar jp: 2011
Nimrodというプログラミング言語のカレンダー。言語について語るのでよい。三人で回す。
一日目担当。だが三日後にはまたくる。とりあえず一日目は書いた。
【1日目】こんにちは、Nimrod! - 32nd Blogger

My AdventCalendar 2011
@takano32 についてのカレンダー。自分についてただ語るのはつまらないので、ぜんぶ英語で書くことにした。これから24日間続く罰。一日目担当もクソもねぇよ。書いた。
【day 1st】Welcome to "My AdventCalendar 2011"

ちなみに俺以外にも俺カレンダーの猛者たちいる。はじめに俺カレンダーみたいなのはじめようって考えたクズハはパネェと思う。PHP愛を感じる。
このままいくとRuby以外はぜんぶ複数回書くことになりそうなのでお前らもなんか参加しろってば!!!的な。何か。

なんなら高野光弘になりませんか。ならないね。

こんにちは、Nimrod!

この記事はNimrod Advent Calendar jp: 2011の1日目の記事です。

こんにちは、こちらは今日からはじましります、NimrodのAdvent Calendarの1日目の記事です。私は1日目を担当している @takano32 です。

まず、Advent Calendar とは12月1日から12月25日までブログ記事をある事柄についてのリレーしていくという技術系界隈から派生した文化です。
Nimrod Advent Calendarではプログラミング言語のNimrodについての記事をリレーしていきたいと思います。

さて、初日ですので、Nimrodの紹介からはじめましょう。
Nimrodは海外での開発がさかんな新しいタイプのプログラミング言語です。以下のようなサイトで情報を手に入れることができます。
    • Nimrodの開発および開発に関する議論などはGitHubを通じて行われています。ここのソースコードがマスターです。私たちもこのレポジトリをフォークしてhametsu / Nimrodを編集し、コミット、プルリクエストなどをしています。作者のAndreas Rumpfさんはとても気さくな方で、些細なプルリクエストなどについても議論、検討を行なってくれます。ぜひみなさんもコミットしていきましょう。
  • nimrod-code.org
    • Nimrodのマニュアルなどが整備されている公式サイトです。あらゆる情報が掲載されています。コードを読むよりも先にNimrodがもつ特徴などを知りたい!といった場合にも、まずはこちらを参照されるとよいでしょう。
  • Nimrod forum
    • NimrodにはGitHub以外にも議論を行うためのフォーラムが用意されています。アクセスしてみましょう。おやおや?一見、何も議論がされていないようにみえますね。これはphpBBという掲示板システムが複数の掲示板を取り扱うように設計されているため、そのうちのひとつとしてNimrodの掲示板がきちんとリンクされています。
      コードをベースにした議論はあまりありませんが、重要なアナウンスや今後の方針についての議論がされていますのでこちらも要チェックですね!見逃せません!!!
今日はNimrod Advent Calendar jp: 2011の1日目をお送りしました。
軽くNimrodのコミュニティについて説明させていただきました。わくわくしてきましたね。みなさんもぜひ新しい世界へのプログラミング言語Nimrodを習得し、楽しいNimrodライフを!

次の記事はsyanbi a.k.a. @xga さんです。お楽しみに。

Welcome to "My AdventCalendar 2011"

Hi, this is TAKANO Mitsuhiro a.k.a. @takano32.
Welcome to my advent calendar that hashtag is #advent11takano32.

This advent calendar will be written about me and in English.
Today is first entry of my advent calendar and introduction of itself.

"Continuation is power." i think.
That's enough for today.

Thank you.

My AdventCalendar 2011 - All your base are belong to us