uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

2011-01-01から1年間の記事一覧

流れるようにGEP3(Fluent GEP3)

流れるような(フルーエント)インタフェースは、Groovy 1.8の新規機能である「拡張コマンド式(GEP3)」と親和性が高いのではないかと思い、S2JDBCチュートリアルを参考にして、具体的には上に含まれるテストコードをGEP3でいくつか書きなおしてGroovyから呼び…

GroovyにおけるProject Coin相当拡張について

id:fumokmmさんの日記で、「5分で理解するProject Coin」というすばらしい記事があり、Java 7の言語に関連する拡張がすぐに良くわかるように紹介されています。(私もしばらく前に記事をかきました。)Groovyでもじつは、Coinの文法拡張について細かいものも…

Groovy AST Browser Improved!

昨日のブログでも言及しましたが、Groovy 1.8.0では、Groovy ConsoleのASTブラウザ([Script]-[Inspect AST]で呼び出す)が進化して、AST変換前後のASTを、Groovyコードとして表示してくれるようになりました。 上は下のコードをInspect ASTしてみたものです。…

GroovyConsoleの改善と、その背景にあるワザ(@ThreadInterrupt AST変換)

@tyuki39さんの groovyconsoleってスクリプトの実行を中止出来ないのかな?組み合わせパターンを間違って多めに作ったときに固まって困る。2011-04-16 21:58:38 via Teeweeのつぶやきを切っ掛けとして、Groovy 1.8のGroovyConsoleを試してみて気づいたのです…

println -1やprintln[1]はなぜエラーなのか

Groovyで、println -1やprintln[1]を、println(-1)やprintln([1])のつもりで書いても以下のようなエラーになります。 $ groovy -e 'println -1' Caught: groovy.lang.MissingPropertyException: No such property: println for class: script_from_command_l…

java -jarで起動できるGroovy

http://jira.codehaus.org/browse/GROOVY-2128によれば、Groovy 1.8以降では java -jar /tool/groovy-1.8.0-rc-3/embeddable/groovy-all-1.8.0-rc-3.jar hoge.groovyのようにGroovyスクリプトやGroovyのクラス定義を起動できるようになります。beta4でFix-Cl…

GEP3のさらなる拡張

Groovyの1.8のどこか(たぶんbeta3)から、代入式右辺のメソッド呼び出しにおけるカッコの省略ができるようになっています。 home =System.getProperty "groovy.home" foo = System.getProperties().setProperty 'foo', 'bar' // 1.7ではエラーだが1.8の新しい…

[groovy] GroovyがTIOBEランキングで25位に

独自の基準でプログラミング言語の人気度を順位付けしている「TIOBEランキング」のサイトで、2011年3月にGroovyのランキングが25位(0.457%)になってます。過去の最高は36位(0.247%)であり、ちなみに2007年では37位、2009年では47位 、2010年には悪化して51-1…

クロージャにとってdelegateとは何か

短い答え 短い答え: クロージャにとって、delegateってのは、変更可能なthisですよ。 長い答え メソッドにとってthisとは何だったか まず、thisとは何だったかを確認します。thisの中核的な意味は、インスタンスメソッドから見て自分自身が所属するインスタ…

Builderとは何か

Builderというのは、Groovyのとても特徴的な機能だと思います。たとえば、MarkupBuilder。 new MarkupBuilder().root { a( a1:'one' ) { b { mkp.yield( '3 < 5' ) } c( a2:'two', 'blah' ) } } こんなんを書くと、 <root> <a a1='one'> <b>3 &lt; 5</b> <c a2='two'>blah</c> </a> </root> こんなのが表示されま…

Groovy 1.8 modularizationとは何か

Groovy 1.8の新機能として、「モジュール化」というのがちらほら出て来ています。たとえば、1.8.0-beta1のリリースノートには、 .. and we're also seizing this opportunity to work in parallel on making Groovy more modular. Some early work towards m…

GROOVY_HOMEを設定しない方が良い理由

Why You Should Never Set GROOVY_HOMEという記事があり、GROOVY_HOME環境変数を設定してしまうと、複数のGroovyをインストールしてるときとか、あるいはGrailsとGroovyの両方をインストールしてるときに邪魔でしかないので、GROOVY_HOMEは設定せず、PATHにG…

Groovyではprivateが無視されるというのはバグとみなされている

これもトリビア。現在のGroovyはprivateを無視します。なのでjava.lang.String#valueの値を変えることも容易にできます。試験に便利なときもあるかもしれません。しかしこの機能(?)は古来からバグとみなされてます。いにしえのjsr-03では禁止されていたらし…

Groovyの生産性

GroovyとJavaとの生産性の比較について、groovy-userのMLで報告してた人がいたので紹介。 groovy/javaの混合言語のプロジェクトで、Javaコードをgroovyにコンバートすることをやってた。たいていは、拡張したりバグ修正したり必要に応じてリファクタリングも…

GroovyはPure Javaじゃない

トリビア?です。GroovyはPure Javaじゃないんですね。 $ jar tvf /tool/groovy-1.7.3-bin/lib/jline-0.9.94.jar | grep dll 16069 Fri Feb 22 03:02:14 JST 2008 jline/jline32.dll 48128 Fri Feb 22 03:02:14 JST 2008 jline/jline64.dll groovyに同梱され…

「int i = null」はエラー

groovy 1.8からは、「int i = null」はエラーです。 $ groovy -e 'int i=null' Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'null' with class 'null' to class 'int'. Try 'java.lang.Integer' instead at …

G*WS LT資料

先日開催されました、G*WS 15thは大変盛況でありがとうございました。 川口さん、LTをしていただいたみなさま、JGGUG運営スタッフのみなさまありがとうございました。@kimukou_26さんによるまとめもありがとうございます。 Groovyの持つ魅力の一端が共有でき…

(再告知)g*workshop 14th, 「Groovyの使い倒し方、Hudsonの場合」他

以下で周知させていただいた、「g*workshop 14th, 「Groovyの使い倒し方、Hudsonの場合」他」ですが、いったん満席となったものの、調整され、今ちょっとだけ人数に余裕があるようです。http://d.hatena.ne.jp/uehaj/20110210 http://kokucheese.com/event/i…

g*workshop 14th, 「Groovyの使い倒し方、Hudsonの場合」他

来る2/24、Hudson改めJenkinsの開発者、川口耕介さんが来日するのにあわせ、G*ワークショップが開催され、じきじきにHudon&Groovyの話がお伺いできます。日本を代表するJavaハッカーの川口さんがいかにGroovyを使い倒しているか聞いたら凄いことになりますね…

DevLOVEぐるぐるGroovyで「気楽に使おうGroovy」の再演をしてきました

1/24日、DevLOVEのぐるぐるGroovyでCCCでやった「気楽に使おうGroovy」の再演をしてまいりました。会場を提供いただきましたクラスメソッドさま、参加者のみなさん、DevLOVEのみなさん、ありがとうございました。様子をid:kimoku26さんがTogetterしてくれま…

Closure#trampoline()続き

昨日trampoline()について書きましたが、今日はtrampoline()で相互再帰もできますという話。まずはtrampoilne()使わないバージョン。 oddp = { n -> if (n==0) { false } else evenp(n -1) } evenp = { n -> if (n == 0) { true } else oddp(n - 1) } printl…

Closure#trampoline()とは何か

Closure#trampoline()はGroovy 1.8の新機能の1つです。何かっていうと、「明示的な末尾再帰の指定*1」を行うためのものです。これを使うと実際には再帰じゃなくなります。ループになります。スタックを消費しなくなります。だから正確に言うと、「いっけん再…

第14回G*ワークショップ

今月のG*WSが周知されてます。1月31日 第14回 G*ワークショップ(東京都) 1.「Groovy&Grails exchange 2010@Londonへ行ってきた報告!」by tyama, tamada (ニューキャスト) 2010年12月に開催された「Groovy&Grails exchange 2010」に参加してきましたので、…

Fieldアノテーションって何?

Groovy 1.8.0 beta 2 から@Field*1というAST変換アノテーションが使えるようになっています。これは何かといいますと、いままではスクリプト中で int x = 3 def y() { println x } y() の様に書くとエラーになっていました。なぜならxは、このスクリプトが実…

ANTLRパーサプラグインでGroovyコードを加工

メーリングリストを眺めてたら目にとまった、「ANTLRパーサプラグインを作成して、Groovyコードに任意の加工を行う」というテクニックをご紹介。Groovy web console - Custom antlr parser pluginここではメソッド呼び出しの括弧を挿入しているようです(GEP3…

[groovy][kobo] koboプロジェクトの成果がGroovy 1.8の機能に影響を与えたのだと

我らがJGGUG/koboプロジェクトの成果の一つに、kobo-commonsプロジェクトというのがあります。ここではいくつかのAST変換のアノテーション含む機能群を開発しているのですが、@Equivアノテーションというのもその1つです。 つらつらと調べものをしてたら、Pa…

速いぞGroovy!

Javaと同等レベルに高速に実行できるGroovyコードを書く方法が紹介されてます。 Yes, Fibonacci in Groovy can be as fast as Java ! こんなスクリプトです。 @ast.Bytecode int fib(int i) { l0 iload 1 iconst_2 if_icmpge l1 iconst_1 _goto l2 l1 frame …

MacBook Air 11インチ欲しい!

MacBook Air 11インチ欲しい! 小学生のとき、一夏中ルパン3世アイスを食いまくってゲームウォッチが当らなかったあの日に抽選というもの全てに対して生涯何の希望も持つこともやめたんだった。でも応募が簡単なのはいいね。