次世代言語21 Go Nim Rust Swift Kotlin TypeScript

■ このスレッドは過去ログ倉庫に格納されています
2020/04/19(日) 15:06:02.92ID:jAOW5aqE
スレタイ以外の言語もok

前スレ
次世代言語18 Go Rust Elixir Kotlin TypeScript (実質20)
https://mevius.5ch.net/test/read.cgi/tech/1569866283/
2021/04/16(金) 20:10:02.72ID:U88khvJX
>>738
うーん、他の言語もタプルとかとして受け取るなら一部だけ受け取るなんてこと出来ないんだし、一般的な仕様だと思うけどな。
2021/04/16(金) 22:00:20.82ID:iRzpcHGc
>>739
その部分だけで考えれば普通なんだけど言語全体で考えるとバランスが悪い感じ

Openの方は

f, err := os.Open(..) // errを使わないとコンパイルエラー
f, _ := os.Open(..) // 敢えてエラーチェックはしない

の二択だけど、Closeの方は

err := f.Close() // errを使わないとコンパイルエラー
_ := f.Close() // 敢えてエラーチェックはしない
f.Close() // エラーチェックしないの?

の三択になって、例外を使わずに変数の使用を強制することでエラー処理を明示的にするっていう
Go言語のスタンスがぼやける気がする
(そのスタンス自体が私の思い違いかもしれないけど)

Closeだとエラー無視しても大したことないけど、Chdirあたりだと
エラーをスルーできて例外も飛ばないのは危険さを感じてしまう
C言語と同じだと言えばそれまでだけど、変数の不使用はコンパイルも通さないのに
戻り値の不使用は警告も出さないっていう仕様はアンバランスだと思った
2021/04/16(金) 22:43:53.10ID:U88khvJX
>>740
errを使わないとコンパイルエラー、は違うよ。
_ = err
と捨ててもコンパイルエラーは避けられる。

例外を使わず、は正しいけど、変数の使用は実質強制されてない。

そういう、errを捨てるような書き方は、Javaのthrows書きたくないからとExceptionで大雑把に例外を握りつぶしてるメソッドみたいなもんで、躾の問題だと思うよ。
2021/04/16(金) 23:39:26.78ID:h4psCBcA
>Javaのthrows書きたくないからと
極刑を望む
2021/04/16(金) 23:53:42.11ID:iRzpcHGc
「使う」の意味が曖昧だったかな
errを使うっていうのはエラーをチェックをするという意味じゃなく
コードの中でそのerrをどう扱うかを明示するって意味で書いた
(普通はエラー処理だけど)

>>741の例だと
_ = err
の中で「そのエラーはチェックしない」って意図を明示するためにerrを使ったことになる

_ := f.Close()

f.Close()
の違いは、下の書き方だと
・そこでエラーが返される可能性
・そのエラーを無視するという意図
の2つが伝わりにくくなること

もしかしたらコードを書いた本人もCloseがエラーを返す可能性を見落としてるかもしれなくて
そうなると想定しない状態でプログラムが動き続けて予期しない結果を招くかもしれない

もしコンパイラが戻り値を受け取らないパターンを弾いてくれればそういう見落としは防げるようになる
(そこで何も考えず戻り値を捨てる書き方をして予期しない結果になったならそれはもう躾の問題だけど)


Javaで例えるならExceptionで握りつぶすというよりcatch(Exception)して何もしない感じかな
自分は「飲み込む」と表現してる
2021/04/17(土) 02:30:54.76ID:6GAIvEwc
そんなに説明しなくても>>736だけで十分わかるよ
https://github.com/golang/go/issues/20803
https://github.com/golang/go/issues/20148 <― Rob Pike
2021/04/17(土) 02:59:32.14ID:Cl8a1wE7
同じこと言った記憶あるなあと思ったら一昨年だった

https://mevius.5ch.net/test/read.cgi/tech/1567602619/927
927 デフォルトの名無しさん sage 2019/09/29(日) 19:19:16.64 ID:siw3JIyP
deferのためなんだろうけど、返り値全捨てでの握り潰しがコンパイルエラーにならないのは不満
2021/04/17(土) 09:13:21.49ID:GZ3nvsuU
>>743-744
これは俺が不勉強だった。Issueも立ってたのか。
この議論は確かに有益だな。
issueで書かれてるように、deferで雑に閉じたいとかそういうケースが確かに漏れるか、ってぐらいだな。

うーん、なかなかバランス難しいもんだな。
とはいえRustみたいな気難しいコンパイラになられるのもなかなかだし。
2021/04/17(土) 09:39:43.53ID:WqZ6rzHC
>>742
それは形式的に判断できるものじゃなくて、大雑把かどうかはその内容によるわな。
握りつぶしていい例外は存在するしそれは握りつぶしていい。
2021/04/17(土) 11:00:28.48ID:tBKly9ku
throwsを書くのは関数や変数の型を書くことと同じ
それに対し「型を書かなくていい変数は存在する」と
言い返したのと同じだから痛快だね

全ての変数に型を書くのに今までどれだけ無駄な努力をしていたか
2021/04/17(土) 12:15:23.05ID:WqZ6rzHC
>>748
Javaの検査例外はたしかに例外を型安全に扱うための仕組だけど、throwsを書かないのは
いわばvoid型のようなもので、型推論や動的型付けで型を書かないのとは違う。
2021/04/17(土) 12:35:03.15ID:GZ3nvsuU
検査例外は「ただの大域jmp、しかも行き先が自分ではわからないやつ」っていう例外の悪い部分をうまく取り扱うための、そこそこいい仕組みだと思うんだけど、
いかんせん例外で対応することが多すぎた気がする。
このメソッドより外側には漏れ出しません、ってのは俺はいい宣言だと思うんだけどな。

今はかなり改善されてるんだろうけど、Javaにいい印象なくてなかなかJava系の言語やる気持ちになれないや…。
2021/04/17(土) 13:37:15.96ID:GMKTrofB
Javaの例外処理は独自の例外クラスを作って低層の例外を取り込んでいく設計を知らないと
throwsの中身が膨れ上がって大変なことになるね
throwsが面倒っていう人は独自の例外クラスを作るのが面倒なんだと思う

GoとかRustは返せるエラー型が原則1つに制限されるから必然的にそういう設計を迫られる
2021/04/17(土) 17:29:58.69ID:GZ3nvsuU
>>751
C#で言うInnerException的な?
まあ、業務ロジックでハンドリングするならアプリケーションで定義した例外に包むわな、確かに。
2021/04/17(土) 22:12:19.57ID:IisFsCzs
Javaの検査例外は直上でのハンドリングを強制したのが失敗
Goみたいに一種類だけならまだしも、全種類はさすがにノイズになりすぎた
コンパイル時にチェックしたいだけならthrowsは暗黙的にコンパイラが生成し、最終的にキャッチされないままの例外があったら警告出すくらいで十分だったんだよ
結局Javaはmulti catch導入して、型を緩める方向に舵を切っちゃった
2021/04/17(土) 22:53:24.71ID:/69X/cno
throwsを暗黙的に生成するのはそんなに簡単じゃない気がする
2021/04/17(土) 22:59:40.59ID:WqZ6rzHC
検査例外がというより、そこは例外に多彩な型を持たせること自体が失敗だったと言うべきだろうな。
例外というものは呼び出し階層の複数の階層を越えて上位層が下位層に依存してしまうんで
それをSOLID原則のに従うようきっちり依存性逆転させるのは骨が折れる。
2021/04/17(土) 23:31:17.79ID:dnL36O9R
例外の型って大抵デバッグ目的で持たせるエラー情報の種別に応じて作られるわけだけど、
それってプログラムでのエラーハンドリングの制御とは異なる関心事なんだよな
それをごっちゃにしてしまったのがJava系の例外の失敗だと思う
プログラムの制御にとっては、成功、リトライ可能な失敗、リトライ不可な失敗、くらいの分類があれば十分で、それ以上細かくしてもノイズになるだけ
2021/04/18(日) 00:47:22.61ID:z4d4288G
プロセスやスレッドを起動するならexitでいいのに
シングルタスクでイベントループを終了しないで続けるためにthrowとcatchがある

上位層が下位層に依存するのはシングルタスクの欠点だが
それは旧世代言語の欠点だというのがなぜか定説になってしまった
2021/04/24(土) 08:05:00.86ID:8O98k7om
> 例外というものは呼び出し階層の複数の階層を越えて上位層が下位層に依存してしまう

これどういうこと?
上位下位というのは継承関係?コンポジションの関係?
いずれにせよピンと来ないんだが
759デフォルトの名無しさん
垢版 |
2021/04/24(土) 08:18:28.13ID:8O98k7om
https://ideone.com/gvbImJ
class A {
void foo(int value) {
if (value != 42) throw new IllegalArgumentException();
}
}
class B {
void bar(int value) {
new A().foo(value);
}
}
class Ideone {
public static void main(String[] args) {
try {
new B().bar(0);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
たとえばこう↑したとき
どこに「上位層が下位層に依存してしまう」部分があるの?
2021/04/24(土) 09:21:13.32ID:PpOY6z/o
呼び出し海藻だろ
2021/04/24(土) 10:02:36.99ID:K4uxnQki
>>759
A が IllegalArgumentException を投げるかもしれないという事実に Ideone が依存している。
2021/04/24(土) 12:02:10.01ID:X9M/vDl3
>>761
そのことをもって「上位層が下位層に」と表現しているってことでおk?
2021/04/24(土) 12:15:38.69ID:h2P4AVL3
だいたいその認識だったな、俺も。
2021/04/24(土) 15:59:57.86ID:tHtLe+wG
IllegalArgumentExceptionならまああまり依存してる感はないかもしれない
特に問題になるのは、FooException のように、barがfooに依存しているという事実を晒してしまうような例外を投げるケースだな
2021/04/24(土) 20:23:23.95ID:UtBZJqS8
やっぱJavaってオワコンなのか書店のJavaコーナーどんどん縮小してるし
以前はJavaコーナー一番広かったのに最近は大概他の言語(Python,JavaScriptなど)に負けてるな
何はともあれ業務上必要で売れるならある程度の面積は占めるはずなんだが
766デフォルトの名無しさん
垢版 |
2021/04/24(土) 21:19:03.86ID:pIwkRpva
俺がインターンの子にジャバをやらされる企業には絶対いくなといってるからだろうな
2021/04/24(土) 21:44:59.76ID:tDy/GOTv
新卒奴隷送り込む商売がやりづらくなっただけなのと
六ヶ月リリースになって書籍が追いつけなくなっただけでしょ。

「やさしいjava完全に理解した!」が減っていいことだ。
2021/04/25(日) 04:27:20.08ID:HtPKTQ5q
リリースに出版が追いつかないだけの理由なら別に書籍のコーナースペースが縮小したりしないと思う
スペースが狭くなってるって事は需要の絶対数が減ってるからでJavaをやる新人ってのが減ったのは確実なんだろうな
2021/04/25(日) 05:12:25.49ID:fxJVYt9g
ただ単にkotlin使うようになっただけでしょ
まだまだjvm使ってるとこは多いと思う
今後はわからんけどね
2021/04/25(日) 06:29:37.85ID:NMiXqa1m
Javaが採用されてきた大きな理由の一つとして、実行環境としてUNIXをターゲットとする場合に、工員の開発PCがWindowsでも比較的支障が少ないってのがある
ただ最近では業務系でも開発にMac使うところは増えてきたし、
.NETもLinuxに対応したりNode.jsやPythonも主にUNIXで運用される主要なスクリプトの中では比較的Windowsの相性が悪くない方だったりして、ライバルも増えた
そもそもクラウドやコンテナの普及のせいで、直接Windows上で開発するということ自体がこれまでよりも困難になってきているし、Windows自体もWSLにより完全なUNIXを備えてしまったためこれまたJavaに拘る理由がなくなってしまった
2021/04/25(日) 06:56:54.09ID:wIbtFVmU
売り場面積が根拠ならjava云々でなく単に棚分類コードの関係で書店の扱いがいいジャンルに業界がシフトしてるだけの話よ。
鉄板はEXCEL本、python本、後は今ならディープラーニング関連かな。
オライリー・ジャパンですらwebもプログラミングも関係ない分野の本出してんの知らない?
javaならむしろ去年の六月にswingの新刊出てる。

>>769
kotlin使うようになったらからが理由ならscala使うようになった頃に取って代わってるだろうね。
2021/04/25(日) 13:13:44.43ID:oFpMkyEJ
Java は、GitHub に銀行のソースコードを上げた人とか、
20年やっても年収200万円とか、IT 土方の多重請負構造で、
客には1人月100万円を請求しているはずが、80万円抜かれる

プログラマーに還元されない。
というか、関数内だけを作っている、
システムを作っていない単純コーダーだから

工事現場の見習いみたいな感じ

そのIT業界の多重請負構造を、
YouTube で有名な、雑食系エンジニア・KENTA が、
ばらしてしまったので、日本中に広まった

IT土方Java vs 自社開発系Ruby
SES のモロー vs KENTA
2021/04/25(日) 13:18:37.83ID:KtTIhOup
推奨NGワード: 土方
推奨NGワード: 請負
推奨NGワード: 雑食
推奨NGワード: KENTA
推奨NGワード: 自社開発
推奨NGワード: Ruby
推奨NGワード: SES
推奨NGワード: モロー
2021/04/25(日) 15:27:32.41ID:HtPKTQ5q
ちなみに言語じゃないけどDenoってこれから伸びる可能性あるんかね?
2021/04/25(日) 15:38:35.22ID:8jr05iQT
もしかしてDartって若干伸びてきてる?
2021/04/26(月) 08:02:24.55ID:xaTdJ+wC
Youtubeよりも5chで荒らしとして有名になってる件
2021/04/26(月) 10:52:47.24ID:vu3N8V9m
denoというかwasmがくるよ
2021/04/27(火) 01:13:44.64ID:ybAp8EWh
ということはRustが来るのか
2021/04/28(水) 11:37:01.99ID:3EuQZ3Ew
実際にプロジェクトで使ったことない人には定評あるね
2021/04/28(水) 12:18:47.51ID:Gm/vyyE5
インフラとか組込とかミスの許されない/修正リリースできない現場は
形式証明機能のある言語を実際に使うとか聞いたで
F*だかidrisだか忘れたけど
ググったらRustでもCHCソルバでプログラム検証しまーすとか普通にでてくるし
クリティカルなとこではちゃんと使われてんじゃないかい
2021/04/28(水) 13:26:23.31ID:GFgIUmSe
大規模開発で使うっていう都市伝説が検証されるだけで一歩前進か
2021/04/28(水) 16:26:28.05ID:3EuQZ3Ew
そんなとこで使われてるわけねーだろ。。
その手の証明ツールを使ったことあればわかるがテストコード書く方がまだまともなアプローチだわ。
実際に使われてるのは不確定性をうまく論理化してプロトコル検証をするって使い道はある。
そう言う使われ方は分散アルゴリズム周りでは少しやってるとこもあるがほんの一部だわな。
2021/04/28(水) 16:31:19.72ID:yDqZolk/
組込みRustという本がちょうどこの前出たぞ
784デフォルトの名無しさん
垢版 |
2021/04/28(水) 21:17:46.00ID:85tuN82O
意図もわからずなんとなく動くからそのメソッドを使い、借用をつければなんとなく動くから 借用し、
変更する予定はないけどmutし、ここはエラーだからとpanic!し、補足するなと言われているのに
catch_unwind/recoverして、血の涙で泣きながら渡されたソースをシコシコ直すおまいら・・・
rustのどこが良いか全然わからない
2021/04/28(水) 23:38:51.58ID:2VQTxO/e
マルチするな
2021/04/29(木) 07:18:17.94ID:KLHt34b8
ちょっと改変すればどの言語にも適用できそう
というかそういう元ネタあんのかな?
2021/04/29(木) 10:33:36.01ID:tR6uAqfq
補足?足なんて飾りです!偉い人にはそれがわからんのです!

早くモデル検査が当たり前になぁれ!
2021/04/29(木) 12:41:21.56ID:JBnzphH4
>>781
大規模開発ってプロジェクト人数が多そうだし精鋭にはならんだろうから寧ろ不向きだろうって直観的に思う
2021/04/29(木) 12:43:37.33ID:JBnzphH4
>>783
この前それ立ち読みしたけど去年秀和から出た実践〜の8章理解しとけば十分な気がした
2021/04/29(木) 14:27:34.72ID:earX3YoR
>>786
>ちょっと改変すればどの言語にも適用できそう
ほぼこれが主張だぞ。
2021/04/29(木) 15:23:01.97ID:bEP8m5yM
落ちないからヨシ!
2021/04/29(木) 22:26:54.16ID:3tiS91aO
検査で「偽陰性」になったソースを渡されたら血の涙で泣く
ということは
血の涙が出たら陽性、という検査を追加すればいいんだろ
793デフォルトの名無しさん
垢版 |
2021/04/30(金) 16:54:11.94ID:U7XnfxJa
個人的には
どの次世代言語がいいかじゃなくて
次世代言語にはどんな言語機能を備えていてほしいかで語ってほしい
2021/04/30(金) 17:05:12.65ID:8uDUVNfy
いうほど必要な機能なんてない。
ここ50年の結論はバカは何使ってもバカということだろう。
2021/04/30(金) 17:34:44.55ID:8aEpEI3N
用途によって欲しい機能が違うんだからすべてを満たす言語が出来るはずがない。
796デフォルトの名無しさん
垢版 |
2021/04/30(金) 18:12:44.65ID:U7XnfxJa
macroとか型クラスとかあるやろ具体的には
2021/04/30(金) 18:16:43.42ID:TuBhqj3T
ようとに応じた欲しい機能すべて実装すりゃいいだけだろw
2021/04/30(金) 20:12:42.07ID:19g7m0Bn
「二刀流はズル」という価値観を捨てれば矛盾する機能でも両方実装できる
2021/05/01(土) 19:29:31.85ID:wiEZYnrW
結局必要なところはcで書いてバインディングできるような言語設計をほとんどの言語が行なっている。
それが答えだろ
2021/05/01(土) 21:16:05.18ID:0VFft9ft
いや、違うと思う
2021/05/02(日) 16:15:43.74ID:F4olHNfs
レガシーコードとの連携のためとかいいわけしながら
結局ユーザー2層構造が暗黙の仕様になってるような
2021/05/03(月) 23:13:29.51ID:AyvebyYK
ちなみにおまいら具体的にはどの言語に手を出した事あるの?
803デフォルトの名無しさん
垢版 |
2021/05/03(月) 23:22:14.10ID:N/p1rn3A
Java,C,VB.NET,C#,F#,Haskell,Elm,Rust,Idris2

F#とIdrisがすこ
2021/05/05(水) 04:20:34.48ID:roWASgUj
どっちも流行ってないね
お前の逆を行くと良さそう
2021/05/05(水) 11:02:40.08ID:1EwqoC8k
最近あんまGoって聞かなくなったけど使われてるとこでは使われてるの?
2021/05/05(水) 12:40:27.37ID:A+0MNUzo
5月生まれって約12人に1人しかいないので
逆を行くと良さそう
2021/05/05(水) 12:53:07.09ID:UNdhfIGe
>>805
kubernetes, dockerなんかはgoだよ。普通にメジャーどこのツールで使われてる。
2021/05/05(水) 15:42:00.03ID:wt31bFvh
>>805
GitHubもGoで書き直しを続けてる
2021/05/06(木) 20:12:11.27ID:zqd1xc9I
>>170
結局次世代言語の将来性を格付けしてもこの順位と同じような感じなんだろうか?
2021/05/06(木) 20:44:53.95ID:3RkG7Oy1
次世代のThe 4強って感じだな
2021/05/06(木) 20:45:30.10ID:3RkG7Oy1
順位は入れ替わるとしても4枠だとそれになるよねって感じ
2021/05/06(木) 22:41:04.82ID:pupGSg3O
俺的にはその中のKotlinだけは無いような気がする
2021/05/06(木) 22:54:04.28ID:pZ3qKppe
GoとTSはもはや現世代言語では
2021/05/06(木) 23:22:17.53ID:7m15cXg/
確かにGo,TS,Swiftあたりは現世代っぽい。Kotlin,Rustが次世代になるかどうかって感じかな。それ以外は今のところそんなに見込みはなさそうなイメージ。
2021/05/06(木) 23:37:16.07ID:pupGSg3O
Dartはたぶんワンチャンあるよ
2021/05/07(金) 00:00:45.03ID:7aFGtcIv
DartはFlutter以外使い道ないじゃん
2021/05/07(金) 01:09:50.19ID:hw+Y6lA+
Kotlinってなんかそんなに言語として斬新な要素あるの?
2021/05/07(金) 01:35:30.75ID:5At20QA4
>>816
Flutter以外だとAngularDartくらいかな
CLI/CUIアプリも書けるようになってサーバ側にもDart使ってねとアピールしてた覚えがあるけど、Goと競合するからヤル気は無いか
2021/05/07(金) 06:25:02.61ID:NSZr4Jfs
>>817
スポンサーみたいな企業がついてるんじゃないか
だからこそ中止した方がよさそうなものも中止できない
それはそれで斬新ではある
2021/05/07(金) 07:37:08.01ID:cRde4Qbm
Dartはシングルバイナリ作れるようになってCLIやサーバサイドでも少し面白くなってきた感じがあるな。
ただ、まだまだパフォーマンス面で煮詰まってないのか、少々不安がある。
とりあえずflutterのおかけで生き残るとは思うけど。

言語仕様としてはめっちゃいい言語になってきたと思うよ。
2021/05/07(金) 08:00:53.60ID:bbfty56w
flutterをkotlinで作れば良かったのにと何度思った事か
2021/05/07(金) 12:13:05.66ID:BGqObswG
関数型が来るよおじさんはどこ行ったの?
823デフォルトの名無しさん
垢版 |
2021/05/07(金) 12:30:03.85ID:pGxnrrWp
関数型おじさんはRustで俺ツエーしてるでしょ
トレイトとかhaskellの型クラスみたいなもんだし型システムで健全性チェックみたいのも良くある話だし
2021/05/07(金) 15:13:14.00ID:fhUdknzL
一昔前でいう関数型とかムーブコンストラクタとかみたいなのに相当する
最近熱い言語要素って何かありますか
2021/05/07(金) 15:18:50.47ID:dF0LJIle
そりゃあAlgebraicEffectsだろう
2021/05/07(金) 15:54:52.11ID:XbWp/RIC
>>817
goみたいな方向性でしょ。javaよりも少しシンタックスを楽にしようって感じで。
2021/05/07(金) 15:56:02.31ID:XbWp/RIC
rustは一人でテキトーにやる分にはいいけど、マンセーしてるバカと一緒には絶対やりたくないなと思う言語だわ。
2021/05/07(金) 16:41:28.94ID:/bDSijiL
>>826
最初はそうだったけど、他の言語をパクリ終わって以降は変な色気出しはじめて迷走してるよ
Scala化しつつある
2021/05/07(金) 17:12:25.81ID:cUNZpGqh
Kotlin/JSとかKotlin/Nativeとか期待してたのに残念
元々AltJSかつネイティブコードも吐けるDartの方が良さそう
2021/05/07(金) 18:50:25.85ID:Q+CdxRnT
Dart復権は集合的無意識レベルであるわ
2021/05/07(金) 19:57:54.03ID:4XrAAqdx
>>829
これ。Kotlinには結構幻滅した。
言語が自由すぎて俺用言語になりがちなのもつまらん。
俺もDart使ってる。
2021/05/07(金) 20:05:54.83ID:VYSfS6Cp
Kotlinは言語仕様がいろいろしょぼいよね
scalaのほうはまだ色々見所あるけど
(でもよーく見ていくとscalaもしょぼい)
833デフォルトの名無しさん
垢版 |
2021/05/08(土) 00:19:20.89ID:4nIz2VjA
気にすんな
834デフォルトの名無しさん
垢版 |
2021/05/08(土) 12:11:47.96ID:rOsHiSsL
Nimこそ至高
2021/05/08(土) 12:42:03.12ID:+hZHCXv2
JavaScriptをシェルスクリプトとして使う言語が登場しました
https://github.com/google/zx
836デフォルトの名無しさん
垢版 |
2021/05/08(土) 15:21:41.42ID:Jy6pPGdO
>>827
+1
2021/05/08(土) 21:52:45.82ID:3j1PPyAz
rustに親殺されたマンこんなところに居たのか
2021/05/08(土) 22:27:28.17ID:OofXJFgO
狂信者が今日もお参りに来とるな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況