CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。
Introduction Java SE 10 introduced type inference for local variables. Previously, all local variable declarations required an explicit (manifest) type on the left-hand side. With type inference, the explicit type can be replaced by the reserved type name var for local variable declarations that have initializers. The type of the variable is inferred from the type of the initializer. There is a ce
オラクルがJEP 181 - "ネストベースのアクセス制御" - 俗に言う"nestmate"を発表した。これはプラットフォームへの技術的な拡張であり、Java 1.1で導入したアーキテクチャの20年分の負債を精算するものだ。 新機能はJavaのネストクラス (厳密ではないがたびたび"インナークラス"と言及される。ネストクラスの取りうる型の1つでしかないのに。) の実装につながっている。 一般的に、ネストした型が使われるのは2つの別々の目的のためだ。2つともカプセル化に関連している。 まず第一に、型はとても明確な理由で必要とされるだけなのかもしれない。それもコードの非常に小さな部分において。これが意味することは、実のところ実装詳細の一部であるのでしっかりとローカルに限定すべきであるということだ。 Javaの古いバージョンでは、これをする唯一の方法はネストした型だけだった。たとえばインタフェ
Project Reactorには,すべての基盤となる主要な型が2つあります。システムを流れる0からNの値を表すFlux<T>型と, 0から1の値を表現するMono<T>型です。Java Clientの内部では,単一要求,単一応答モデルに明確に対応するMonoをおもに使用しています。 Flux<Application> listApplications() {...} Flux<String> listApplicationNames() { return listApplications() .map(Application::getName); } void printApplicationName() { listApplicationNames() .subscribe(System.out::println); } この例では,listApplications()メソッドがネット
今時builderライブラリも無いだろという感じですが,書いたのです. github.com Motivationにも書いているのですが,普通に作ったJavaのbuilderは不完全なインスタンスを作成できる可能性を孕んでいます.注意深くコードを書けば問題ないかもしれませんが,えてして我々 (主語が大きい) はミスを犯しがちです.そしてNPEがやってきて……我々はしぬ. というわけで今回作ったのがarnoldです. 端的にいうと「必要なすべての要素を取りこぼさないbuilder」であり,「そのジェネレータ (annotation processor)」でもあります.Basic usageにあるように, import net.moznion.arnold.annotation.ArnoldBuilder; import net.moznion.arnold.annotation.Requir
Javaプログラミング言語の生産性とパフォーマンスに対して継続的に探求してきた成果を用いて、オラクルのJava言語アーキテクトであるBrian Goetz氏はデータクラスの実験的な概念を紹介した。これは将来言語に統合される可能性が高い。彼の研究はバリュータイプやパターンマッチングのような予定されている機能とデータクラスが自然にフィットすることを証明している。しかしこの概念がJava言語の一部となる準備を整えるには、なされるべき作業は多い。Goetz氏は時として"データは単にデータである"ことを前提としてデータクラスの課題とトレードオフを調査している。 動機 Javaクラスは今まで大量のボイラープレートコードを必要とした。クラスが単純か複雑かどうかにかかわらずだ。このことでJavaは"冗長すぎる"という評価であった。Goetz氏はこう説明している。 ごく普通のデータキャリアクラスを責任を持っ
Javaのジェネリクスは一般に配列と混ぜてはいけないとされるが、混ぜて用いた場合に何が問題となるのか。 歴史的な問題 Javaが1995年に登場した当時、Javaに配列はあったがジェネリクスはなかった。 ジェネリクスを含む型システムの理論的な整備は、1990年代から2000年代にかけてのJavaのバージョンアップの時期に並行して行われていた。これは1995年当初のJavaになぜより良いジェネリクスを搭載した形でリリースされなかったのか?ということにひとつの答えを示すだろう。つまり、1995年当時にはジェネリクス(Java5に搭載されたような変性を含むもの)は未来の技術であって、まだ理論的に固まっていないものであった、というわけだ。 Java言語仕様にも記述されているが Historically, wildcards are a direct descendant of the work b
TeaVM: Build Fast, Modern Web Apps in Java A powerful tool for Java developers who want to develop web applications without the difficulties of a JavaScript development stack. Learn More What is TeaVM? TeaVM is an ahead-of-time compiler for Java bytecode that emits JavaScript and WebAssembly that runs in a browser. Its close relative is the well-known GWT. The main difference is that TeaVM does no
κeenです。これは言語実装 Advent Calendar 201714日目の記事です。 JVMのコンパイラエンジンGraalと高速インタプリタ作成フレームワークのTruffleについて。 この記事の前に昨日の記事を読んでおくと理解の助けになるかもしれません。 Graalについて 公式ページ/GitHub。 Oracle Labで開発されているJavaのJITエンジンの1つです。 JVMのコンパイラインタフェース(JVMCI)を利用してJavaでコンパイラを書いたものです。 従来はコンパイル部分はC++で書かれてましたが曰くJavaも十分速くなったし高級で安全なJavaでコンバイラを書いてもいいだろとのこと。 この絶妙にランタイムが拡張可能でかつパフォーマンスを損なわない感じはJavaならではですね。 また、Javaで書かれているのでユーザがJavaで拡張可能でもあり、最適化や機械語生成
気合が続くか分からない Java Generics Hell アドベントカレンダー 1日目。 読者の推奨スキルとしてはOCJP Silverぐらいを想定している。 導入 JavaのジェネリクスはJavaが設計された当初(Javaは1995年に発表されている)から検討はされてはいたものの、実装が追いつかず、導入はJava5(2004年)を待つこととなった。後方互換の都合からいろいろと不便な部分もある。Javaに限らず、ある程度、歴史の長いプログラミング言語は、改定の都合からいろいろと不都合な部分が生じるものである。後方互換性を犠牲にして一新すれば言語仕様もさっぱりするが、非互換の壁でバージョンアップできないという闇を抱えたりとそれはそれで大変だ。 後方互換、つまり、より新しいバージョンは、昔作ったモノも動かせる、ということを前提にした場合、プログラミング言語の仕様というのはどんどん肥大してい
今年のJavaOneオープニングの基調講演において、Oracleは、GPLでJava SEをリリースし、Oracle JDKの全ての機能について、オープンソース化する計画を発表した。また、Java EEは、マイクロサービスとサーバレスの新世界に適合していないことを認め、この問題に取り組む計画について話した。現代のマイクロサービスアーキテクチャのケーススタディは、AlibabaとSpotifyによって提供された。基調講演のビデオは、YouTubeで視聴できるが、ここでは、重要な情報を要約して提供する。 セッションは、Intelのシステム技術/最適化部門部長、Michael Greene氏の話から始まった。Greene氏は、どのように「未来のもっとも価値のある通貨がデータになる」かについて話し、IntelのXeonプロセッサは、そのデータを扱う準備ができていることを強調した。Greene氏の話
久しぶりにジェネリクスを多用するライブラリを作成していて、忘れていたことやはまりどころがあったので、今更ですが備忘録的にポイントをまとめておきます。 用語 ジェネリクスは似たような用語があって混乱しやすいので、まずは用語をきちんと抑えておく。 以下は、Effective Javaの項目23からの抜粋である。 用語 例
私は以前、Linuxでのシステムコールはとてつもなく高コストだと思っていましたが、この測定で、その考えが誤っていたことが判明しました。実際にはシステムコールにコストはかかりますが、例えば、L3キャッシュミス(100ns)に比べれば低コストです。 ただし、行われるアクションが短いとしても(TSCベースの gettimeofday 向けだから)、システムコールを避ける方が有利です。その場合は、vDSOの方が断然役に立ちます。私たちのケースでは、ほぼ3倍実行が速くなりました。 どうすればいいのか 最良の方法は、TSCタイムソースを持つWindowsまたはLinux以外では絶対にプログラムを実行させないようにすることです。それが不可能なら、純粋なJavaの中にいながらこの呼び出しを高速化する方法はなく、解決策は、 currentTimeMillis() があまり頻繁に呼び出されないようにすることで
9月の頭くらいに、Javaのリリースモデルが6ヶ月ごとの短期リリースになるということが発表されてました。 で、「へぇ〜」みたいな感じで見てたのですけど、JavaOneでの話を聞くと、これ結構大変なのかも、ということになってそうなので、ちょっとまとめてみます。 追記:2018年05月の状況をQiitaでまとめています。 [Javaのサポートについてのまとめ2018 - Qiita](https://qiita.com/nowokay/items/edb5c5df4dbfc4a99ffb) Javaの新しいリリースモデル 公式情報はこちらにまとめられています。(10/4にアップデートされてます) http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html ざっくり言えば、6ヶ月ごとに機能リリースを行い、3ヶ月ごとにメンテナンス/セキ
サンフランシスコで開幕した「JavaOne 2017」。基調講演の最後に、Java 9以降のJavaのために現在開発が進んでいる新機能が紹介されました。 Project Panamaは、Javaとネイティブなコードのデータのやりとりを可能にするもの。JavaからC関数をコールし、C関数からJavaにコールバックしたときにデータにアクセスするといったことが可能。 Project Valhallaは変数の型付けに関するもので、変数の基本的な型をプログラマブルに設定できるというもの。 参考:Java 9の先、Java 10/11では最新のハードウェアやOSに最適化したデータのメモリ配置が可能になる。JavaOne 2015 参考:JavaOne 2016が開幕、JDK 9ではJava Shellが登場予定。JavaOne 2016 Javaコードの可読性を向上させ、バグの混入を減少させるProj
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く