タグ

ブックマーク / nowokay.hatenablog.com (7)

  • GraalVMはどれだけ遅いか - きしだのHatena

    GraalVM流行ってますね。 そして、多くの人はGraalをAOTとして使うnative-imageのことだけをGraalVMと言ってたりします。 ご安心を。このエントリではGraalをJITとして使うHotSpotモードとGraalをAOTとして使うnative-imageの両方が遅いという話です。 GraalVMは速い、と言われてますが、残念ながらHotSpotモードでC2より速い結果を手元では出せていません。 公式ブログでは1.7倍から5倍速くなると書いてますけど、手元では再現できてません。 Under the hood of GraalVM JIT optimizations - graalvm - Medium native-imageは速い、というのはよくありますが、これはネイティブ化によりJVMの起動時間や最適化の時間、最適化されずに動く時間が省略されるので起動が速い、とい

    GraalVMはどれだけ遅いか - きしだのHatena
    ab_sn
    ab_sn 2019/06/27
  • Java 10のコンパイラバグを見つけた - きしだのHatena

    予定通りにJava10が出ましたね!Javaが予定通りにリリースされることが珍しすぎたのか、関東では雪になっていたようです。 Java10の変更点についてはこちらにまとめています。 Java 10新機能まとめ - Qiita Java10のJEP以外の変更まとめ - Qiita ところで、varが導入されたのでいろいろ試してたらコンパイラが落ちました。 次のようなコードを-g付でコンパイルすると落ちます。 import java.util.List; public class Main { public static void main(String... args) { var m = List.of("a", 1); System.out.println(m); } } このように、正式リリースであるbuild 46でコンパイルするとこうなります。 src$ javac Main.ja

    Java 10のコンパイラバグを見つけた - きしだのHatena
    ab_sn
    ab_sn 2018/03/24
  • Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena

    Java8のlambda構文の話を書くと、旧来の書き方でいいというコメントがつくのですが、それでも便利になったMapの恩恵を受けることは多いんじゃないかと思います。 ※ 2018/5/31 Java9からはメモ化再帰には使えなくなっています ※ 2019/2/15 なんか問題ない? Mapには、lambda式を使ったメソッドが多く追加されていますが、たとえばgetOrDefaultメソッドのようなlambda式を使わないメソッドも追加されていて、これも便利です。 そして、このようなlambda式を使わないメソッドも、間接的にはlambda構文サポートでの言語拡張のおかげです。 Mapはインタフェースなので、Java7までの構文でメソッドを追加しようとすると、Mapを実装しているすべてのクラスに新しいメソッドの実装を追加する必要がありました。そしてそれは現実的に不可能なので、今までMapなど

    Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena
    ab_sn
    ab_sn 2013/05/23
  • Java8のStreamを使いこなす - きしだのHatena

    さて、Java8で関数型っぽいことをやって遊んでみたわけですが、実際はそんな書き方しませんよね。 Java8で実際に使うのは、Streamです。 ということで、Streamの使い方をひととおり見てみます。 ※5/17 仕様変更があったので、修正しました 基 まずは、Iterableインタフェースに用意されたforEachメソッドを見てみましょう。 List<String> names = Arrays.asList("hoge hoge", "foo bar", "naoki", "kishida"); names.forEach(s -> System.out.println(s)); これで次のように表示されます。 hoge hoge foo bar naoki kishida いままでの拡張forだと次のように書いてました List<String> names = Arrays.a

    Java8のStreamを使いこなす - きしだのHatena
  • Java 8を関数型っぽく使うためのおまじない - きしだのHatena

    やあ、3月に延期になったとはいえ、Java 8リリースが具体化してきましたね。 もうこれで、Lambdaがはずれるとかいうことはなさそうです。 ところで、Java 8で関数型っぽいことができるようになってうれしいのですが、ちょっと記述が冗長です。ということで、短く書けるおまじない考えてみました。 Function型 さて、まずはJava 8で標準で入ったFunction型をみてみましょう。パッケージ名まで含めるとjava.util.funciton.Functionです。 こんな感じで使います。 Function<String, String> enclose = s -> "[" + s + "]"; Genericsでの型指定の最初が引数、あとが戻り値の型です。ここではStringをとってStringを返す関数としてencloseを定義しています。 これを呼び出そうとすると、こんな感じ

    Java 8を関数型っぽく使うためのおまじない - きしだのHatena
    ab_sn
    ab_sn 2013/05/01
    他の言語要素を取り入れる必要があるのかどうか。
  • 作るプログラムの機能や性能で勝負したい。そうだ、データベースを勉強しよう - きしだのはてな

    さて、アルゴリズムの勉強のしかたと、ラムダ計算の勉強のしかたの目星をつけました。 アルゴリズムの勉強のしかた - きしだのはてな ラムダ計算の勉強のしかた、プログラム意味論 - きしだのはてな これでここで書いたプログラムの理論の基礎は勉強できたことになるんじゃないかと思います。 プログラムの理論とはなにか - きしだのはてな ところで、プログラムの勉強地図としてこういう図を書きました。 で、ハードウェアまわりについても、プロセッサを支える技術やネットワークはなぜつながるのかでひととおり勉強したとしましょう。 じゃあ次は、アジャイルか?テストか?UIデザインか?となるわけですが、やはりプログラマなら、プログラムの作り方や使いやすさの前に、作るプログラムの機能や性能で勝負したいじゃないですか。 いい感じに関数が分割できるよとか、読みやすい名前がつけれるよとか、効率よく仕事して定時に帰れるよと

    作るプログラムの機能や性能で勝負したい。そうだ、データベースを勉強しよう - きしだのはてな
  • プログラムの理論とはなにか - きしだのHatena

    プログラムには、手続きを記述するという側面と、式を記述するという2つの側面があります。 そして、それぞれの基礎理論としては、チューリングマシンとラムダ計算があるので、プログラムの理論としては、この2系統を勉強する必要があると思います。 ラムダ計算というのは、式によってどのような計算ができるかという理論です。式による条件分岐はそれほど難しくなく、Yコンビネータなどの不動点定理で、式によって繰り返し処理が行えるということが証明されたので、どのような計算でもできるということになっています。 チューリングマシンの理論とは、どのような手続きがどのような性質をもつかという理論です。プログラムの性質というのは、ある出力を行うプログラムが、入力に対してどのように時間がかかるか、どのようにメモリを使うかというものです。そしてこれがアルゴリズムの理論になります。 ところで、ぼくはブログで「アルゴリズムを勉強す

    プログラムの理論とはなにか - きしだのHatena
    ab_sn
    ab_sn 2011/09/23
    統制者、作業者ではなく、創造者として、どうつくっていくか、何を作って生きたいか、何をつないでいきたいか。キシダさんの文はそれを物語っていて、じわっときます。
  • 1