22/04/17 19:32:21.39 9SWISpNV.net
セックスも男女関係を円滑にする一つの言語なんですよ。
3:デフォルトの名無しさん
22/04/17 20:50:44 jKBP2PvH.net
プログラミング言語は以下の3つに分類される
CとC++ ←省メモリ高速だが、メモリ解放でミスると危険
GC言語 ←省メモリ高速ではないが、メモリ解放は自動で気にしなくていい
Rust ←省メモリ高速だが、メモリ解放は自動で気にしなくていい
4:デフォルトの名無しさん
22/04/17 22:01:20.83 ki8GFFnY.net
「省メモリ高速ではない」はNANDなのかNORなのか
プログラミングの才能無さそうな日本語
5:デフォルトの名無しさん
22/04/17 22:35:52.69 HtOTcTar.net
このスレは実質「Go vs Rust」のスレです。
6:デフォルトの名無しさん
22/04/17 22:37:31.27 Xo1y3bfH.net
僕は生前、同業・Googleの言語センス同調圧力に抗うも努力は虚しく、無残な敗北を余生噛みしめる結果となった。
君たちには底辺職言語オタクの僕の分まで、強く自由に生きてほしいデス。
7:デフォルトの名無しさん
22/04/17 22:58:55.21 xE2XgYmS.net
PHPの”勝ち”やね・・・
"1000" 名前:デフォルトの名無しさん[sage] 投稿日:2022/04/17(日) 22:31:30.13 ID:xE2XgYmS [6/6]
1000ならPHP大復活時代でルースターズを蹂躙レイプする
8:デフォルトの名無しさん
22/04/18 00:05:49.90 RiOKXL41.net
>>7
PHPもタイプヒンティングちゃんと使っていったら悪くないんじゃないかね。
結局日本国内のWeb系じゃ一番使われてるし。
9:デフォルトの名無しさん
22/04/18 00:30:56.61 6Qt778/v.net
PHPはドル記号がダサいから駄目
10:デフォルトの名無しさん
22/04/18 02:55:12.95 X0td+574.net
C++使っててもコンテナクラス使うかスマートポインタを普通に使っていればメモリリークすることは殆どないでしょ。
手動でnewとdeleteしなくてはいけない時ってある?
11:デフォルトの名無しさん
22/04/18 05:38:14.77 O5CqVN8y.net
go とrust が合体した言語があったらいいのに
12:デフォルトの名無しさん
22/04/18 06:25:23.07 MYm7lCHF.net
>>11
vlang
13:デフォルトの名無しさん
22/04/18 07:03:56.62 e4wxGEsZ.net
絵に描いた餅を出されても
14:デフォルトの名無しさん
22/04/18 07:21:19 6Qt778/v.net
>>10
リークというかダングリングだけど、人が書いたメソッド中身見ないで使ってると参照切れてたり日常茶判事だよ
15:デフォルトの名無しさん
22/04/18 07:25:53 usoGfIPO.net
>>10
そういう問題じゃないんだよ
スマートポインタ使わないで実装できてしまうことでこれまでどれたけの脆弱性をうんだか、という問題
16:デフォルトの名無しさん
22/04/18 07:45:20 3ssVn6Z5.net
>>10
・スマートポインタを使い忘れてもコンパイルが通ってしまう
・スマートポインタを間違って使ってもコンパイルが通ってしまう
後者はC++ベテランでも複雑化するとうっかりミスがある
・そもそも毎回unique_ptr指定が面倒かつ無駄なのでデフォルト適用にして欲しい
17:デフォルトの名無しさん
22/04/18 07:51:49 usoGfIPO.net
新しいプロダクトできました。メモリーリークはないです。
なんでいいきれるの?
Rustで、実装してるからです。
ああ、納得。
こんな感じで会話できるかどうかの差はものすごく大きい。
18:デフォルトの名無しさん
22/04/18 07:52:22 rznbXz+G.net
>>11
go要素いらねえだろあんな糞文法
なんどGoogle潰してやろうと思ったか
19:デフォルトの名無しさん
22/04/18 08:15:02 ndwLrDA6.net
やはりRustが最強
JavaScript/TypeScriptの高速フォーマッター「Rome Formatter」リリース。Rust製でPrettierより約10倍高速と
URLリンク(www.publickey1.jp)
20:デフォルトの名無しさん
22/04/18 09:12:25.91 33Ybip/c.net
Rustの文法すごい好きだから、c#ぐらいのノリでかけて文法がRustっぽい式指向な言語が欲しい
21:デフォルトの名無しさん
22/04/18 09:21:04.84 usoGfIPO.net
なんでもその言語はC#のノリで書けるらしい
Goやないかい!
GoはC#のノリで書けるんやから!
俺はなんでもオミトオシやねんから!
Goやそんなもんは!
22:デフォルトの名無しさん
22/04/18 09:33:56.22 Hv7oPs1o.net
>>20
Rustの構文や標準メソッド等ほぼそのままに
所有権と借用ルールとライフタイムだけを削除というか無視して処理するGC言語『GC-Rust』を作るとよいかもね
プログラミング初心者入門用にもなるし速さ省メモリを必要としない場でも使えるような
多少遅くてもいいのだからインタプリタ型でも十分かもね
あとは所有権参照借用lifetimeだけ学べば本物のRustへすぐに進める
23:デフォルトの名無しさん
22/04/18 09:43:43.33 4vneGtME.net
>>19
ツール系はいくつかrust製があるね。
ripgrepもなかなか良いよ。
24:デフォルトの名無しさん
22/04/18 09:46:35.13 33Ybip/c.net
>>22
あーそんな感じだな
GC付きのRust欲しいわ
25:デフォルトの名無しさん
22/04/18 10:29:24.32 Mcv+P1OB.net
Rcじゃだめなの?
26:デフォルトの名無しさん
22/04/18 11:06:57.46 e4wxGEsZ.net
もう調べてるかもしれないけどもっと現実的な話で式志向がいいならF#どうっすか
27:デフォルトの名無しさん
22/04/18 11:23:46.03 X0td+574.net
>>14,15,16
スマートポインタを使い忘れるってことはmake_sharedかmake_unique使わないでnew使ってるってことだからgrepすれば簡単に見つけられる。全ての関数の引数の型とクラスメンバの型に生ポインタが無いようにすれば間違った使い方をして生ポインタがでてきてもコンパイルエラーなる。(もしそれらに生ポインタがあっても正規表現使えば見つけられるだろうし)
28:デフォルトの名無しさん
22/04/18 11:32:19.66 Yow4FQAb.net
>>27
そんな面倒なことをせずとも無指定でunique_ptr相当になるRustを使った方が楽でいいな
Rustなら他にも忘れたり間違えたりすればコンパイラがエラーとして詳しく指摘してくれるし
29:デフォルトの名無しさん
22/04/18 11:45:09.21 VMhcwqBx.net
>>18
アリが象を潰すつもりですか?
30:デフォルトの名無しさん
22/04/18 11:47:49.11 GWhRkThq.net
>>27
ある瞬間自分の書いたコードだけチェックできればいいってならその通りだとは思う
ただ実際には依存ライブラリや他の人が入れてくるコード全てを常時チェックし続けないといけなくなるし
もし依存ライブラリがnew使ってたとして毎回フォークして書き直すのか?という問題もある
31:デフォルトの名無しさん
22/04/18 12:03:53.59 e4wxGEsZ.net
巷に出没するRust信者自分でRustまともに書いてない説を提唱したい
32:デフォルトの名無しさん
22/04/18 12:14:51.12 MYm7lCHF.net
そうなるとRustを広めたい勢力に雇われてる工作員の可能性出てきちゃう
33:デフォルトの名無しさん
22/04/18 12:27:52.69 FXKoB+ib.net
>>28
引数渡しがデフォルトmoveじゃなければよかったんだかな。
デフォルトconst 参照で組まれていたらずいぶん学習しやすくなったと思う。
34:デフォルトの名無しさん
22/04/18 12:35:25.60 pNu/+WEX.net
所有権のmoveセマンティクスらへんがRustの最大の文法的特徴なのに、そこがいらんとな
最初からKotlinとか使ってればええやんか
35:デフォルトの名無しさん
22/04/18 12:42:20.62 FXKoB+ib.net
>>34
C++以外のユーザーがRustを学習するときの一番の難所でもあるけどな。
実際、不変借用は頻出しそうな気がするけど、性能ペナルティーとかあるのかね?
36:デフォルトの名無しさん
22/04/18 12:52:02.32 4vneGtME.net
rustはインストール先がユーザーホームディレクトリの下なのが何だかな。
マルチユーザーで使う場合が手間かかる。
37:デフォルトの名無しさん
22/04/18 13:04:30.11 nKPrtbqz.net
>>33
それはおかしい
一般的に参照を引き渡すということは様々な問題を生じさせるということ
競合の種も産むし参照切れの種も産む
だから参照を引き渡す方が記述コストを増やすことこそ道理
次に
C言語でもポインタ参照渡しは&を付けて表記する
したがって無印よりも&前置こそ参照渡しに相応しい
38:デフォルトの名無しさん
22/04/18 13:08:07.19 usoGfIPO.net
>>30
これ。
見つけたからってどう住んだよ?って話だよな
他社のコードを修正できないし、そもそもそんなチェックを未来永劫担当者に引き継いでいけるのか?ってこと
個人でできることと、組織やプロダクト関係者全体としてできることは違う
39:デフォルトの名無しさん
22/04/18 13:33:30.85 X0td+574.net
>>30,38
そんなこと言ったら、Rustでも他人の書いたコードにunsafeが入ってる可能性もあるでしょ。
>>33
Nim言語だとデフォルトで不変コピー渡しだけど引数のサイズが一定サイズ以上(確かポインタサイズの3か4倍以上)だとポインタで渡すようなコードを生成するんだよね。
>>37
Rustは参照を使ったときの問題が起きないようにコンパイル時にチェックしているんだからデフォルトがconst参照渡しでも問題ないんじゃないの?
Rustって借用したり借用を参照するときに&や*をつけないといけないけどその結果コードの見た目が生ポインタを使ってるCのコードに似てるんだよね。暗黙に借用したり参照しちゃダメって考えでそうなってるんだと思うけど。
40:デフォルトの名無しさん
22/04/18 13:42:31.54 ZRRbnpkI.net
>>17
メモリリークは防げないでしょ
41:デフォルトの名無しさん
22/04/18 13:51:24.45 vMsThGEl.net
>>39
>Nim言語だとデフォルトで不変コピー渡しだけど
>引数のサイズが一定サイズ以上だとポインタで渡すようなコードを生成するんだよね。
この議論でそんな話を持ち出す時点であなたは以下の理解が足りない
一般的にプログラミング言語によるセマンティクスと最終的に生成されるコードは全く無関係でありそこに関連があってはいけない独立のものである
完全に独立したものであるが故に最終コード生成オプティマイズを十分にすることが可能となる
42:デフォルトの名無しさん
22/04/18 14:04:44.92 usoGfIPO.net
>>40
そうですね。スミマセン
43:デフォルトの名無しさん
22/04/18 14:09:14.47 e4wxGEsZ.net
やべーアスペおるな
44:デフォルトの名無しさん
22/04/18 14:11:19.47 usoGfIPO.net
プログラミングを勉強しようと思って
なにを勉強すればいいか先生に聞いたらパイソンっていうから
検索したら大きな蛇の画像とかがでてきたのでやめたわw
45:デフォルトの名無しさん
22/04/18 14:29:04.41 X0td+574.net
生成されるコードがプログラミング言語のセマンティクスと無関係じゃだめでしょ。
コード生成はプログラミング言語のセマンティクスと矛盾しない範囲内で生成しないといけない。コンパイラはその中で最適なコードを生成しようとするわけでしょ。
Nimではデフォルトで引数はプロシージャ内で変更不可(変更しようとしたらコンパイルエラー)だから引数の型のサイズに併せて生成するコードをコピー渡しにしたりポインタ渡しにできるわけで。
もし引数が可変参照渡しだと引数の型が1バイトでもコピー渡しでは無くポインタ渡しにしないといけない。関数がインライン展開されると話が違ってくるけど。
46:デフォルトの名無しさん
22/04/18 14:44:43.88 usoGfIPO.net
>>44
あ、すまん。これ誤爆しました。スミマセン~。
47:デフォルトの名無しさん
22/04/18 14:49:14.45 pGCdIhc3.net
「プログラミング言語によるセマンティクスと最終的に生成されるコードは全く無関係」そんな訳ない、RustはLLVMのIRを前提に
コードが吐かれるし、コードのリンケージをアトリビュート指定できる。C言語だって同様だし、むしろ、ハードウェアよりの低レベルな
システムプログラミングが可能な言語であれば、生成されるバイナリが厳密に言語の「セマンティック」を決める。
例えば今どきのCPUには分岐予測命令があるが、これに対応するstd::intrinsics::likelyのような分岐予測にヒントを与える、
セマンティクスはCPUがサポートされていれば100%生成されるバイナリがそうなる事を望む。無関係などありえない
48:デフォルトの名無しさん
22/04/18 14:53:46.39 ykvGLY9n.net
>>47
Rustをgccと組み合わせて動かす試みあるから
LLVM前提ではないのでは?
49:デフォルトの名無しさん
22/04/18 14:57:34.06 2ZPl5Bs7.net
>>45
その言語のセマンティクスとしてimmutableで渡すケースでも
値をポインタで渡すか値自体を渡すかはどちらでも構わないから言語のセマンティクスとは別問題
もっと顕著にわかりやすい例
構造体を一つ返す関数があったとする
小さい構造体なら値を返すだろうが
大きな構造体なら領域を用意してそこに書き込んでそのポインタを返すかもしれない
あるいは関数を呼ぶ側が領域を用意してそのポインタを裏引数として渡してそこへ返す値を書き込むかもしれない
このように3種類考えられるが呼ぶ側と呼ばれる側で一貫していれば目的を果たす
プログラマーはその生成コードが3種類のどれになるかを把握する必要はない
つまりそこで明白にレイヤーが分離される
50:デフォルトの名無しさん
22/04/18 14:59:44.25 X0td+574.net
>>33
もし文字列のベクタに文字列を追加する関数があったとき文字列が参照渡しでその関数が実行された後もその文字列が読まれていると、その関数は文字列をmoveすることができずコピーしなくてはならなくなるからじゃないかな。
メモリコピーは遅いから絶対に許さない人にはデフォルトがmoveのほうがいいのかも。
51:デフォルトの名無しさん
22/04/18 15:02:16.44 pGCdIhc3.net
>>48
現状はIR前提でしょ、完成してない未来のものを持ち出すのであれば何とでもいえる。というか上で言ってる本題とはずれる
そんなところに食いついて来てしょーもないわ
52:デフォルトの名無しさん
22/04/18 15:06:33.88 i02G9WD5.net
>>47
Rustでもセマンティクスと生成コードは独立だよ
例えば>>49の関数が構造体を返す例
生成コードは言語仕様で定められていないしあなたも方法を答えられないでしょう
実際にRustで大きな構造体を返すと所有権を活用して驚きの最適化したコードを生成するよ
53:デフォルトの名無しさん
22/04/18 15:10:05.22 uPETy31e.net
>>51
開発中で完成してないとは言っても実行バイナリの
生成もできないという状態ではないから
あなたの話とは違うというか
あなたの主張は間違ってるという例になってますよね
54:デフォルトの名無しさん
22/04/18 15:19:05.87 pGCdIhc3.net
>>52
「生成コードは言語仕様で定められていないしあなたも方法を答えられないでしょう」
え?RustにもちゃんとFFIなどextern "C" {}ブロックがあるでしょ?生成コードは言語仕様で定められているし、このようなデータの受け渡しは
参照や可変参照の制限、ボローチェックなどがOFFになる。C言語やD言語やNimも同様でしょ、これが出来ない言語はシステムプランニングが
できる言語とは言えない。
「Rustで大きな構造体を返すと所有権を活用して驚きの最適化したコード」
どのような驚きのバイナリを生成しようと、例えばゲームエンジンのUnityなどでデータを渡す場合に所有権をRust側で保持したままのような
コードではUnityなどでメモリー管理されるので問題が出る。だから呼び出し間でどのようにデータを受け渡すか当然指定できる
55:デフォルトの名無しさん
22/04/18 15:20:54.20 pGCdIhc3.net
>>53
何を言いたいのか1つも分かりません。。。あなたの勝ちでゴリラのようにマウンティングをしてください、どうぞ
56:デフォルトの名無しさん
22/04/18 15:33:12.79 mb/oYyn3.net
>>54
FFIを理解していないアホですか?
例えばそのextern "C"した時のみC言語の受け渡しインタフェースに従うだけ
どの言語でもFFI使わなければ各言語が自由自在の方法を取る
57:デフォルトの名無しさん
22/04/18 15:38:01.47 4qMH/RHY.net
>>39
引数のサイズが一定サイズ以上だとポインタで渡す
それはそれで他者が変更したときの挙動が変わるから怖いよね。
特に並列作業時。
>>50
const参照をデフォルトにしたら、そのあたりは引き渡し時にmoveを明記するんだろうね。あるいはCOWで実装するか。
もしかしたらRustに「権利を持つオーナーは極力少なく・小さくする」というポリシーでもあるのかな?
58:デフォルトの名無しさん
22/04/18 15:47:16.94 pGCdIhc3.net
>>56
さっきからID変えて絡んでこなくてよいですよ、「extern "C"した時のみC言語の受け渡しインタフェースに従う」セマンティクスと生成コードが決まりますよね。
アホと言えば誰もしもが感情的になるわけではないです。FFI使わなければなんて話をしていませんし、「プログラミング言語によるセマンティクスと最終的に
生成されるコードは全く無関係」という理想論のような現実を知らないコンピューターサイエンス学科の学生のような言葉を否定してるだけです。
59:デフォルトの名無しさん
22/04/18 15:50:35 X0td+574.net
>>57
デフォルトで引数は不変が前提なので引数の型の定義を変更してポインタ渡しになったとしても基本的には挙動は変化しない。
引数のアドレスをとってれば挙動が変化するかもしれないけど、Nim言語は明示的に変数のアドレスをとることは危険な行為で自己責任でやれってことになってるから。
60:デフォルトの名無しさん
22/04/18 16:01:25 hx/TPiWJ.net
>>58
普通のプログラムでC言語FFIなんて使わないです、そして、その特殊ケースはどうでもよい話です
一般的に言語が定めるセマンティクスと生成コードは別階層なので独立しています
61:デフォルトの名無しさん
22/04/18 16:06:01 buwrQlsl.net
>>57
静的型付けで型サイズが定まる普通の言語ならば大丈夫
引数や返り値がポインタ渡しになるか値直接渡しになるか
型サイズ次第で変化しても一貫していれば構わない
62:デフォルトの名無しさん
22/04/18 16:44:49.00 pNu/+WEX.net
>>57
> それはそれで他者が変更したときの挙動が変わるから怖いよね。
> 特に並列作業時。
横レスだけど、明らかにそういう話じゃない
63:デフォルトの名無しさん
22/04/18 17:00:59.75 VCJMEsmD.net
普通にカーネルのシステムコールするだけでC言語のFFI使ってますよ、DBアクセスするにもSQLiteでもMySQLでもPostgresqlでも使用してますし
TCP/IPスタックにアクセスするにもFFI使ってます、もしや特殊なのはあなたなのでは?ガン無視されて独立しているのは、そんな詰まらないことで
言い張るあなたなのでは?
64:デフォルトの名無しさん
22/04/18 17:04:14.33 uPETy31e.net
Kotlinみたいな出力先がjvmとjsとネイティブがあるのは
このひとの中でどう解釈するんだろ
65:デフォルトの名無しさん
22/04/18 17:15:12.72 RntYGm+C.net
>>63
そんなことは誰でも知っているがこの流れとは無関係な話
各FFIはそのFFIの指定に従う
逆に言えば各言語の普通のコードではFFIなんて関係ないので各言語で完全に自由
だから引き数や戻り値のサイズに拠ってポインタ渡しか否か変わる言語もある
プログラマーはそれらを知らなくてもプログラミングできる
各言語が定めるセマンティクスだけ理解すればプログラミングできる
つまりセマンティクスと生成コードは完全に独立した別階層であり無関係
66:デフォルトの名無しさん
22/04/18 17:19:02.78 e4wxGEsZ.net
この話の終着点どこ?
「お前はアホだから黙れ」が立証できれば満足するの?
67:デフォルトの名無しさん
22/04/18 17:22:10.87 Em1ZPrJL.net
>>33
変数の代入がmoveなのに関数引数の時だけ参照になるのは紛らわしくない?
68:デフォルトの名無しさん
22/04/18 17:33:30.39 4qMH/RHY.net
>>59
あ、不変前提ね。勘違いしてました。
>>67
変数もデフォルトで不変借用にする、とか。戻り値の受けが面倒臭くなりそうだけど。
69:デフォルトの名無しさん
22/04/18 17:41:53 mz+noJnQ.net
>>68
Cの(ポインタ)参照が前置&だから
Rustの(借用)参照も前置&にした現状仕様がわかりやすいと思うけど、なぜ変えたいの?
70:デフォルトの名無しさん
22/04/18 17:58:50.26 Em1ZPrJL.net
>>68
変数の代入をデフォルトで参照にするとmutが絡んできたときにborrow checker周りでとてつもなく面倒になりそうな気がする
71:デフォルトの名無しさん
22/04/18 21:11:14 CPWR65al.net
rustはライフタイム周りが途方もなく汚く見える
ウンコに触れたくない
72:デフォルトの名無しさん
22/04/18 21:16:17 rznbXz+G.net
Rust「エラーには回復可能なエラーと回復不可能なエラーがあってResult<T, E>を使って~(長文)」
エンジニア「TとEって何だよ」「"?"って何?」「Box<dyn Error>って何?」
Golang「ほぼ
if err != nil {
panic(err)
}
でいい」
エンジニア「そうだったのか!」「やっと理解できた!」「Goって美しい」
何も言い返せんかったは・・・
73:デフォルトの名無しさん
22/04/18 21:19:09.66 mtexizhK.net
twitterでイキってるバカをそんなに晒すなよ。
74:デフォルトの名無しさん
22/04/18 21:22:52.28 rznbXz+G.net
なおイキッテルのはRUSTERのもよう
GOに完全敗北してどんな気持ち?
75:デフォルトの名無しさん
22/04/18 21:26:10.80 WWHuTgUM.net
null安全じゃない言語とかこのご時世にあるんですね
76:デフォルトの名無しさん
22/04/18 21:39:04.08 CZqwnDNY.net
スレタイの言語でも
Goとかnilチェックするコードを書き忘れてもコンパイルエラー出ないね
安全じゃない言語多すぎ
77:デフォルトの名無しさん
22/04/18 21:42:30.77 rznbXz+G.net
GOはポイント使わなければ安全だぞ
ただし初期値に0と””が入る
78:デフォルトの名無しさん
22/04/18 22:25:39.31 hd7uWEuw.net
>>77
このif文を書き忘れたらコンパイルエラーになるの?
>>72
> if err != nil {
79:デフォルトの名無しさん
22/04/18 22:30:25.57 Em1ZPrJL.net
>>74
これってgoありがたがる人を馬鹿にしたツイートじゃないの?
80:デフォルトの名無しさん
22/04/18 22:44:34.76 edZlyGeP.net
Goはnil安全ではない
if err != nil {を書き忘れたり
return nil, nilしちゃっていると死ぬ
nil以外にも存在しない時の値で死ぬ
例えばstring.Index()は未発見時に-1を返す
返り値が-1かどうかチェック忘れてもコンパイルエラーとならない
そのまま-1を使ってしまい実行時に死ぬ
いずれのケースもRustではコンパイルエラーとなるため安全
Goは危険だらけ
81:デフォルトの名無しさん
22/04/18 22:55:48.31 z7JFVAjx.net
分かりにくい人「円周率は3.141592...と無限に続く数字で、よく近似の3.14が使われます。」
視聴者「何で3桁なの?」「2の後は何なんだよ」「近似って何?」
分かりやすい人「円周率って色々言われてるけど、実は3なんです!」
視聴者「そうだったのか!」「やっと理解できた!」「数学って美しい」
URLリンク(twitter.com)
(deleted an unsolicited ad)
82:デフォルトの名無しさん
22/04/18 23:02:13.65 WPqVzB8b.net
Goでは「値が存在しないこと」を安全に表す方法がないことが敗因
RustではOption<T>型のNoneで安全に表せるところ
83:デフォルトの名無しさん
22/04/19 00:46:26 S3LfaCKT.net
なおシェアはGOが圧勝したもよう
RUSTボーイズは一生夢見て低賃金でこき使われる童貞野郎
84:デフォルトの名無しさん
22/04/19 01:34:09 VnIrO7oP.net
goはCがシンプルで使いやすいと思う人向けの言語じゃないかと思う
85:デフォルトの名無しさん
22/04/19 01:36:19 VnIrO7oP.net
言語機能をモリモリにしたい誘惑に抗ってランタイムを充実させるという判断できる自制心はすごいと思う
86:デフォルトの名無しさん
22/04/19 01:53:00.90 tGbJiwG7.net
Ruby 3.0 のJIT は、MJIT で、
Ruby VM のバイト(中間)コードを、C コードに変換してから、
Cコンパイラでネイティブコードに変換していた
Ruby 3.1 のJIT は、YJIT で、
バイトコードから直接ネイティブコードに変換する。
ただし、x86_64 のみに対応
条件分岐があっても、10回実行した分岐だけを変換する。
実行されない分岐は変換しない
遅延変換・Lazy Basic Block Versioning(LBBV)
これで、Rails のプロジェクトが、20% ほど速くなったらしい
87:デフォルトの名無しさん
22/04/19 07:43:43.07 S3LfaCKT.net
ゴミが20%早くなかったからってどうしたってゆうね
88:デフォルトの名無しさん
22/04/19 07:46:59.67 3aREeURj.net
>>81
今さらゆとり
89:デフォルトの名無しさん
22/04/19 07:51:59.99 jVj3oT5A.net
>>87
でもRuby on railsってまだまだ使われてるよね?
有名どころでも、クックパッド、Airbnb、Gunosy、クラウドワークス、
食べログ、価格.com、Twitter、 Hulu、 GitHub
90:デフォルトの名無しさん
22/04/19 08:03:56.92 J98o16eP.net
>>81
偽物を「実は」という詐欺師。
91:デフォルトの名無しさん
22/04/19 09:17:26.14 ipOfh3Xt.net
>>89
大規模railsを別言語で書き直しましたという
ニュースは時々出てくるけど逆は聞かないからなあ…
92:デフォルトの名無しさん
22/04/19 09:29:29.07 Qc9Zpwhc.net
>>89
業界や会社によってはCOBOLだって使われてる。
いったんそれでシステム組んじまったら中々移行は出来んもんだよ。
93:デフォルトの名無しさん
22/04/19 09:35:08.80 +uXVuu7q.net
>>80 >>82
Goはなぜそんな危険な言語仕様にしたの?
94:デフォルトの名無しさん
22/04/19 10:22:52.12 NH+MJ17E.net
R○byは業界のSPA移行とPythonブームによって思いのほか綺麗に消えてくれたのは良かった
まあPHPなんかに比べたらまだ「恥を知る」人間が多かったんだろうね
95:デフォルトの名無しさん
22/04/19 11:21:50.97 XEvBz8Zw.net
>>94
PHPユーザに失礼なやつだな
お前あれだろ?
刺し身に直接わさびを付けるタイプだろ。醤油でわさびをとかさないで刺し身につけて食べてね?どうよ?
96:デフォルトの名無しさん
22/04/19 12:34:56.06 gbQ3J7tR.net
>>94
言語マニアならpythonよりRubyの方がマシだろ。Pythonみたいにメソッドと関数が混在するのは書いててキモい。
python4でNim方式を採用してほしいわ。
97:デフォルトの名無しさん
22/04/19 12:39:13.85 SdA/iojO.net
もちろんプログラム記述方式としてはPythonは最悪
あれが普及するのは害悪しかない
98:デフォルトの名無しさん
22/04/19 13:49:45.55 jVj3oT5A.net
>>95
直接わさびを口に運び刺身を投入して咀嚼した後に醤油を飲むタイプです
PHPユーザに対し失礼な発言は謝罪して撤回させていただきます。この度は申し訳ございませんでした。
99:デフォルトの名無しさん
22/04/19 14:55:17.88 WBt0dmCX.net
インデントでスコープ区切るのあんまり好きじゃない
100:デフォルトの名無しさん
22/04/19 16:35:48.82 GlY6GAKK.net
H
101:askellもインデントでスコープを区切ってた気がするけど一応ブレースでくくることもできるんだっけ
102:デフォルトの名無しさん
22/04/19 18:18:04 S3LfaCKT.net
>>98
人類最底辺のゴミPHPoorに謝罪など必要ない
奴らに必要なのは死あるのみ
103:デフォルトの名無しさん
22/04/19 18:22:33 0UVfIqO/.net
PHP使う人ってなんであんなアヘアヘ君ばかりなの?昔からああなの?
104:デフォルトの名無しさん
22/04/19 22:14:20.79 OM/gUtcz.net
>>96
けっこう同意。
105:デフォルトの名無しさん
22/04/19 22:34:55.70 S3LfaCKT.net
>>102
障害者手帳持ちでも書けるとガイジを集めたから
ガイジが作ってガイジが保守して、真人間は近寄らないか万一深淵を覗いてもすぐに逃げるから
ガイジだけが残った
それがPoopHPoor
106:デフォルトの名無しさん
22/04/19 22:35:00.77 cHj01Kom.net
言語の良し悪しと普及率はあんまり関係ないってことだな
107:デフォルトの名無しさん
22/04/19 23:10:14 +gF6CcFv.net
良し悪しは文法だけでは決まらないしね
全部作り直すとかできないから、まず既存資産との互換性とかがめちゃくちゃ重要だしなあ
108:デフォルトの名無しさん
22/04/19 23:14:51.60 ggKFiwdh.net
Haskellはとてもいい言語だと思うけど、まあ今後も広くは普及しないだろうね
109:デフォルトの名無しさん
22/04/20 00:49:02.14 sjxPrwDV.net
Java(8以前)とPHPとVB.NETは案件も人材もロクなのにあたったことないし関わりたくない
110:デフォルトの名無しさん
22/04/20 07:57:17.73 6jKBlzMv.net
障害者雇用枠だししゃーない
111:デフォルトの名無しさん
22/04/20 13:03:13.18 eR+oT63l.net
小一時間でゲームをつくる─7つの定番ゲームのプログラミングを体験 (WEB+DB PRESS plus)
URLリンク(www.)あmazon.co.jp/dp/4297127458
この本面白いね。
コンソールに出すアスキーアートだけでゲームを作るところと最小限の工程ごとに動作確認するところがユニークだ。
誰かこのなかのどれかのゲームをGoやRustに移植してgithubあたりにアップしてくれないか?
その出来栄えでその言語の優劣を競うというのはどうだろうか?
112:デフォルトの名無しさん
22/04/20 15:11:07.62 6jKBlzMv.net
コード書けない奴が何の優劣を語るんだ?
LOC?
113:デフォルトの名無しさん
22/04/20 16:00:31 4qIYThBV.net
>>110
urlミスってるよ
114:デフォルトの名無しさん
22/04/20 16:19:25.49 uTpu7tmC.net
コードが書けないやつだからこそnull安全なんてほとんど誰もありがたかってない事を上のように一生懸命言い出す
115:デフォルトの名無しさん
22/04/20 16:51:22.63 OCnLwZQm.net
>>113
これだからGo信者は… 本当に現代人?
116:デフォルトの名無しさん
22/04/21 11:50:52.34 3B58U+9M.net
/:|. /:|
/ .:::| / :::|
| ...:::::| /u ::::|
i ノ (  ̄ ̄⌒゙゙^―/ ::::::::|
/_,, ⌒ u . _ ::::::::::::\
/ \\゙.l | / ::// ̄● ̄ ̄/ ::::::::\
|● ::::::| . | | / :::: / :::::::::://u :::::::\
/i,.\_:::::::| u::::: / :::::::::// :::::::::\
/ \( (\|. ::::::. // ̄) ) :::::::::\
/ u ) )_ ^ ^  ̄ ̄ ,,、( ( i し./ :::::::::::::\
/ / /__,,____,/ ̄ \ ))u ノ ( ::::::::::::::::::::\
/ ヽ |.. | /└└└└\../\((\ '~ヽ :::::::::::::::::/
\ ) し ∨.|llllllllllllllllllllllllllllllll∨lllll| ) / / :::::::::::::::::/
\⌒ | |.|llllllllllll;/⌒/⌒ 〕 ::u::::::::::::::::/
| | |.|lllllllll; ./ . . | ::::::::::::::::::::/
.| | |.|llllll|′ /
.| | |.|llll| | .∧〔 / u:::::::::::::|
ヽ}.∧lll | ../ / / :::::::::::::::::\
i/| \┌┌┌┌┌ /. / /::: :::::::::::::::::i
( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄| i/::::::::::: u i
ヽー─¬ー~ー―i | :::::::::::::
117:デフォルトの名無しさん
22/04/21 13:08:35.07 HvU2DlQ2.net
>>93
Goは言わば並列対応スクリプトC言語だからだよ
だから今どきの言語と異なりC言語のように地道に記述量が増えるとともに安全軽視で自己責任
118:デフォルトの名無しさん
22/04/21 14:17:09 /LgGWJm6.net
男の人って気持ち悪い…
どうして少女をそんなに汚したがるの?
お母さんに悪いとわおもわないの?
119:デフォルトの名無しさん
22/04/21 15:09:04.59 W8PBxmKK.net
そらごらんなさいRustの悪影響を
120:デフォルトの名無しさん
22/04/21 15:43:32.20 8Ud760iv.net
アイGoー
121:デフォルトの名無しさん
22/04/21 15:52:10.80 aUxqSgEH.net
Rustならシンプルに分かりやすく書きやすい上に
うっかりミスもコンパイルエラーで検出されるから良いよな
122:デフォルトの名無しさん
22/04/21 17:31:45.76 rHXUR/xS.net
Rustの話は専用の隔離部屋でお願いします
Rust part14
スレリンク(tech板)
次スレタイトルからRustの文字を削除してください
123:デフォルトの名無しさん
22/04/21 17:40:50.87 d9Ay4jJ1.net
比較の話だからここでいいんじゃね
そもそもアンチ側が悪影響とか言い出してきっかけ作っているし
アンチを各言語本スレへ誘導するのはダメだろ
124:デフォルトの名無しさん
22/04/21 17:59:45.68 rHXUR/xS.net
比較の話も含めて >>121 の専用スレでやって下さい
125:デフォルトの名無しさん
22/04/21 18:05:48.23 l2zLdNmc.net
言語同士の比較はここでやる
Rust単独の話は向こうでやる
それだけだ
以上
126:デフォルトの名無しさん
22/04/21 18:32:35.61 LoXMgsHc.net
むしろここが隔離スレだと思ってた
127:デフォルトの名無しさん
22/04/21 18:51:22.79 RkfSdsaD.net
ここは次世代言語スレ
次世代言語の話題や機能や比較に議論まで何でもOK
各言語の本スレに迷惑がかからないようここで行なうこと推奨
128:デフォルトの名無しさん
22/04/21 20:07:59.60 QQ8u361U.net
>>114
このように誰もGoのことなど挙げてないのに、Rustの超ビギナーの信者は異様に敵視を行う。
例えば、代表的なNull安全言語は、RustがまさにそうだがOptionを使うからNullなんて無いのだが、matchを書いたとしてもNoneで
異常を処理しないような事を書いてしまえば、Nullで落ちたりするプログラムと大して変わらない。unwrapを連打するようなプログラムは
論外だとしても、それはNullをチェックしないプログラムと何ら変わりない。
Qitaの有害記事、「null安全でない言語は、もはやレガシー言語だ」のせいで、このような思想を植え付けられている人があまりに多い。
大切なことは異常系をきちんと処理できているかということで、言い訳では「ちゃんとやるのを忘れているかもしれないのでは」という指摘に
コンパイルが通らないだの、Rustでしかそうならない事を都合が悪いのか、短い考察だけで反論しています。
コンパイルが通ろうと通らななかろうと、”ちゃんとやるのを忘れて”いれば同じです。
また、たしかにNull安全は、
129:Java/KotlinのようなNullが奥深くに根ずく言語であれば恩恵は大きいでしょう。しかしGoのような言語は 扱うデータはstructであり、Nullが無い訳ではないが、奥深くに潜む”参照”データー構造を設計思想から良しとはしていない言語である。 一部の言語設計者ではリンクリストのような、非効率で何も考えてないデーター構造を逆にレガシーと呼びます。 もちろん、if err != nil { }が古臭く邪魔で嫌、あちこちに現れるので受け付けないという意見は分かるし、これを簡略化するために Null条件演算子やNull合体演算子が欲しいという要望もわかる。しかし、それが導入された、もしくはされていないからといって それはNull安全言語とは厳密には関係ない。
130:デフォルトの名無しさん
22/04/21 20:11:11.38 LoXMgsHc.net
>>127
> このように誰もGoのことなど挙げてないのに
>>72,74,80,82
131:デフォルトの名無しさん
22/04/21 20:19:15.04 j60ekrh9.net
>>127
>このように誰もGoのことなど挙げてないのに、Rustの超ビギナーの信者は異様に敵視を行う。
このように誰もRustのことなど挙げてないのに、Goの超ビギナーの信者は異様に敵視を行う。
以下略
132:デフォルトの名無しさん
22/04/21 21:14:28.53 kTS22GXO.net
>>127
それは君の主張が間違っている
Rustではある型Tの変数に対してnull相当(nilやundefined等含む)を代入出来ない
そのため君の主張する処理し忘れがあってもnull相当を扱ってしまう危険性は起きない
133:デフォルトの名無しさん
22/04/21 21:15:47.90 8Ud760iv.net
ほらまたTとか言い出したこれだからRusterは
134:デフォルトの名無しさん
22/04/21 21:26:57.05 LoXMgsHc.net
Goだって最近Tって書けるようになったでしょ
スレタイの言語皆Tって書くのでは
135:デフォルトの名無しさん
22/04/21 21:27:36.40 SndU/Xk6.net
・Rustにはnullという概念のものが存在しない
・存在するかしないかを示したいならば代数的データ型であるenum Optionを用いる
・扱う型をT型とするとOption<T>型となるため型が異なり処理を忘れてミスすることも起きようがない
136:デフォルトの名無しさん
22/04/21 22:33:53.95 +7uwIW+r.net
Nim, Zig, Rust, C++でコンパイル時に実行されるコードを比較した記事。
URLリンク(castillodel.github.io)
137:デフォルトの名無しさん
22/04/21 22:39:37.71 8Ud760iv.net
>>133
糞バカ中世ジャップランド土人どもはOption.get()するだけだぞ
138:デフォルトの名無しさん
22/04/21 22:55:52.73 hBTlXYXK.net
>>135
Optionにget()メソッドはありません
139:デフォルトの名無しさん
22/04/21 23:17:57 58EnvgFJ.net
ほぼOptionのNoneと言ってるのに、null相当(nilやundefined等含む)を代入とか、Option<T>型となるため型が異なりとか
もう誤魔化して言いくるめる気にしか見えない。。。
どれだけNull安全で助かってるか、なんてコードを書いてればそんなに無いでしょ。確かにNullが無いのだから、Nullのような状態で
クラッシュ/panicする事態は減るでしょう。コンパイルが通った時点でNull安全性が保障されるなんてのも、今どきの多くの言語は
外付けながらLint系の警告をしてくれます。もちろん言語に統合されてない後付けで「美しくない」とかそういうのはあるでしょうが。
そして手続き型プログラミングを初めて数年の初心者なら沢山のミスを犯すのかもしれんけどさ、そもそも宣言と同時に初期化を
する重要性は、関数型プログラミングでも少しでもしていれば分かるはずでそんな経験もなく、旧Java系なんかからRustへ移ったら
感嘆するように見えるのかもしれんが、そんなしつこく言うほど便利な場面って具体的にどういう時よ?逆にさ?
次はNan安全言語とか、-+Inf安全言語とかやるのかい?
140:デフォルトの名無しさん
22/04/21 23:28:25.00 emsRX1XQ.net
Rustのアドバンテージを認めざるを得ないから認めつつ
それでも批判したいから言い掛かり長文
みっともない
141:デフォルトの名無しさん
22/04/21 23:47:03.05 Q5xBjMYc.net
>>137 その通りだからきみはJavaとかHaskellとか使えばいいと思うよ
Rustの良いところを教えてほしいなら普通に指導を乞えばいいのに
142:デフォルトの名無しさん
22/04/22 00:11:43 BeccjQpB.net
null安全をlinterが警告してくれる言語なんてあったっけ?
143:デフォルトの名無しさん
22/04/22 00:18:27 QUxpZq2Z.net
>>140
未初期化変数へのアクセスのことを言ってそうな気がする
それ以外のケースでnullの問題踏んだことない人なのかもしれない
144:デフォルトの名無しさん
22/04/22 02:18:54.02 KwomhEH1.net
>>134
Goが無いのはGoでは不可能なの?
145:デフォルトの名無しさん
22/04/22 16:02:25.23 7P+21PvJ.net
Rustにいいところなんてないよ
面倒なだけ
146:デフォルトの名無しさん
22/04/22 16:09:03.51 gIl1LNdJ.net
色々とプログラミングが楽で快適だからRust使ってるわ
147:デフォルトの名無しさん
22/04/22 18:41:08.80 0TWFpVQa.net
普通に煽りじゃない反論ができない時点でRustニワカのキモさが良くわかる。Null安全を全否定してないのに
「指導を乞え」とか「JavaとかHaskellとか使え」とか「それ以外のケースでnullの問題踏んだことない」とか
Nullのような状態で クラッシュ/panicする事態は減るって書いてるのに文字も読めもしない。
”それほど強調して、気持ち悪く粘着してNull安全言語なんて宣伝してることがRustのために良くない”って話だよ
言語の悪口を言ってるんじゃない、おまえのようなキモくて何も答えられないで煽りだけクズを論ってんの
148:デフォルトの名無しさん
22/04/22 19:03:56 EyWh3ott.net
自分でこれが煽りじゃない反論だと思ってるならヤバい
149:デフォルトの名無しさん
22/04/22 19:15:01.24 J7veDPz7.net
Rustより良い言語が出現したらそれを検討する予定
今のところそういう言語がないためメイン言語はRustのまま
150:デフォルトの名無しさん
22/04/22 19:20:14.50 UKixTNef.net
煽ってるだけの書き込みにまともな返答がくるわけないじゃん
151:デフォルトの名無しさん
22/04/22 19:21:33.19 atNXtsDe.net
まだスレタイに出てないけど注目してる言語とかありますか?
152:デフォルトの名無しさん
22/04/22 20:02:04.18 yAnz+P1M.net
flixかな
scala亜種といった感じで流行るようには見えないけどね
153:デフォルトの名無しさん
22/04/22 20:06:53.42 yOJfi3Zs.net
この根源的な差が決定的かな
> プログラミング言語は以下の3つに分類される
> CとC++ ←『省メモリ高速』だが、「メモリ解放でミスると危険」
> GC言語 ←『省メモリ高速』ではないが、「メモリ解放は自動で気にしなくていい」
> Rust ←『省メモリ高速』だが、「メモリ解放は自動で気にしなくていい」
154:デフォルトの名無しさん
22/04/22 20:15:46.28 QUxpZq2Z.net
言語じゃないけどWASMってどうよ
155:デフォルトの名無しさん
22/04/22 20:25:25.90 UKixTNef.net
>>149
Pony
Rustよりも安全。データ競合だけでなく、デッドロック、実行時例外が起きないことも保証されてる
actorモデルを採用している
156:デフォルトの名無しさん
22/04/22 20:27:40.70 aYwHbJz6.net
>>150
これですかね
ありがとうございます
The Flix Programming Language
URLリンク(flix.dev)
URLリンク(github.com)
プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー
URLリンク(www.infoq.com)
Flixは多くのプログラミング言語にインスパイアされたオープンソースのプログラミング言語であり、開発者は関数型、命令型、論理型のスタイルでコードを書くことが可能である。FlixはScalaに似ており、Hindley-Milnerに基づく型システムとGoにインスパイアされた並行処理モデルを採用している。JVM言語はポリモーフィックエフェクトシステムやDatalog制約などの�
157:�ニークな機能をサポートしている。
158:デフォルトの名無しさん
22/04/22 20:34:28.61 aYwHbJz6.net
>>153
どもです
URLリンク(www.ponylang.io)
フィンテックでアクターモデルのプログラミング言語Ponyを使う
URLリンク(www.infoq.com)
Ponyはアクターモデルを使ったネイティブ言語であり、LLVMを使う。アクターモデルはErlangやAkkaで有名であり、1973年のCarl Hewitt氏他の論文から生まれた。アクターは状態管理と非同期メソッドを組み合わせる。フィールドに加え、アクターはひとつのメッセージキューとヒープを持つ。Clebsch氏によれば、Ponyのアクターは独立してガベージコレクションがされ、ErlangやAkkaとは違い、アクターそのものもガベージコレクションされるので、アクターを殺すためのメッセージのようなものは必要ない。手動でのメモリ管理は不要なのだ。
アクターは自分のヒープのガベージコレクションをmark-and-don’t-sweepアルゴリズムを使って他のアクターとは独立して行う。つまり、Ponyは到達可能なグラフに対してはnのオーダーだ。到達不可能なメモリは影響を与えない。アクターのヒープのGCにはsafepointがなく、読み込み、書き込みのバリアも、カードテーブルマーキングもコンパクト化もない。コンパクト化が必要ないので、ポインタのフィクスアップも必要ない。
159:デフォルトの名無しさん
22/04/22 20:39:31.11 NkxiGfGV.net
erlang系で何かしら伸びてこないのか
160:デフォルトの名無しさん
22/04/22 20:56:20.88 UKixTNef.net
>>156
Erlang系でElixirの次に来そうなのはGleamかな?
まだまだ新しすぎて未成熟だけど、着実にコミュニティが大きくなってる気がする
あとは他に33個ほどリストアップされてるから、なんか伸びそうなのあったら教えて
URLリンク(github.com)
161:デフォルトの名無しさん
22/04/22 20:57:22.84 MSzkRWeB.net
>>152
Wasm自体は十分に実用的でブラウザ上からクラウドエッジ上に至るまで様々な環境での環境非依存言語の地位確立
ただしWasm仕様へのGC導入は未来の話へと先送り
したがって実用的なWasm記述言語としてはC/C++/RustのままとなりRustがベストチョイス
162:デフォルトの名無しさん
22/04/22 21:14:40.69 gmnEH6Vv.net
>>158
LLVMが噛めばほぼ全てWasm対応になりうるので利点でもなんでもない
オレオレ言語でもWasmに対応できるというかすでに作った
163:デフォルトの名無しさん
22/04/22 21:25:22.84 p9LA8Dyp.net
>>159
GC言語だと明確に不利なだけでもちろん動くよ
GCなし自作言語で良いものが作れたならばシェア取りに行くといいね
現状Rustの天下を崩すチャンス
164:デフォルトの名無しさん
22/04/22 22:15:59.43 AQMvQ4xM.net
WEB+DB Press 127号で、
Elixir のPhoenix が、28ページの特集
Ruby on Rails 7, Phoenix 1.6 から、脱Webpack でesbuild へ
RailsのHotwire, PhoenixのLiveView で、websocket によるリアルタイム通信。
ここ数年、SPA でReact に奪われたシェアを回復すべき戦略
他には、Bootstrap よりも、Tailwind が多くなってきた
128号は、Terraform 特集。
Software Design 2022/1月号も、Terraform特集だった
YouTube で有名な、雑食系エンジニア・KENTA のRuby on Rails サロンでも、
Terraformで転職を差別化できると言ったから、すべての雑誌・学校も動いた
1つのサロンが転職に有効な技術を持ってしまうと、
他者が合格できなくなるので、対抗上、勉強しないといけなくなる
165:デフォルトの名無しさん
22/04/22 22:38:59.17 y1b9XJMs.net
Terraformが何なのかも理解せずにここプログラミング言語のスレに書き込んでいるのか
166:デフォルトの名無しさん
22/04/22 22:55:47.09 dDLjcogg.net
リスナーさんだか受講生だか知りませんが、KENTAさんの主張を引用するなら本人から許可を取って、
情報の許可範囲とガイドラインを守って書き込みしたほうが絶対良いと思いますね。
匿名掲示板ならアレな発言も、多少は仕方ないかもしれませんが、
他人の名を語ってそれだとさすがにまずいです。倫理とルールを守りましょう。
167:デフォルトの名無しさん
22/04/22 23:14:15.38 TXL8QlLI.net
え本人が書き込んでるんじゃないのか
168:161
22/04/22 23:17:44.40 AQMvQ4xM.net
KENTA
2021年のWeb系エンジニア転職を成功させる3つの技術要素、2021/4
URLリンク(www.youtube.com)
Web系エンジニアを目指す人のためのプログラミング学習ロードマップ、2021/2
URLリンク(www.youtube.com)
上の動画で、Terraform で転職を差別化しましょうと言っている。
それで、すべての雑誌・学校も動いた。
Terraformが出来ないと、転職に負けてしまうから
米国人からすると、日本のRuby on Rails は異次元の戦い。
10年以上のプロでも、1年ぐらいの初心者に負けてしまう
日本では解雇できないから、資格などの事前審査制。
米国では国民全員がフリーランスだから、ひとまず雇っても、すぐに首にできる
169:デフォルトの名無しさん
22/04/22 23:32:50 dDLjcogg.net
>>164
えまじで?
170:デフォルトの名無しさん
22/04/22 23:40:10.10 BeccjQpB.net
KENTAさんは全エンジニアの輝きの星
171:デフォルトの名無しさん
22/04/22 23:47:33.75 dDLjcogg.net
讃えよー敬えー
172:デフォルトの名無しさん
22/04/23 05:52:57.97 dsrvV+XF.net
>>165
相変わらずのゴミ動画
173:デフォルトの名無しさん
22/04/23 07:28:43.83 ebXv3GDe.net
>>151
RustがメモリをGC並みに雑に扱えたら、最高だったな。
174:デフォルトの名無しさん
22/04/23 08:41:27.77 X7wDySqh.net
RcもWeakも無くなればね
裏で勝手にやってくれるとかして?
プログラマ側が一切ケアしなくて良いんならスゴイよね
175:デフォルトの名無しさん
22/04/23 09:12:54.44 eZJZo8Wb.net
Goはコンパイル言語なのにスクリプト言語のように扱える軽量さが最大の魅力だろ
Go並にエディタの補完が軽量でコンパイル爆速のコンパイル言語を俺は知らない
Rustはライフタイムが全然わからなかったし、コンパイル遅すぎて無理だったね
GCはあった方がいいに決まってるわ
開発時の生産性が圧倒的に違ってくる
176:デフォルトの名無しさん
22/04/23 09:17:17.05 kd0LPi6/.net
GoはCGo何とかしてくれればもっと使う気になれるんだけどな
177:デフォルトの名無しさん
22/04/23 09:20:09.97 eZJZo8Wb.net
とにかくGoは頭の悪い人でもすぐにプロジェクトに参加できるぐらいに機能がシンプルに削ぎ落とされていてコンパイル爆速ってのがポイントな言語
それに対して〇〇の機能がないーって言っても仕方ないだろ
頭の悪い人でも使いこなせる言語じゃないと企業ではなかなか普及しないと思うよ
178:デフォルトの名無しさん
22/04/23 09:46:22.59 o/e4rrgi.net
URLリンク(without.boats)
だれかここで言われてる言語作ってくれ
179:デフォルトの名無しさん
22/04/23 09:52:47.90 XZjzYuNa.net
>>174
本当にその通りなんだけど、これだけは欲しかったみたいな機能も一緒に削られてるところが少しモヤモヤする
ジェネリクス(ようやく追加されたけど)とか代数的データ型とか
180:デフォルトの名無しさん
22/04/23 10:30:02.86 19UflQcD.net
>>172
ライフタイムがわからなかった、って、かなり知能が低い人じゃないとありえないと思うよ
そしてそのくらい低い人はプログラミングに向いていないと思う
181:デフォルトの名無しさん
22/04/23 10:34:13.57 WKX1mrZa.net
ライフタイムはわかるけどこれがリージョン推論とかいった厳密な理論とどう対応しているのかがわからん
一般的なプログラマーはここまで理解しなくてもいいんやろうけど
なんでこんな単純なわかりやすい原則の背後にそんな謎な人口に膾炙されていない理論を導入しないといけないのかがわからんわ
182:デフォルトの名無しさん
22/04/23 10:59:59.69 BgAX+6b6.net
荒らしなし規制無し
3ch
NEXT2ch
45ch
ふたばちゃんねる
明和水産
183:デフォルトの名無しさん
22/04/23 11:09:11.96 teuoZU8e.net
>>178
ブロックスコープというあまりにも大雑把な大きな枠で扱うのではなくて
実際に使われている有効な範囲(リージョン)で細かく扱いましょう、というだけだよ
生存単位は前者で、借用単位は後者で細かく区切る
具体的コード例を含めた解説ページの例
Non-Lexical Lifetimes って?
URLリンク(qiita.com)
184:デフォルトの名無しさん
22/04/23 12:06:36 uMxflx63.net
プログラミング言語「Erlang」を生んだジョー・アームストロング氏死去
なお、アームストロング氏は「なぜオブジェクト指向はクソなのか」という名文を残しています。
185:デフォルトの名無しさん
22/04/23 12:41:02 lKjOluUR.net
>>177
プログラマーって言ってもOS作ったりドライバ作ったりする低レイヤーやってるのと、バックエンドやWeb系の高レイヤーやってるのはいるわけで
Rustは前者の人たちが使えばいいのでは?後者の人たちがRustがーとかイキってるの見ると笑ってしまう
後者の分野ではRustはGoに勝てないでしょう
186:デフォルトの名無しさん
22/04/23 12:48:09.21 HJoWw7qN.net
>>182
むしろGoは対象が狭くて短命に終わる言語
言語の機能不足で書きにくい上に速いわけではない
唯一のメリット(?)が仕様が簡素なこと
187:デフォルトの名無しさん
22/04/23 13:26:27 o/e4rrgi.net
>>182
勝ち負けの定義次第だけど後者でもrustの方が有利な場合はあるんじゃないの
discordのバックエンドの例とかあるよね
だいたいのケースでgoが適しているって主張なら分かるけど
特定の分野で常にgoの方が適しているというのは言い過ぎかと
188:デフォルトの名無しさん
22/04/23 13:31:57 BV8u7mBP.net
これだからRust信者は嫌なんだ...12年続いて厳格に互換性を保ってる言語が短命だって?
速いわけではないって、そりゃGCが裏で動いてメモリー解放をほとんど気にしなくて良い言語と比べれば、極限の速度では有利になるのは当たり前でしょ?
それでもC99やRustなどと比べても2倍も時間が掛かるわけではない、これを速いわけではないと表現するのは、自身でも気づいていないのか隠された悪意と偏見を持ちすぎてる。
むしろRustこそ後方互換を保つためなどと言いつつEditionなどという仕組みや、ボローチェックの強化なんて短命のコンパイルが通らないような事をして、短命で終わっている
今書いてるRustが10年後コンパイルが通るのかエラーになるのか全く見えない。普通の用途ではGoで十分という話に噛みついてくる
言語の表層的な機能をどんどん導入して直行性が無く、どんどん書きにくくなっていくのに苦労に見合う速度はC99以下。唯一のメリット(?)は意識高い系がたった1つの言語をやってればマウントできる事
189:デフォルトの名無しさん
22/04/23 13:40:48.60 j+9QGcWO.net
>>182
でも現実にWeb分野でもRustがじわじわと広まりつつあるよね
サーバ側はGoよりRustが高速で省メモリでGC負荷なしで有利
ブラウザ側は実用的となったWebAssemblyでRustが最適
190:デフォルトの名無しさん
22/04/23 13:46:57.71 o/e4rrgi.net
>>185
不勉強でよく知らないんだけどeditionやborrow checkerの強化でコンパイル通らなくなったcrateってどういうものがあるの?
191:デフォルトの名無しさん
22/04/23 14:42:18.80 iqGYI4s5.net
長文に構うなよ
192:デフォルトの名無しさん
22/04/23 17:59:39.00 Yf3QCfCm.net
>>176
同感
必須機能が足りな過ぎてGoはプログラミングが修行のように辛い
C言語で何でも書けるというのと同じで書けるけど辛い
193:デフォルトの名無しさん
22/04/23 18:14:41.34 DP+h97oH.net
>>186
コンビニに行くのにF1とかソーラーカーは要らない定期。どれだけ早かろうが省エネだろうが。
JavaやC#はセダン~バスみたいな感じかな。
Goは原付2種みたいなもんでしょ。
まず主戦場も違えばドライバーも違う。
194:デフォルトの名無しさん
22/04/23 18:17:56.69 qKl7QP1V.net
>>186
それでお前は使ってるの?
Reference Types使ってもパフォーマンスがjsに比較してカスな件どうなった?
195:デフォルトの名無しさん
22/04/23 18:21:30.06 FZleZnGe.net
>>191
え?
JSとは誤差
そして何か処理するコード次第で圧勝
196:デフォルトの名無しさん
22/04/23 19:02:24.78 qKl7QP1V.net
もう一回貼っておきますね
URLリンク(zenn.dev)
PythonにおけるCFFIみたいな用途で使う分にはきっと問題無いんだろうね
特定の目的に対してはぴったりはまるんでしょうが
それを何の前提も付けず単に「実用的」と呼ぶのは誇大広告ではないんですかね
197:デフォルトの名無しさん
22/04/23 19:03:19.39 X7wDySqh.net
最小限で考えると
Cにあとひとつ何かを加えたものでやっていけそう
Cに関数のオーバーロードがあればやっていけそう
コンテナクラスもほしいけどOOPを持ち込んでしまうので今回はパス
あくまで
void add(struct vector_int *v, int value)
void add(struct vector_float *v, float value)
というふうに関数と構造体だけで頑張っていけそう
198:デフォルトの名無しさん
22/04/23 19:36:04.43 ugaeg6U2.net
Cに拘ってる奴は本気でCが使いやすいと思ってるのか冗談で言ってるのか
199:デフォルトの名無しさん
22/04/23 19:53:30.81 texCpgrl.net
go よりはcのが好きかな
200:デフォルトの名無しさん
22/04/23 19:57:28.78 stnqwczt.net
>>195
下手な増改築だらけのC++よりCが良い
LinuxのLinusも同じ意見
201:デフォルトの名無しさん
22/04/23 20:15:34.17 qKl7QP1V.net
C言語にオーバーロード?
結局C++みたいにABI建て増ししてマングリングしないといけないやつじゃん
202:デフォルトの名無しさん
22/04/23 20:18:18.40 o/e4rrgi.net
Cは_Genericで頑張れば
203:デフォルトの名無しさん
22/04/23 21:14:20.68 FKp57Oo8.net
個人的いはCにがんばってほしい
204:デフォルトの名無しさん
22/04/23 21:39:38.45 X7wDySqh.net
>>199
> _Generic
(´・∀・`)ヘーそんなのあるんだ勉強になりました
これあったら十分やわ
205:デフォルトの名無しさん
22/04/23 21:51:54.89 w3sxk/eA.net
ジェネリックってプログラミング言語によって指すものが異なってるよな
異なるといってもレベルの低いもの高いもの玉石混交という意味で
206:161
22/04/23 23:08:55.47 dSfqqc1i.net
IoT, AI でも、Elixir もある
Nerves は、最小のLinux, Erlang を含む、組み込み向けOS
Nx はテンソル用。
TensorFlow, PyTorch のフロントエンド
Erlang VM のFFI で、他言語のモジュールも使える
207:デフォルトの名無しさん
22/04/24 00:35:10 tW7+nz8n.net
Cは文字列が弱点だった
ちゃんとした文字列の型があればもっと便利だったとおもう
208:デフォルトの名無しさん
22/04/24 01:36:20.84 bAmVid1d.net
nimはもっと広まって欲しいかな。できればpython置き換えるくらいに。
209:デフォルトの名無しさん
22/04/24 06:41:49 4pJnSfn9.net
>>197
てかLinusはそんなにその言語がいいと思ってるならそれでお前がなんか作ればいいだろって話をしてるな。
ここの連中なんかはまさにそんな感じだが。
210:デフォルトの名無しさん
22/04/24 09:27:58.32 FwnGDc6j.net
これはなかなか面白い記事だった
原点回帰というか、ここのスレでの議論にも参考になると思う
お前らの感想を聞きたい
How the C programming language has grown
URLリンク(opensource.com)
211:デフォルトの名無しさん
22/04/24 13:05:32 LSLifE01.net
結局言語は道具。結局は何を作るかなんだよ
212:デフォルトの名無しさん
22/04/24 14:03:27.44 plOa7TFC.net BE:557647423-2BP(0)
URLリンク(img.5ch.net)
ネイティブ言語に変換できるビジュアルプログラミング言語とかいいと思う
オブジェクト指向とかわかりやすいだろうし。
唯一問題なのはマウスとキーボードをせわしなく行き来することかな
以前Blockly使ってそんなの作ったけどソースコードどっかやっちゃった
213:デフォルトの名無しさん
22/04/24 17:21:57.86 uNEChMqn.net
なんだァ?てめェ……
214:デフォルトの名無しさん
22/04/24 17:26:29.56 K5BkO09u.net
そうです、わたすが変なおじさんです
215:デフォルトの名無しさん
22/04/24 18:16:43.21 bl0Rasps.net
Rustのスレ複製おじさんが暴れまわってるから怖くなっちゃって見てないわ
あんなスレ見てたら気がおかしくなりそう
ここはまだまし
216:デフォルトの名無しさん
22/04/24 19:14:30 tfR0akyF.net
頭おかしなるで
217:デフォルトの名無しさん
22/04/24 19:46:35.09 gbNK0/9l.net
>>181
「なぜオブジェクト指向はクソなのか」
1データ構造と機能は一緒にすべきではない
2すべてがオブジェクトである必要があります。
3データタイプ定義はあちこちに散らばってしまう
4オブジェクトはプライベートな状態を持っている
218:デフォルトの名無しさん
22/04/24 20:04:13.90 tW7+nz8n.net
最近はモジュールがまた流行ってるよね
rustもGoも自分から見るとモジュール指向に見える
自分はモジュール型からOOPに進化した過程を知ってるから正直モジュール型は好きじゃない
219:デフォルトの名無しさん
22/04/24 21:17:36.80 slsDzRA2.net
>すべてがオブジェクトである必要があります
C++やJavaみたいにすべてがオブジェクトじゃないオブジェクト指向言語なんていくらでもあるじゃん
220:デフォルトの名無しさん
22/04/24 21:49:22.71 +4D6Qx5V.net
>>216
そういう意味じゃないよ
URLリンク(gist.github.com)
221:デフォルトの名無しさん
22/04/24 22:02:13.94 4j4sWWkv.net
真のオブジェクトっていうのは、一つのスレッドみたいなもので他のスレッドとの通信をメッセージパシングでやりとりするものと言っていたような
一方、普通にいわれているオブジェクト指向というのは単なるプログラミングの書き方の効率化の手法にすぎないって話
つまり、継承という方法で差分だけ書いていけるようにすることによる効率化だけの話だってこと。
222:デフォルトの名無しさん
22/04/24 22:04:35.47 uNEChMqn.net
差分プログラミングならまあクソでしょうね
223:デフォルトの名無しさん
22/04/24 22:06:02.75 22aYjb+I.net
今のオブジェクト指向継承あんま使わなくね?
224:デフォルトの名無しさん
22/04/24 22:09:28.03 HH2OM4Tz.net
むしろ継承はクソすぎて足を引っ張る
そのためGoやRustなどの言語ではclassを廃止というか最初から採用しなかった
225:デフォルトの名無しさん
22/04/24 22:27:33.03 L+Cr+2nK.net
>>216
一言でいえば、プリミティブ型のことを言ってるんじゃなく(オブジェクトに)メソッドがぶら下がる粘着性を言っている。
いまどきの言語はRustやGoならstructで、Goならダックタイピング、Rustならクレートによるimplでそのデータを扱う機能実装を行うが
さらに考えを推し進め、D言語などでは(Pythonのself引数のように)データを引数に取るUFCと呼ばれる使い方も出来る。
関数が第一級の言語要素という考え(第一級関数)は、関数型言語には必要不可欠とされmap/reduceなどの高階関数でも
常用され、クロージャ・関数オブジェクト・無名関数と幅広く展開される。
OOPLとの明確な違いは、Classに対するオブジェクトにmethodという関数が束縛をされていないことである。もちろん上記の言語は
OOPSをサポートするが、それは多態を表現できるだけの意味しかない。
以上、D言語の宣伝です。
226:デフォルトの名無しさん
22/04/25 00:02:30.63 m7DPUXtY.net
>>222
> Rustならクレートによるimplで
ちょっと惜しい
『トレイトによるimpl』が正しい
その後にD言語は更に進んでいるとの宣伝と書いてあるようだが
Rustにも当てはまることばかりなので違いがよくわからない
227:デフォルトの名無しさん
22/04/25 00:27:04.32 GF+5hMbb.net
DのUFCSは任意の関数に適用できるけど
Rustは第一引数がselfなassociated functionだけだよね
228:デフォルトの名無しさん
22/04/25 00:33:35.96 sDr1xuuT.net
typescriptでclassを使わないでやったときに無限にf(g(h(x)))みたいに書いたなあ
tsにもほしいわ
229:デフォルトの名無しさん
22/04/25 00:34:27.96 LqFJ2u6k.net
どうしてDって今のgoやrustみたいにならなかったの?
230:デフォルトの名無しさん
22/04/25 00:35:54.45 dSrWC4pO.net
DのUFCSもメンバ関数やネスト関数などには適用できない制限がある
231:デフォルトの名無しさん
22/04/25 00:39:26.69 cR9N6Lw+.net
UFCSなんかなくても最初の引数の型に対してメソッド定義するだけで目的達成可能
グローバル名関数を増やして名前空間を汚さずともその型のメソッド定義がベター
232:デフォルトの名無しさん
22/04/25 00:47:38.84 pTvSoM83.net
>>225
GoやRustはclassなんか無くても各型に対してメソッドを定義できるのでそういうことを招かずに済むのよ
UFCSのメリットはメソッドチェーン記法が可能になることだから最初からメソッドを定義すればいいものね
233:デフォルトの名無しさん
22/04/25 00:55:00.32 sDr1xuuT.net
>>229
structかenumは定義する必要あるじゃん
tsのtypeがどういうものか分かったうえでレスしてる?
234:デフォルトの名無しさん
22/04/25 00:58:26.21 loxtuGTD.net
>>230
structやenumは単なるtypeだよ
C言語でもstructと(enumの代わりにタグ無しの)unionがあるよね(ただしメソッド定義はできないけど)
235:デフォルトの名無しさん
22/04/25 01:21:04.73 W8ZZnspt.net
Nim言語にもUFCSがあって関数だけじゃなくtemplateやmacroも関数と同じ
236:文法で呼び出せるのでUFCSが使える。ただし第一引数がuntypedだとmethod call syntaxが使えない。 UFCSのメリットは標準ライブラリとか他人の書いたコードにある型とプロシージャの組に対してもmethod call syntaxが使えることだと思う。 第一引数が組み込み型のプロシージャを定義すれば組み込み型に対してmethod call syntaxが使える。 ライブラリAで定義されている型Xのオブジェクトに対してまったく別に書かれたライブラリBで定義されているgenericsなプロシージャをmethod call syntaxで呼ぶ出すことができる。
237:デフォルトの名無しさん
22/04/25 01:28:09.79 5Adpat0k.net
>>230
structやenum以外でもOK
任意の型にメソッドを定義可能
238:デフォルトの名無しさん
22/04/25 01:31:48.98 W8ZZnspt.net
>>228
オーバーロードがある言語なら引数が一つ以上あるグローバル関数を追加しても引数さえ異なれば同名の関数をグローバルに追加できる。
UFCSとオーバーロードがある言語では第一引数がFoo型の関数を定義するのはFoo型にメソッドを定義することとほぼ同じとみなせる。
239:デフォルトの名無しさん
22/04/25 01:35:52.92 V8fkjI23.net
つまりUFCSは汚染でありリスク要因
定義していないメソッドが使えることになってしまう
UFCSがなくとも明確にその型に対して定義されたメソッドのみ対象で実用上困ることはない
240:デフォルトの名無しさん
22/04/25 01:46:11.22 GF+5hMbb.net
モジュールがあるなら関数のimport有無でどの関数が呼び出されるか制御できたりしないの?
Rustのtraitのuseみたいに
241:デフォルトの名無しさん
22/04/25 01:55:33.57 W8ZZnspt.net
>>235
UFCSのあるNim言語をよく使っているけど特に問題無く使えてるよ。
ライブラリAで定義された型を第一引数に持つ関数をライブラリAの外で定義してもgenerics/template/macroなど使わない限りライブラリAから呼び出せないし、ライブラリA内で使われている関数を外から勝手に上書きできない。
メソッド呼び出ししているように見えてもライブラリA内のプライベートな変数/関数はライブラリの外からアクセスできない。
method call syntaxってa.fooMethod(b)って書いてあるのを
コンパイラがfooMethod(a, b)という関数呼び出しとして解釈しているだけでなんのリスクもないよ。
第一引数にFoo型のオブジェクトをとる関数を定義してもオーバーロードがあるのでFoo型を使わない人には何の影響も与えない
242:デフォルトの名無しさん
22/04/25 02:05:19.36 B7syBDSL.net
D言語のプロジェクト見て半笑いになるのやめてさしあげろ
243:デフォルトの名無しさん
22/04/25 02:06:16.28 W8ZZnspt.net
>>236
Nim言語だとimportするときにfrom std/strutils import `%`みたいに特定の型/関数だけをインポートすることができるよ。
もし同じ名前で同じ引数の関数が複数定義されている場合は関数名の前に"モジュルー名."をつけないとコンパイルエラーになる。
244:デフォルトの名無しさん
22/04/25 02:34:25 z8DQnMuR.net
結局UFCSは不要だよな
メソッド的に使いたいならば最初からその型にメソッドを生やせばよいだけ
必要ならばジェネリックに定義すれば複数の型に同時にメソッドを生やせる
わざわざグローバル関数にしておいてからメソッド的に使えます!とかメリットを一切感じない
245:デフォルトの名無しさん
22/04/25 02:47:04 W8ZZnspt.net
>>240
標準ライブラリにある型とか他人のgithubリポジトリにあるライブラリにも自由にメソッド追加できるの?
ジェネリックにする必要が無いときでもジェネリックにしないとメソッドはやせないの?
Nim言語にはそもそもC++のメンバ関数みたいなのが無くて、第一引数がFoo型の関数がFoo型のメソッドの代わりみたいになっている。
246:デフォルトの名無しさん
22/04/25 03:05:01.71 hhhqUz2p.net
>>241
ジェネリックである必要なし
もちろん同じ機能を複数の型に適用ならジェネリックで1回で済むのが普通
247:デフォルトの名無しさん
22/04/25 03:21:57.26 FFLrto9L.net
>>241
うん
標準ライブラリや第三者ライブラリにある型にもメソッドを増やすことができるよ
だからUFCSが無くても困らないよ
248:デフォルトの名無しさん
22/04/25 04:39:58.47 W8ZZnspt.net
UFCSがあれば引数が一個以上持つ関数であればa.f(b)ともf(a, b)とも書ける。
a.f(b)とf(a, b)の両方で書きたい場合があったらどうするの?
UFCSがなければa.f(b)で呼べるメソッドがあるときジェネリックな関数の中でf(a, b)の形式で呼ばれていたら、わざわざ新しくa.f(b)を中で呼ぶf(a, b)を定義しないといけない。
逆にf(a, b)な関数があったときに新しくメソッドを定義しなくてもa.f(b)と書ける。
それとNimだとcommand invocation syntaxがってf a, bという文法でも関数を呼べる。括弧がないので引数が複雑な式にならなければ書きやすくて読みやすいよ。
249:デフォルトの名無しさん
22/04/25 05:29:11.29 d+UJIvmE.net
>>244
Rustでも可能
例えばu64型のxに対して
xのn乗はu64::pow(x, n)という関数が標準であるけど
これはx.pow(n)と呼び出すことができる
250:デフォルトの名無しさん
22/04/25 08:12:23.26 7gaqSdm4.net
>>225
js/tsなら言語仕様拡張せんでも関数合成だろう。
251:デフォルトの名無しさん
22/04/25 08:55:43.85 VjXpH6fC.net
>>231
>>233
tsではどうやるの?
252:デフォルトの名無しさん
22/04/25 11:59:33.54 QEeStXPn.net
>>241
既存の型にもメソッド追加できるよ
例えばJavaScriptならこんな感じ
// 文字列にhello()を追加
String.prototype.hello = function() {
console.log(`Hello ${this}!`);
};
// 数値にhello()を追加
Number.prototype.hello = function() {
console.log(`Hello ${this}!`);
};
"abc".hello();
// 123.hello(); // 文法エラー
let num = 123;
num.hello();
253:デフォルトの名無しさん
22/04/25 12:16:38.60 VSqj5wTk.net
Rustではジェネリックにメソッド追加することも可能
// メソッドhello()を持つトレイトHelloを宣言
trait Hello {
fn hello(&self);
}
use std::fmt::Display;
// 表示可能トレイトDisplayを満たす全ての型に対してhello()を実装
impl<T: Display> Hello for T {
fn hello(&self) {
println!("Hello {self}!");
}
}
fn main() {
"abc".hello();
123.hello();
}
254:デフォルトの名無しさん
22/04/25 12:41:05.03 GF+5hMbb.net
既存の型へのメソッド追加はプロトタイプ汚染とか言われて忌避されてるよね
他モジュールへの影響の出ない形でメソッド追加する手法が望ましい
255:デフォルトの名無しさん
22/04/25 12:53:37.30 BAh3CRfm.net
>>250
JavaScriptはプロトタイプがグローバルに書き換わり全てのモジュールに適用されるためだな
一方でRustはメソッドを追加するにはトレイトを用意することが必要、そしてトレイトが宣言/useされている空間のみ有効、なので汚染が生じず安全
256:デフォルトの名無しさん
22/04/25 13:16:10.20 GF+5hMbb.net
>>251
型を定義した以外のcrateでメソッドを追加するためにはtraitが必要、が正しいかな
メソッドを追加するためにはtraitなしのimplを書く方法もあるが、これをできるのは型を定義したcrateだけに制限されているので他crateで定義を追加して汚染することはない
とまあRustの事情は知ってるんだけど、他の言語ではどうなってるのかが知りたかった
257:デフォルトの名無しさん
22/04/25 13:16:45.41 BiVUGBJZ.net
知ってるけど今そんな話してるんじゃないんだわ
258:デフォルトの名無しさん
22/04/25 13:22:02.11 UiNQmXr4.net
JavaScriptで脆弱性を生みまくってさんざん問題視されたんだから、いまどきそんな汚染が起こる新しい言語は一つもないよ
259:デフォルトの名無しさん
22/04/25 13:30:18.88 5sWL1sIQ.net
他の言語でもメソッド追加方法を教えて
今のところ
JavaScript >>248
Rust >>249
260:デフォルトの名無しさん
22/04/25 13:46:50.81 BiVUGBJZ.net
発端になったD言語のUFCSハブられてるのなんで?
261:デフォルトの名無しさん
22/04/25 13:58:52.24 TLzTt+1G.net
>>256
UFCSはメリット無いからでしょ
メソッド追加できるなら関数よりメソッドの方が名前空間を汚さないし
262:デフォルトの名無しさん
22/04/25 14:21:14.88 UiNQmXr4.net
>>256
nimには採用されてるし、調べてみるとC++にも導入の提案がされてるみたいだから、それほどハブられてないのでは?
Bjarne Stroustrupの提案: URLリンク(www.open-std.org)
Herb Sutterの提案: URLリンク(isocpp.org)
263:デフォルトの名無しさん
22/04/25 14:24:50.73 S1pQjSZ5.net
UFCSはメソッド名空間の汚染
だから採用しないのが正解
264:デフォルトの名無しさん
22/04/25 15:13:03.71 B7syBDSL.net
結局メソッド生やしたいんじゃなくてプライベートメンバにアクセスしたいだけなんだよな
265:デフォルトの名無しさん
22/04/25 15:22:37.45 sJr09n4H.net
>>259
汚染言うならRustのtrailと同レベルじゃない?
関数をincludeしなければ影響無いんだし、言語次第だけど名前空間に閉じ込めることもできるだろ。
266:デフォルトの名無しさん
22/04/25 15:28:02.41 VN4zR5UM.net
>>261
Rustは一切汚染しません
何を誤解しているのですか?
267:デフォルトの名無しさん
22/04/25 15:36:09.96 3MmiqOlF.net
いやトレイトで似たようなメソッドがたくさんぶら下がって汚染されてますよね?それが更にハードルが上がる一因になってる
268:デフォルトの名無しさん
22/04/25 15:46:00.36 ZqKc7K5J.net
>>263
Rustでは明示的にuse Traitしない限り
そのトレイトのメソッドが有効になることはないよ
汚染は起きず安全に設計されている
269:デフォルトの名無しさん
22/04/25 15:55:06.48 UiNQmXr4.net
>>264
当然、D言語でもnimでも、importしたシンボルは、importされたスコープでしか有効にならないし、メソッド形式の呼び出しもできない
Rustと何が違うんだよ
270:デフォルトの名無しさん
22/04/25 16:00:14.18 xSu4vg9o.net
UFCSは強制汚染
関数として必要なだけなのにメソッド名空間を汚染
メソッドとして必要なだけなのに関数名空間を汚染
だから採用する言語がほとんどない
271:デフォルトの名無しさん
22/04/25 16:01:50.20 3MmiqOlF.net
>>264
イヤイヤ、そんなのほとんどの言語でimportやincludeと同じで更に言えば、use std::io::prelude::*;みたいにRustでもPythonでも
誤ったやり方とされてるワイルドカードだって使えるんだから一緒でしょ。明確に言うなら”汚染は起きず”ではなく、汚染は当然ながら
useするのだから起きている。無意味にuseしない*を使わないというのは言語仕様や特性じゃなく規約だよ
272:デフォルトの名無しさん
22/04/25 16:08:08.42 UiNQmXr4.net
スコープやシンボルが限定されてるのに汚染と呼ぶのはおかしい
273:デフォルトの名無しさん
22/04/25 16:09:49.70 Ld005CpI.net
>>267
Rustでは追加メソッドを使う場合
必要な機能のTraitだけを
use TraitName as _; する
そのため汚染は起きない
274:デフォルトの名無しさん
22/04/25 16:18:54.63 EM9X2zpO.net
>>264
ほんとRustニワカ嫌いだわ、「明示的にuse Traitしない限り」なんて良くそんな詭弁が言えるわ。どう考えても一緒でしょう
だからPythonだってas構文使えますし、D言語だってimport std.stdio : writeln, writefln;で選択的インポートできるでしょw
275:デフォルトの名無しさん
22/04/25 16:21:12.54 PqJDEf6z.net
Rust聖戦士がワラワラ
他の言語のスタイルはすべてアンチパターン
276:デフォルトの名無しさん
22/04/25 16:23:34.31 NxLuUrhR.net
>>269
Underscore importなんてRustがトレイトのシンボルが別のシンボルと競合する可能性がある場合、つまりRustが破綻しないように
特別にあるだけで、汚染の低下のための機能ではないぜ。ここで汚染といってるのは無暗にメソッドが追加される事。
(回避策が仮に無ければ)衝突することはもはや、言語的な欠陥だ
277:デフォルトの名無しさん
22/04/25 16:27:35.43 KFrD7nO2.net
使われる空間に名前が載ることを汚染とは言わない
使わない空間に名前が載ることを汚染と言う
UFCSが汚染と言われる理由は
関数として使いメソッドとして使わなくてもメソッド名空間に載り
メソッドとして使い関数として使わなくても関数名空間に載るためだと考えられる
278:デフォルトの名無しさん
22/04/25 16:34:56.30 NxLuUrhR.net
>>273
Rustだって、fn中にuse出来るわけでそれはほかの言語でも同じ。そう言う事はあまりしないけども、多くの言語で同じように”使われる空間”だけに載る
279:デフォルトの名無しさん
22/04/25 16:36:52.48 UB00PZWU.net
RustがUFCSを採用しないのは単に、パーサーをオブジェクトを先して作り直すと(C言語にわざと似せてる)見た目が変わってしまうし
パーサーに手を入れるということは苦労してきたコンパイル速度が低下してしまう恐れがあるという事だけ
280:デフォルトの名無しさん
22/04/25 16:37:55.90 ZcyGlXND.net
>>273
その程度で汚染とか言うの聞いたことねえよ
ESModuleとかが導入される前のJSのグローバル汚染なんかと比較してみ?
Rust上げしたいがためだけのただのイチャモンだよお前の主張は
281:デフォルトの名無しさん
22/04/25 16:39:18.63 Ktg4GXmX.net
>>272
Rustでは汚染は起きないですよ
>>274
そうです
だからRustでは>>273の汚染という状況は発生しないですね
282:デフォルトの名無しさん
22/04/25 16:40:19.19 WnCW0ZaS.net
そもそもUFCSは汚染だなんてここ以外で聞いたことがないんだけど
283:デフォルトの名無しさん
22/04/25 16:44:16.36 LpKzCT90.net
>>273
UFCSとやらはムダに汚染しまくるクソな機能だな
284:デフォルトの名無しさん
22/04/25 16:46:59.96 EmEbSMmo.net
Rustの宣伝はこんな匿名掲示板じゃなくQiitaとかに書いてほしいな
その反応で実際に正論なのか暴論なのか明らかになるだろう
285:デフォルトの名無しさん
22/04/25 16:49:37.58 ZJMHR0C4.net
UFCSという汚染機能をサポートしているプログラミング言語はDとNim
埋もれた言語となったのも当然の結果
286:デフォルトの名無しさん
22/04/25 16:50:47.89 WnCW0ZaS.net
汚染だとか書いてるのは全部ガイジだな
287:デフォルトの名無しさん
22/04/25 17:00:21.10 AtUdeTix.net
ほとんど全ての言語がUFCSを採用していない理由はメリットが無いからだと思う
そして無条件に二つの名前空間に登録されてしまうことを汚染と呼ぶかどうかは置いておくとしても本末転倒の方法かなとは感じる
288:デフォルトの名無しさん
22/04/25 17:01:11 XBfmr4Gp.net
>>275
さらにRustは実装としてUFCSを別の意味で誤って使っていた過去がある、::パス構文で混乱を引き起こして曖昧性が起きた。2017年頃でそんなに優れた開発者がおらずなんとなく実装していた時期だな、いつもはRustは論文がしっかりしてると嘯くのに
289:デフォルトの名無しさん
22/04/25 17:02:36.89 +vVlR4Vp.net
やっぱりUFCSは悪だな
290:デフォルトの名無しさん
22/04/25 17:12:43.76 PqJDEf6z.net
次スレはもうRust消そう
話にならん
291:デフォルトの名無しさん
22/04/25 17:19:42.27 o63SmoRM.net
>>286
Rustは関係ないんじゃね?
むしろRustのアンチ側がなぜかRust叩きしていて巻き込まれ被害側にみえる
292:デフォルトの名無しさん
22/04/25 17:26:05.13 PqJDEf6z.net
どっちでもいいよ
信者だろうがアンチだろうがあらゆる話題がRustとの比較になって宗教戦争化するのが馬鹿馬鹿しすぎる
Rustの話題はスレ違いなのでRust叩きもスレ違いとする、問題解決
293:デフォルトの名無しさん
22/04/25 17:26:35.89 4xqZqLmv.net
ほぼ全ての言語がUFCSを採用していない
しかしUFCSが叩かれるとなぜか必死にRustを攻撃してくれる
一石二鳥と言えるだろう
294:デフォルトの名無しさん
22/04/25 17:38:49.59 63+wFQ6i.net
C++委員会での議論でもメンバ関数と非メンバ関数で衝突したときにどう解決するかで割れて否決されたみたいだし、なかなか難しそうだね
295:デフォルトの名無しさん
22/04/25 17:51:06.52 BSwMXBpD.net
考えてみたがUFCSは完全に不要っぽい
まずメソッドとして使いたいものは最初からメソッドとして書けばよい
次に外部の関数をどうしてもメソッドとして使いたいならばその外部関数を呼び出すメソッドを追加すればよい
296:デフォルトの名無しさん
22/04/25 17:53:13.68 VVkmIp+6.net
衝突が問題ならUFCSの使用は記号などを使って明示したらいいんじゃないかな?
297:デフォルトの名無しさん
22/04/25 18:02:36.22 DhJCopPa.net
「Rustを攻撃」ってどっちも同じでしょって言ってるだけなのに、このように攻撃を受けたと勘違いするんだから、正常な議論なんて出来ない。
UFCSについて難癖付けてるだけじゃん、個人的には別に必要ないと思うし、仮にあったら便利だとも思うが。コンパイル時間が増えるのは許容できない
「Rustのアンチ側」なんて言い出すクズどもとまともな話なんて出来るわけない。
こんな奴らばっかり増やしてもRustの普及を妨げてると思うんだけど?
298:デフォルトの名無しさん
22/04/25 18:07:17.52 3bYGoG0a.net
スレ読んだけど
汚染でも何でもなくRust特有の問題でもないことをRustは汚染だと延々と叩いてるのは異常に感じた
299:デフォルトの名無しさん
22/04/25 18:08:46.62 sJroCDvH.net
今のところUFCSがある言語と外部のデータ型に対してメソッドを追加できない言語、メソッドを追加できる言語とできない言語のそれぞれは前者が勝手で勝るけど、前者同士では好みとか実現手法の違い程度の話のように感じてる
UFCSも結局モジュール単位で環境が分離されている事が殆どのようだし、どちらかじゃないとできない事も、どちらかだと発生する致命的な不都合も見えてこない
一見機能が不要に見えても、その採用理由が他の要素に起因してたりもするだろうし、その辺私はUFCS採用言語のことを詳しく知らないのでなんとも言えないな
300:デフォルトの名無しさん
22/04/25 18:09:37.23 9QpKK4x8.net
>>292
C++での議論では当然そういう案含めていろいろ提案されたけど、結局どれも一長一短で委員会での合意には至らなかったみたい
一人で作ってる言語なら作者の好みでサクッと入れられちゃうんだろうけどね
301:デフォルトの名無しさん
22/04/25 18:11:19.66 DhJCopPa.net
汚染と言わなくても、Rustがuseで似たようなメソッドがたくさん出てくるのは本当でしょ、UFCSにしてもそれはイコールで何ら変わらんわ
なんでこいつらマトモに話すら出来ないの?コーディング能力を持ってるんだろうけど、コミュニケーション能力はゼロに近い
302:デフォルトの名無しさん
22/04/25 18:11:26.99 VVkmIp+6.net
メソッドが動詞ならUFCSでは関係が逆になるんだよね
英語圏の人はどう思ってるんだろ
303:デフォルトの名無しさん
22/04/25 18:15:08.57 Xt13Fv0a.net
>>298
OSV言語の自然言語に近くなるから、オブジェクトが先に来るのは利点として受け止められてる。でも所詮はシンタックスシュガーの何者でもない
304:デフォルトの名無しさん
22/04/25 18:16:12.91 TDNc/5Gc.net
>>297
> 似たようなメソッドがたくさん出てくる
そこ意味がわからない
似たようなメソッドがたくさんとは何?
305:デフォルトの名無しさん
22/04/25 18:19:11.55 VVkmIp+6.net
C#にも拡張メソッドと言う名前でほぼ同じ機能が使えるけどそっちは拡張メソッドオンリーで使う前提で作られてる
306:デフォルトの名無しさん
22/04/25 18:23:57.49 WnCW0ZaS.net
似たような機能はいろんな言語にあるよね
307:デフォルトの名無しさん
22/04/25 18:31:31.86 5qzMTDWR.net
>>299
英語はOSVじゃなくSVOな?OSVになることもあるけど、そして世界の自然言語の主流は日本語と同じくSOVが40%
参考としてスター・ウォーズのジェダイ・マスター:ヨーダは、このOSV語順で話す。
308:デフォルトの名無しさん
22/04/25 18:34:58.90 VVkmIp+6.net
var s=copy(section);
paste(s);
みたいなのがあって
これを
paste(copy(section)):
とするより
section.copy().paste();
のほうが受け入れ易いってことだよね?