Fungoing LLCの日々の活動を記載していきます。 代表のbibrostが試していることや、技術的なネタも書いていきます。
Actorを使う練習として、簡単なMapReduceのフレームワークを作ってみた。練習用なので、シングルプロセスのみ。また、Sort処理は省いてある。 import scala.actors.Actor import scala.actors.Actor._ import scala.actors.Exit import scala.actors.Futures object MapReduce { /** データを読み込むクラスです。*/ abstract class Reader[K, V] { def init { log("Reader#init") } def close { log("Reader#close") } def read: Iterable[(K, V)] } /** 関数からReaderへの暗黙変換 */ implicit def funcToReader[K,
Loan pattern in cps - hano - GitHub Perl の Coro に慣れていると、Scala の限定継続は使い難いなーと思っていたら、認識を覆されたのでメモ。私の理解不足でしたと。 以下に簡単なサンプルを用意しました。 object Sample { import scala.util.continuations.{reset, shift} def main (args:Array[String]) { val alphabets = "abc" val numbers = "123" reset { val alpabet = shift { (k: Char => Unit) => alphabets.foreach(k) } // (1) val number = shift { (k: Char => Unit) => numbers.foreach
Scala de Design Patternのまとめ。 Gang of Fourの23パターンとそれ以外のデザインパターンが少しある。 結構ふざけた例とか分かりにくい例が多いけどそれはご愛嬌。 Scalaの言語自体の機能やライブラリが強力なので、 ここで挙げたやり方以外にもっと色々なやり方があるはず。 GoFデザインパターン 生成に関するパターン Abstract Factory Builder Factory Method Prototype Singleton 構造に関するパターン Adapter Brige Composite Decorator Façade Flyweight Proxy 振る舞いに関するパターン Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer Stat
JavaとScalaとC#のジェネリクスは、いずれも継承を持ったオブジェクト指向言語においてParametric Polymorphismを実現するための手段であり、それぞれ異なった特性を持っている。というわけで、それぞれの言語においてジェネリクスがどのようにサポートされているかを比較した表を用意してみた。後で気が向いたら、各項目の説明を追加するかも。 Java(5.0以降) Scala C#(4.0) ジェネリックなクラス ○ ○ ○ ジェネリックなメソッド ○ ○ ○ 型パラメータの上限 ○ ○ ○ 型パラメータの下限 × ○ × 型パラメータの推論 ○ ○ ○ 全ての型のサブタイプ(ScalaにおけるNothing) × ○ × definition-site variance × ○ ○ use-site variance ○(Wildcard) ○(Existential Typ
2010-11-03 Debasish Ghosh さん (@debasishg) の “Scala Implicits : Type Classes Here I Come” を翻訳しました. 元記事はこちら: http://debasishg.blogspot.com/2010/06/scala-implicits-type-classes-here-i.html (翻訳の公開は本人より許諾済みです) 翻訳の間違い等があれば遠慮なくご指摘ください. 先日 Twitter 上で Daniel と Scala での型クラスについて論議していると,突然このトピックに関する書きかけだった記事を発見した.これを読んでもあなたは特に目新しい事を発見するわけではないが,型クラスに基づいた思考はあなたの設計の幅に価値を与えることができると思う.この記事を書き始めたのはしばらく前に設計の直交性についての
「きみの会社はJavaからScalaへ移行したらしいね。」 「ああ。」 「やはり、移行するのは大変だったろう。」 「そうでもないよ。開発者がみんなハッピーになれたからね。」 「それはいいな。」 「だが、再びJavaで開発することになったよ。」 「そりゃまた、どうしてだい?」 「Scalaになって、コードの行数が激減したからさ。」 「お気の毒に。」 「きみの会社はJavaからRubyへ移行したらしいね。」 「ああ。」 「やはり、移行するのは大変だったろう。」 「そうでもないよ。開発者がみんなハッピーになれたからね。」 「それはいいな。」 「だが、再びJavaで開発することになったよ。」 「そりゃまた、どうしてだい?」 「Rubyになって、人月計算がおかしくなったからさ。」 「お気の毒に。」 「きみの会社はJavaからObjective-Cへ移行したらしいね。」 「ああ。」 「やはり、移行する
Scala にはアクターモデルを実装した API が標準で用意されており、使い方も比較的分かり易くなっている。 ただし、! メソッドでメッセージ送信する等、初めて見ると何をやっているのか理解に苦しむ点が難点かも。(Erlang を知っていれば入り易いんだろうけど) 同様の事を自前で実現するには Active Object パターンとかを実装する事になるだろうから、実用度は高そうに思う。リモートコール用の仕組みも用意されているみたいだし。 ちなみに、Active Object パターンは並列処理関係のパターンで、非同期メッセージを処理する能動的なオブジェクトを実装するためのもの。詳しくは 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 や プログラムデザインのためのパターン言語―Pattern Languages of Program Design選集 を参照。 Act
Scala2.8から、Predefに<:<とか=:=とかが定義されていて、これなんだろ?とずーっと疑問だった訳ですよ。で、ついったーで質問投げてたらやっと理解できました。 教えて頂いた @ScalaTohoku さん、@okomok さん、@tioa さん、有り難うございました! "generalized type constraints"というヤツで、型パラメータに与えられた型が、特定の条件を満たす場合にのみ呼び出せるメソッドを定義できるというものです。しかもコンパイル時に静的にチェックされる!! これはスゴい!! What do <:<, <%<, and =:= mean in Scala 2.8, and where are they documented? - Stack Overflow =:=や<:<や<%<で特定の型のみ呼び出せるメソッドを定義する 具体的な例で説明します。
有限会社ITプランニング勤務のプログラマー。Scala、OCaml、F#などの静的型付け関数型言語を利用したシステム開発業務に従事。定理証明支援器Coqやモデル発見器Alloyといった形式手法ツールの業務への応用にも興味を持っている。 Scalaの標準ライブラリは、Java程大きくありませんが、パーサーコンビネーターを筆頭に小粒でもぴりりと辛い逸品が揃っています。この記事でご紹介する「アクター」もその一つ、マルチスレッドのスパゲッティをおいしいペペロンチーノに変えてくれる、魔法のスパイスです。new Threadとしたくなったら、一歩立ち止まってscala.actorsパッケージの扉を叩いてみてください。 なお、本稿では2回にわたって、アクターとは何なのか、アクターを使うとどのような事が可能なのかをご紹介する予定です。並行処理に興味があったり、なんらかの形で並行処理に触れたりしたことがあれ
def fizzbuzz(in: Int): String = in match { case x if x % 15 == 0 => "FizzBuzz" case x if x % 5 == 0 => "Buzz" case x if x % 3 == 0 => "Fizz" case x => x.toString } (1 to 100).map(fizzbuzz).foreach(println) こう書いてから、書き直して以下のようになった。 (1 to 100).map { case x if x % 15 == 0 => "FizzBuzz" case x if x % 5 == 0 => "Buzz" case x if x % 3 == 0 => "Fizz" case x => x.toString }.foreach(println) 書いたあとググったら色々な解が
ext3の1ディレクトリに大量のファイルを配置すると、 ファイルアクセスが遅くなります。 一般的な回避策は、何らかのハッシュ値でディレクトリを階層的にする方法ですが、実際にやるとなると数行でできるとは言えちょっと面倒です。 そこで、これを手軽に実現できるようにライブラリに追加しました。 Pathnameと同じAPIですので、 最初はPathnameで使っておいて、 数が増えたらHashnameに変えるという使い方ができるので便利だと思います。 (マイグレーションも両者で一緒にloopするだけでOK) 1 import com.s21g.rubyist.{Pathname,Hashname} 2 3 val path = Pathname("data/users/910.xml") 4 val hash = Hashname("data/users/910.xml") 5 6 pat
注意:この記事はエイプリルフールのネタ記事です。エイプリルフールを過ぎてしばらく経つので、まぎらわしいかと思い、ここに書いておくことにします。 今年中には、再設計されたコレクションライブラリ、名前付き引数のサポート、部分継続などの数々の新機能をサポートしたScala 2.8がリリースされる見込みですが、その次の年には、早くもその次のバージョンであるScala 3.0がリリースされる予定です。Scala 3.0ではScala 2.8以上の抜本的な言語仕様の変更がおこなわれるため、その全体を短いエントリの中で紹介することは不可能ですが、ここではScala 3.0の新機能の中で特徴的なものを紹介していきます。 型システムを、structural typeベースとして全面的に再設計! Scala 2.X系では基本的な型システムはnominal、つまり、明示的な継承関係があるかどうかでサブタイプ関係
http://www.scala-lang.org/ 静的型付け/コンパイル型言語 オブジェクト指向と関数型を融合 型推論装備 Scala概要 その四 現在 2.7.1.final Javaと.NET上で動作 (.NET版は停滞中) Javaとの連携は抜群 Scala概要 その伍 スイス ローザンヌ工科大学 アカデミックな場で開発中 リーダーはjavacのGenerics部分に関わっていた Scala概要 その六 Javaとの比較: 同じところ ErasureなGenerics 同等なパフォーマンス 型システムはJavaのものを継承 クラスファイルにコンパイル Scala概要 その七 Javaとの比較: 違うところ すべてがオブジェクト 型推論 クロージャ パターンマッチング Implicit Conversions etc... Scala概要 その八 Scalaコマンド scala イ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く