Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaは今どうなっているの? / how about java now
Search
Naoki Kishida
January 07, 2024
Programming
20k
15
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Javaは今どうなっているの? / how about java now
2024年1月7日に行われたFukuoka Engineers Dayでの登壇資料です。
Naoki Kishida
January 07, 2024
More Decks by Naoki Kishida
See All by Naoki Kishida
ローカルLLMでどこまでコードが書けるか -LLM基礎知識 / How much code can be written on a local LLM - fundamental knowledge
kishida
9
9.1k
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.4k
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
390
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
5.5k
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
220
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
610
ローカルLLM基礎知識 / local LLM basics 2025
kishida
30
17k
AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mcp for jjug
kishida
5
1.3k
AIの弱点、やっぱりプログラミングは人間が(も)勉強しよう / YAPC AI and Programming
kishida
13
7.1k
Other Decks in Programming
See All in Programming
Deep dive into the select statement (GopherCon UK)
jespino
0
170
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
110
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
410
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.5k
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
110
XHTMLが残したもの
yosuke_furukawa
PRO
2
420
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
170
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
54
36k
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
170
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
120
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
650
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
580
Abbi's Birthday
coloredviolet
3
9.8k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Mind Mapping
helmedeiros
1
350
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
Balancing Empowerment & Direction
lara
6
1.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Transcript
Javaは今どうなってるの? 2024-01-07 Fukuoka Engineers Day Javaコミュ@福岡 きしだ なおき
2024/01/07 2 自己紹介 • きしだ なおき • LINEヤフー • twitter:
@kis • 「プロになるJava」という Java入門書を書いてます
2024/01/07 3 Javaは今どうなってるの? • より学習しやすく • スレッドモデルの改善 • オブジェクト指向からデータ指向へ
より学習しやすく • Pythonに入門者が奪われてやばい • javac不要で実行できる • パブリックスタティックヴォイドメインからの脱却
javac不要で実行できる • java sample.java で実行可能 • javacを使うときに困ること • javacではファイル名を指定、javaではパッケージ含むクラス名を指定 •
パッケージについて理解が必要 • パッケージ名と同じフォルダにソースがない場合、コンパイルはできるけど実 行はできない • ファイル名とクラス名をあわせる必要がある • 大文字小文字ではまりがち • ちょっと実行したいときにsample.classができるのも邪魔
パブリックスタティックヴォイドメインからの脱却 • パブリックスタティックヴォイドメインの問題 • おまじないがいっぱいある • publicやstaticは相対的なので最初の段階では説明できない • mainから呼び出すメソッドを定義するときには必要になるのでモヤモヤしつ づけることに
• Stringや[]はがんばれば説明できるけど、まだそのときではない • クラスもいらない • 単にコード置き場に なっている public class Sample { public static void main(String[] args) { System.out.println(“Hello world!”); } }
void mainでいける • void main()でいける • void mainを消すためにはmain以外にも影響のある変更が必要 • まだ試用機能
• Java 23くらい?(9月リリース) • System.outもそのうち消せるかも void main() { System.out.println(“Hello world!”); }
スレッドモデルの改善 • グリーンスレッドの復活 • 構造化並列
グリーンスレッドの復活 • Java1.0ではグリーンスレッドだった • 当時は単一CPU、シングルコアしかなかった • GUIのバックグラウンド処理のためが主な目的 • Java1.1でOSスレッドに対応 •
複数CPUが増え始めた。その後マルチコアが当然に • 複数プロセッサで高負荷処理 • Java 21でグリーンスレッドが「仮想スレッド」として導入 • マルチスレッドの目的が通信時に別の処理をしたいだけが多い グリーンスレッド アプリケーションで管理 軽い 複数コアを使えない OSスレッド OSで管理 重い 複数コアを使える
構造化並列 • サブタスクを2つ別スレッドで呼び出すときの問題 • 片方でエラーが出たとき、もう片方がそのまま処理を続けてしまう • 親スレッドが中断したとき、サブタスクだけ生き残ってしまう
オブジェクト指向からデータ指向へ • オブジェクト指向 • オブジェクト指向はモジュール化技術 • モジュール化はすでに行われてる • ブラウザ-サーバー •
マイクロサービス • サーバレス • プログラムをさらにモジュール化する必要がない • データ指向 • データをデータ(not オブジェクト)として扱う • データの性質を型として定義する
データの性質を型として定義する • 抽象データ型 • 代数データ型 • ポリモーフィズムではなく条件分岐
抽象データ型 • 型の定義の指針 • データの操作だけ公開することで変更に強く柔軟な型を定義 • データ特化のカプセル化 • 操作としてデータ操作だけを含む •
レコード型の導入 • 継承は不可 • interfaceの実装は可 record User(long id, String name) {}
代数データ型 • 型の組み合わせの指針 • 代数的に型を扱う • 代数的=足し算と掛け算 • 直積型 •
直和型
直積型 • 値を組み合わせる型 • レコード、クラス、配列 • 値のとりうるパターンがそれぞれの値のとりうるパターンの積 • record A(boolean
a, byte b) {} • 2 x 256で512とおり
直和型 • いずれかの型になる • とりうるパターンは足し算になる • sealedの導入 sealed interface Op
{ record AddOp(int a, int b) implements Op {} record SubOp(int a, int b) implements Op {} }
ポリモーフィズムではなく条件分岐 • switchの改善 • パターンマッチング
ポリモーフィズムではなく条件分岐 • ロジックを正しく書くには、ロジックが一箇所にまとまっている ほうが便利 • ポリモーフィズムではロジックがクラス別に散らばる • そのロジックにかかわるすべての処理の把握が難しい • しらんところで継承されて把握できない処理がまぎれこむこともある
• sealedで対処可能 • 継承に依存したポリモーフィズムでは対応できないことも多い
switchの改善 • breakとか不要に switch(value) { case 1 -> println(“One”); case
2 -> println(“Two”); }
パターンマッチング • 型ごとの処理 • 構造の分解 int calc(Op op) { return
switch(op) { case AddOp(int a, int b) -> a + b; case SubOp(int a, int b) -> a – b; } }
詳しくはJavaコミュ@福岡の勉強会で • Java22が2024/3/19にリリースされるのでその前後でやります • javaq.connpass.com •