スレタイ(順番はRedMonk準拠)以外の言語もok
前スレ
次世代言語24 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1647887021/
探検
次世代言語25 TypeScript Swift Go Kotlin Rust Nim
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2022/04/17(日) 17:52:35.38ID:KG26dcth173デフォルトの名無しさん
2022/04/23(土) 09:17:17.05ID:kd0LPi6/ GoはCGo何とかしてくれればもっと使う気になれるんだけどな
174デフォルトの名無しさん
2022/04/23(土) 09:20:09.97ID:eZJZo8Wb とにかくGoは頭の悪い人でもすぐにプロジェクトに参加できるぐらいに機能がシンプルに削ぎ落とされていてコンパイル爆速ってのがポイントな言語
それに対して〇〇の機能がないーって言っても仕方ないだろ
頭の悪い人でも使いこなせる言語じゃないと企業ではなかなか普及しないと思うよ
それに対して〇〇の機能がないーって言っても仕方ないだろ
頭の悪い人でも使いこなせる言語じゃないと企業ではなかなか普及しないと思うよ
175デフォルトの名無しさん
2022/04/23(土) 09:46:22.59ID:o/e4rrgi https://without.boats/blog/notes-on-a-smaller-rust/
だれかここで言われてる言語作ってくれ
だれかここで言われてる言語作ってくれ
176デフォルトの名無しさん
2022/04/23(土) 09:52:47.90ID:XZjzYuNa177デフォルトの名無しさん
2022/04/23(土) 10:30:02.86ID:19UflQcD178デフォルトの名無しさん
2022/04/23(土) 10:34:13.57ID:WKX1mrZa ライフタイムはわかるけどこれがリージョン推論とかいった厳密な理論とどう対応しているのかがわからん
一般的なプログラマーはここまで理解しなくてもいいんやろうけど
なんでこんな単純なわかりやすい原則の背後にそんな謎な人口に膾炙されていない理論を導入しないといけないのかがわからんわ
一般的なプログラマーはここまで理解しなくてもいいんやろうけど
なんでこんな単純なわかりやすい原則の背後にそんな謎な人口に膾炙されていない理論を導入しないといけないのかがわからんわ
179デフォルトの名無しさん
2022/04/23(土) 10:59:59.69ID:BgAX+6b6 荒らしなし規制無し
3ch
NEXT2ch
45ch
ふたばちゃんねる
明和水産
3ch
NEXT2ch
45ch
ふたばちゃんねる
明和水産
180デフォルトの名無しさん
2022/04/23(土) 11:09:11.96ID:teuoZU8e >>178
ブロックスコープというあまりにも大雑把な大きな枠で扱うのではなくて
実際に使われている有効な範囲(リージョン)で細かく扱いましょう、というだけだよ
生存単位は前者で、借用単位は後者で細かく区切る
具体的コード例を含めた解説ページの例
Non-Lexical Lifetimes って?
https://qiita.com/_EnumHack/items/8b6ecdeb52e69a4ff384
ブロックスコープというあまりにも大雑把な大きな枠で扱うのではなくて
実際に使われている有効な範囲(リージョン)で細かく扱いましょう、というだけだよ
生存単位は前者で、借用単位は後者で細かく区切る
具体的コード例を含めた解説ページの例
Non-Lexical Lifetimes って?
https://qiita.com/_EnumHack/items/8b6ecdeb52e69a4ff384
181デフォルトの名無しさん
2022/04/23(土) 12:06:36.75ID:uMxflx63 プログラミング言語「Erlang」を生んだジョー・アームストロング氏死去
なお、アームストロング氏は「なぜオブジェクト指向はクソなのか」という名文を残しています。
なお、アームストロング氏は「なぜオブジェクト指向はクソなのか」という名文を残しています。
182デフォルトの名無しさん
2022/04/23(土) 12:41:02.85ID:lKjOluUR >>177
プログラマーって言ってもOS作ったりドライバ作ったりする低レイヤーやってるのと、バックエンドやWeb系の高レイヤーやってるのはいるわけで
Rustは前者の人たちが使えばいいのでは?後者の人たちがRustがーとかイキってるの見ると笑ってしまう
後者の分野ではRustはGoに勝てないでしょう
プログラマーって言ってもOS作ったりドライバ作ったりする低レイヤーやってるのと、バックエンドやWeb系の高レイヤーやってるのはいるわけで
Rustは前者の人たちが使えばいいのでは?後者の人たちがRustがーとかイキってるの見ると笑ってしまう
後者の分野ではRustはGoに勝てないでしょう
183デフォルトの名無しさん
2022/04/23(土) 12:48:09.21ID:HJoWw7qN184デフォルトの名無しさん
2022/04/23(土) 13:26:27.68ID:o/e4rrgi >>182
勝ち負けの定義次第だけど後者でもrustの方が有利な場合はあるんじゃないの
discordのバックエンドの例とかあるよね
だいたいのケースでgoが適しているって主張なら分かるけど
特定の分野で常にgoの方が適しているというのは言い過ぎかと
勝ち負けの定義次第だけど後者でもrustの方が有利な場合はあるんじゃないの
discordのバックエンドの例とかあるよね
だいたいのケースでgoが適しているって主張なら分かるけど
特定の分野で常にgoの方が適しているというのは言い過ぎかと
185デフォルトの名無しさん
2022/04/23(土) 13:31:57.99ID:BV8u7mBP これだからRust信者は嫌なんだ...12年続いて厳格に互換性を保ってる言語が短命だって?
速いわけではないって、そりゃGCが裏で動いてメモリー解放をほとんど気にしなくて良い言語と比べれば、極限の速度では有利になるのは当たり前でしょ?
それでもC99やRustなどと比べても2倍も時間が掛かるわけではない、これを速いわけではないと表現するのは、自身でも気づいていないのか隠された悪意と偏見を持ちすぎてる。
むしろRustこそ後方互換を保つためなどと言いつつEditionなどという仕組みや、ボローチェックの強化なんて短命のコンパイルが通らないような事をして、短命で終わっている
今書いてるRustが10年後コンパイルが通るのかエラーになるのか全く見えない。普通の用途ではGoで十分という話に噛みついてくる
言語の表層的な機能をどんどん導入して直行性が無く、どんどん書きにくくなっていくのに苦労に見合う速度はC99以下。唯一のメリット(?)は意識高い系がたった1つの言語をやってればマウントできる事
速いわけではないって、そりゃGCが裏で動いてメモリー解放をほとんど気にしなくて良い言語と比べれば、極限の速度では有利になるのは当たり前でしょ?
それでもC99やRustなどと比べても2倍も時間が掛かるわけではない、これを速いわけではないと表現するのは、自身でも気づいていないのか隠された悪意と偏見を持ちすぎてる。
むしろRustこそ後方互換を保つためなどと言いつつEditionなどという仕組みや、ボローチェックの強化なんて短命のコンパイルが通らないような事をして、短命で終わっている
今書いてるRustが10年後コンパイルが通るのかエラーになるのか全く見えない。普通の用途ではGoで十分という話に噛みついてくる
言語の表層的な機能をどんどん導入して直行性が無く、どんどん書きにくくなっていくのに苦労に見合う速度はC99以下。唯一のメリット(?)は意識高い系がたった1つの言語をやってればマウントできる事
186デフォルトの名無しさん
2022/04/23(土) 13:40:48.60ID:j+9QGcWO >>182
でも現実にWeb分野でもRustがじわじわと広まりつつあるよね
サーバ側はGoよりRustが高速で省メモリでGC負荷なしで有利
ブラウザ側は実用的となったWebAssemblyでRustが最適
でも現実にWeb分野でもRustがじわじわと広まりつつあるよね
サーバ側はGoよりRustが高速で省メモリでGC負荷なしで有利
ブラウザ側は実用的となったWebAssemblyでRustが最適
187デフォルトの名無しさん
2022/04/23(土) 13:46:57.71ID:o/e4rrgi >>185
不勉強でよく知らないんだけどeditionやborrow checkerの強化でコンパイル通らなくなったcrateってどういうものがあるの?
不勉強でよく知らないんだけどeditionやborrow checkerの強化でコンパイル通らなくなったcrateってどういうものがあるの?
188デフォルトの名無しさん
2022/04/23(土) 14:42:18.80ID:iqGYI4s5 長文に構うなよ
189デフォルトの名無しさん
2022/04/23(土) 17:59:39.00ID:Yf3QCfCm190デフォルトの名無しさん
2022/04/23(土) 18:14:41.34ID:DP+h97oH >>186
コンビニに行くのにF1とかソーラーカーは要らない定期。どれだけ早かろうが省エネだろうが。
JavaやC#はセダン〜バスみたいな感じかな。
Goは原付2種みたいなもんでしょ。
まず主戦場も違えばドライバーも違う。
コンビニに行くのにF1とかソーラーカーは要らない定期。どれだけ早かろうが省エネだろうが。
JavaやC#はセダン〜バスみたいな感じかな。
Goは原付2種みたいなもんでしょ。
まず主戦場も違えばドライバーも違う。
191デフォルトの名無しさん
2022/04/23(土) 18:17:56.69ID:qKl7QP1V192デフォルトの名無しさん
2022/04/23(土) 18:21:30.06ID:FZleZnGe193デフォルトの名無しさん
2022/04/23(土) 19:02:24.78ID:qKl7QP1V もう一回貼っておきますね
https://zenn.dev/igrep/articles/2021-11-wasm-reference-types
PythonにおけるCFFIみたいな用途で使う分にはきっと問題無いんだろうね
特定の目的に対してはぴったりはまるんでしょうが
それを何の前提も付けず単に「実用的」と呼ぶのは誇大広告ではないんですかね
https://zenn.dev/igrep/articles/2021-11-wasm-reference-types
PythonにおけるCFFIみたいな用途で使う分にはきっと問題無いんだろうね
特定の目的に対してはぴったりはまるんでしょうが
それを何の前提も付けず単に「実用的」と呼ぶのは誇大広告ではないんですかね
194デフォルトの名無しさん
2022/04/23(土) 19:03:19.39ID:X7wDySqh 最小限で考えると
Cにあとひとつ何かを加えたものでやっていけそう
Cに関数のオーバーロードがあればやっていけそう
コンテナクラスもほしいけどOOPを持ち込んでしまうので今回はパス
あくまで
void add(struct vector_int *v, int value)
void add(struct vector_float *v, float value)
というふうに関数と構造体だけで頑張っていけそう
Cにあとひとつ何かを加えたものでやっていけそう
Cに関数のオーバーロードがあればやっていけそう
コンテナクラスもほしいけどOOPを持ち込んでしまうので今回はパス
あくまで
void add(struct vector_int *v, int value)
void add(struct vector_float *v, float value)
というふうに関数と構造体だけで頑張っていけそう
195デフォルトの名無しさん
2022/04/23(土) 19:36:04.43ID:ugaeg6U2 Cに拘ってる奴は本気でCが使いやすいと思ってるのか冗談で言ってるのか
196デフォルトの名無しさん
2022/04/23(土) 19:53:30.81ID:texCpgrl go よりはcのが好きかな
197デフォルトの名無しさん
2022/04/23(土) 19:57:28.78ID:stnqwczt198デフォルトの名無しさん
2022/04/23(土) 20:15:34.17ID:qKl7QP1V C言語にオーバーロード?
結局C++みたいにABI建て増ししてマングリングしないといけないやつじゃん
結局C++みたいにABI建て増ししてマングリングしないといけないやつじゃん
199デフォルトの名無しさん
2022/04/23(土) 20:18:18.40ID:o/e4rrgi Cは_Genericで頑張れば
200デフォルトの名無しさん
2022/04/23(土) 21:14:20.68ID:FKp57Oo8 個人的いはCにがんばってほしい
201デフォルトの名無しさん
2022/04/23(土) 21:39:38.45ID:X7wDySqh202デフォルトの名無しさん
2022/04/23(土) 21:51:54.89ID:w3sxk/eA ジェネリックってプログラミング言語によって指すものが異なってるよな
異なるといってもレベルの低いもの高いもの玉石混交という意味で
異なるといってもレベルの低いもの高いもの玉石混交という意味で
203161
2022/04/23(土) 23:08:55.47ID:dSfqqc1i IoT, AI でも、Elixir もある
Nerves は、最小のLinux, Erlang を含む、組み込み向けOS
Nx はテンソル用。
TensorFlow, PyTorch のフロントエンド
Erlang VM のFFI で、他言語のモジュールも使える
Nerves は、最小のLinux, Erlang を含む、組み込み向けOS
Nx はテンソル用。
TensorFlow, PyTorch のフロントエンド
Erlang VM のFFI で、他言語のモジュールも使える
204デフォルトの名無しさん
2022/04/24(日) 00:35:10.40ID:tW7+nz8n Cは文字列が弱点だった
ちゃんとした文字列の型があればもっと便利だったとおもう
ちゃんとした文字列の型があればもっと便利だったとおもう
205デフォルトの名無しさん
2022/04/24(日) 01:36:20.84ID:bAmVid1d nimはもっと広まって欲しいかな。できればpython置き換えるくらいに。
206デフォルトの名無しさん
2022/04/24(日) 06:41:49.87ID:4pJnSfn9207デフォルトの名無しさん
2022/04/24(日) 09:27:58.32ID:FwnGDc6j これはなかなか面白い記事だった
原点回帰というか、ここのスレでの議論にも参考になると思う
お前らの感想を聞きたい
How the C programming language has grown
https://opensource.com/article/22/3/how-c-programming-language-has-grown
原点回帰というか、ここのスレでの議論にも参考になると思う
お前らの感想を聞きたい
How the C programming language has grown
https://opensource.com/article/22/3/how-c-programming-language-has-grown
208デフォルトの名無しさん
2022/04/24(日) 13:05:32.72ID:LSLifE01 結局言語は道具。結局は何を作るかなんだよ
ネイティブ言語に変換できるビジュアルプログラミング言語とかいいと思う
オブジェクト指向とかわかりやすいだろうし。
唯一問題なのはマウスとキーボードをせわしなく行き来することかな
以前Blockly使ってそんなの作ったけどソースコードどっかやっちゃった
210デフォルトの名無しさん
2022/04/24(日) 17:21:57.86ID:uNEChMqn なんだァ?てめェ……
211デフォルトの名無しさん
2022/04/24(日) 17:26:29.56ID:K5BkO09u そうです、わたすが変なおじさんです
212デフォルトの名無しさん
2022/04/24(日) 18:16:43.21ID:bl0Rasps Rustのスレ複製おじさんが暴れまわってるから怖くなっちゃって見てないわ
あんなスレ見てたら気がおかしくなりそう
ここはまだまし
あんなスレ見てたら気がおかしくなりそう
ここはまだまし
213デフォルトの名無しさん
2022/04/24(日) 19:14:30.43ID:tfR0akyF 頭おかしなるで
214デフォルトの名無しさん
2022/04/24(日) 19:46:35.09ID:gbNK0/9l >>181
「なぜオブジェクト指向はクソなのか」
1データ構造と機能は一緒にすべきではない
2すべてがオブジェクトである必要があります。
3データタイプ定義はあちこちに散らばってしまう
4オブジェクトはプライベートな状態を持っている
「なぜオブジェクト指向はクソなのか」
1データ構造と機能は一緒にすべきではない
2すべてがオブジェクトである必要があります。
3データタイプ定義はあちこちに散らばってしまう
4オブジェクトはプライベートな状態を持っている
215デフォルトの名無しさん
2022/04/24(日) 20:04:13.90ID:tW7+nz8n 最近はモジュールがまた流行ってるよね
rustもGoも自分から見るとモジュール指向に見える
自分はモジュール型からOOPに進化した過程を知ってるから正直モジュール型は好きじゃない
rustもGoも自分から見るとモジュール指向に見える
自分はモジュール型からOOPに進化した過程を知ってるから正直モジュール型は好きじゃない
216デフォルトの名無しさん
2022/04/24(日) 21:17:36.80ID:slsDzRA2 >すべてがオブジェクトである必要があります
C++やJavaみたいにすべてがオブジェクトじゃないオブジェクト指向言語なんていくらでもあるじゃん
C++やJavaみたいにすべてがオブジェクトじゃないオブジェクト指向言語なんていくらでもあるじゃん
217デフォルトの名無しさん
2022/04/24(日) 21:49:22.71ID:+4D6Qx5V218デフォルトの名無しさん
2022/04/24(日) 22:02:13.94ID:4j4sWWkv 真のオブジェクトっていうのは、一つのスレッドみたいなもので他のスレッドとの通信をメッセージパシングでやりとりするものと言っていたような
一方、普通にいわれているオブジェクト指向というのは単なるプログラミングの書き方の効率化の手法にすぎないって話
つまり、継承という方法で差分だけ書いていけるようにすることによる効率化だけの話だってこと。
一方、普通にいわれているオブジェクト指向というのは単なるプログラミングの書き方の効率化の手法にすぎないって話
つまり、継承という方法で差分だけ書いていけるようにすることによる効率化だけの話だってこと。
219デフォルトの名無しさん
2022/04/24(日) 22:04:35.47ID:uNEChMqn 差分プログラミングならまあクソでしょうね
220デフォルトの名無しさん
2022/04/24(日) 22:06:02.75ID:22aYjb+I 今のオブジェクト指向継承あんま使わなくね?
221デフォルトの名無しさん
2022/04/24(日) 22:09:28.03ID:HH2OM4Tz むしろ継承はクソすぎて足を引っ張る
そのためGoやRustなどの言語ではclassを廃止というか最初から採用しなかった
そのためGoやRustなどの言語ではclassを廃止というか最初から採用しなかった
222デフォルトの名無しさん
2022/04/24(日) 22:27:33.03ID:L+Cr+2nK >>216
一言でいえば、プリミティブ型のことを言ってるんじゃなく(オブジェクトに)メソッドがぶら下がる粘着性を言っている。
いまどきの言語はRustやGoならstructで、Goならダックタイピング、Rustならクレートによるimplでそのデータを扱う機能実装を行うが
さらに考えを推し進め、D言語などでは(Pythonのself引数のように)データを引数に取るUFCと呼ばれる使い方も出来る。
関数が第一級の言語要素という考え(第一級関数)は、関数型言語には必要不可欠とされmap/reduceなどの高階関数でも
常用され、クロージャ・関数オブジェクト・無名関数と幅広く展開される。
OOPLとの明確な違いは、Classに対するオブジェクトにmethodという関数が束縛をされていないことである。もちろん上記の言語は
OOPSをサポートするが、それは多態を表現できるだけの意味しかない。
以上、D言語の宣伝です。
一言でいえば、プリミティブ型のことを言ってるんじゃなく(オブジェクトに)メソッドがぶら下がる粘着性を言っている。
いまどきの言語はRustやGoならstructで、Goならダックタイピング、Rustならクレートによるimplでそのデータを扱う機能実装を行うが
さらに考えを推し進め、D言語などでは(Pythonのself引数のように)データを引数に取るUFCと呼ばれる使い方も出来る。
関数が第一級の言語要素という考え(第一級関数)は、関数型言語には必要不可欠とされmap/reduceなどの高階関数でも
常用され、クロージャ・関数オブジェクト・無名関数と幅広く展開される。
OOPLとの明確な違いは、Classに対するオブジェクトにmethodという関数が束縛をされていないことである。もちろん上記の言語は
OOPSをサポートするが、それは多態を表現できるだけの意味しかない。
以上、D言語の宣伝です。
223デフォルトの名無しさん
2022/04/25(月) 00:02:30.63ID:m7DPUXtY >>222
> Rustならクレートによるimplで
ちょっと惜しい
『トレイトによるimpl』が正しい
その後にD言語は更に進んでいるとの宣伝と書いてあるようだが
Rustにも当てはまることばかりなので違いがよくわからない
> Rustならクレートによるimplで
ちょっと惜しい
『トレイトによるimpl』が正しい
その後にD言語は更に進んでいるとの宣伝と書いてあるようだが
Rustにも当てはまることばかりなので違いがよくわからない
224デフォルトの名無しさん
2022/04/25(月) 00:27:04.32ID:GF+5hMbb DのUFCSは任意の関数に適用できるけど
Rustは第一引数がselfなassociated functionだけだよね
Rustは第一引数がselfなassociated functionだけだよね
225デフォルトの名無しさん
2022/04/25(月) 00:33:35.96ID:sDr1xuuT typescriptでclassを使わないでやったときに無限にf(g(h(x)))みたいに書いたなあ
tsにもほしいわ
tsにもほしいわ
226デフォルトの名無しさん
2022/04/25(月) 00:34:27.96ID:LqFJ2u6k どうしてDって今のgoやrustみたいにならなかったの?
227デフォルトの名無しさん
2022/04/25(月) 00:35:54.45ID:dSrWC4pO DのUFCSもメンバ関数やネスト関数などには適用できない制限がある
228デフォルトの名無しさん
2022/04/25(月) 00:39:26.69ID:cR9N6Lw+ UFCSなんかなくても最初の引数の型に対してメソッド定義するだけで目的達成可能
グローバル名関数を増やして名前空間を汚さずともその型のメソッド定義がベター
グローバル名関数を増やして名前空間を汚さずともその型のメソッド定義がベター
229デフォルトの名無しさん
2022/04/25(月) 00:47:38.84ID:pTvSoM83 >>225
GoやRustはclassなんか無くても各型に対してメソッドを定義できるのでそういうことを招かずに済むのよ
UFCSのメリットはメソッドチェーン記法が可能になることだから最初からメソッドを定義すればいいものね
GoやRustはclassなんか無くても各型に対してメソッドを定義できるのでそういうことを招かずに済むのよ
UFCSのメリットはメソッドチェーン記法が可能になることだから最初からメソッドを定義すればいいものね
230デフォルトの名無しさん
2022/04/25(月) 00:55:00.32ID:sDr1xuuT231デフォルトの名無しさん
2022/04/25(月) 00:58:26.21ID:loxtuGTD232デフォルトの名無しさん
2022/04/25(月) 01:21:04.73ID:W8ZZnspt Nim言語にもUFCSがあって関数だけじゃなくtemplateやmacroも関数と同じ文法で呼び出せるのでUFCSが使える。ただし第一引数がuntypedだとmethod call syntaxが使えない。
UFCSのメリットは標準ライブラリとか他人の書いたコードにある型とプロシージャの組に対してもmethod call syntaxが使えることだと思う。
第一引数が組み込み型のプロシージャを定義すれば組み込み型に対してmethod call syntaxが使える。
ライブラリAで定義されている型Xのオブジェクトに対してまったく別に書かれたライブラリBで定義されているgenericsなプロシージャをmethod call syntaxで呼ぶ出すことができる。
UFCSのメリットは標準ライブラリとか他人の書いたコードにある型とプロシージャの組に対してもmethod call syntaxが使えることだと思う。
第一引数が組み込み型のプロシージャを定義すれば組み込み型に対してmethod call syntaxが使える。
ライブラリAで定義されている型Xのオブジェクトに対してまったく別に書かれたライブラリBで定義されているgenericsなプロシージャをmethod call syntaxで呼ぶ出すことができる。
233デフォルトの名無しさん
2022/04/25(月) 01:28:09.79ID:5Adpat0k234デフォルトの名無しさん
2022/04/25(月) 01:31:48.98ID:W8ZZnspt >>228
オーバーロードがある言語なら引数が一つ以上あるグローバル関数を追加しても引数さえ異なれば同名の関数をグローバルに追加できる。
UFCSとオーバーロードがある言語では第一引数がFoo型の関数を定義するのはFoo型にメソッドを定義することとほぼ同じとみなせる。
オーバーロードがある言語なら引数が一つ以上あるグローバル関数を追加しても引数さえ異なれば同名の関数をグローバルに追加できる。
UFCSとオーバーロードがある言語では第一引数がFoo型の関数を定義するのはFoo型にメソッドを定義することとほぼ同じとみなせる。
235デフォルトの名無しさん
2022/04/25(月) 01:35:52.92ID:V8fkjI23 つまりUFCSは汚染でありリスク要因
定義していないメソッドが使えることになってしまう
UFCSがなくとも明確にその型に対して定義されたメソッドのみ対象で実用上困ることはない
定義していないメソッドが使えることになってしまう
UFCSがなくとも明確にその型に対して定義されたメソッドのみ対象で実用上困ることはない
236デフォルトの名無しさん
2022/04/25(月) 01:46:11.22ID:GF+5hMbb モジュールがあるなら関数のimport有無でどの関数が呼び出されるか制御できたりしないの?
Rustのtraitのuseみたいに
Rustのtraitのuseみたいに
237デフォルトの名無しさん
2022/04/25(月) 01:55:33.57ID:W8ZZnspt >>235
UFCSのあるNim言語をよく使っているけど特に問題無く使えてるよ。
ライブラリAで定義された型を第一引数に持つ関数をライブラリAの外で定義してもgenerics/template/macroなど使わない限りライブラリAから呼び出せないし、ライブラリA内で使われている関数を外から勝手に上書きできない。
メソッド呼び出ししているように見えてもライブラリA内のプライベートな変数/関数はライブラリの外からアクセスできない。
method call syntaxってa.fooMethod(b)って書いてあるのを
コンパイラがfooMethod(a, b)という関数呼び出しとして解釈しているだけでなんのリスクもないよ。
第一引数にFoo型のオブジェクトをとる関数を定義してもオーバーロードがあるのでFoo型を使わない人には何の影響も与えない
UFCSのあるNim言語をよく使っているけど特に問題無く使えてるよ。
ライブラリAで定義された型を第一引数に持つ関数をライブラリAの外で定義してもgenerics/template/macroなど使わない限りライブラリAから呼び出せないし、ライブラリA内で使われている関数を外から勝手に上書きできない。
メソッド呼び出ししているように見えてもライブラリA内のプライベートな変数/関数はライブラリの外からアクセスできない。
method call syntaxってa.fooMethod(b)って書いてあるのを
コンパイラがfooMethod(a, b)という関数呼び出しとして解釈しているだけでなんのリスクもないよ。
第一引数にFoo型のオブジェクトをとる関数を定義してもオーバーロードがあるのでFoo型を使わない人には何の影響も与えない
238デフォルトの名無しさん
2022/04/25(月) 02:05:19.36ID:B7syBDSL D言語のプロジェクト見て半笑いになるのやめてさしあげろ
239デフォルトの名無しさん
2022/04/25(月) 02:06:16.28ID:W8ZZnspt >>236
Nim言語だとimportするときにfrom std/strutils import `%`みたいに特定の型/関数だけをインポートすることができるよ。
もし同じ名前で同じ引数の関数が複数定義されている場合は関数名の前に"モジュルー名."をつけないとコンパイルエラーになる。
Nim言語だとimportするときにfrom std/strutils import `%`みたいに特定の型/関数だけをインポートすることができるよ。
もし同じ名前で同じ引数の関数が複数定義されている場合は関数名の前に"モジュルー名."をつけないとコンパイルエラーになる。
240デフォルトの名無しさん
2022/04/25(月) 02:34:25.81ID:z8DQnMuR 結局UFCSは不要だよな
メソッド的に使いたいならば最初からその型にメソッドを生やせばよいだけ
必要ならばジェネリックに定義すれば複数の型に同時にメソッドを生やせる
わざわざグローバル関数にしておいてからメソッド的に使えます!とかメリットを一切感じない
メソッド的に使いたいならば最初からその型にメソッドを生やせばよいだけ
必要ならばジェネリックに定義すれば複数の型に同時にメソッドを生やせる
わざわざグローバル関数にしておいてからメソッド的に使えます!とかメリットを一切感じない
241デフォルトの名無しさん
2022/04/25(月) 02:47:04.24ID:W8ZZnspt >>240
標準ライブラリにある型とか他人のgithubリポジトリにあるライブラリにも自由にメソッド追加できるの?
ジェネリックにする必要が無いときでもジェネリックにしないとメソッドはやせないの?
Nim言語にはそもそもC++のメンバ関数みたいなのが無くて、第一引数がFoo型の関数がFoo型のメソッドの代わりみたいになっている。
標準ライブラリにある型とか他人のgithubリポジトリにあるライブラリにも自由にメソッド追加できるの?
ジェネリックにする必要が無いときでもジェネリックにしないとメソッドはやせないの?
Nim言語にはそもそもC++のメンバ関数みたいなのが無くて、第一引数がFoo型の関数がFoo型のメソッドの代わりみたいになっている。
242デフォルトの名無しさん
2022/04/25(月) 03:05:01.71ID:hhhqUz2p243デフォルトの名無しさん
2022/04/25(月) 03:21:57.26ID:FFLrto9L244デフォルトの名無しさん
2022/04/25(月) 04:39:58.47ID:W8ZZnspt 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という文法でも関数を呼べる。括弧がないので引数が複雑な式にならなければ書きやすくて読みやすいよ。
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という文法でも関数を呼べる。括弧がないので引数が複雑な式にならなければ書きやすくて読みやすいよ。
245デフォルトの名無しさん
2022/04/25(月) 05:29:11.29ID:d+UJIvmE246デフォルトの名無しさん
2022/04/25(月) 08:12:23.26ID:7gaqSdm4 >>225
js/tsなら言語仕様拡張せんでも関数合成だろう。
js/tsなら言語仕様拡張せんでも関数合成だろう。
247デフォルトの名無しさん
2022/04/25(月) 08:55:43.85ID:VjXpH6fC248デフォルトの名無しさん
2022/04/25(月) 11:59:33.54ID:QEeStXPn >>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();
既存の型にもメソッド追加できるよ
例えば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();
249デフォルトの名無しさん
2022/04/25(月) 12:16:38.60ID:VSqj5wTk 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();
}
// メソッド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();
}
250デフォルトの名無しさん
2022/04/25(月) 12:41:05.03ID:GF+5hMbb 既存の型へのメソッド追加はプロトタイプ汚染とか言われて忌避されてるよね
他モジュールへの影響の出ない形でメソッド追加する手法が望ましい
他モジュールへの影響の出ない形でメソッド追加する手法が望ましい
251デフォルトの名無しさん
2022/04/25(月) 12:53:37.30ID:BAh3CRfm >>250
JavaScriptはプロトタイプがグローバルに書き換わり全てのモジュールに適用されるためだな
一方でRustはメソッドを追加するにはトレイトを用意することが必要、そしてトレイトが宣言/useされている空間のみ有効、なので汚染が生じず安全
JavaScriptはプロトタイプがグローバルに書き換わり全てのモジュールに適用されるためだな
一方でRustはメソッドを追加するにはトレイトを用意することが必要、そしてトレイトが宣言/useされている空間のみ有効、なので汚染が生じず安全
252デフォルトの名無しさん
2022/04/25(月) 13:16:10.20ID:GF+5hMbb >>251
型を定義した以外のcrateでメソッドを追加するためにはtraitが必要、が正しいかな
メソッドを追加するためにはtraitなしのimplを書く方法もあるが、これをできるのは型を定義したcrateだけに制限されているので他crateで定義を追加して汚染することはない
とまあRustの事情は知ってるんだけど、他の言語ではどうなってるのかが知りたかった
型を定義した以外のcrateでメソッドを追加するためにはtraitが必要、が正しいかな
メソッドを追加するためにはtraitなしのimplを書く方法もあるが、これをできるのは型を定義したcrateだけに制限されているので他crateで定義を追加して汚染することはない
とまあRustの事情は知ってるんだけど、他の言語ではどうなってるのかが知りたかった
253デフォルトの名無しさん
2022/04/25(月) 13:16:45.41ID:BiVUGBJZ 知ってるけど今そんな話してるんじゃないんだわ
254デフォルトの名無しさん
2022/04/25(月) 13:22:02.11ID:UiNQmXr4 JavaScriptで脆弱性を生みまくってさんざん問題視されたんだから、いまどきそんな汚染が起こる新しい言語は一つもないよ
255デフォルトの名無しさん
2022/04/25(月) 13:30:18.88ID:5sWL1sIQ256デフォルトの名無しさん
2022/04/25(月) 13:46:50.81ID:BiVUGBJZ 発端になったD言語のUFCSハブられてるのなんで?
257デフォルトの名無しさん
2022/04/25(月) 13:58:52.24ID:TLzTt+1G258デフォルトの名無しさん
2022/04/25(月) 14:21:14.88ID:UiNQmXr4 >>256
nimには採用されてるし、調べてみるとC++にも導入の提案がされてるみたいだから、それほどハブられてないのでは?
Bjarne Stroustrupの提案: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4174.pdf
Herb Sutterの提案: https://isocpp.org/files/papers/N4165.pdf
nimには採用されてるし、調べてみるとC++にも導入の提案がされてるみたいだから、それほどハブられてないのでは?
Bjarne Stroustrupの提案: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4174.pdf
Herb Sutterの提案: https://isocpp.org/files/papers/N4165.pdf
259デフォルトの名無しさん
2022/04/25(月) 14:24:50.73ID:S1pQjSZ5 UFCSはメソッド名空間の汚染
だから採用しないのが正解
だから採用しないのが正解
260デフォルトの名無しさん
2022/04/25(月) 15:13:03.71ID:B7syBDSL 結局メソッド生やしたいんじゃなくてプライベートメンバにアクセスしたいだけなんだよな
261デフォルトの名無しさん
2022/04/25(月) 15:22:37.45ID:sJr09n4H262デフォルトの名無しさん
2022/04/25(月) 15:28:02.41ID:VN4zR5UM263デフォルトの名無しさん
2022/04/25(月) 15:36:09.96ID:3MmiqOlF いやトレイトで似たようなメソッドがたくさんぶら下がって汚染されてますよね?それが更にハードルが上がる一因になってる
264デフォルトの名無しさん
2022/04/25(月) 15:46:00.36ID:ZqKc7K5J265デフォルトの名無しさん
2022/04/25(月) 15:55:06.48ID:UiNQmXr4266デフォルトの名無しさん
2022/04/25(月) 16:00:14.18ID:xSu4vg9o UFCSは強制汚染
関数として必要なだけなのにメソッド名空間を汚染
メソッドとして必要なだけなのに関数名空間を汚染
だから採用する言語がほとんどない
関数として必要なだけなのにメソッド名空間を汚染
メソッドとして必要なだけなのに関数名空間を汚染
だから採用する言語がほとんどない
267デフォルトの名無しさん
2022/04/25(月) 16:01:50.20ID:3MmiqOlF >>264
イヤイヤ、そんなのほとんどの言語でimportやincludeと同じで更に言えば、use std::io::prelude::*;みたいにRustでもPythonでも
誤ったやり方とされてるワイルドカードだって使えるんだから一緒でしょ。明確に言うなら”汚染は起きず”ではなく、汚染は当然ながら
useするのだから起きている。無意味にuseしない*を使わないというのは言語仕様や特性じゃなく規約だよ
イヤイヤ、そんなのほとんどの言語でimportやincludeと同じで更に言えば、use std::io::prelude::*;みたいにRustでもPythonでも
誤ったやり方とされてるワイルドカードだって使えるんだから一緒でしょ。明確に言うなら”汚染は起きず”ではなく、汚染は当然ながら
useするのだから起きている。無意味にuseしない*を使わないというのは言語仕様や特性じゃなく規約だよ
268デフォルトの名無しさん
2022/04/25(月) 16:08:08.42ID:UiNQmXr4 スコープやシンボルが限定されてるのに汚染と呼ぶのはおかしい
269デフォルトの名無しさん
2022/04/25(月) 16:09:49.70ID:Ld005CpI270デフォルトの名無しさん
2022/04/25(月) 16:18:54.63ID:EM9X2zpO >>264
ほんとRustニワカ嫌いだわ、「明示的にuse Traitしない限り」なんて良くそんな詭弁が言えるわ。どう考えても一緒でしょう
だからPythonだってas構文使えますし、D言語だってimport std.stdio : writeln, writefln;で選択的インポートできるでしょw
ほんとRustニワカ嫌いだわ、「明示的にuse Traitしない限り」なんて良くそんな詭弁が言えるわ。どう考えても一緒でしょう
だからPythonだってas構文使えますし、D言語だってimport std.stdio : writeln, writefln;で選択的インポートできるでしょw
271デフォルトの名無しさん
2022/04/25(月) 16:21:12.54ID:PqJDEf6z Rust聖戦士がワラワラ
他の言語のスタイルはすべてアンチパターン
他の言語のスタイルはすべてアンチパターン
272デフォルトの名無しさん
2022/04/25(月) 16:23:34.31ID:NxLuUrhR >>269
Underscore importなんてRustがトレイトのシンボルが別のシンボルと競合する可能性がある場合、つまりRustが破綻しないように
特別にあるだけで、汚染の低下のための機能ではないぜ。ここで汚染といってるのは無暗にメソッドが追加される事。
(回避策が仮に無ければ)衝突することはもはや、言語的な欠陥だ
Underscore importなんてRustがトレイトのシンボルが別のシンボルと競合する可能性がある場合、つまりRustが破綻しないように
特別にあるだけで、汚染の低下のための機能ではないぜ。ここで汚染といってるのは無暗にメソッドが追加される事。
(回避策が仮に無ければ)衝突することはもはや、言語的な欠陥だ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 [蚤の市★]
- 地震 [Hitzeschleier★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 [蚤の市★]
- 【話題】好きな鍋は?! 「寄せ鍋」「キムチ鍋」「水炊き」「もつ鍋」「豆乳鍋」「ちゃんこ鍋」「ごま坦々鍋」「トマト鍋」 [ひぃぃ★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 【地震】 茨城 栃木 埼玉 千葉 震度4 [KingFisherは魚じゃないよ★]
- もうなんか最近の日本人って大災害について"諦めてる"よな、災害が起きても助け合う精神がないもんな [904880432]
- 【悲報】人気女性落語家、気づいてしまう…「将棋をみてたら女性にのみ女流棋士などと"女"をつけられる、くだんな笑」 [339712612]
- J( 'ー`)し「で、アンタなんで働かないの?」 ワイ👶「理由は2つありまして~」🏡
- ムミィ🥺いる❓🏡
- おさかなさんあつまれえ
- 自民党、金融所得課税30%で決定か。株を売ったり、配当金が入ると国が30%持って行きます [838847604]
