読者です 読者をやめる 読者になる 読者になる

kmizuの日記

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

お役立ち中置パターン in Scala

Scalaには中置パターン(infix pattern)と呼ばれる機能があります。これは単純にいうと、 case class ~[A, B](a: A, b: B) のようにして定義したケースクラスに対して*1、 scala> val ab = new ~(1, "FOO") ab: ~[Int,String] = ~(1,FOO) scala> val a ~ b …

scala-nativeでは相互末尾再帰呼び出しも最適化される

Scala Nativeなのかscala-nativeなのか迷ったのですが、今後はリポジトリ名のscala-nativeに統一しようかと思います。さて、タイトルについてですが、そのまんまです。 サンプルコードは以下: gist.github.com 通常のJVM上でのScalaでは、末尾呼び出しが自…

Scala Nativeを動かしてみた(1)

Scala Nativeはscalaのコードを(LLVMのIRを経由して)ネイティブコードにコンパイルするAOTコンパイラ(Ahead Of Time Compiler)です。その存在については、少し前にサイトができていたことで一部で話題になっていましたが、Scala Days 2016 NYCにて正式に…

Scala 2.12.0-M4とJava 8 Streamで遊んでみる

Scala 2.12.0-M4はまだ正式リリースはされていませんが、既に各種バイナリはpublishされており、sbtに次のようにscalaVersionを書いてあげればふつうに使うことができます。 scalaVersion := "2.12.0-M4" さて、Scala 2.12の一つの目玉がSAM Type(Single Abs…

Scalaのメソッドや関数に関するQ&A

Scala勉強会第170回 in 本郷 rpscala.doorkeeper.jp は、サブテーマ「Scalaの言語仕様」であったため、久々に熱弁をふるったところ、特に、メソッドや関数の仕様や区別に関して疑問に思った方が多かったらしく、質問も多かったので、Q&A形式でまとめておきま…

プロジェクトのバイナリ互換性をうっかり壊してしまわないように、最初に気を付けるべきこと(主にScala)

先日、MiMaの紹介のために、 kmizu.hatenablog.com を書きましたが、それの続編みたいな何か。基本的なことだと思うのですが、色々なScalaプロジェクトがバイナリ非互換な変更の元になる行為を意図せず行っている気がするので、啓蒙のために書いてみることに…

MiMa(Migration Manager)でScalaプロジェクトのバイナリ互換性をチェックする

MiMaは主にScalaライブラリ(Scala本体を含む)のバイナリ非互換な変更をチェックしてくれるライブラリです(おそらくバイトコードレベルの検査なので、Javaプロジェクトでもチェックできると思うのですが試していない)。 元々の経緯としては、Scala 2.9以…

HOPEG 0.0.1リリースしました。

タイトル以上のことはほとんど書くことがないのですが、HOPEG、最初のリリースです。 詳しくは以下。 github.com hopeg 0.0.1をlibraryDependencyに追加して、利用コードの中で import com.github.kmizu.hopeg._ val grammar = HOPEGParser.parse( """ |S = …

Scala Conference in Japan 2013 〜座長の軌跡〜

時間が経つのは早いもので、Scala Conference in Japan(略称ScalaConfJP) 2013 (3/2(土), 3/3(日)) が開催されてからもう2週間です。200名分のチケットが1週間足らずで売り切れ、その後もキャンセル待ちが増え続けた段階である程度の盛り上がりは予想してい…

sbt + sbt-idea + Intellij Scala Pluginを使ったScala開発 (in Mac OS X)

注意:この記事の内容は、2013年7月2日現在、やや古くなっています。現在は「Use external build」のチェックはONにしたままで、「Use project FSC」をチェックしない方が安定して動作します。これは、最近のアップデート(ここ1〜2ヶ月くらいの話ですが)「…

irof式が実装できたよ。そう、Scalaならね! (Re: irof文が実装できたよ。そう、Scalaならね!)

See: irof文が実装できたよ。そう、Scalaならね!返り値が思い通りにならないことに困ってらっしゃったようなので(?)、実装してみました。 object Main { case class irof[A](val condition: Boolean)(blockA: => A) { val thunk: () => A = () => blockA…

Weak Conformanceのはなし

この記事はPlay or Scala Advent Calendar 2012 の 6日目です。今回の記事は、とりわけ役に立たないことを自負しています(役に立つ記事を読みたい人は飛ばしてください)。本題に入る前に、conformanceという概念についてざくっと簡単に説明しておきます。こ…

Iterator.continually()を使おう

Scalaの標準IOライブラリであるscala.io(.Source)は非常に腐ってます。読み込みしか対応してない上に、バイト列の読み込みもサポートしてないという代物。しかも、Scala 2.7まではscala.io.Sourceがそのままだとcloseできなかったりとか(今はcloseできます)…

Jsonda 0.4.0リリース

昨日、Jsonda 0.4.0をリリースしました。先日の日記では、次のバージョンを0.3にするようなことを書いたのですが、リリース版のメジャーバージョンは0.2 -> 0.4 -> 0.6のようにすることにしました。Jsonda 0.2.1と同じく、Scala 2.9.1とScala 2.9.2用にクロ…

Jsonda 0.2.1 & Jsonda 0.3について

しばらく前ですが、Jsonda 0.2.1をリリースしました。0.2からScala 2.9.1とScala 2.9.2のクロスビルドしているので、どちらでも使えます。Jsonda 0.2からsonatypeにpublishしてるのでresolversへの追加なしで、以下の一行をbuild.sbtに追加するだけで使えま…

_ と _ の違い

意味不明なタイトルですね。このエントリの目的は、二つの似た_の使い方が全く異なる意味を持っていることを認識してもらうことです。最初に結論を言います。Scalaの式中における obj.method _ という使い方(Method Values)と obj.method(_) という使い方(Pl…

プレースホルダー構文クイズ(解答編)

淡々と解答編。 1. =の右辺の展開結果が全く同じになるコード例のグループを全て列挙してください A. (1-2, 1-5), (2-1, 2-2), (2-3, 2-4), (3-1, 3-5), (4-3, 4-4) 2. コンパイルできるコード例を全て抽出してください(e.g. 1-2, 1-3)。 A. 1-2, 1-3, 1-5, …

プレースホルダー構文クイズ(問題編)

初めに言っておくと、これはマジなクイズではありません。実際にScalaのプレースホルダー構文を使う上でここまで詳細な挙動を知る必要はありませんし、知る必要のあるようなプレースホルダー構文の使い方をしていたら、それはおそらく誤った使い方です。ただ…

『Scala逆引きレシピ』 感想

少し前に献本いただいたのですが(竹添さん、翔泳社様、ありがとうございます)、時間が無くてあまり読み進められていませんでした。昨日使って一通り目を通したので、ちょっとした感想を書きます。購入の際の参考になれば幸いです。まず、結論から言うと、本…

Scalaの標準(コレクション)APIを読もう:車輪を再発明する前に

なんか久しぶりに、技術ネタっぽい何かです。Scalaの標準ライブラリは結構偏りがあって、scala.ioとかのIO周りは壊滅的だったりする(ので早くScala-IO入って欲しい)のですが、コレクションライブラリは結構充実してて、色々便利メソッドがあったりします。コ…

Finagleハッカソンします

先日のJavaOne TokyoでTwitterの人が発表していたTwitter製のRPC用FW Finagleハッカソンを5/19に行います。JavaOneのときに、@gakuzzzzさんと相談して日程を決めて、段取りなどは@gakuzzzzさんにお願いしたのですが、募集開始してからあっという間に定員オー…

Githubを使ってScalaの開発に貢献しよう

ScalaJP盛り上げよう企画として、Scalaブログリレーをちょっとやってみることにしました。ルールは簡単で、それぞれが好き勝手にScalaに(少しは)関係する話題を書いて、次に書く人を指名するというものです。指名された人は、7日以内に記事を上げるか、無理…

Scala 2.10.0 Milestone 1

このエントリ読んでいるような人は既にとっくに知ってそうな気がしますが、ブログ更新再開の手始めとして、すぐ書ける話を持ってきました。さて、つい先日、Scala 2.10.0 Milestone 1(以後、2.10.0 M1)がリリースされました。2.10.0 M1の新機能とかはとりあ…

Scala 2.9.1 final 雑感

このブログ読んでるような人ならとっくに知ってそうですが、昨日、Scala 2.9.1 finalがリリースされました。今回のバージョンアップは、メンテナンスリリースということで、2.9.0.1と完全にバイナリ互換になっています。というと、あんまり嬉しくなさげです…

勝手に添削:「「ある金額になるコインの組み合わせ」をScalaで」

まずは引用: 続いてやってみた。お題はこちら。お題:ある金額になるコインの組み合わせ - No Programming, No Lifeあまり芸のない総当たりだけど、こんなんでいいのかな。 object CoinAssort { def search(coinList: List[Int], sum: Int, curAssort: List…

「ANS-prog: プログラマが質問し、プログラマが答える Q&Aフォーラム」 の宣伝

突然ですが、前々から、日本語版Stack Overflow(Scalaの質問もできる場所)が欲しい、と常々思っていました。自分はまあ日ごろからScalaに対する疑問・質問に対してbotのごとく(笑)勝手に答えたりしてるわけですが、この過程で得られた知見とうかノウハウとか…

『オープンソース徹底活用 Scala実践プログラミング』発売です。

以前の記事で概要は紹介したので、あらためて同じ事は書きません。Scalaで実用プログラムが書きたい人、Scala好きな人、プログラミング言語が好きな人、是非買ってください。 それでもって、批評するなりdisるなり存分にしていただければと思います。

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 のようにすることだが、非常に残念なことに…