スレタイ(順番は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:KG26dcth192デフォルトの名無しさん
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が破綻しないように
特別にあるだけで、汚染の低下のための機能ではないぜ。ここで汚染といってるのは無暗にメソッドが追加される事。
(回避策が仮に無ければ)衝突することはもはや、言語的な欠陥だ
273デフォルトの名無しさん
2022/04/25(月) 16:27:35.43ID:KFrD7nO2 使われる空間に名前が載ることを汚染とは言わない
使わない空間に名前が載ることを汚染と言う
UFCSが汚染と言われる理由は
関数として使いメソッドとして使わなくてもメソッド名空間に載り
メソッドとして使い関数として使わなくても関数名空間に載るためだと考えられる
使わない空間に名前が載ることを汚染と言う
UFCSが汚染と言われる理由は
関数として使いメソッドとして使わなくてもメソッド名空間に載り
メソッドとして使い関数として使わなくても関数名空間に載るためだと考えられる
274デフォルトの名無しさん
2022/04/25(月) 16:34:56.30ID:NxLuUrhR >>273
Rustだって、fn中にuse出来るわけでそれはほかの言語でも同じ。そう言う事はあまりしないけども、多くの言語で同じように”使われる空間”だけに載る
Rustだって、fn中にuse出来るわけでそれはほかの言語でも同じ。そう言う事はあまりしないけども、多くの言語で同じように”使われる空間”だけに載る
275デフォルトの名無しさん
2022/04/25(月) 16:36:52.48ID:UB00PZWU RustがUFCSを採用しないのは単に、パーサーをオブジェクトを先して作り直すと(C言語にわざと似せてる)見た目が変わってしまうし
パーサーに手を入れるということは苦労してきたコンパイル速度が低下してしまう恐れがあるという事だけ
パーサーに手を入れるということは苦労してきたコンパイル速度が低下してしまう恐れがあるという事だけ
276デフォルトの名無しさん
2022/04/25(月) 16:37:55.90ID:ZcyGlXND277デフォルトの名無しさん
2022/04/25(月) 16:39:18.63ID:Ktg4GXmX278デフォルトの名無しさん
2022/04/25(月) 16:40:19.19ID:WnCW0ZaS そもそもUFCSは汚染だなんてここ以外で聞いたことがないんだけど
279デフォルトの名無しさん
2022/04/25(月) 16:44:16.36ID:LpKzCT90 >>273
UFCSとやらはムダに汚染しまくるクソな機能だな
UFCSとやらはムダに汚染しまくるクソな機能だな
280デフォルトの名無しさん
2022/04/25(月) 16:46:59.96ID:EmEbSMmo Rustの宣伝はこんな匿名掲示板じゃなくQiitaとかに書いてほしいな
その反応で実際に正論なのか暴論なのか明らかになるだろう
その反応で実際に正論なのか暴論なのか明らかになるだろう
281デフォルトの名無しさん
2022/04/25(月) 16:49:37.58ID:ZJMHR0C4 UFCSという汚染機能をサポートしているプログラミング言語はDとNim
埋もれた言語となったのも当然の結果
埋もれた言語となったのも当然の結果
282デフォルトの名無しさん
2022/04/25(月) 16:50:47.89ID:WnCW0ZaS 汚染だとか書いてるのは全部ガイジだな
283デフォルトの名無しさん
2022/04/25(月) 17:00:21.10ID:AtUdeTix ほとんど全ての言語がUFCSを採用していない理由はメリットが無いからだと思う
そして無条件に二つの名前空間に登録されてしまうことを汚染と呼ぶかどうかは置いておくとしても本末転倒の方法かなとは感じる
そして無条件に二つの名前空間に登録されてしまうことを汚染と呼ぶかどうかは置いておくとしても本末転倒の方法かなとは感じる
284デフォルトの名無しさん
2022/04/25(月) 17:01:11.49ID:XBfmr4Gp >>275
さらにRustは実装としてUFCSを別の意味で誤って使っていた過去がある、::パス構文で混乱を引き起こして曖昧性が起きた。2017年頃でそんなに優れた開発者がおらずなんとなく実装していた時期だな、いつもはRustは論文がしっかりしてると嘯くのに
さらにRustは実装としてUFCSを別の意味で誤って使っていた過去がある、::パス構文で混乱を引き起こして曖昧性が起きた。2017年頃でそんなに優れた開発者がおらずなんとなく実装していた時期だな、いつもはRustは論文がしっかりしてると嘯くのに
285デフォルトの名無しさん
2022/04/25(月) 17:02:36.89ID:+vVlR4Vp やっぱりUFCSは悪だな
286デフォルトの名無しさん
2022/04/25(月) 17:12:43.76ID:PqJDEf6z 次スレはもうRust消そう
話にならん
話にならん
287デフォルトの名無しさん
2022/04/25(月) 17:19:42.27ID:o63SmoRM288デフォルトの名無しさん
2022/04/25(月) 17:26:05.13ID:PqJDEf6z どっちでもいいよ
信者だろうがアンチだろうがあらゆる話題がRustとの比較になって宗教戦争化するのが馬鹿馬鹿しすぎる
Rustの話題はスレ違いなのでRust叩きもスレ違いとする、問題解決
信者だろうがアンチだろうがあらゆる話題がRustとの比較になって宗教戦争化するのが馬鹿馬鹿しすぎる
Rustの話題はスレ違いなのでRust叩きもスレ違いとする、問題解決
289デフォルトの名無しさん
2022/04/25(月) 17:26:35.89ID:4xqZqLmv ほぼ全ての言語がUFCSを採用していない
しかしUFCSが叩かれるとなぜか必死にRustを攻撃してくれる
一石二鳥と言えるだろう
しかしUFCSが叩かれるとなぜか必死にRustを攻撃してくれる
一石二鳥と言えるだろう
290デフォルトの名無しさん
2022/04/25(月) 17:38:49.59ID:63+wFQ6i C++委員会での議論でもメンバ関数と非メンバ関数で衝突したときにどう解決するかで割れて否決されたみたいだし、なかなか難しそうだね
291デフォルトの名無しさん
2022/04/25(月) 17:51:06.52ID:BSwMXBpD 考えてみたがUFCSは完全に不要っぽい
まずメソッドとして使いたいものは最初からメソッドとして書けばよい
次に外部の関数をどうしてもメソッドとして使いたいならばその外部関数を呼び出すメソッドを追加すればよい
まずメソッドとして使いたいものは最初からメソッドとして書けばよい
次に外部の関数をどうしてもメソッドとして使いたいならばその外部関数を呼び出すメソッドを追加すればよい
■ このスレッドは過去ログ倉庫に格納されています
