kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Scala

Scala Days 2011で発表してきます

Twitterなどでは既に書いているので、知っておられる方もいるかもしれませんが、今年もScala Daysに行って来ます。で、せっかく行くのでやっぱり発表はしたいよね、ということでSpeakerとして申し込んだらacceptされたので、発表してきます。タイトルは、「P…

Scala 2.9.0のscala.sys.processパッケージが便利過ぎる件について

先日、Scala 2.9.0 RC4がリリースされ、正式リリース(final)までもうあと少しといった感じになって来ましたが、皆様、いかがお過ごしでしょうか。訓練されたScala使いはRCには手を出さないとも言われますが、私は新し物好きなので、RCにも手を出してしまいま…

Scalaのimplicit parameterでC#のdefault(T)を実現する

このエントリはScala Advent Calendar jp 2010の11日目です。また、このエントリはTwitterでの@xuwei_kさんの疑問に答えようと考えて作成したコードが元になっています。どうもありがとうございます。皆さん、C#のdefaultみたいなことScalaでしたくなったこ…

刺激を求める技術者に捧げるScala講座 第17回 Scalaとパーザコンビネータ(基本編) が公開されました

元々、一つの記事として書いていたものですが、長過ぎたので2回分に分割された内の前編です。後編は来週頃公開の予定です(記事へのリンクはこちらです)。既にScalaのパーザコンビネータを触ったことのある方にとっては当たり前の事しか書いてなくて少しばか…

ろーざんぬ!

4月13〜23日にかけて、Scala Daysというワークショップに参加するために、スイスのローザンヌという所まで行ってきました。帰って来てからもう数日経つので今更なのですが、k.inabaさんもローザンヌでの事を書かれたようだし、自分も一応書いておかなければ…

Scala Eclipse Pluginについて重要なこと(新しくScalaを始める人に対して)

とりあえず今は使わない方がいい。Scala 2.7系列(現行の安定バージョン)用のEclipse Pluginはバギーだし挙動がよくおかしくなるし、とてもではないが実用に耐えるものではない。時折、新しくScalaを触る方がScala Eclipse Pluginに手を出して痛い目に合って…

Scala 3.0の新機能

注意:この記事はエイプリルフールのネタ記事です。エイプリルフールを過ぎてしばらく経つので、まぎらわしいかと思い、ここに書いておくことにします。今年中には、再設計されたコレクションライブラリ、名前付き引数のサポート、部分継続などの数々の新機…

Scala Days 2010で発表することになりました

Twitterで2週間近く前に書いたので既に知っておられる方も居るかもしれませんが、一応宣伝も兼ねて。School DaysScala Days 2010というScalaオンリーのワークショップが、今年の4月15-16日にEPFL(Scalaのお膝元)@スイスのローザンヌというところで行われます…

Scala 2.8へ移行する際の注意点 〜Web Flavorの場合〜

Twitter見ていると、@keisuke_nさんが Web Flavorの話を日記に書くと、約一名反応してくれたw。Scala 2.8に対応してくれ人のこと。正直いうと実装コストがよくわからない>< http://twitter.com/keisuke_n/statuses/9523684805 のような事をポストされてい…

『やさしいScala入門 平明な例と演習問題で学ぶ』の重箱の隅をつつく

『やさしいScala入門 平明な例と演習問題で学ぶ』の感想というかダメだしの続き。言いたいことは前のエントリで一通り言ったので、後は重箱の隅をつつくような話。 本文について 「イミュータブルなプログラミング」? p.3 Scalaでは、純粋関数型言語的なイ…

『やさしいScala入門 平明な例と演習問題で学ぶ』の感想というかダメだし

発売日は2/22だが、秋葉原の書泉で先行販売?されてたので、購入した。この本の著者がこれまでに書いた本の評判がよろしく無いらしいことは、Twitterで事前に情報を入手していたから知っていたので、内容のひどさについてはある程度覚悟していたが、こりゃダ…

PEGEX: PEGEX: a PEG-based pattern matching library EXtended by back reference with regex-like notation in Scala

PEGEXとは、自分が現在開発中の、ScalaによるPEGをベースとしたパターンマッチングライブラリです。従来のPEGは、構文解析などの用途に主として使われることを想定しているからか、シンタックスが「重い」ため*1、簡単な文字列マッチングに使用するにはやや…

Scala Hack-a-thon #2

id:yuroyoroさん主催のScala Hack-a-thon第2回に参加してきました。前回は、話している人がほとんど居なくて、会話の大半がTwitter上で行われるという状態でしたが、今回も似たような感じで会場は終始静まり返っていました。皆、もうちょっと会話して意見交…

第4回Scala言語仕様輪読会@scala-be

前回から結構間があいてしまいましたが、ちゃんと続けます。前回と同じく、Scala言語仕様について、淡々と私(id:kmizushima)が読んで行き、それに対して他の参加者がツッコミを入れるという趣旨の会です。今回は、前回に引き続き、Chapter3 Typesの続きを読…

Scala変態技法最速マスター

Java変態文法最速マスターなんてのがかなりブクマされてるみたいだが、変態さならJavaなんてScalaの足元にも及ばないぜ!!ということで、Scala版を書いてみました。しかし、実はあまり変態ではないかもしれません。元ネタと違って、これを読めば何かがわか…

PEGのパーサ in Scala

ScalaのパーザコンビネータでParsing Expression Grammar(PEG)の文法を定義してみました。PEGのインタプリタ作る副産物としてできたもので、構文木も作ってくれます。まあ、使いたい人が居るかは激しく疑問ですが、パーサコンビネータの使い方の参考になるか…

Scala 2.8.0 Beta 1

待ちに待った2.8系の初めてのpublic release(betaだけど)。一応、2.8の進捗についてはMLの流れを追ってたんで大体把握してはいるけど、Type constructor inferenceとか、2.8に入るとは思って無かった機能も入っているみたいで嬉しい限り。変更点の概要につい…

Int#+の怪

Scalaでは32ビット符号付き整数を表すIntは特別な型ではなく、単にAnyのサブクラスであるAnyValのサブクラスであるIntクラスだという事になっているし、実際そのように扱われる。また、Intに対する+などの各種演算子も単なるIntクラスのメソッドであることに…

人材獲得作戦・4 試験問題 を解いてみた

なんか、人材獲得作戦・4 試験問題ほかの問題を解くのが一部で流行っているらしいので、Scalaで解いてみた。途中、くだらない所ではまって時間を浪費しまって、1時間超過してしまったのは恥ずかしい限りだ(正確には計測してないが、たぶん1時間20〜30分くら…

無名関数を作るためのシンタックスシュガー

普段Scalaのことばっかり書いてるこの日記だが、たまにはClojureの話題でも。Clojureには、無名関数を簡単に作るための構文があり、無名関数化したい範囲を#()で囲って、引数を与えたい部分に%を書くという感じで、短い無名関数を綺麗に書けるので気に入って…

Scalaの限定継続を使って、C#のyieldぽいものを実現するライブラリを書いてみた

Scalaの限定継続を使って遊んでいたら副産物的にできたもので、実用に供することができるものではないですが、まあこんなこともできますという例として。なんかキャストとか使っていてあまり綺麗じゃないですが、型安全なように書こうとすると複雑になる上に…

あけましておめでとうございます & 今年やりたいこと

といっても、もう1/3ですが。去年を振り返るエントリでも書こうかなーと思ったのですが、面倒なのでそれはやめにして、今年やれたらいいなー(or やる予定のこと)をつらつらと書き連ねていこうかと思います。あくまでやれたらいいなー的なことなので、今年中…

ひょっとしたら役に立つかもしれないScala Tips(4) - パターンの漏れを検出する

ScalaでMLやHaskellのalgebraic data typeを模倣するときの定番は、abstract class(or trait)とcase classを使って、 trait Exp case class Add(l: Exp, r: Exp) extends Exp case class Num(v: Int) extends Exp のようにすることだが、非常に残念なことに…

ひょっとしたら役に立つかもしれないScala Tips(3) - 無名関数+パターンマッチの略記法

久しぶりのScala Tips。Scalaをそこそこ使っている人でも意外と知らない方が多いようなので、一応。たとえば、以下のようなコードがあったとする(やや恣意的な例だが): List("A", 1, 1.0, true, Nil).foreach{e => e match { case _: Int => println("Int")…

this.typeとcloneと型安全性

Scalaでthis.typeとcloneを組み合わせたときに起こる問題について、@cocoa_rutoさんの一連のポストが興味深かったので引用してみる: Scalaでthis.typeなフィールドを持つオブジェクトをcloneしてもそのフィールドは元のオブジェクトを差す。クラスの型メン…

scala.Nothingは何のためにあるのか

scala.NothingはScalaのクラス階層における、「一番下」に位置するクラスで全ての型のサブタイプになるが、これが何のためにあるかという点でつまづく人が時々居るようだ。というわけで、scala.Nothingがあると何が嬉しいのかという点をちょっと説明してみよ…

はてなダイアリーのスーパーpre記法がScalaに対応

したらしいので、早速試してみることに。クラス: class Point1(val x: Int, val y: Int) case class Point2(x: Int, y: Int) class Point3(var x: Int, var y: Int) { def aMethod { println("Point3") } } trait: trait Hoge { def display val x: Int var…

Scalaで静的スコープ(かつ、間違った使い方をしにくい) breakの実装

Scala 2.8ではライブラリレベルでbreakがサポートされることになっていて、以下のような感じで使える: breakable { for(i <- 1 to 10) { if(i >= 5) break println(i) } }これはこれで便利だし大変結構なのだけど、このライブラリレベルbreak、どのbreakabl…

ScalaでStateモナド

Scalaでは普通に副作用が使えるので、Stateモナドみたいなのの出番はまず無いんだけど、最近Haskellの各種モナドをScalaで書き直すのがマイブーム(死語)なのでやってみた。今回も、All About MonadsのState monadの解説ページの実装丸写しで大した工夫も無い…

第3回Scala言語仕様輪読会@scala-be

開催が告知されたのが結構前で、既に枠はかなり埋まっているのですが、一応こちらの日記でも告知しておきます。前回と同じく、Scala言語仕様について、淡々と私(id:kmizushima)が読んで行き、それに対して他の参加者がツッコミを入れるという趣旨の会です。…