uehaj's blog

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

groovy

ParrotブランチでGroovy3を垣間見る

これはG*Advent callender 2016の記事です。 前日はわたし@uehajの記事でした。明日は@mshimomuさんの記事です。 はじめに Parrotブランチのコンパイル 警告 do-whileループ Java8構文 ラムダ式の記法 細かい話1 細かい話2 メソッド参照の記法 コンストラク…

List.collectManyで非決定計算

これはG*Advent callender 2016の記事です。 前日は@Ziphilさんの記事でした。明日はまた私@uehajの記事です。 出オチでタイトルオンリーです。 すごいHaksell楽しく学ぼう(以降H本)にも書かれているように、リストはモナドとみなすと「非決定計算」をあらわ…

Javaにも不変データ構造に基づいた(Cons セルベースの)リストがあるのだよ

TL;DR JDK(tools.jar)中、com.sunパッケージ配下に、javacが内部的に使っている「com.sun.tools.javac.util.List 」が含まれており、これは不変データ構造としてのリストのように(Cons セルベースのリストのように)利用できる。 はじめに ScalaのコードをGro…

Groovyをソースからコンパイルすると♪

groovyのソースをとってくるじゃろ。 % git clone https://github.com/apache/groovy.git コンパイルするじゃろ。 % cd groovy % ./gradlew installGroovy すると、頭の中であの音楽が鳴り始める♪

GroovyのクロージャとJava8のlambda式の違いについて

この両者は、似ているようでいて、基本的には別モノです。表にしてみます。 Groovyのクロージャ java8のlambda式 導入時期 2003年 2014年03月 ローカル変数へのアクセス 読み書き可能 実質的にfinal(変数そのものに対しては読み込みのみ) 実装方法 Closure型…

渋谷JVMで「いまさら始めようGroovy」を話しました

昨日、渋谷JVM 渋谷JVM (2015/04/18 13:00〜)d-cube.connpass.com にて発表させていただきました。 アテンドいただきましたコミュニティのみなさん、ビズリーチさま、聞いてくださったみなさん、ありがとうございました。また懇親会ごちそうさまでした(たこ…

G*Magazine Vol.8に記事をかきました

G*Magazine Vol.8に、Groovy 2.3, Groovy 2.4β4までで導入された新機能の解説記事を書きました。 PDF版もありますが、ブラウザで見れる以下のリンクを紹介します。 Groovy臨機応変(第三回)〜Groovy 2.3の新機能〜 - MyBetaBook Groovy臨機応変(第四回)〜…

G*なWeb API

Grails3もカウントダウンな感じのおり、イベント紹介です。以下引用。 G*ワークショップZは日本Grails/Groovyユーザーグループの定例イベントです。Java仮想マシン上で動作するGroovy、Grails、Gradle、Spock、vert.xといったG*技術をテーマに、ハンズオンや…

Grails/Groovyのサイトを構築している、名もなき静的サイトジェネレータ

Grails/Groovyのサイトは、静的サイトジェネレータで作成されています。Groovyサイトは去年ぐらいからそうだったのですが、最近Grailsもそうなりました*1。 しかしこの静的サイトジェネレータの名前がわかりません。ソースコード上は、単に「generator/SiteG…

実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして

これは2014年のG*アドベントカレンダーの第23日目の記事のつもりでしたが、12時すぎてしまいましたorz。 HaskellやScalaやRustには型クラスという言語機能があり、個人的感想として、理解が難しかったものの一つです。いわく、インターフェースのようなもの…

(周知) 予告: JGGUG大忘年会LT大会と、LondonのG*なカンファレンス行ってきた報告!+合宿の報告もあるよ! #jggug

今週末は、JGGUG忘年会です。あしたビアバッシュのピザなどを予約しますんで、参加希望のかたは今日中にぜひどうぞ。JGGUG大忘年会LT大会と、LondonのG*なカンファレンス行ってきた報告!+合宿の報告もあるよ! - 日本Grails/Groovyユーザーグループ | Doork…

Grails/Groovyでのカバレッジ取得に関してのTIPS

プリミティブ最適化を抑制することでブランチカバレッジをましなものに Grailsでは、コードカバレッジは以下で取得できる。 Test Code Coverage Plugin(http://grails.org/plugin/code-coverage) しかし、上記を使用した場合、分岐網羅(ブランチカバレッジ)…

ヒアドキュメントと複数行文字列について

「ヒアドキュメント」をなんで「ヒアドキュメント」っていうかを調べてみた。以下が参考ページ。 http://programmers.stackexchange.com/questions/143918/why-is-it-called-a-here-document http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC%E3%82%BF%E3%8…

ペアワイズ法でSpockのテストデータを生成する

(関連記事:http://uehaj.hatenablog.com/entry/2015/10/18/155107 ) JCUnitというすばらしいJUnitの拡張があります。 JCUnit ブログ JCUnit JCUnitではペアワイズ法もしくはオールペア法という手法でテストデータを生成します。ペアワイズ法というのは、試…

Groovy 2.4のgroovyshでは、defが効くようになった。

https://jira.codehaus.org/browse/GROOVY-6623 で対処されました。 % groovysh Groovy Shell (2.4.0-beta-1, JVM: 1.8.0_11) Type ':help' or ':h' for help. ------------------------------------------------------------------------------------------…

SpockにおけるMock、Stub、Spyの違い

テスティングフレームワークSpockで相互作用中心のテストをする場合、いわゆるテストダブルとして、MockとStubとSpyの3種類を使えます。それぞれの意味などを簡単に解説します。 Spock全体含め詳しい解説はこちらなどを参照ください。 Mockに関しては、id:ya…

@BaseScriptアノテーションはscriptをインクルードするのに使えます

Groovy 2.2以降、@BaseScriptアノテーションというのが導入され、Scriptの基底クラスを指定することができる*1ようになりました。これは主目的としては、専用目的の便利機能追加・DSLの作成だと思いますが、単にscriptをインクルードするのにも使えます。例…

Groovyを勉強したい人に贈る、astprintコマンド

今ごろ言うな、って話かもしれませんが、自分で2年ほど前にこっそり作っていて最高に便利だと思っているコマンド「astprint」を紹介します。astprintの内容は以下のようにシェルスクリプトです。 #!/bin/sh groovy -e 'groovy.inspect.swingui.AstNodeToScri…

Groovy 2.3のtraitをもうちょっと調べてみるついでにScalaのtraitを理解する

(訂正2014/4/17)以下の記事ではGroovy 2.3のtaritはスタッカブルには使えない、と書いておりますが、以下によれば次のベータ(Groovy 2.3-beta-3かな)ではスタッカブルトレイトが利用可能になるようです。 次βでGroovy 2.3のtraitはスタッカブルになるようで…

Groovy 2.3.0-betaが出たのでtraitを触ってみたメモ

Groovy 2.3.0-beta-1とbeta-2が出たので新機能traitをかるく触ってみました。注意! 以下は現時点で2.3.0-beta-1と2の振舞いとドキュメントを調べた限りの情報です。正式リリースに向けて変更される可能性があります。 関連記事 Introduce Groovy 2.3 trait G…

Java VM上の言語の覇者を決める(但しJava以外)スクリプトボウルの履歴

米国開催のJavaOneカンファレンスで恒例の人気セッションとなっている「スクリプト・ボウル」というのがあります。Java VM上で動作する言語同士のガチ勝負で、コード例とか、技術力とかいろいろな側面からパネルセッションでバトルして、その年勝者を決める…

Hindley-Milner型推論アルゴリズムをGroovyで書いてみた

こないだ「Haskellのforallについて理解したことを書いておく(ランクN多相限定)」の記事を書いたときにHindley-Milner型推論アルゴリズム*1を調査するにあたって、こちらにある「Scala by Example」の16章にあるScalaでの実装例をGroovyに書きなおしたので晒…

Groovyで内包表記を作ってみた #gadvent

G*アドベントカレンダー2013第23日目の記事です。大域AST変換と拡張メソッドを使って、Groovyでリスト内包表記を使えるようにしてみます。リスト内包表記(list comprehension)というのは、HaskellとかScalaとかPythonにも似たものがある便利な言語機能であり…

Java8のStreamでフィボナッチ数を計算する

フィボナッチ数ってあるじゃないですか。 Java8のStreamを使って書いてみます。Groovyで。 import static java.util.stream.Collectors.* import java.util.stream.* println Stream.iterate([1l, 1l]) { (old1, old2) = it [old1+old2, old1] }.map{it[1]}.…

Java 8のOptionalをGroovyから超簡潔に使用する

結論 Java8のOptionalは超すっきり扱えるよ、そう、Groovyならね。 Optionalって何? Java 8で導入される新規クラスの一つ、java.util.Optionalは、メソッドの実行結果で成功する場合と失敗する場合があるときに、その返り値で成功と失敗を表現するためのもの…

Groovyでリストモナド(orリストアプリカティブ)を書いてみる

Groovyでモナドを書くシリーズその3、「Groovyでリストモナド(orリストアプリカティブ)を書いてみる」です。(参考: GroovyでMaybeモナドを書いてみた、GroovyでStateモナドを書いてみる)。Haskellではリストは、「要素が非決定計算のそれぞれの可能性を表す…

GroovyでStateモナドを書いてみる

4年前に、GroovyでMaybe Monadを書いてみた。という記事を書きましたが、続編としてStateモナドをGroovyで書いてみます。 いかに当時わかってなかったかが判りました。 abstract class Monad { abstract Monad bind(Closure c); Monad rightShiftUnsigned(Cl…

Bytecode DSL & Indy & Brainf*ck、副題「Indyを世界一簡単に扱う方法」です。

G*Workshop Z「JGGUG名物・ライトじゃないLT大会 - JGGUG G*ワークショップZ Sep 2013」でLTをしました。http://www.slideshare.net/uehaj/gws-lt-20130920keyBytecode DSL & Indy & Brainf*ck、副題「Indyを世界一簡単に扱う方法」です。 Indy(Invokedynami…

「Groovyスクリプト100本斬り」回顧編

2010年のJGGUG合宿で、企画Groovy: 「Groovyスクリプト100本斬り」 お題(公募中!)を事前に100個用意しておき、みんなでスクリプトを書きまくります。 詳細はこちら:http://www.jggug.org/Home/ibento-shiryoushuu/g100pon.pdfというのがあったのですが(…

indyでBrainfuckを実装してみよう!

唐突ですが、indy*1を使用して、Brainfuck言語処理系を実装してみます。Brainfuckはいわゆる一つの奇妙なプログラミング言語ですが、処理系の実装が容易であることを重視して設計されたチューリング完全な言語であり、試しに実装してみるのには良いでしょう…