【IT】Java 10が本日付で正式リリース。ローカル変数の型推論、ガベージコレクタが入れ替え可能、不揮発性メモリ対応など
■ このスレッドは過去ログ倉庫に格納されています
昨年9月に登場したJava 9から、Javaは6カ月ごとのタイムベースによるアップデートサイクルが採用されました。そしてその最初のワンサイクルが経過し、今日3月20日付けでJava 9の次のメジャーバージョンアップとなるJava 10が登場する予定です。
おそらくJava 10の正式な発表は米国時間の3月20日、日本時間では休日となる明日の午前中あたりになると思われます。
Java 10の新機能:ローカル変数の型推論、ガベージコレクタが入れ替え可能など
Java 9では、通称「Project Jigsaw」と呼ばれるJavaのモジュール化機能が入り、Javaに対する大きな変更が行われました。しかし今回のJava 10では、それほど大きな機能変更や新機能の追加はありません。
Java 10での注目すべき新機能をいくつか挙げてみましょう。
Java 10では、ローカル変数を宣言するときに型推論を用いることで明示的に型を宣言しない記述が可能になりました。Javaの静的型付け言語の特長を維持しつつも、儀式的な記述を減らして使いやすい言語にすることが目的のようです。例えば、次のように記述できます。
var list = new ArrayList<String>(); // ArrayList<String>と推論
また、ガベージコレクタのインターフェイスが導入され、JavaVMのガベージコレクタが入れ替え可能になります。今後、用途に応じたさまざまなガベージコレクタが登場しそうです。
NV-DIMM(不揮発性DIMM)など新しいタイプのメモリにもヒープ領域が配置可能になりました。ストレージクラスメモリなど、これからメインメモリとストレージの中間的な記憶領域などが登場するのに備えているようです。
そのほかJava 10の主な新機能は、Qiitaの記事「Java 10新機能まとめ - Qiita」が参考になります。
Java 10の登場と同時にJava 9のサポート終了
Java 10の登場は、同時にJava 9のサポート期間の終了を意味します。今後はJava 9に対するメンテナンスリリースなどが行われなくなります。そのため、Java 9のユーザーは速やかなJava 10へのアップグレードが求められます。Java 9は昨年9月に登場してから6カ月で、その役割を終えるのです。
Java 9のサポートがJava 10の登場と同時に終了するのは、Java 9が長期サポート対象のバージョン(Long Term Support:LTS)版ではないためです。
現在のLTSは2014年3月にリリースされたJava 8です。Java 8は商用利用では2019年1月まで、個人利用では2020年12月まで無償でメンテナンスリリースを入手可能で、それ以後もオラクルと有償サポート契約を結ぶことでサポートを受けることができます。
そしてこのサポート期間の期限がくるまでに、Java 8の次のLTSである「Java 11」へ移行することが推奨されます。Java 11は今から6カ月後、2018年9月に登場予定です。Java 8の無償メンテナンスリリースが最長で2020年12月まで入手可能なのは、このJava 11への移行期間を十分に設けるためと説明されています。
下記は、日本オラクルが無償版のJDKおよび有償版JDKのサポートポリシーについての説明に用いている図を許可を得て転載したものです。
http://www.publickey1.jp/2018/java101112b.gif
http://www.publickey1.jp/blog/18/java_10java_9.html 型推論導入にどれだけ時間費やしたんだよm9(^Д^)プギャー javaとjava scriptって別物なんですか? >var list = new ArrayList<String>(); // ArrayList<String>と推論
Arrayって書いてるけど、どこが型推論なのこれ? 昔はC#がJavaの真似と言われたけど
今は逆だよな 悪化…JAVA11がLTSだからあと半年しないとどこも採用しないじゃん
Androidにいつ展開されるやら… プログラマーがバグを書けないように進化すべきなのに
プログラマーが楽にどうにでも書けるように進化していってる 型推論ってメリットあんの?
プログラム読みにくくなるだけじゃね >>18
型推論できない言語ってなんで10/3や100/10するだけなのにいちいち気を使わなきゃいけないの? >>18
プログラマが変数名に型の名前を入れるようになってソースは読みやすくなる
その代償として、コンパイルに時間がかかるようになる Javaのサポートって法人でもそんなに影響あるのかね?
うちは既存アプリに影響でるから、アップデートすらしてないわ
WebSphereのサポートが外れるタイミングでバージョンあげてる Javaのサポートって法人でもそんなに影響あるのかね?
うちは既存アプリに影響でるから、アップデートすらしてないわ
WebSphereのサポートが外れるタイミングでバージョンあげてる まあ状況によっては
new で型を指定して
変数宣言で型を指定して
みたいな二度手間になりがちではあるかもな >>23
個人であるオマエすらアップデートしてないんだろ?
法人なら尚更だろう
サービスを停止中は業務が滞ってしまうのに、人件費は払わないといけない >>20
動的型付け言語だとstringsNumみたいに変数名に型名をつけるのが習わしってこと? もうJava使ってないや俺
いろんな言語とプラットホームでバリバリ書くようになってからはJavaであるメリットが無い >>20
変数名のプリフィクスって何回も廃れては復活してるなぁ 最近のC++もほとんど↓みたいな感じだからね
auto value = うんたらかんたら やっと8への移行済んだばっかりなんだけどもう10かよ(´・ω・`) >>16
砂糖かけすぎてひどい味になった感じ
元から素性の良い言語設計ではなかったけれどさ ガベコレ入れ替えられるのって、斬新だね
いざバグるその日までは >>20
いまどきそんなヘボいコンパイラなくね?
型名入れるのも、最早化石じゃね? 型推論たって、ジェネリクスと組み合わせると
なんちゃらみたいな、制限だらけなんだろ まだJava6で十分。あせって新しいの使う奴は無能。異論は認めない。無能。 いい加減Javaとか世界の迷惑だからやめてほしいわ。Flashと一緒に消えてほしい。 糞Javaクライアン、トインストールするたびに腹が立つ。
不要になったら即座に消すわ。 list =[]で済むことを長々と書いてんだもんなあ
そら開発効率悪いわ 後でソース見る人も人力で型類推しないといけなくなる
まぁそんな所を見る機会は稀だろうが Java8だけど標準でOptionalとStream#forEachがあるのはC#に対してアドバンテージだと思う
その割に標準でtupleが無かったりやFunctionインターフェースが貧弱だったりするのは意味不明だけど・・・ >>53
IDEで見ればマウス当てれば型わかるしー
まさかIDEなしでソースみる芸当? いまだに>>20みたいな化石級の奴がいるって、
日本って不思議な国だよなーw >>56
>>52が言いたいのは、そういうことじゃなくて
JavaのがArrayListなんちゃらというのが非効率てこと
他の言語なら xs = []; xs.push('a')
とかで終わる話なのにょ Javaってバージョンに因って動く動かないが顕著にあるからめんどい。 >>59
ああ、他言語の話ね
でもそれはマルチスレッド前提にインターフェース統一する時にどうしても必要になることじゃない? >>60
Write once, debug everywhere. Javaって生きてたんかい
C#に取って代わられたんじゃなかったのか >>65
検査例外ってあれな
昔Javaってたけど、あれ本当に嫌いだった
真面目にやろうとするとそこら中でthrows書く羽目になる
面倒だからみんなRuntimeExceptionを継承した例外クラスで
ラップしてたわw PGの資格欲しいんですけどC#の資格って有りますか? >>69
つ「microsoft 資格 c#」
以下は俺の主観だけど、
資格持ってるだけの人ってあんまり信用されんよ
言語オタクと資格オタクみたいに、勉強と記憶だけ出来て、
プログラミングに必要な思考が全然駄目って人いるからさ
実際のシステムで揉まれた実務経験が一番だと思うよ
その上で資格持ってたら、説得力と印象がほんの少し上がる程度 >>19
型推論使うと、ちゃんとint, floatと推論してくれるの? C#も最初はJavaの後追いみたいなもんだったし
ガーベッジコレクタとかほかの言語処理系由来のものも多いし
どの言語も、よその言語のエッセンスをとりいれて進化してるってことなんだろうな
とくに関数型言語あたりから 最初のVMバイトコードをネームドメモリにしなかった時点で先が無いのは見えていた。
アドレスアクセスじゃなんも進化が無いつーの 今Androidアプリのメンテで仕方なくJavaやってるけど型推論使えなくてストレスたまってるから早くAndroidでJava10コンパイラ使えるようにして欲しいね >>79
こういう奴が、俺流でコーディングして他人にストレス与えるんだよな。 >>80
型推論使ったらオレ流って酷い言いがかりだね 型推論の有効性は、オブジェクト指向で担保されてるんだよ
オブジェクト指向の抽象化では、メッセージング(呼び出し)相手は
具体的な型を特定しないで済むように設計されるのが当たり前(いわゆる多態性)
だから、var というのは相手の型を無意味に特定しないという意味で必要な機能
しかも、強い型システムをもつ言語では「受け取れないメッセージ」については
コンパイル時エラーを出力できるから、Objective-Cみたいな「送ってみたら
相手が間違ってるから実行時エラー」みたいな厄介な事態も事前に回避できるので、
あまり副作用がないんだよね
ただし、数値型に var を使うと、特に整数型と浮動小数点数型で意図しない結果になることがあるので注意 toArrayのアンボクシングはいつ改善されるんだ?
Vector<Integer> A=new Vector<>();
int[] B=A.toArray(new Integer[0]);
が通ってほしいのだけれど。 C#が2008年にすでに実装されてた型推論、
なんでパクるのに10年もかかったん? >>87
内部はVBと共通だったから
実装するのは簡単だったからだと >>92
じゃあjavascript==ジャバじゃん お客様へのお願い。
JavaScriptのことを「ジャバ」っていうのやめてください。
「俺ジャバできるよ」
「ジャバでつくってよ」
「ジャバでヒドウキ(?)にインターネット更新したらカッコいいよ!」 >>90
バリアント型と型推論ははっきり言って別物だぞ letってコンストラクターのwritable ホールスじゃなかったっけ?
あれ 型推論してなくね?
変数名だけでいけるようにしろよ 最近の高級言語はお互いのいいところをパクリあってるからどれも似たり寄ったりだよね >>90
こういう型推論はVariant型みたいなもんだと思ってる輩が型推論批判してるんだよな 型推論ってタイプ量減らせるだけ?
キー叩く時間<<<考える時間<読む時間
だからきちんと型を書いておいてくれてたほうがうれしいんだが 型類推とかイラネ
むしろガチガチにしてくれ
ガベコレはアタマ悪いから入れ替えられるのは良い >>103
類推じゃなくて推論な
正しく型を選択してくれるから >>103
むしろ、Javaに型推論がなかったのを知らなかったぞ。
あって当然な気がした。
ガチガチが良い人向けは、コンパイルのオプションとかで対応できるだろ。 昔Java1.4くらいの頃にJVMのチューンしてたんだけど
今はSIerはなに使ってんの? >>102
ジェネリクスと組み合わせると最強
例えばこんなラムダ式があったとしよう
(a, b) -> { return a + b; }
こいつをint用とfloat用で使いたいが、わざわざ2つ作りたくない時とかな Map<String, Map<String, String>> hogeMap = new HashMap<String, Map<String, String>>();
みたいなソースも見たくないから、型推論は歓迎。 >>84
Vectorなんてまだ使ってるの?wwww
もう10年以上も前にオワったものなのに >>102
コード見る時にいちいち型とか見てないね
変数名でほぼ分かるし、数値か文字列かオブジェクトかリストか
それくらいわかれば十分だわ >>102
迷ったら、変数名にマウスを当てれば、どんな型が教えてくれるし
ほとんどvarで問題なし
逆にvarで迷うってことは、変数の命名(英語)が悪すぎる
もしくは、言語を知らなさすぎるアマチュア SIerのローカルルールで、var禁止な所は多くなりそうだな。
それ以前にJava10をまだ導入しないかw javaはコード長すぎて書く気も読む気もしなくなる。
型推論はすっきりするからありがたい。 小規模な開発にJavaを使ってる所は型推論はありがちかもしれないけど
そもそも小規模な開発にJavaを使うのか?
Android開発とかなら使うかもしれんしPlayFrameworkを
使うような開発だったらありかもしれないけど
そもそもPlayFrameworkがJavaの癖してRails目指してて中途半端 変数と関数、クラスを網羅して適材適所にはめこむエディタってないの? >>39
ほう。では、あなたが思う素性の良い言語はなに? >>109
確かに、「危険が危ない」とか「頭痛が痛い」みたいな感じ。 >>57
githubとかでレビューしないん?
いったんIDEに落とすん? >>109
>>120
Map<String, Map<String, String>> hogeMap = new HashMap<>();
だったらあかんのか?
単にJavaの書き方を知らないだけじゃね? >>122
var kimitachi = kiwi.papaya.mango();
みたいなときも便利やん >>122
それじゃ省略具合が中途半端だろ。
var hogeMap = new HashMap<String, Map<String, String>>();
の方がずっとすっきりしていて良いよ。 Java10でてもどうせ現場じゃ使わせてもらえないんじゃねーの? >>10
var listの型を推論しているのでは… Vector,ArrayListとか自らセキュリティホールを作る間抜け仕様。
Cの方がまともだぜ。 >>128
お前は安全装置が何もない初心者お断り仕様だろ ■ このスレッドは過去ログ倉庫に格納されています