uehaj's blog

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

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*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」を行うためのものです。これを使うと実際には再帰じゃなくなります。ループになります。スタックを消費しなくなります。だから正確に言うと、「いっけん再…

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!

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 …

Announcing CodeNarc 0.11

Groovy用の静的解析ツールであるCodeNarcの0.11リリースのアナウンスが出ています。Groovy版checkstyleと思えばよろしい。今バージョンではチェックルールが増えたようです。業務開発ではコーディング規約を揃える必要がありますが、これを使うとGroovy開発…

STS 2.5.1試した

昨日、「STSにおいてGroovyデバッグサポートが向上した」という記事を書きました。これは、SpringSource Team Blog]の記事を読んだだけで書いたのですが、今日は実際に試してみました。デバッグ時の「式の評価」機能については、勝手な思い込みとして、「実…

JGGUG 第13回 G*ワークショップ+忘年LT大会

当日リマインダーですが、本日、今年最後のJGGUG G*WSがあります。 http://www.jggug.org/news/13th_g_workshop 2010年12月9日(木)、青山の日本オラクルセミナールームにてJGGUGの定例イベント、 G*ワークショップを開催します。今回は年末スペシャル!通常…

STSにおいてGroovyデバッグサポートが向上した

SpringSource Team Blog]によれば、STS 2.5.1では、EclipseにおけるGroovyデバッグサポートの機能が向上しているようです。STSというのはEclipseのSpring関係詰め合わせパックです。要約すると、 1. Step in/Step outで、いままではreflection and cached ca…

第12回G* Workshop 11月9日

JGGUGの月例勉強会「G* Workshop」が11月9日に行われます。http://kokucheese.com/event/index/5267/DCIアーキテクチャ、合宿企画報告、JavaOne参加者が語る海外Groovy/Grails事情など、興味深いところがもりだくさんです。ぜひご参加ご検討ください。 JGGUG…

クロージャのメモ化

ハイウェスト日記経由で、「Groovy 1.8 beta3 からClosureのメモ化ができるようになった」とのことを知り、情報を探してみました。 Implement closure memoization, like in GPars を読むとクロージャに以下の3つのメソッドが追加されています。 memoize() m…

JJUG CCC 2010 BOF「気楽に使おうGroovy」プレゼン資料

本日、JJUG CCC 2010にて、Groovyのプレゼンをして参りました。コマ割りの都合上、和気あいあいと、フレンドリーに発表ができ「勉強会状態」でした。http://twitter.com/#search/%23CCC10の最後の方で皆様がつぶやいてくれています。ありがたいです。JVM言語…

HtmlUnit賛歌

知っている人には、今さらですが、HtmlUnitというものがあります。名前からするとxUnit系の、ユニットテストツールのような気がするかもしれませんが、違うよ!全然違います。誤解を招く名称です*1。これはGUIレスなブラウザなのです。GUIがないだけでなく、C…

groovyをコンパイルする際に一部のユニットテストだけを実行する方法

groovyをコンパイルする際に一部のユニットテストだけを実行する方法。 ant -DtestCase=groovy.RegularExpressionsTest test ant -DtestCase=groovy.GroovyMethodsTest test こんな感じ。

日本語DSLのサンプルコードがJavaOneで引用された!

こないだのエントリで書いた、日本語DSLのサンプルコードが、ただいま開催されているJavaOneにおけるPaul King氏のセッションで紹介されたとのことです。@nobeans: [DSL/Groovy]@uehajのDSLがJavaOneで晒された瞬間 URL #javaonejp2010-09-24 09:13:59 via Y…

クロージャの合成

Groovy Web Consoleを見ていて気づいた事ですが、Groovy 1.8ではクロージャに対する演算子>で関数合成ができるようになってますね。 def twice = { a -> a * 2 } def plus3 = { a -> a + 3 } def t1 = twice >> plus3 def t2 = twice << plus3 assert t1(1) …

Groovyで日本語DSL再び(+GEP3の解説)

注意:以下の内容はGroovy 1.8のβ(9/19時点のtrunk)で試した結果を元にしています。最終版では異なってくる可能性があります。前に「Groovyの日本語DSL」という記事を書きましたが、前に紹介したGEP3の機能(Groovy 1.8系でのみ利用可能)を使って、括弧やピリ…

括弧を減らせ…括弧ゴルフwith Groovy:結果0個

旧聞に属しますが、ちょっと前に流行った括弧ゴルフ(括弧をなるべく使わずに階乗を計算するやつ)をgroovyでやってみました。 a = args as List a += '1' a.putAt 1, 'x' a -= 'x' s = a as String c = s.chars c.putAt 0, " " minus1 = -1 c.putAt minus1, "…

GEP3の例

Groovy 1.8ではGEP3という機能拡張が予定されていて、それは何かと言うとカンマや括弧の解釈の優先度とか省略ルールを変えることで、「メソッド呼び出しっぽくなく」英語のようにメソッドが呼べるようになると言うものです。以下、glaforge氏による実行可能…

Gretty..軽量でノンブロッキングなイベント駆動Webサーバ

http://groovy.dzone.com/articles/512000-concurrent-websockets?utm_campaign=toya256ForRSS&utm_medium=twitter&utm_source=am6_feedtweetによれば、GrettyとはNettyを使っており、Groovy++で書かれており、超軽量でノンブロッキングなイベント駆動のWeb…

GroovyServの小技シリーズ番外編 - GrailsをGroovyServで実行してみる。

結論:予想通り、あまり嬉しくないやってみた。 $ alias gs_grails="groovyclient -cp $GRAILS_HOME/lib/groovy-all-1.7.4.jar:$GRAILS_HOME/dist/grails-bootstrap-1.3.4.jar:/System/Library/Java -Dgrails.home=$GRAILS_HOME -e 'org.codehaus.groovy.gra…

正規表現における部分文字列の後方参照(キャプチャリング)をスマートに

http://groovyconsole.appspot.com/script/202001にも投稿しましたが、 java.util.regex.Matcher.metaClass.call = { Closure c -> while (delegate.find()) { (0..delegate.groupCount()).each { c.setProperty("\$$it", delegate.group(it)) } c.call(dele…

GroovyServの小技シリーズ6 Groovyコードの保存時に自動的にコンパイルエラーチェック(ただしEmacsに限る)

Eclipseとかでは常識ですが、あるいはflymakeを適用したruby-modeでもそうなってますが、Groovyソースを保存したときにgroovycをかけるというもの。基本的なエラーは見つけてくれるので便利。もちろん、今までのgroovycでもできた訳ですけど、遅い。毎回保存…

GroovyServの小技シリーズ5 - GroovyServで実行しているかどうかを判定する

GroovyServ配下で実行中は、システムプロパティ"groovy.runningmode"が定義されています。 GroovyServ配下での実行と、通常実行中で動作を切り分けたいときに使えます。 $ groovycilent -e 'if (System.getProperty("groovy.runningmode")){println "GroovyS…

GroovyServの小技シリーズ4 -- Eclipseの外部ツールにgroovyclientを登録する

昨日のEmacs版に続き、編集中のGroovyコードを1アクションで実行する方法のEclipse版です。これはid:nobeansさんがid:masanobuimaiさんに記事「http://d.hatena.ne.jp/masanobuimai/20100714#1279119388」にてコメントしている内容そのものです。[Run]-[Ext…

GroovyServの小技シリーズ3 -- groovy-execute-buffer-file

編集中のバッファ中のGroovyコードをGroovyServで実行するコマンド。 (defvar groovy-command "groovyclient %f" "groovy or compatible command. %f means buffer-file") (setq groovy-command-line nil) (defun groovy-execute-argument() (if (null groov…