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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/04/17(日) 17:52:35.38ID:KG26dcth
スレタイ(順番はRedMonk準拠)以外の言語もok

前スレ
次世代言語24 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1647887021/
2022/04/17(日) 19:32:21.39ID:9SWISpNV
セックスも男女関係を円滑にする一つの言語なんですよ。
2022/04/17(日) 20:50:44.94ID:jKBP2PvH
プログラミング言語は以下の3つに分類される
CとC++ ←省メモリ高速だが、メモリ解放でミスると危険
GC言語 ←省メモリ高速ではないが、メモリ解放は自動で気にしなくていい
Rust ←省メモリ高速だが、メモリ解放は自動で気にしなくていい
2022/04/17(日) 22:01:20.83ID:ki8GFFnY
「省メモリ高速ではない」はNANDなのかNORなのか
プログラミングの才能無さそうな日本語
2022/04/17(日) 22:35:52.69ID:HtOTcTar
このスレは実質「Go vs Rust」のスレです。
2022/04/17(日) 22:37:31.27ID:Xo1y3bfH
僕は生前、同業・Googleの言語センス同調圧力に抗うも努力は虚しく、無残な敗北を余生噛みしめる結果となった。

君たちには底辺職言語オタクの僕の分まで、強く自由に生きてほしいデス。
2022/04/17(日) 22:58:55.21ID:xE2XgYmS
PHPの”勝ち”やね・・・

"1000" 名前:デフォルトの名無しさん[sage] 投稿日:2022/04/17(日) 22:31:30.13 ID:xE2XgYmS [6/6]
1000ならPHP大復活時代でルースターズを蹂躙レイプする
8デフォルトの名無しさん
垢版 |
2022/04/18(月) 00:05:49.90ID:RiOKXL41
>>7
PHPもタイプヒンティングちゃんと使っていったら悪くないんじゃないかね。
結局日本国内のWeb系じゃ一番使われてるし。
2022/04/18(月) 00:30:56.61ID:6Qt778/v
PHPはドル記号がダサいから駄目
2022/04/18(月) 02:55:12.95ID:X0td+574
C++使っててもコンテナクラス使うかスマートポインタを普通に使っていればメモリリークすることは殆どないでしょ。
手動でnewとdeleteしなくてはいけない時ってある?
2022/04/18(月) 05:38:14.77ID:O5CqVN8y
go とrust が合体した言語があったらいいのに
2022/04/18(月) 06:25:23.07ID:MYm7lCHF
>>11
vlang
2022/04/18(月) 07:03:56.62ID:e4wxGEsZ
絵に描いた餅を出されても
2022/04/18(月) 07:21:19.73ID:6Qt778/v
>>10
リークというかダングリングだけど、人が書いたメソッド中身見ないで使ってると参照切れてたり日常茶判事だよ
2022/04/18(月) 07:25:53.68ID:usoGfIPO
>>10
そういう問題じゃないんだよ
スマートポインタ使わないで実装できてしまうことでこれまでどれたけの脆弱性をうんだか、という問題
2022/04/18(月) 07:45:20.51ID:3ssVn6Z5
>>10
・スマートポインタを使い忘れてもコンパイルが通ってしまう
・スマートポインタを間違って使ってもコンパイルが通ってしまう
後者はC++ベテランでも複雑化するとうっかりミスがある
・そもそも毎回unique_ptr指定が面倒かつ無駄なのでデフォルト適用にして欲しい
2022/04/18(月) 07:51:49.28ID:usoGfIPO
新しいプロダクトできました。メモリーリークはないです。
なんでいいきれるの?
Rustで、実装してるからです。
ああ、納得。

こんな感じで会話できるかどうかの差はものすごく大きい。
2022/04/18(月) 07:52:22.78ID:rznbXz+G
>>11
go要素いらねえだろあんな糞文法
なんどGoogle潰してやろうと思ったか
2022/04/18(月) 08:15:02.57ID:ndwLrDA6
やはりRustが最強

JavaScript/TypeScriptの高速フォーマッター「Rome Formatter」リリース。Rust製でPrettierより約10倍高速と
https://www.publickey1.jp/blog/22/javascripttypescriptrome_formatterrustprettier10.html
20デフォルトの名無しさん
垢版 |
2022/04/18(月) 09:12:25.91ID:33Ybip/c
Rustの文法すごい好きだから、c#ぐらいのノリでかけて文法がRustっぽい式指向な言語が欲しい
2022/04/18(月) 09:21:04.84ID:usoGfIPO
なんでもその言語はC#のノリで書けるらしい

Goやないかい!

GoはC#のノリで書けるんやから!

俺はなんでもオミトオシやねんから!

Goやそんなもんは!
2022/04/18(月) 09:33:56.22ID:Hv7oPs1o
>>20
Rustの構文や標準メソッド等ほぼそのままに
所有権と借用ルールとライフタイムだけを削除というか無視して処理するGC言語『GC-Rust』を作るとよいかもね
プログラミング初心者入門用にもなるし速さ省メモリを必要としない場でも使えるような
多少遅くてもいいのだからインタプリタ型でも十分かもね
あとは所有権参照借用lifetimeだけ学べば本物のRustへすぐに進める
23デフォルトの名無しさん
垢版 |
2022/04/18(月) 09:43:43.33ID:4vneGtME
>>19
ツール系はいくつかrust製があるね。
ripgrepもなかなか良いよ。
24デフォルトの名無しさん
垢版 |
2022/04/18(月) 09:46:35.13ID:33Ybip/c
>>22
あーそんな感じだな
GC付きのRust欲しいわ
2022/04/18(月) 10:29:24.32ID:Mcv+P1OB
Rcじゃだめなの?
2022/04/18(月) 11:06:57.46ID:e4wxGEsZ
もう調べてるかもしれないけどもっと現実的な話で式志向がいいならF#どうっすか
2022/04/18(月) 11:23:46.03ID:X0td+574
>>14,15,16
スマートポインタを使い忘れるってことはmake_sharedかmake_unique使わないでnew使ってるってことだからgrepすれば簡単に見つけられる。全ての関数の引数の型とクラスメンバの型に生ポインタが無いようにすれば間違った使い方をして生ポインタがでてきてもコンパイルエラーなる。(もしそれらに生ポインタがあっても正規表現使えば見つけられるだろうし)
2022/04/18(月) 11:32:19.66ID:Yow4FQAb
>>27
そんな面倒なことをせずとも無指定でunique_ptr相当になるRustを使った方が楽でいいな
Rustなら他にも忘れたり間違えたりすればコンパイラがエラーとして詳しく指摘してくれるし
2022/04/18(月) 11:45:09.21ID:VMhcwqBx
>>18
アリが象を潰すつもりですか?
2022/04/18(月) 11:47:49.11ID:GWhRkThq
>>27
ある瞬間自分の書いたコードだけチェックできればいいってならその通りだとは思う
ただ実際には依存ライブラリや他の人が入れてくるコード全てを常時チェックし続けないといけなくなるし
もし依存ライブラリがnew使ってたとして毎回フォークして書き直すのか?という問題もある
2022/04/18(月) 12:03:53.59ID:e4wxGEsZ
巷に出没するRust信者自分でRustまともに書いてない説を提唱したい
2022/04/18(月) 12:14:51.12ID:MYm7lCHF
そうなるとRustを広めたい勢力に雇われてる工作員の可能性出てきちゃう
2022/04/18(月) 12:27:52.69ID:FXKoB+ib
>>28
引数渡しがデフォルトmoveじゃなければよかったんだかな。
デフォルトconst 参照で組まれていたらずいぶん学習しやすくなったと思う。
2022/04/18(月) 12:35:25.60ID:pNu/+WEX
所有権のmoveセマンティクスらへんがRustの最大の文法的特徴なのに、そこがいらんとな
最初からKotlinとか使ってればええやんか
2022/04/18(月) 12:42:20.62ID:FXKoB+ib
>>34
C++以外のユーザーがRustを学習するときの一番の難所でもあるけどな。

実際、不変借用は頻出しそうな気がするけど、性能ペナルティーとかあるのかね?
36デフォルトの名無しさん
垢版 |
2022/04/18(月) 12:52:02.32ID:4vneGtME
rustはインストール先がユーザーホームディレクトリの下なのが何だかな。
マルチユーザーで使う場合が手間かかる。
2022/04/18(月) 13:04:30.11ID:nKPrtbqz
>>33
それはおかしい
一般的に参照を引き渡すということは様々な問題を生じさせるということ
競合の種も産むし参照切れの種も産む
だから参照を引き渡す方が記述コストを増やすことこそ道理
次に
C言語でもポインタ参照渡しは&を付けて表記する
したがって無印よりも&前置こそ参照渡しに相応しい
2022/04/18(月) 13:08:07.19ID:usoGfIPO
>>30
これ。
見つけたからってどう住んだよ?って話だよな
他社のコードを修正できないし、そもそもそんなチェックを未来永劫担当者に引き継いでいけるのか?ってこと
個人でできることと、組織やプロダクト関係者全体としてできることは違う
2022/04/18(月) 13:33:30.85ID:X0td+574
>>30,38
そんなこと言ったら、Rustでも他人の書いたコードにunsafeが入ってる可能性もあるでしょ。

>>33
Nim言語だとデフォルトで不変コピー渡しだけど引数のサイズが一定サイズ以上(確かポインタサイズの3か4倍以上)だとポインタで渡すようなコードを生成するんだよね。

>>37
Rustは参照を使ったときの問題が起きないようにコンパイル時にチェックしているんだからデフォルトがconst参照渡しでも問題ないんじゃないの?

Rustって借用したり借用を参照するときに&や*をつけないといけないけどその結果コードの見た目が生ポインタを使ってるCのコードに似てるんだよね。暗黙に借用したり参照しちゃダメって考えでそうなってるんだと思うけど。
2022/04/18(月) 13:42:31.54ID:ZRRbnpkI
>>17
メモリリークは防げないでしょ
2022/04/18(月) 13:51:24.45ID:vMsThGEl
>>39
>Nim言語だとデフォルトで不変コピー渡しだけど
>引数のサイズが一定サイズ以上だとポインタで渡すようなコードを生成するんだよね。

この議論でそんな話を持ち出す時点であなたは以下の理解が足りない
一般的にプログラミング言語によるセマンティクスと最終的に生成されるコードは全く無関係でありそこに関連があってはいけない独立のものである
完全に独立したものであるが故に最終コード生成オプティマイズを十分にすることが可能となる
2022/04/18(月) 14:04:44.92ID:usoGfIPO
>>40
そうですね。スミマセン
2022/04/18(月) 14:09:14.47ID:e4wxGEsZ
やべーアスペおるな
2022/04/18(月) 14:11:19.47ID:usoGfIPO
プログラミングを勉強しようと思って
なにを勉強すればいいか先生に聞いたらパイソンっていうから
検索したら大きな蛇の画像とかがでてきたのでやめたわw
2022/04/18(月) 14:29:04.41ID:X0td+574
生成されるコードがプログラミング言語のセマンティクスと無関係じゃだめでしょ。
コード生成はプログラミング言語のセマンティクスと矛盾しない範囲内で生成しないといけない。コンパイラはその中で最適なコードを生成しようとするわけでしょ。
Nimではデフォルトで引数はプロシージャ内で変更不可(変更しようとしたらコンパイルエラー)だから引数の型のサイズに併せて生成するコードをコピー渡しにしたりポインタ渡しにできるわけで。
もし引数が可変参照渡しだと引数の型が1バイトでもコピー渡しでは無くポインタ渡しにしないといけない。関数がインライン展開されると話が違ってくるけど。
2022/04/18(月) 14:44:43.88ID:usoGfIPO
>>44
あ、すまん。これ誤爆しました。スミマセン〜。
2022/04/18(月) 14:49:14.45ID:pGCdIhc3
「プログラミング言語によるセマンティクスと最終的に生成されるコードは全く無関係」そんな訳ない、RustはLLVMのIRを前提に
コードが吐かれるし、コードのリンケージをアトリビュート指定できる。C言語だって同様だし、むしろ、ハードウェアよりの低レベルな
システムプログラミングが可能な言語であれば、生成されるバイナリが厳密に言語の「セマンティック」を決める。
例えば今どきのCPUには分岐予測命令があるが、これに対応するstd::intrinsics::likelyのような分岐予測にヒントを与える、
セマンティクスはCPUがサポートされていれば100%生成されるバイナリがそうなる事を望む。無関係などありえない
2022/04/18(月) 14:53:46.39ID:ykvGLY9n
>>47
Rustをgccと組み合わせて動かす試みあるから
LLVM前提ではないのでは?
2022/04/18(月) 14:57:34.06ID:2ZPl5Bs7
>>45
その言語のセマンティクスとしてimmutableで渡すケースでも
値をポインタで渡すか値自体を渡すかはどちらでも構わないから言語のセマンティクスとは別問題

もっと顕著にわかりやすい例
構造体を一つ返す関数があったとする
小さい構造体なら値を返すだろうが
大きな構造体なら領域を用意してそこに書き込んでそのポインタを返すかもしれない
あるいは関数を呼ぶ側が領域を用意してそのポインタを裏引数として渡してそこへ返す値を書き込むかもしれない
このように3種類考えられるが呼ぶ側と呼ばれる側で一貫していれば目的を果たす
プログラマーはその生成コードが3種類のどれになるかを把握する必要はない
つまりそこで明白にレイヤーが分離される
2022/04/18(月) 14:59:44.25ID:X0td+574
>>33
もし文字列のベクタに文字列を追加する関数があったとき文字列が参照渡しでその関数が実行された後もその文字列が読まれていると、その関数は文字列をmoveすることができずコピーしなくてはならなくなるからじゃないかな。
メモリコピーは遅いから絶対に許さない人にはデフォルトがmoveのほうがいいのかも。
2022/04/18(月) 15:02:16.44ID:pGCdIhc3
>>48
現状はIR前提でしょ、完成してない未来のものを持ち出すのであれば何とでもいえる。というか上で言ってる本題とはずれる
そんなところに食いついて来てしょーもないわ
2022/04/18(月) 15:06:33.88ID:i02G9WD5
>>47
Rustでもセマンティクスと生成コードは独立だよ
例えば>>49の関数が構造体を返す例
生成コードは言語仕様で定められていないしあなたも方法を答えられないでしょう
実際にRustで大きな構造体を返すと所有権を活用して驚きの最適化したコードを生成するよ
2022/04/18(月) 15:10:05.22ID:uPETy31e
>>51
開発中で完成してないとは言っても実行バイナリの
生成もできないという状態ではないから
あなたの話とは違うというか
あなたの主張は間違ってるという例になってますよね
2022/04/18(月) 15:19:05.87ID:pGCdIhc3
>>52
「生成コードは言語仕様で定められていないしあなたも方法を答えられないでしょう」
え?RustにもちゃんとFFIなどextern "C" {}ブロックがあるでしょ?生成コードは言語仕様で定められているし、このようなデータの受け渡しは
参照や可変参照の制限、ボローチェックなどがOFFになる。C言語やD言語やNimも同様でしょ、これが出来ない言語はシステムプランニングが
できる言語とは言えない。
「Rustで大きな構造体を返すと所有権を活用して驚きの最適化したコード」
どのような驚きのバイナリを生成しようと、例えばゲームエンジンのUnityなどでデータを渡す場合に所有権をRust側で保持したままのような
コードではUnityなどでメモリー管理されるので問題が出る。だから呼び出し間でどのようにデータを受け渡すか当然指定できる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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