ほぼ資料貼り付けるだけのエントリ。広く浅く話しただけで、それほど新しい情報とかあるわけではないです http://connpass.com/event/16193/ http://xuwei-k.github.io/slides/functional-parallel-concurrent-scala/#1 ゴチうさのくだり、それなりに笑い起こっていたけど、もう少し笑いとれるかと思ったけどそれほどでもなかった(えっそこ ちなみに、べつにすごくゴチうさ好きとかそういうわけでもないです。
組み合わせるとはつまりアレのことを書くのですが、一応それほど前提知識無くても理解できるように書いてみます。さて、なぜいきなりEitherとFutureか?というと play2とか使ってると、Futureがよく出てくる Futureをそこら中でAwaitしたらFuture使う意味がないので、Future[A]をmapやflatMapなどでどんどん連鎖させて、メソッドの型にFutureが大量に出現! Futureは非同期に行われる処理であり、そこで例外発生したら、その中に例外を含むしかない(単純に例外投げるわけにはいかないというか不可能) Scala標準ライブラリのFutureは、Throwable型で例外を保持できるようになってる 逆にいうと、Throwableでしか保持できない 例外の種類が多くなってきて、プログラムが複雑になった場合、Throwableではなくもっと限定された独自のエラー
以下の2つの続き ScalaでFutureとEitherを組み合わせたときに綺麗に書く方法 FutureとEitherの話の続き(ApplicativeとMonadの違い) 上記の2つ(特に最初の方)を読んだことを前提で書くので、読んでない人は先にそちらを読みましょう。 なんだか少し関連する話(?)で盛り上がっていて、書かないといけない気がしてきたので 非同期プログラミングの難しさとScalaのFuture そのtogetterの議論について色々書きたいこと*1もありますが、それは置いておき、表題の「モナドによる同期/非同期プログラミングの抽象化」について書きます。というか、(非同期プログラミングの話より)便乗してモナドとモナドトランスフォーマーの便利さを話したいだけかもしれません(?) 前回2つは「Future使って非同期にしても、だいたい関数の本体同じでいけるよ」ということを書きました
tototoshiさんの、これ Play 2.3 がリリースされたので変更点と試し方を説明します の便乗(?)的な感じで、なぜか自分もチュートリアルを書いてみます。普通に書いたら意味ないので、少しだけ変わった方法を書いてみます。 変わった方法とは、あえてtypesafe activatorを使わない方法を書きます。また、play2.3がどうやって成り立ってるのかを説明するのも兼ねて、activatorを使わないだけでなく、なんらかのテンプレート使ったりとか自動生成とかもせずに、一つずつ手作業でやって、最低限の構成のところまでだけを説明します。 なので、実用的なのかどうかはわかりません。慣れたら、それぞれみんなtypesafe activator使うなり、独自にテンプレート的なプロジェクトを用意しておくなり、giter8使うなりした方がいいかもしれません。 あと、先に完成後の最小限のplay
shapelessの話をします。 versionは2014-12-22現在のmasterです。まだリリース版には入ってないので、色々変わるかもしれません。リリースはされました。 最近のshapelessは、ScalaなのだけどScalaではない何か別のものに進化していってる感があります。今までScalaやっていて見てきたテクニックのなかで、1、2位を争う変態的なものの予感がします。 さて、直接shapelessの話をする前に、まず、これまたほぼ誰も知らないであろう幻のtype macroというのものの話をします。 一時的、macro paradiceに超実験的な機能として入ったのですが、すぐに消えました。 自分が知ってる限り、okomokさんのsignが一時期それ使って実験してました。以下のような感じです。 https://github.com/okomok/sing/blob/95357
ある意味wartremoverきっかけでの話なのですが、適用範囲としてはwartremoverに限らないので、こういうタイトルになっています。 Scala 2だと 続きを読む というのを作りました。 続きを読む 最初に結論を書いておくと、Scala 2.13でもScala 3でも、Codec定義の方が少し速かったです。 以下、ベンチマーク用のコードや結果を雑に貼り付けていく 続きを読む まずは以下の以前の記事を読んでおいてください xuwei-k.hatenablog.com さて、 続きを読む https://discord.com/channels/1124331179580084406/1124334001507794994/1255004192993443910 ちょうどいい(?)ネタがあったので、これを例に作ってみます。 既にどこかに存在するのかどうか?は知りません。 (大抵、よ
Scalaのマクロというより、一般的にマクロに共通する基本であり重要な部分です。それをScala使って説明するだけです。 Scalaのマクロは、未だexperimentalという位置づけで、他の機能に比べれば仕様やAPIが変わりやすい状態です。そして、機能が搭載されてからあまり時間が経っていないこともあって*1あまり一般的に使われているとはいえない状態でしょう。しかし、Cなどのマクロとは違い、Scalaのものはある程度は本格的にコンパイル時に抽象構文木を自由にいじれるものであり、使いこなせるようになってくるとなかなかおもしろいです。 マクロというと、ある程度の人はLispを思い浮かべると思いますが(?)、先ほど書いた「本格的に抽象構文木いじれる」という点はまさにLispと共通する部分もあります(もちろん異なる部分も多くあります)。 つまり、これから説明することは、On Lisp*2 On
scalacheckでバグ見つかる https://github.com/rickynils/scalacheck/issues/75 内容を一言でいうと 「OpitonのArbitraryの質が悪い」 もう少し詳しく説明すると 以下のテスト forAll { (x: Option[Int], y: Option[Int]) => x.isDefined == y.isDefined } が、必ず成功してしまう。というものです。 ここで絶妙なのが「すべてSome、またはすべてNoneしか発生しない」のではなく「SomeもNoneも発生するけど、発生する場合に必ず両方Someか両方Noneになる」*1というバグり方をしているということです。 そして、Scalazはかなり多くの部分でScalacheckを使っているので 「このScalacheckのバグ、Scalazに影響あるかな?」 と思って
わりと以前から書いてみたかったことなので、書いてみます。 たとえば最近ではここ Web✕Java - HTML5で進化したWeb標準を、Java技術でどう扱うのか?でStruts使ってる人へJSFの説明をしてきた #jjug #html5biz でとりあげられていたりします。*1 昔からずっと言われてる話です。ですが、「互換性がない」とある程度多くの人が口をそろえて言う一方、「ではどのくらいの互換性があればいいのか(どういうポリシー?どのくらいの期間を保証?)」という具体的な議論がほとんどされていない気がします。 なので、もうちょっと具体的に考えてみたいと思います。 先日こんなtweetをしました @seratch 順調にいけば今年中にScala2.11はRC出るくらいになりそうだし、3世代クロスビルド(2.9、2.10、2.11)はかなり厳しいので、もし2.11サポートと同時に2.9切り
最近いくつかlombokが話題になってた lombokで快適Java生活 サイバーエージェント公式エンジニアブログ JavaでIDEのアクセッサ生成よりlombokを使ったほうがいい理由 Java特有の冗長なコードを簡潔に記述する「Lombok」 codezine ので、twitterなどでは何度かつぶやいた私見を、改めてblogにも書いておこうかと思います。Scalaもlombokも好きなので、ある意味「Scala使えばいいじゃん」という単純な意見に対する反論でもあります。 lombok自体のそれぞれの細かい機能の紹介は、先ほど上げたリンク先で既に語られてるのでしません。 lombokがScalaに比べて優れている点 IDEの恩恵 (自分はeclipseである程度やっていましたが)ほぼ素のJavaを書いているときと同じくらいの快適さです。対して、Scalaでは、IDEAだろうがeclip
つまりなぜかいきなり高階型の話です。 これ 関数を扱えることはどのようにプログラミング言語の能力をあげるか に対する便乗というかツッコミとして。 つい先日もある人がこんなこと https://twitter.com/koropicot/status/365014333413011457 を言っていて*1、「ですよねー」と勝手に納得していたりしましたが。 つまりScalazでよくみるような高階型 trait Monad[F[_]] extends Applicative[F] { implicit val listMonad = new Monad[List]{ がないと、モナドとして抽象化や共通化ができない、という話です。*2 高階型についてはたとえばこれ (もりそば)Scalaによる高階型変数 - Higher-kind Generics とか読んでください。 関数がオブジェクトとして扱
列挙順自体はとくに意味ありません。あと「どの最適化がどのくらい速くなるのか?」を詳細に計ったことはないですし、「原理的にこうなってるから(ry」というのを説明するに過ぎません。中には「JITで無意味になるようなどうでもいい細かすぎること」も書いてありますし、最適化のトレードオフとして失うものもあるので、そのあたり自己責任でお願いします。本当に最適化が必要とされる場合は、以下のものを無闇に実行するよりまず計測したほうがいいのは、言うまでもありません。*1 1. private[this]をつかえ scalaのvalやvarは、private[this]にしたときのみ、直接のフィールドアクセスになります(それ以外ではメソッド呼び出し)。シングルトンのobjectの場合も同様です。private[this]をつけられる場合はできるだけつけましょう 2. なんでもかんでもListをつかうな 最初の
最近以下のようなJava8の記事 Java 8を関数型っぽく使うためのおまじない をちょくちょく見かけるようになったので、自分もなにか書こうと思い、前からちょっとだけ気になっていた、highjというライブラリ https://code.google.com/p/highj/ https://github.com/svn2github/highj/tree/master/branches/java8/src/main/java/org/highj を読んでみて、概要を書いてみます。 Javaで関数型プログラミングというと、functional java https://github.com/functionaljava/functionaljava という、一年くらい前にちょっとblogにも書いたものがあります。 http://d.hatena.ne.jp/xuwei/20120427/13
http://www.manning.com/bjarnason https://github.com/pchiusano/fpinscala 一年ちょっと前にblog書きましたが Scalaz の作者の人達が書いた "Functional Programming in Scala" という本がでるらしい 14章のぞいてほぼ完成したので、感想書きます。MEAP v9の時点です。ちょっと長いですよ。 まず、全体を通していえるのが、Scalaの本ではなくあくまで関数型プログラミングの本だということです。それは本文の最初の方にも書いてあります。 この本だけ読んでも、Scala自体にはあまり詳しくなりません。Scala自体については、必要最低限の文法だけを随時説明してます。 逆に、(英語が読めるなら)Scalaの知識がほぼゼロだとしても、大体読めるのではないかと思います。 また、Scalazの本で
twitterで、海外のScalaistを大量にfollowしていないとわからない、マニアックなScala界隈の事情の話。 海外で、Scala使っている企業というと、twitterやfoursquareなどが有名ですが、個人的に観察していて PrecogIO という会社が最近とにかくすごいので、こんな変わったblog書いてみます。 Precog engineers: @nuttycom, @dchenbecker, @AlissaPajer, @d6, @puffnfresh, @fponticelli, @tixxit, @milessabin, Tom Bowles. Best. Team. Ever. 2012-08-24 05:10:05 via Twitter for Mac 最近も増えてる 代表的なすごい人をいくつか自分が知ってる限りで説明 @djspiewak github
コードレビューについて Oh, you `re no (fun _ → more) より引用 単に普段の開発で使っている VCS でそれを行なっていました。 つまり、コードの中にコメントの形でレビューを書き、それをコミットする。 そしてそこから派生する議論も全てコード上のコメントで行います。 (もちろん複雑な話になった場合は直接の議論を行い、合議の結果だけを記しておく、なども当然あるでしょう。) レビューをソースコードのコメントとして直接書き込むのは、GHC の開発でも時々見かけますね。例えば、新機能の開発 branch を作って、新しい機能を開発している時とか。 2012-08-14 18:44:19 via OpenTween まあ、主に入った変更に Simon Peyton Jones が(ソースコード上で直接)コメントしそれに従ってソースコードを修正する形なので、レビューと言えるほ
ネタ元 業務系のJavaプログラマーが知っておくべき10個のBad Partsとその対策 結論から先に言うと、3と10以外は結構直接的にscalaで解決できるというか、javaに比べてscalaの方が便利だとおもいます。*1 あと、元ネタのblogの人はgroovy詳しいみたいですが・・・ groovyとscala比べるとgroovyの方が手軽で便利だったり、scalaのほうが型安全だったり*2いろいろあるかもしれませんが、groovyあまり詳しくないので、その辺の言及というか、比較はやめておきます。*3 1.標準APIのチェック例外が扱いにくい チェック例外ってなにそれおいしいの?(・ω・) java Field field; try { field = getClass().getField("testField"); Object value = field.get(this); }
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く