たまにこういう話が出てくるけれど、みんな漠然とした不安で話をしている感じがするので、 (もちろんこれもまた予想でしかないですが)、多少は自分はScala事情に詳しいと思うので、ある程度の予想や実情をtweetしたので、せっかくなのでまとめておきました
たまにこういう話が出てくるけれど、みんな漠然とした不安で話をしている感じがするので、 (もちろんこれもまた予想でしかないですが)、多少は自分はScala事情に詳しいと思うので、ある程度の予想や実情をtweetしたので、せっかくなのでまとめておきました
本当にScala化できるんですか? 増井:今日は、チャットワークをPHPからScalaに切り替えるお話を伺うためにやって来ました。 山本:はい。 増井:僕がこの話を知ったのは、ちょうど2年ぐらい前に読んだブログのエントリだったんです。いきなり失礼なんですが、僕はこの話を知って、ぶっちゃけアホじゃないかと思ったんですよ。 山本:あはは(笑) 増井:基本的に開発言語やフレームワーク、方法論を同時に変えるって結構大きな変更ですよね? 山本:そう思います。 増井:それなのに、この決断を発表された当時、御社にはScalaエンジニアがいなかったそうじゃないですか。「本当に大丈夫なのかな?」と思って、気になってたんです。昨年春には「Scala採用を決めて一年たった、CTOの雑感」というエントリをポストされていましたが、さらに1年経った今はどんな状況なんですか? 山本:ひと言で申し上げると「絶賛移行中」と
Scala関西 Summit 2015での発表で触れていたN+1クエリ問題をなんとかするためのライブラリを公開した. 発表は以下のもので, ここでは「関係モナド」という名前で紹介していたけれど, これは口頭でも説明したように便宜上てきとーにつけた名前であって, とくにそういう名前のよく知られたモナドがあるというわけでもなければ, そもそもモナドであるかどうかはあまり本質的ではない. この発表のあとに, Rails (Active Record)でのbulletのようにN+1問題の検出をScalaでやる方法はないだろうか, と言っている人がいたので, そういうものを探していて辿りつけるとよかろうということで, bullet-scalaという名前にした. もちろんN+1問題の検出のためのライブラリというわけではないし, 動的に検出するのではなく原理的に問題が発生しないようにするものなので, 思
Twitterしてたら目に入ったので軽く。 Javaにおけるnull。これまでとこれから この後のスライドで、 Scalaにおける「何もないもの」の分類はやり過ぎ感はある と言われているんですが、ある程度は誤解に基づく意見だよなぁこれは、ということを言っておこうかなと。 Scalaについて 日本では説明が不要なくらいScalaって有名になってると思うんですが一応。 ScalaはJVMの上で動作する、(クラス指向の)オブジェクト指向プログラミングと関数型プログラミングを融合させた言語です。 そして、Scalaのコア機能はどちらかというとオブジェクト指向プログラミング寄りです。 オブジェクト指向プログラミングをベースに、関数型の色々なものを実現している感じです*1。 オブジェクト指向プログラミング的な機能として真っ先に思いつくのは何でしょうか? 割と上位の方に、「継承」とか「型階層」とか来るん
11. hprof: JVM標準 プロファイラ • jvmオプションつけてsbt compile • 結果はjava.hprof.txtに出力されま す $ sbt -J-agentlib:hprof=cpu=samples,depth=5 clean compile 12. 結果見る • depth=5で荒い解析 • クラスのロードが大量にされている……? rank self accum count trace method 1 12.04% 12.04% 2158 300093 java.util.zip.ZipFile.getEntry 2 9.90% 21.95% 1775 300065 java.lang.Throwable.fillInStackTrace 3 7.21% 29.16% 1293 303874 java.lang.Class.forName0 4 5.40% 3
val is better than Java's final? JavaScript hoisting var r = double(1) + triple(1); function double(x) {return x * 2;} var triple = function(x) {return x * 3;} Throws: java.lang.NullPointerException at Vals.<init>(Vals.scala:2) Simplified class Vals { println(answer) private[this] val answer = 42 } Prints... 0 return in lambda def samples(xs: TraversableOnce[Int]) { xs map {x => return x * 10} for
前回 の記事では、関数型プログラミングの概念とJava8による実装例を示しました。しかしJava8のリリースは来年まで延期されてしまったため、今すぐ試してみるには少しハードルが高いかもしれません。 そこで今回は、Java7のJVM上で動作する代表的な関数型プログラミング言語、 Scala と Clojure を紹介します。 Scalaとは では、 Scala から紹介しましょう。 ScalaはJVM上で動作するプログラミング言語で、関数型の特徴とオブジェクト指向の特徴を合わせ持った、欲張りな言語です。 JVM上で動作するため、既存の膨大なJavaライブラリをそのまま流用でき、JVMのパフォーマンスチューニングノウハウを最大限活用することができます。またJavaよりも豊富な記述形式を持ちながらもJavaオブジェクトをそのまま扱え、強力な型推論を持った静的型付け言語でもあるため、定型的で冗
コンビニ勢力地図2024-2025 三重にファミマが多くないか? このところ三重県と愛知県に行く機会が多かったのだが、車で国道を走ってるとやたらファミマを見る気がしていた。地域によってコンビニの種類に偏りがあるとは思っていたが、実際どうなのか。調べてみたのでお伝えしたい。 これが日本国…
追記:これの完全版みたいなのが comfrk vol3 に載ってます。「今夜はお前と俺でマルチパラダイムだからな」とかいうのです。 あまりにもアウトプットしなさすぎなので適当に何か書きます。 フィボナッチ関数を scala で object-oriented な感じで書いてみます。 class Fib { def fib(n : Int) : Int = if (n <= 1) 1 else fib(n - 1) + fib(n - 2) } 簡単ですね。しかし、簡単すぎます。というわけで、お決まりのメモ化を「Fib クラスに手を加えず」に行ってましょう。 class FibMemo extends Fib { import collection.mutable.Map private val table : Map[Int, Int] = Map() override def fib(n
Play frameworkの背景と歴史 Ruby on Railsが人気となり、それ以外にもいろいろと軽量フレームワークが出てきた2009年ごろ、Javaのフルスタックフレームワークである「Play framework」の1.0(以下、「Play 1.0」)がリリースされました。 このころよく使用されていた(いまでも十分よく使用されていますが)Javaフレームワークは、SpringやSeasar2などのDIコンテナと、それに付随するORマッパー(Spring DataやS2JDBC)やMVCのフレームワーク(Spring MVCやS2Struts)でした。これらのフレームワークはそれぞれ十分な機能と実績があり、現在でもJavaでWebアプリケーションを開発する際には、まっ先に採用候補に挙がると思います。 しかし、これらのフレームワークは基本的にJava EEでの開発用フレームワークなので
2012/11/17(土)「PlayFramework関西ビギナーズ 第1回」を開催しました。 場所はオオサカンスペース。 PlayFramework1.x基礎講座 私によるPlay!1系基礎講座。 1時間の予定が2時間喋ってしましました・・・。(準備がギリギリ過ぎて、内容を削る時間がなかった・・・) プログラムを無視してしまい、本当に申し訳ありません。 最初はスライドに沿ってPlayFramework概要をお話して、その後ライブコーディングで簡単なWEBアプリを作成する様子を見て頂きました。 作成したアプリのコード(github) herokuにデプロイしたもの 詰め込み過ぎだったなぁと反省したのですが、Play!自体の雰囲気は分かってもらえたかと。 なぜ1系の話をしたかなのですが、 2系はまだ新しいフレームワークで、1系の方が実績がある まだバグの話もちらほら聞くので、1系を使うという
2010年10月22日00:53 カテゴリScala Scalaで無限リストを使ってフィボナッチ数列 元ネタ:基礎を終えた人のScalaミニtipslazy val fib: Stream[Int] = Stream.cons(0, Stream.cons(1, fib.zip(fib.tail).map(p => p._1 + p._2)))これ、Scalaで無限リストと遅延評価でフィボナッチ数列を実現してるんですが、 もう、何やってるかぜんっぜんわからなかったので、がんばってみました。 登場人物lazy valStreamStream.consStream.zipStream.tailStream.map_1, _2という表現Stream.takeこれ、これらが判ればきっと解る! 1.lazy val 遅延評価! valとかにlazyとか付けると遅延評価になります! 遅延評価ってなんだ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く