タグ

ブックマーク / xuwei-k.hatenablog.com (30)

  • TwitterがScalaを採用した大昔を振り返ってScalaについて色々考えてみる - xuwei-k's blog

    雑にtweetしたら多少反応があったというか、新しいもの書くばかりではなく歴史を振り返る方が、場合によっては面白いというかためになるというか、 そもそもプログラミングに限らず現在や未来は過去の延長線上でしかないので、歴史を振り返ることは大事ですね。 先に断っておきますが「X(旧Twitter)」と書くの面倒だし「X」だけだとわかりにくいので、*1単にTwitterと記述すると思います。 あと自分はTwitterの中の人や昔Twitterの中の人だった人と軽く話したことはある程度で、もちろん自分はTwitterの中の人だったことはないです。外から観察した情報を書くだけです。 さて、どこから振り返ればいいのか難しいのと、そもそも歴史そのものを正確に詳細に振り返るというよりは、当時(から現在に至るまで)の雰囲気を伝えることや、それに対する自分なりの解釈などを書きつつ、これの読者に同じように過去を

    TwitterがScalaを採用した大昔を振り返ってScalaについて色々考えてみる - xuwei-k's blog
    xef
    xef 2024/12/19
  • JDK 21のswitch式でpattern match書いたら10倍以上遅い件 - xuwei-k's blog

    switch式の結果javapしたらhttps://t.co/xMc0YEYsrg java.lang.runtime.SwitchBootstraps と tableswitch が使われることに気がついたが、これ巨大なswitch式をJDK 21以降で書いた場合、同等の巨大なmatch式をScalaで書くよりも速度が速い可能性があるのでは??? これScalaで活用できるか?というと— Kenji Yoshida (@xuwei_k) September 25, 2023 switch式の結果javapしたら https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/runtime/SwitchBootstraps.html java.lang.runtime.SwitchBootstraps と ta

    JDK 21のswitch式でpattern match書いたら10倍以上遅い件 - xuwei-k's blog
    xef
    xef 2023/09/26
  • Scalaでoverrideした際の共変戻り値型と型推論 - xuwei-k's blog

    ScalaでもJavaでも、overrideする際に、sub typeでoverrideすることが可能です。 (すごく古い1.4以前のJavaでは不可能だったはずだが) Javaの仕様書で英語だと covariant return type というはず?の機能です。 https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#d5e14373 $ jshell | Welcome to JShell -- Version 17.0.6 | For an introduction type: /help intro jshell> interface A { Object a(); } | created interface A jshell> class B implements A { @Override public St

    Scalaでoverrideした際の共変戻り値型と型推論 - xuwei-k's blog
    xef
    xef 2023/09/14
  • ekmett先生のdiscriminationというライブラリの動画を見たので雑に要約してみた - xuwei-k's blog

    当に雑に(前半部分だけを)まとめただけなので、ちゃんと知りたい人は、元動画やライブラリのコードや、元論文読むとよいです http://hackage.haskell.org/package/discrimination https://www.youtube.com/watch?v=cB8DapKQz-I https://github.com/ekmett/contravariant/blob/v1.3.2/src/Data/Functor/Contravariant/Divisible.hs やる気がでたら、もう少し真面目な解説を後で別に書くかも知れませんし、書かないかもしれません。 先に簡単に自分の感想的なものを書いておきます。 ソートの話なはず、の動画を見ていたら、なぜか前半は「圏論」や「Hask」や「Contravariantなんちゃら」の話してて 「あれ、見る動画間違ったのかな

    ekmett先生のdiscriminationというライブラリの動画を見たので雑に要約してみた - xuwei-k's blog
    xef
    xef 2015/08/02
  • 関数型Scalaという勉強会でproperty based testingについて話をした - xuwei-k's blog

    Scalaの勉強会で半分くらいHaskellの話してすいませんでした。 http://xuwei-k.github.io/slides/scalaprops/ http://connpass.com/event/16052/ http://togetter.com/li/852254 資料はりきって頑張り過ぎたらとても長くなりました(150ページ超えた) 今までで一番頑張ったかもしれません。ここ半年くらいの成果を全部詰め込んだ感じです。 あとで資料として読んで理解してもらうこと前提で色々詰め込んだので、1年後でも2年後でも、興味のある人が見て有用な資料になればいいですね・・・。 ところで、スライド作るのに、今回から remark というやつ使いました https://github.com/gnab/remark markdownで書けて コードのシンタックスハイライト効いて ページ数表示と

    関数型Scalaという勉強会でproperty based testingについて話をした - xuwei-k's blog
  • 本物のFree MonadPlus? - xuwei-k's blog

    「もう一度来てください。物のFree MonadPlusを見せてあげますよ」 そう言い残してScalaちゃんは去っていった・・・。 というわけで(どういうわけだよ!) 物のFree Monadって存在したのか!?っていうメモを書いておきたいと思います。 いや、実は知ってる人にとっては常識だったのかよくわかりませんが、自分は知らなかったので。 (というかekmett/freeにないなら、そもそも不可能なのではないか?くらいに思ってた) "物の" とはどういうことか?というと、偽者(MonadPlus則を満たさない)が以前 ekmett/free の内部に存在して、自分が指摘したら消えてしまった事件(?)があったのです。 issue報告したらFree MonadPlusが消えた さて、それでなんとなく寝起きでtwitterで流れてきた"ある論文"を読んでいたら、Free MonadPlu

    本物のFree MonadPlus? - xuwei-k's blog
  • scalaz.concurrentのActorとFutureとTaskあたりの説明 - xuwei-k's blog

    https://www.dropbox.com/s/567s5mxlcyzzh8h/PurelyFunctionalConcurrency.pdf 資料貼り付けておくだけのエントリ。 runaroramaさん(FP in Scalaの作者かつScalazコミッタ)が、ハーバード大学で特別講師的な感じで講演してきたらしいです。 I'm finally an academic. Last night was my first time in a university classroom, and I was the teacher. 2015-05-06 02:29:32 via Twitter Web Client Slides from my lecture for the Scala Concurrency course at Harvard URL 2015-05-07 09:27:2

    scalaz.concurrentのActorとFutureとTaskあたりの説明 - xuwei-k's blog
  • 代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出 - xuwei-k's blog

    これは、ドワンゴ Advent Calendar の 7日目です。 6日目は DartのASTを触ってみる でした。 さて、会社でアドベントカレンダーやる、と言われて、なんとなく参加登録したはいいものの、特に書くこと決めてませんでした。 最近、msgpackのScalaのライブラリ作ってるので、それ完成したらそのこと書こうかな―、と思ってましたが、msgpack-javaのバグや、古いversionと新しいversionの違いと戦ってたりしたら、なかなか完成しないので別のこと書くことにしました。 というわけで、標題の 「代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出」 という話をします。ドワンゴアドベントカレンダーだからといて、べつに変わったことはなく、いつものようなScalaネタです。 さてみなさん「代数的データ型」って知ってますか?Scalaよりもっと

    代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出 - xuwei-k's blog
  • 時代はリテラルレベルプログラミングだ! - xuwei-k's blog

    リテラルレベルプログラミングという用語が存在するのかは知りませんが、べつに厳密に定義せずなんとなく使います。まぁこれ https://github.com/okomok/lity の説明が "Exploring literal-level metaprogramming" なので、そこから拝借という感じですかね。 さて、scalaでは、StringやIntのリテラルでfinal valで定義すると、型自体が特別扱いされる(?)という、知られざる仕様があります。まずは以下のgist御覧ください finalを付けずに val a = "a" だと型は a: String = a なのに対して、final valにすると b: String("b") = b というよくわからない型になってますね。そして def foo(c: b.type) と定義すると、foo("bar")と渡すとコンパイルエ

    時代はリテラルレベルプログラミングだ! - xuwei-k's blog
    xef
    xef 2014/07/17
  • CoproductとInjectを使ったFree Monadの合成とExtensible Effects - xuwei-k's blog

    Scaladays2014の写真がtwitter上で流れてきて「あーまたrunaroramaさん、Free Monadの話してるのかー」と思ったら、たしかにFree Monadの話もしてたみたいですが、それの発展形(?)的な感じで、Coproductや、Injectという型クラス(?)の話をしていたようです。 Woah, Coproducts (URL as replacement for transformer stacks look pretty cool! URL /cc @runarorama 2014-06-17 20:43:56 via Twitter Web Client それで、*1コードを読んでみたら、それなりにある程度理解できた気がするので、解説を書いてみます。*2 最初に断っておくと、タイトルに"Extensible Effects"と入れましたが、Extensibl

    CoproductとInjectを使ったFree Monadの合成とExtensible Effects - xuwei-k's blog
  • 関数型RubyとScalaとKleisli - xuwei-k's blog

    以下のエントリ 「関数型Ruby」という病(6) - 関数合成と文脈、Proc#liftとProc#>=、そしてモナ に便乗して、(一部の例を)Scalaに翻訳してみるのと、ScalazのKleisliの話をします。Scalaや関数型に興味のない人は読まないほうがいいかもしれません。わざとMonadとかFunctorの用語も出します。また、もとのエントリの良し悪しとか、Rubyでああいうことをやることの是非などはあまり話しません、というか、それが主目的ではありません。とにかく便乗してScalaの話するのと、あえて元記事では避けている「関数型の用語を出した説明」を少しします。 まず、(nilはOptionを使うということにして)もとの>=の例を直訳すると以下 val f = (_: List[Int]).headOption val g = (_: Int) + 1 val h = (_:

    関数型RubyとScalaとKleisli - xuwei-k's blog
  • sbt0.13.2-M1の新しいインクリメンタルコンパイル試したら素晴らしい結果がでた - xuwei-k's blog

    140文字 ✕ 2で表すとこんな感じ sbt 0.13.1[info] Compiling 1 Scala source[info] Compiling 7[info] Compiling 84[info] Compiling 240[success] Total time: 259 s 2014-01-10 12:56:08 via web sbt 0.13.2-M1[info] Compiling 1 Scala source[success] Total time: 15 sURL URLAwesome!!! 2014-01-10 12:56:52 via web to @xuwei_k 測定方法は Scalazの、現状の最新のcoreモジュールを使って実験 EphemeralStreamにheadOptionとtailOptionという2つのメソッドを追加するコミットを使用 htt

    sbt0.13.2-M1の新しいインクリメンタルコンパイル試したら素晴らしい結果がでた - xuwei-k's blog
    xef
    xef 2014/01/10
  • 2013年のScalaz - xuwei-k's blog

    もう2013年も残すところ数日なので、振り返ってみましょう。 2012年はこんなもの githubで年間100 pull request した 書きましたが、今年はScalazのコミッターになったり色々あって、github上でのかなりの活動の部分をScalazが占めるので、まずScalaz中心に2013年の自分の活動とScalaz自体を振り返ります。 Scalaz以外の2013年のまとめは、気が向いたら書くかもしれないし、書かないかもしれません。 まず、時系列で重要だと思った変更をまとめてみました*1 1月 4日 Foldable1とTraverse1の追加 https://github.com/scalaz/scalaz/pull/241 29日 ReadWorldがIvoryTowerになる!?*2 https://github.com/scalaz/scalaz/pull/273 2

    2013年のScalaz - xuwei-k's blog
    xef
    xef 2013/12/26
  • Scalaでの再帰的implicitとRank2Type - xuwei-k's blog

    「再帰的implicit」という、普通にScala書いていたら遭遇しない話をします。なので、多くの人にとっては役に立たないだろうから、そういうのに興味のない人は読まないほうがいいです。 さて、これはekmett/freeの中にあるCofreeのEqのインスタンス(珈琲じゃなくて、Freeモナドの双対のCo Freeだよ!) *1 をScalaに翻訳していたとき(そしてScalazに入れようとした)に遭遇した話です。以下は翻訳元のHaskellコード instance (Eq (f (Cofree f a)), Eq a) => Eq (Cofree f a) where a :< as == b :< bs = a == b && as == bs https://github.com/ekmett/free/blob/v4.2/src/Control/Comonad/Cofree.hs#

    Scalaでの再帰的implicitとRank2Type - xuwei-k's blog
  • sbtの密結合な内部アーキテクチャ - xuwei-k's blog

    sbtというと、独特なSettingのシステム*1や、Scalaで記述する内部DSL*2ばかりが注目されがちです。それらは、初心者にわかりづらかったりして批判されることが多かったり、逆にsbtを使い慣れた人にとってはとても強力で面白い仕組みです。 Settingのシステムに注目すると、汎用的に色々な言語のビルドにも使えそうに思えます。事実、sbtでC++のpluginを作っている人もいます。 しかし、sbtはあくまで「Scala(とJava)のためのビルドツール」です。 これは「単にScalaをデフォルトでサポートしてる」という意味にとどまらず、おそらく皆さんが思っているよりもずっと深い意味で「Scalaに特化したビルドの仕組み」が内部に備わっています。 今回は、そんな「sbtの内部アーキテクチャ」の紹介をします。 以下、かなり長いです。読み物としては面白いかもしれませんが、単にsbtを使

    sbtの密結合な内部アーキテクチャ - xuwei-k's blog
    xef
    xef 2013/12/12
  • Scala2.10から2.11の変更点 - xuwei-k's blog

    例のごとく、最初に注意書き まだfinalがでていないので、細かい部分変わるかもしれません*1 個人的に、「大きい変更点だなと思ったもの」「ライブラリ側のユーザーが直接使うクラス関連*2」「なんとなく興味があるもの」を中心にとりあげただけで、すべてを網羅してるわけではありません finalがでるまではできるだけ随時更新する予定です Scala2.11.0は、今のところ順調にいけば2014年の2月には最初のRCがでて*3、3月にはfinalがでるらしいです。*4 https://issues.scala-lang.org/browse/SI しばらくこの記事がblogの一番上にくるように、少し未来の日付にしておきます。 2.9から2.10のときの変更点に比べると、だいぶ少ないですね。(2.9から2.10の変更点が多すぎただけですが)細かく追えていませんが、その分コンパイラ側の細かいパフォーマ

    Scala2.10から2.11の変更点 - xuwei-k's blog
    xef
    xef 2013/12/03
  • ScalazのKleisliとEndomorphic - xuwei-k's blog

    Scalazネタです。しかもわりとマニアックな、Scalaz初心者向けではないネタかもしれません。前から書きたかったけど、良いサンプルが思いつかなくて躊躇してましたが、良いサンプルを見つけたのでKleisliとEndomorphicについて書きます。 Kleisliはともかく、Endomorphicは最近入ったので、日語記事はおろか現時点では英語の解説もほとんど無いのではないかと思います。最近とはこのpull reqですが、7.1.0-M1からで、7.0.x系の最新版の7.0.4には入っていません。*1 さて前置きはこれくらいにして解説を始めます。まず、独習Scalazを引用します。 5日目 騎士の旅 case class KnightPos(c: Int, r: Int) { def move: List[KnightPos] = for { KnightPos(c2, r2) <-

    ScalazのKleisliとEndomorphic - xuwei-k's blog
    xef
    xef 2013/11/19
  • Scalacheckの絶妙なバグのせいで、Scalazのバグが見つけられなかった話 - xuwei-k's blog

    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に影響あるかな?」 と思って

    Scalacheckの絶妙なバグのせいで、Scalazのバグが見つけられなかった話 - xuwei-k's blog
    xef
    xef 2013/11/15
  • ScalaのAnyとNothingのKind - xuwei-k's blog

    retronymさん(Scalaのコミッターの人)が Any and nothing are kind polymorphic in scala. https://groups.google.com/d/msg/scalaz/RTNLhIcFkIc/9uQHD618vDwJ と言っていて、深く考えたことなかったけど、そういえばそうなのかーと妙に納得したのでメモしておく。*1 Kindの説明は詳しくしませんが、一言でいうと「型の型」という感じでしょうか?詳しく知りたかったら、頑張ってググるか、TAPL(の日語訳)とか読んでください。 さて、以下のようなA、B、Cがあった場合に class A[X] class B[X[_]] class C[X[_[_]]] 以下はコンパイルできるが new A[Int] new B[List] new C[B] 以下はKindが合わないので、コンパイルエ

    ScalaのAnyとNothingのKind - xuwei-k's blog
    xef
    xef 2013/10/18
  • SetはFunctorではない - xuwei-k's blog

    SetがFunctorではない理由を延々と説明します。最初これ http://failex.blogspot.jp/2013/06/fake-theorems-for-free.html を訳そうとしましたが、英語力と理解力のなさにより断念し、中途半端な翻訳になるなら、自分なりに書き下そうという結論になりました。内容は上記の記事と半分以上被ると思います。あと、上記の記事書いた人は「Scalazのコミッターであり、おそらくekmettの同僚であり、ermine-languageのコミッター」な人です。よってオススメなので、そっちも読みましょう。*1 以下、Scala以外の言語でも大概は当てはまると思いますが、一応Scala(というか、Scalaz)を念頭において書いていきます。 さて、プログラミングにおいて、Setとは一体何でしょうか? とりあえず「要素の重複を持たないデータ構造」といえるで

    SetはFunctorではない - xuwei-k's blog
    xef
    xef 2013/09/17