スレタイ以外の言語もok
前スレ
次世代言語Part8[Haskell Rust Kotlin TypeScript]
http://mevius.5ch.net/test/read.cgi/tech/1512137301/
次世代言語9[Haskell Rust Kotlin TypeScript Dart]
■ このスレッドは過去ログ倉庫に格納されています
2018/03/06(火) 10:09:15.60ID:x/Au45rc
2018/03/07(水) 15:25:36.37ID:n65ilySP
jsのファミコンエミュを苦労してrust(→webassembly)に書き直してもぜんぜん速くならないという悲しい現実。
ハマるユースケース少なそう。
ハマるユースケース少なそう。
52デフォルトの名無しさん
2018/03/07(水) 16:03:24.12ID:vL0QsqKL >>51
憶測でしがないが、それはRustやwasmが遅いというわけではなくて
ファミコン程度の演算ならJSだろうがwasmだろうがパフォーマンス的には大差なくて
それよりもwasmとJSでデータをやり取りする際のコピーのコストが高くついてるんじゃない?
3Dゲームの演算とかもっと重い処理じゃない限りwasmのメリットが活きてこないんじゃ…
もしくは、将来的にwasmから直接DOM操作ができるようになれば…
憶測でしがないが、それはRustやwasmが遅いというわけではなくて
ファミコン程度の演算ならJSだろうがwasmだろうがパフォーマンス的には大差なくて
それよりもwasmとJSでデータをやり取りする際のコピーのコストが高くついてるんじゃない?
3Dゲームの演算とかもっと重い処理じゃない限りwasmのメリットが活きてこないんじゃ…
もしくは、将来的にwasmから直接DOM操作ができるようになれば…
2018/03/07(水) 16:26:53.26ID:lIV1PIoV
GoとRustはバランスが悪いんだよな
ラムダ式とかジェネリクスとかGCがあればこそ手軽に使えるものなのに
GoはGC有るのにどちらも無くて
RustはどちらもあるけどGCが無いから不便
ラムダ式とかジェネリクスとかGCがあればこそ手軽に使えるものなのに
GoはGC有るのにどちらも無くて
RustはどちらもあるけどGCが無いから不便
2018/03/07(水) 16:37:37.77ID:rBtvNRXK
RustにもARCはあるんだろ
まあでもARCはゴミのようだという意見には一理あるわな
まあでもARCはゴミのようだという意見には一理あるわな
55デフォルトの名無しさん
2018/03/07(水) 16:48:10.62ID:vL0QsqKL2018/03/07(水) 17:13:59.44ID:8jwTNUb7
Rustなんてmozillaに金掴まされた奴しか見向きもしてない何にも使えない言語が
次世代言語とか笑わせんでくれ
次世代言語とか笑わせんでくれ
2018/03/07(水) 17:19:05.18ID:mYeM/2on
まだ言ってんのかよw
2018/03/07(水) 17:35:57.09ID:8jwTNUb7
実際誰がどこで使ってるのか教えてくれ
モジラの金掴まされた企業以外で
モジラの金掴まされた企業以外で
2018/03/07(水) 18:15:46.78ID:EDSn5kWw
googleがxi-editor作ってたり、
後railcarってdocker代替作ってたり。
どっちもあんまり魅力的じゃないないな。
ゲームエンジンがrustで書いたらどうなるか興味ある。
後railcarってdocker代替作ってたり。
どっちもあんまり魅力的じゃないないな。
ゲームエンジンがrustで書いたらどうなるか興味ある。
2018/03/07(水) 18:19:20.11ID:EDSn5kWw
2018/03/07(水) 18:50:32.83ID:8jwTNUb7
2018/03/07(水) 19:11:36.71ID:QbuNtZtf
>>59
ゲーム分野もUnityやUnrealでニーズ満たしてるし、それ以外のものは今さら流行らんでしょ
ゲーム分野もUnityやUnrealでニーズ満たしてるし、それ以外のものは今さら流行らんでしょ
2018/03/07(水) 19:14:43.72ID:AePhkh+C
>>41
コンパイル速度が早ければスループットが上がるんだから、労力の定義次第だろ。
コンパイル速度が早ければスループットが上がるんだから、労力の定義次第だろ。
2018/03/07(水) 19:15:35.75ID:487L5ZU0
>>59
こいつ反応楽しみたいだけの荒らしだから触れるな
こいつ反応楽しみたいだけの荒らしだから触れるな
2018/03/07(水) 19:17:10.88ID:487L5ZU0
66デフォルトの名無しさん
2018/03/07(水) 20:42:19.89ID:vL0QsqKL2018/03/07(水) 20:57:01.38ID:L0uTy1l9
https://taiyaq.com/contents/VXd2aV04Gr1mLC8e3AbEg4XKly
Dartの言語ツアーみてるけど、結構言語仕様が辛い。
変数宣言がC由来の「型 変数名」なのがつらい。
GoとかTypeScriptみたいに変数宣言は「変数名 型」にして欲しいわ
あと内部コードがutf16というのが気になる。jsより後発なのにjsと同じ仕様って。
Flutterは良さげなのになぁ。
Dartの言語ツアーみてるけど、結構言語仕様が辛い。
変数宣言がC由来の「型 変数名」なのがつらい。
GoとかTypeScriptみたいに変数宣言は「変数名 型」にして欲しいわ
あと内部コードがutf16というのが気になる。jsより後発なのにjsと同じ仕様って。
Flutterは良さげなのになぁ。
2018/03/07(水) 21:02:27.65ID:ZH5MFU7m
RustがC++の代替って枠だと先にも出てる大規模ゲームなんだが、個人やインディーズなら大手エンジンでいいし社内独自エンジンだとこれまでの資産的にツールもゲーム本体も言語変える必要なくない?みたいな所がなぁ
69デフォルトの名無しさん
2018/03/07(水) 21:13:00.74ID:xaPv5Ark 気軽に書くならswiftを使うかな
2018/03/07(水) 21:18:56.44ID:L0uTy1l9
2018/03/07(水) 21:24:30.78ID:Fw456RXb
今rustで書いてるよ、勿論mozilla全く関係無い
映像系のバックエンドでは結構使ってる情報見るけどな
映像系のバックエンドでは結構使ってる情報見るけどな
2018/03/07(水) 21:51:29.88ID:hDt5Kv7q
rustは理論好きで実際はコードほとんど書かないような連中に人気あるだけだろ。
ゼロコスト抽象化カッケーとかそういう層。
ゼロコスト抽象化カッケーとかそういう層。
2018/03/07(水) 21:58:39.87ID:ZH5MFU7m
>>70
ヒープ周りは言う程魔法みたいな事をしてる訳ではないよ
どこまでいってもコンパイル時の制限をカッツカツにして開放を保証するって話だし
iotもスマホも(もちろんゲームも)クロスプラットフォームしたくて大変なのにそれぞれc++向けに書かれてるsdkラップする?っていう
オープン規格やらそういうsdkがrust向けを公式で出すようになれば採用も出てくるとは思うけどね
ヒープ周りは言う程魔法みたいな事をしてる訳ではないよ
どこまでいってもコンパイル時の制限をカッツカツにして開放を保証するって話だし
iotもスマホも(もちろんゲームも)クロスプラットフォームしたくて大変なのにそれぞれc++向けに書かれてるsdkラップする?っていう
オープン規格やらそういうsdkがrust向けを公式で出すようになれば採用も出てくるとは思うけどね
2018/03/07(水) 22:05:41.69ID:hDt5Kv7q
メモリ解放のタイミングが分からなくなるっつーのは基本的に
インスタンスを共有してる変数がいくつもあるから
ってのがrustの主張の根幹でしょ。
インスタンスを共有してる変数がいくつもあるから
ってのがrustの主張の根幹でしょ。
75デフォルトの名無しさん
2018/03/07(水) 22:21:07.09ID:zWLX9kTq わたすもrustで書いてるよ
webだけど
メインブラウザがファイヤーフォックスだからモジラの手先かもしれん
webだけど
メインブラウザがファイヤーフォックスだからモジラの手先かもしれん
2018/03/07(水) 22:26:35.72ID:4hpZk16v
まあrust使ってる時点でモジラの手先だしな
2018/03/07(水) 22:26:48.78ID:rBtvNRXK
実行時に参照カウントを増減するのは、実行しないとわからない場合だけにしろ
コンパイル時にわかることを実行時にチェックするな
これはRustだけでなく静的型がさんざん主張していたこと
コンパイル時にわかることを実行時にチェックするな
これはRustだけでなく静的型がさんざん主張していたこと
2018/03/07(水) 23:11:58.32ID:LhUqstRW
2018/03/07(水) 23:22:26.51ID:TWVUeb1Y
Dart2で再始動って言ってるからDart4くらいで良くなるんじゃねw
Flutterはちょっと気になってる
Flutterはちょっと気になってる
2018/03/08(木) 00:02:08.17ID:XFDvKJyj
>>47
これでコード書く時間が逆に増えたらウケるな
これでコード書く時間が逆に増えたらウケるな
2018/03/08(木) 00:11:20.59ID:XFDvKJyj
>>79
死んでしまったAngularちゃんの悪口はやめろ
死んでしまったAngularちゃんの悪口はやめろ
2018/03/08(木) 02:29:26.18ID:to5KOUcv
2018/03/08(木) 12:46:52.68ID:XQ95i3sC
2018/03/08(木) 12:54:28.13ID:XQ95i3sC
>>71
結構使ってる情報見る(ソースなし)
結構使ってる情報見る(ソースなし)
85デフォルトの名無しさん
2018/03/08(木) 13:26:45.90ID:f+gZIHDW86デフォルトの名無しさん
2018/03/08(木) 13:27:26.60ID:f+gZIHDW 本格的なものを作ろうとすれば企業が関わらざるを得なくて現状ではどの企業もまだ様子見状態ってだけ
むしろGoogleがRustで実験的にエディタを作ってるってことは
Googleも採用を検討するくらいには注目してる言語ということ
むしろGoogleがRustで実験的にエディタを作ってるってことは
Googleも採用を検討するくらいには注目してる言語ということ
2018/03/08(木) 13:36:32.00ID:XQ95i3sC
2018/03/08(木) 13:55:25.73ID:sd0Mz8U9
Goも元々は20%ルールの産物じゃなかったっけ?
2018/03/08(木) 13:56:46.22ID:UjKWiNad
そだよ
てか、GoはRuby同様ガチ勢に嫌われすぎてて、なかなかカチッとしないね
てか、GoはRuby同様ガチ勢に嫌われすぎてて、なかなかカチッとしないね
2018/03/08(木) 14:07:05.39ID:XQ95i3sC
まじで。Go自体が20%ルールの産物なのは知らんかったわ
Goは初期のJava見てるような時代逆行感あるし、それが嫌われる原因だろうね
初期のJavaよりははるかにマシだけど
Goは初期のJava見てるような時代逆行感あるし、それが嫌われる原因だろうね
初期のJavaよりははるかにマシだけど
2018/03/08(木) 15:53:31.02ID:39/jgBm7
2018/03/08(木) 16:57:24.84ID:XQ95i3sC
ドワンゴや渋みたいな画質最悪回線ptptのプラットフォームの技術()なんて参考にならん
Youtubeとか嗶哩嗶哩とかネトフリくらいのプラットフォームが全く採用してない時点でお察しだろ
Youtubeとか嗶哩嗶哩とかネトフリくらいのプラットフォームが全く採用してない時点でお察しだろ
2018/03/08(木) 17:38:09.62ID:3H4xAb5h
アンチのいない言語ってあるんかな?
それって誰が見ても引っかかることがなくて無難で分かりやすい言語ってことだよね。
、、、、C言語かな?
いやーないか。Pythonかな?
それって誰が見ても引っかかることがなくて無難で分かりやすい言語ってことだよね。
、、、、C言語かな?
いやーないか。Pythonかな?
2018/03/08(木) 18:00:05.39ID:gkfiSzw4
>>93
C 言語は基本だよね…
C 言語は基本だよね…
2018/03/08(木) 18:05:00.88ID:cve6DJMj
マクロ中途半端じゃん
2018/03/08(木) 18:06:09.58ID:My+VxY9/
Goが嫌われるのは、意識高い系の人間が欲しがる機能をオミットしたからだろ。
欲しがるやつはバカぐらいの事言ってるし。
学者と機械屋が仲悪いのと同じようなもんで。
欲しがるやつはバカぐらいの事言ってるし。
学者と機械屋が仲悪いのと同じようなもんで。
2018/03/08(木) 20:42:30.56ID:Qr0iRnUQ
機能をオミットする方向を示しただけでもgoは価値あるよ。
他の言語はバカみたいに機能を追加する方向しかみてなかったし。
他の言語はバカみたいに機能を追加する方向しかみてなかったし。
98デフォルトの名無しさん
2018/03/08(木) 20:50:41.00ID:OEgQLKAy 採用例提示しろって言われたから東証一部上場企業の採用例をいったらいったでまた難癖つけるね
グダグダ言ってないで自分が使わなきゃいいだけじゃん
それでもニコニコがRustでオリジナルファイルシステムまで作ってあのクソさってのはいろいろ思うところはある
よくもまあ10年近くも金をオフパコ会議に突っ込んでろくに鯖の整備もせずに来れたもんだ
グダグダ言ってないで自分が使わなきゃいいだけじゃん
それでもニコニコがRustでオリジナルファイルシステムまで作ってあのクソさってのはいろいろ思うところはある
よくもまあ10年近くも金をオフパコ会議に突っ込んでろくに鯖の整備もせずに来れたもんだ
2018/03/08(木) 20:53:13.13ID:39/jgBm7
FacebookのMononokeとかも除外なのかな
有名所が軒並み使わないと認めないんだろうな、いやそれでも否定するか
有名所が軒並み使わないと認めないんだろうな、いやそれでも否定するか
100デフォルトの名無しさん
2018/03/08(木) 21:19:24.31ID:3H4xAb5h >>96
オミット大事だよね。バージョンを重ねていくと機能追加しかできないから
最初の機能は絞ったほうがいい。
Goにはきっと既存にはない独自発想のジェネリクス的な物が搭載されるであろう。
賛否両論なやつが。
オミット大事だよね。バージョンを重ねていくと機能追加しかできないから
最初の機能は絞ったほうがいい。
Goにはきっと既存にはない独自発想のジェネリクス的な物が搭載されるであろう。
賛否両論なやつが。
101デフォルトの名無しさん
2018/03/08(木) 21:38:40.38ID:EsrBfKCX >>100
「例外を無くした。あれは大域ジャンプだ。行き先の見えないgotoだ。
フローが無茶苦茶になる、複数の戻り値返すから各自チェックするように。
複数の戻り値返せるからマジックナンバーとか返すなよ」
なんて、割り切りというより考え抜いたであろう仕様も、結構叩く人は叩くしな。
ジェネリクス的なものはどうなるんだろう。
正直型でのswitchでだいたい事足りてるし。
「例外を無くした。あれは大域ジャンプだ。行き先の見えないgotoだ。
フローが無茶苦茶になる、複数の戻り値返すから各自チェックするように。
複数の戻り値返せるからマジックナンバーとか返すなよ」
なんて、割り切りというより考え抜いたであろう仕様も、結構叩く人は叩くしな。
ジェネリクス的なものはどうなるんだろう。
正直型でのswitchでだいたい事足りてるし。
102デフォルトの名無しさん
2018/03/08(木) 21:46:19.70ID:to5KOUcv >>101
関数の引数にinterface{}型が入るのは良くない。これだけは是非とも改善したい
関数の引数にinterface{}型が入るのは良くない。これだけは是非とも改善したい
103デフォルトの名無しさん
2018/03/08(木) 21:52:55.87ID:EsrBfKCX >>102
何で?
コンパイルする時に誤りに気づかないとかそういう話?
void*が渡せるよりも、interface{}は実際には型持ってるからよほどマシな気が。
ジェネリクスしたらすごい数の関数が作られうるし、使い方の問題な気がするけどな。
そもそも継承という概念が希薄だから、ジェネリクスにしても幸せになれないと言うか、明示的に何らかのinterfaceを渡す方がマシだと思う。
Writer受ける関数みたいに。
何で?
コンパイルする時に誤りに気づかないとかそういう話?
void*が渡せるよりも、interface{}は実際には型持ってるからよほどマシな気が。
ジェネリクスしたらすごい数の関数が作られうるし、使い方の問題な気がするけどな。
そもそも継承という概念が希薄だから、ジェネリクスにしても幸せになれないと言うか、明示的に何らかのinterfaceを渡す方がマシだと思う。
Writer受ける関数みたいに。
104デフォルトの名無しさん
2018/03/08(木) 22:31:36.69ID:to5KOUcv105デフォルトの名無しさん
2018/03/08(木) 22:35:27.75ID:Qr0iRnUQ テストコード書くのは嫌だってだけだろどうせ。
106デフォルトの名無しさん
2018/03/08(木) 22:37:10.68ID:bpZjqWPW 例えば今、任意のオブジェクトを格納できるコンテナ
(二分木でもハッシュマップでもブルームフィルタでも)
のライブラリを作りたいとしよう
このライブラリに、初期化時に任意の型しか格納できないようにする
まあつまりJavaのList<T>みたいなことをしたいと考えたときに
Goでは型ごとにラッパをつくって実行時に動的にチェックする以外に実現方法がない
これをコンパイル時にチェックしたいという要望は自然と思うが?
(二分木でもハッシュマップでもブルームフィルタでも)
のライブラリを作りたいとしよう
このライブラリに、初期化時に任意の型しか格納できないようにする
まあつまりJavaのList<T>みたいなことをしたいと考えたときに
Goでは型ごとにラッパをつくって実行時に動的にチェックする以外に実現方法がない
これをコンパイル時にチェックしたいという要望は自然と思うが?
107デフォルトの名無しさん
2018/03/08(木) 22:46:42.29ID:bpZjqWPW つか自分で言ってて思ったがこれinterface{}が悪いとかじゃなくて
単純に高階型が欲しいってだけの話だわ
単純に高階型が欲しいってだけの話だわ
108デフォルトの名無しさん
2018/03/08(木) 22:51:14.55ID:to5KOUcv >>105
それもあるけどライブラリを提供するときに引数がinterface{}だとドキュメントに説明がいるでしょ。そういうのが嫌。
それもあるけどライブラリを提供するときに引数がinterface{}だとドキュメントに説明がいるでしょ。そういうのが嫌。
109デフォルトの名無しさん
2018/03/08(木) 23:04:06.14ID:y3Zn8R8X コンパイルが遅くなるので人間が出来る事は人間がやってください
110デフォルトの名無しさん
2018/03/08(木) 23:05:42.03ID:Qr0iRnUQ >>108
どっちにしろ実行時に起こる現象は説明が必要だろ。
確かに動的だったりテンプレートみたいなもんだと読むのきついなと思うことがあるけど
型で述べられる記述力なんてコード量の割にそんなに豊かなもんでもない。
俺は優良なドキュメトとテストコードのが上回ると思ってる。
goのinterfaceと比べて継承の方が入力の範囲を特定する能力は高まるけど、
同時に型情報をどっさりコンパイラと人間に読ませることになるわけだ。
割にあってると思わない。
どっちにしろ実行時に起こる現象は説明が必要だろ。
確かに動的だったりテンプレートみたいなもんだと読むのきついなと思うことがあるけど
型で述べられる記述力なんてコード量の割にそんなに豊かなもんでもない。
俺は優良なドキュメトとテストコードのが上回ると思ってる。
goのinterfaceと比べて継承の方が入力の範囲を特定する能力は高まるけど、
同時に型情報をどっさりコンパイラと人間に読ませることになるわけだ。
割にあってると思わない。
111デフォルトの名無しさん
2018/03/08(木) 23:10:55.43ID:yZMqeuJA やっぱり型クラスって神だわ
112デフォルトの名無しさん
2018/03/08(木) 23:12:19.99ID:bpZjqWPW113デフォルトの名無しさん
2018/03/08(木) 23:39:44.92ID:EsrBfKCX >>106
型に階層があるという事が前提になってる時点で、goに向いてないんじゃない?
型に階層があるという事が前提になってる時点で、goに向いてないんじゃない?
114デフォルトの名無しさん
2018/03/09(金) 00:31:33.39ID:IWA+PY9Z "is a" の機能をomitして "has a" とかmixinとかtraitを使う方向
115デフォルトの名無しさん
2018/03/09(金) 00:49:56.76ID:cqMSJuy/ >>110
ちょっと具体例が浮かばなくて適当な説明になるけど
ある引数に io.Reader もしくは io.Writer だけが来て欲しいって場合に
interface{}で一旦受け入れてどっちかじゃなかったらエラーって書くのがしんどいの。
引数にio.Reader | io.Writerって書けるようになれば
どっちかしか来ないことが保証されるからエラーハンドリングのコードが減る。
別に型システムがほしいとかじゃなくて
なんでも受け入れるinterface{}にしてしまう状況を避けたい。
ちょっと具体例が浮かばなくて適当な説明になるけど
ある引数に io.Reader もしくは io.Writer だけが来て欲しいって場合に
interface{}で一旦受け入れてどっちかじゃなかったらエラーって書くのがしんどいの。
引数にio.Reader | io.Writerって書けるようになれば
どっちかしか来ないことが保証されるからエラーハンドリングのコードが減る。
別に型システムがほしいとかじゃなくて
なんでも受け入れるinterface{}にしてしまう状況を避けたい。
116デフォルトの名無しさん
2018/03/09(金) 04:10:38.55ID:4sIM9IpC R | W より Or<R, W> が良い
記号を使うと記号アンチがうるさいし、継承と総称型を混同するやつもうるさい
記号を使うと記号アンチがうるさいし、継承と総称型を混同するやつもうるさい
117デフォルトの名無しさん
2018/03/09(金) 07:28:22.67ID:zhxSKG5B その場合 `Or<A, Or<B, C>>` と `Or<Or<A, B>, C>` の等価性どうする?って話しになるけどね
118デフォルトの名無しさん
2018/03/09(金) 08:17:11.21ID:kL3iaTSl119デフォルトの名無しさん
2018/03/09(金) 08:18:50.78ID:kL3iaTSl >>114
それはもう、今の定義されたinterfaceで充分だとなってしまうのでは?
それはもう、今の定義されたinterfaceで充分だとなってしまうのでは?
120デフォルトの名無しさん
2018/03/09(金) 09:19:07.89ID:Nb7UaI4p せめてパターンマッチくらいは入らんかなあ
型判定のためにifをダラダラ並べるようなコードなんて誰も嬉しく無いよ
:=もあるんだし構文糖衣まで全て拒否してる訳でも無いだろうに
型判定のためにifをダラダラ並べるようなコードなんて誰も嬉しく無いよ
:=もあるんだし構文糖衣まで全て拒否してる訳でも無いだろうに
121デフォルトの名無しさん
2018/03/09(金) 10:34:44.49ID:cqMSJuy/122デフォルトの名無しさん
2018/03/09(金) 10:59:00.45ID:kL3iaTSl >>120
switchは?
switchは?
123デフォルトの名無しさん
2018/03/09(金) 10:59:28.74ID:FTtEfiG6 >>105
静的型システム全否定だなお前のレス
静的型システム全否定だなお前のレス
124デフォルトの名無しさん
2018/03/09(金) 12:12:54.21ID:sqnwGWQK >>110
ドキュメントが常に最新の状態であることを静的に
保証する方法がない限りは静的型付けの型情報の方が信頼できる
腐ったドキュメントほど有害なものはない
腐らせるヤツが悪いとか言われそうだが
腐らせるのは自分ではなく同じチーム内の誰かだ
他人よりコンパイラの方が信頼できる
ドキュメントが常に最新の状態であることを静的に
保証する方法がない限りは静的型付けの型情報の方が信頼できる
腐ったドキュメントほど有害なものはない
腐らせるヤツが悪いとか言われそうだが
腐らせるのは自分ではなく同じチーム内の誰かだ
他人よりコンパイラの方が信頼できる
125デフォルトの名無しさん
2018/03/09(金) 12:43:31.33ID:kL3iaTSl interface{}を他の言語のobjectみたいなほんとに雑な受け方と一緒にしないでくれよ…。
実際に書いたら、結構使う場面が限られて来ることもわかるだろ…。
>>121
オーバーロードの禁止ははまあ必要悪だと思う。
型同士に階層が無いので、2種類のinterfaceを受ける関数があったとき、その2つともを実装している型に対して関数が定まらんのでは?
実際に書いたら、結構使う場面が限られて来ることもわかるだろ…。
>>121
オーバーロードの禁止ははまあ必要悪だと思う。
型同士に階層が無いので、2種類のinterfaceを受ける関数があったとき、その2つともを実装している型に対して関数が定まらんのでは?
126デフォルトの名無しさん
2018/03/09(金) 12:56:29.64ID:7FF0Q/q6 >>125
してねえよ
コンパイル時の型制約を足したいって話で、機能的にinterface{}への switch t.(type) で十分なのは承知の上
ifが並ぶっていってる奴はたぶんswitchで型判定できるの知らない気がする
してねえよ
コンパイル時の型制約を足したいって話で、機能的にinterface{}への switch t.(type) で十分なのは承知の上
ifが並ぶっていってる奴はたぶんswitchで型判定できるの知らない気がする
127デフォルトの名無しさん
2018/03/09(金) 13:27:20.95ID:RwDfRr6t 仮にGoにジェネリクスを実装するとしたらどこまで必要になるんだろ
共変性と反変性は必要?
部分適用は必要?
C++のメンバ型みたいなのは必要?
共変性と反変性は必要?
部分適用は必要?
C++のメンバ型みたいなのは必要?
128デフォルトの名無しさん
2018/03/09(金) 13:32:11.39ID:FTtEfiG6 >>127
そんな難しいのはいらねーから宣言的に書かせろ
そんな難しいのはいらねーから宣言的に書かせろ
129デフォルトの名無しさん
2018/03/09(金) 15:24:58.40ID:hv4D8Q9B >>125
object型と同じだと思ってたわ。具体的な違いとメリットを頼む。_φ(・_・
object型と同じだと思ってたわ。具体的な違いとメリットを頼む。_φ(・_・
130デフォルトの名無しさん
2018/03/09(金) 16:38:15.55ID:kL3iaTSl >>129
渡されたものをどう解釈するかの余地が他の言語と結構違う
たとえば、
type xxx struct {}
func (x xxx) foo(){}
func (x xxx) bar(){}
type Ixxx interface {
foo()
}
func (ix Ixxx) bar(){}
があったときに、interface{}で受けたものをアサーションでxxxとすると、xxxのbarが、
アサーションでIxxxとすると、Ixxxのbarが呼ばれる。
あくまで、すべての構造体はinterface{}を満たしているだけで、実際には型を持ってるし、
interface{}とIxxx{}も満たす範囲が違うだけで上位下位ではないし、構造体の型とも違うのでレシーバは別になる。
interface{}から派生したものではないって感じ。
渡されたものをどう解釈するかの余地が他の言語と結構違う
たとえば、
type xxx struct {}
func (x xxx) foo(){}
func (x xxx) bar(){}
type Ixxx interface {
foo()
}
func (ix Ixxx) bar(){}
があったときに、interface{}で受けたものをアサーションでxxxとすると、xxxのbarが、
アサーションでIxxxとすると、Ixxxのbarが呼ばれる。
あくまで、すべての構造体はinterface{}を満たしているだけで、実際には型を持ってるし、
interface{}とIxxx{}も満たす範囲が違うだけで上位下位ではないし、構造体の型とも違うのでレシーバは別になる。
interface{}から派生したものではないって感じ。
131デフォルトの名無しさん
2018/03/09(金) 17:07:33.29ID:4sIM9IpC もしかしてswitchに型チェック機能追加したやつが戦犯かな
ただのVisitorパターンならジェネリクス対応は難しくなかった
ただのVisitorパターンならジェネリクス対応は難しくなかった
132デフォルトの名無しさん
2018/03/09(金) 18:13:47.78ID:kL3iaTSl 型チェックでswitchとジェネリクスは全く関係ない。
オーバーロードと同じく、何として処理するかと、その型が何か、に関して曖昧性を排除してるから。
暗黙のキャストも無いでしょ。
戦犯呼ばわりはどうかと思う。他の言語に毒されすぎ。
オーバーロードと同じく、何として処理するかと、その型が何か、に関して曖昧性を排除してるから。
暗黙のキャストも無いでしょ。
戦犯呼ばわりはどうかと思う。他の言語に毒されすぎ。
133デフォルトの名無しさん
2018/03/09(金) 19:09:25.15ID:kljWqerj Goにオーバーロード無いの批判される事あるけど
HaskellやRustだって型クラスやトレイトを使わないとオーバーロードできないし
TypeScriptも型が多重定義できるだけで実体は一つだし
むしろ最近の言語はC++みたいな単純なオーバーロード付けないのがトレンドな気がする
HaskellやRustだって型クラスやトレイトを使わないとオーバーロードできないし
TypeScriptも型が多重定義できるだけで実体は一つだし
むしろ最近の言語はC++みたいな単純なオーバーロード付けないのがトレンドな気がする
134デフォルトの名無しさん
2018/03/09(金) 19:11:17.45ID:dAbxViV8 一方Cには_Genericがついた
135デフォルトの名無しさん
2018/03/09(金) 20:41:59.05ID:lMH5BOjd >>124
ドキュメントよりコンパイラのが信用できるかも知れんが
それ以上にテストコードの実際の動作のが信用できるよ。
c++まともに開発に使ってた奴ならどれほどコンパイラだよりが危ういかわかると思うけどね。
ドキュメントよりコンパイラのが信用できるかも知れんが
それ以上にテストコードの実際の動作のが信用できるよ。
c++まともに開発に使ってた奴ならどれほどコンパイラだよりが危ういかわかると思うけどね。
136デフォルトの名無しさん
2018/03/09(金) 20:50:57.42ID:mtotlLHa コンパイラが頼れないからC++から離脱したがってるわかで……
137デフォルトの名無しさん
2018/03/09(金) 21:48:54.86ID:OETiniYx >>133
むしろオーバーロードと型推論を共存させたいというのが型クラスの最初の動機だったのでは
むしろオーバーロードと型推論を共存させたいというのが型クラスの最初の動機だったのでは
138デフォルトの名無しさん
2018/03/09(金) 21:50:23.61ID:sqnwGWQK >>135
そりゃテストコードが全てのコードに対して書かれていたらの話で
実際にはテストカバレッジ100%なんてあまり現実的な数値じゃない
GUIの場合はテストを書くこと自体がなかなか難しいし、他にも仕様が変わりやすいような
部分は変わるたびにテストも書き直すんじゃ、コストが割に合わないこともある
それらを考慮して、あえてテストを書かないという選択をすることも充分あり得る
静的型付けならテストが書かれていない部分でも型情報からある程度ならチェックが出来る
動的型付けはテストがなければ何もチェックできない
テストを書かない奴はバカみたいな言い分はあまり好きじゃない
テストカバレッジ100%を目指す奴のほうがよっぽどバカだと思う
そりゃテストコードが全てのコードに対して書かれていたらの話で
実際にはテストカバレッジ100%なんてあまり現実的な数値じゃない
GUIの場合はテストを書くこと自体がなかなか難しいし、他にも仕様が変わりやすいような
部分は変わるたびにテストも書き直すんじゃ、コストが割に合わないこともある
それらを考慮して、あえてテストを書かないという選択をすることも充分あり得る
静的型付けならテストが書かれていない部分でも型情報からある程度ならチェックが出来る
動的型付けはテストがなければ何もチェックできない
テストを書かない奴はバカみたいな言い分はあまり好きじゃない
テストカバレッジ100%を目指す奴のほうがよっぽどバカだと思う
139デフォルトの名無しさん
2018/03/09(金) 22:24:57.88ID:mOP6pgpS C++の型安全とHaskellの型安全って随分違うでしょ
理論がしっかりしてて型システムが豊かな方が型安全で提供される品質は高い
Haskellは「コンパイルが通れば大体想定通りに動く」って言われる程度には型を信じれるよ
これが行き過ぎるとIdrisやCoqみたいに「実行できれば仕様を満たしている」みたいな開発もできる
ハードル高いし実用できるほど簡単じゃないからまだ何個かブレークスルーが要るがね
理論がしっかりしてて型システムが豊かな方が型安全で提供される品質は高い
Haskellは「コンパイルが通れば大体想定通りに動く」って言われる程度には型を信じれるよ
これが行き過ぎるとIdrisやCoqみたいに「実行できれば仕様を満たしている」みたいな開発もできる
ハードル高いし実用できるほど簡単じゃないからまだ何個かブレークスルーが要るがね
140デフォルトの名無しさん
2018/03/09(金) 22:28:04.16ID:5gZ3T8dE >>130
残念ながら他言語のobject型とinterface{}の違いがこの説明ではよくわからん。
あんさんは他の言語のobject型を雑な受け方と評したんだぜ。具体的にこの説明では、
なるほど他の言語のobject型で値を受け取るのは雑な受け方だった。って納得しない。
どのへんが雑じゃなくなってるわけ?
残念ながら他言語のobject型とinterface{}の違いがこの説明ではよくわからん。
あんさんは他の言語のobject型を雑な受け方と評したんだぜ。具体的にこの説明では、
なるほど他の言語のobject型で値を受け取るのは雑な受け方だった。って納得しない。
どのへんが雑じゃなくなってるわけ?
141デフォルトの名無しさん
2018/03/09(金) 22:30:56.35ID:5gZ3T8dE >>138
qiitaの記事でだいたいカバレッジが85%位が理想値でそれを超えるとしんどくなるだけで意味ないってのは見たな。
qiitaの記事でだいたいカバレッジが85%位が理想値でそれを超えるとしんどくなるだけで意味ないってのは見たな。
142デフォルトの名無しさん
2018/03/10(土) 09:17:00.38ID:iLIqn+zB >>135
C++のコンパイラに頼るのは危ないってのはテンプレートがダックタイピングだからじゃないの?
だとしたら、それは単にC++のテンプレートの仕様がクソってだけの話で
C++のコンパイラがクソって言うのは筋違いだと思うんだけど…
それとも他に理由があるの?
C++のコンパイラに頼るのは危ないってのはテンプレートがダックタイピングだからじゃないの?
だとしたら、それは単にC++のテンプレートの仕様がクソってだけの話で
C++のコンパイラがクソって言うのは筋違いだと思うんだけど…
それとも他に理由があるの?
143デフォルトの名無しさん
2018/03/10(土) 09:30:50.15ID:iLIqn+zB 書いた後で思ったけど、
C++のテンプレートってダックタイピングって言われてるけど
きちんとコンパイルエラーになったような…?
使ってたの3年以上前だから忘れた。どうだったっけ?
C++のテンプレートってダックタイピングって言われてるけど
きちんとコンパイルエラーになったような…?
使ってたの3年以上前だから忘れた。どうだったっけ?
144デフォルトの名無しさん
2018/03/10(土) 09:57:39.05ID:X26PuUpn たぶん135は、コンパイラがバグってて出力される機械語が怪しいという話をしてる
別にC++に限った話ではないんだけど昔は結構多かった
別にC++に限った話ではないんだけど昔は結構多かった
145デフォルトの名無しさん
2018/03/10(土) 10:03:15.55ID:V+AonR8i >>140
うーん。なんにでもなれるスーパークラスで受けてるんじゃなくて、何もかもを満たすインターフェイスで受けてる。
クラスというか構造体同士に階層も無いし、
インターフェイス同士にも無いから。
だから、他の言語でObjectからキャストし直すときに、キャスト先の階層構造を考えなくてもいいし、
むしろどうキャストするか(何がほしいか)で、それに合わせたレシーバを呼んだりできる。
うーん。なんにでもなれるスーパークラスで受けてるんじゃなくて、何もかもを満たすインターフェイスで受けてる。
クラスというか構造体同士に階層も無いし、
インターフェイス同士にも無いから。
だから、他の言語でObjectからキャストし直すときに、キャスト先の階層構造を考えなくてもいいし、
むしろどうキャストするか(何がほしいか)で、それに合わせたレシーバを呼んだりできる。
146デフォルトの名無しさん
2018/03/10(土) 10:07:28.98ID:ZLY5MDI0 >>139
なのになぜライブラリのバグがちょいちょい発覚するの?
なのになぜライブラリのバグがちょいちょい発覚するの?
147デフォルトの名無しさん
2018/03/10(土) 10:47:28.09ID:wavGSJ3d 普通は型の階層を利用したキャストの方が丁寧で
Goのような要件さえ満たせばなんでもキャストできる方が雑なんだけどな
雑なGoに丁寧なジェネリクスは似合わないって話の方がしっくりくる
Goのような要件さえ満たせばなんでもキャストできる方が雑なんだけどな
雑なGoに丁寧なジェネリクスは似合わないって話の方がしっくりくる
148デフォルトの名無しさん
2018/03/10(土) 11:47:59.83ID:BpWzRYHd 動的型は丁寧なコードも雑なコードも書けるよ
静的型のキャストは雑なコードだけを集めて濃縮したような存在
静的型のキャストは雑なコードだけを集めて濃縮したような存在
149デフォルトの名無しさん
2018/03/10(土) 12:02:58.66ID:vrfy4Usj 型の階層ってのからまず脱却した方が良いところだと思うけどね。
型の階層の横紙破りとしてインターフェイスを作ってさらにインターフェイスも階層を持つとか、goやり始めてから悪手な気がしてきた。
他の言語もmixinとかtraitなんかで色々やってるけど、そういう方向で対応すべきもんなんだと思うよ。俺は。
rubyのようにobjectの親を作る羽目になったり、どのみち破綻する。
型の継承による、と言うが、型の継承に頼ったキャストとしか言いようが無いんでは?
型の階層の横紙破りとしてインターフェイスを作ってさらにインターフェイスも階層を持つとか、goやり始めてから悪手な気がしてきた。
他の言語もmixinとかtraitなんかで色々やってるけど、そういう方向で対応すべきもんなんだと思うよ。俺は。
rubyのようにobjectの親を作る羽目になったり、どのみち破綻する。
型の継承による、と言うが、型の継承に頼ったキャストとしか言いようが無いんでは?
150デフォルトの名無しさん
2018/03/10(土) 12:03:37.10ID:ysTMLqRd >>145
>だから、他の言語でObjectからキャストし直すときに、キャスト先の階層構造を考えなくてもいいし、
どういうこと?Object型は大抵すべてのインスタンスの親のはずでは?
一度Object型の変数に突っ込んだなら、それってもう実質、動的言語的扱いになるから人間側が元の型を意識しなきゃいけない。
これはGoでもおんなじでしょ?
あと以下は正直どうでもいい話なんだけど敢えて突っ込む。
Goのインターフェースは階層構造を持たないって言ってるけど
も結局用語の違いってだけで実質階層構造みたいなのはあるでしょ。
Io.ReadWriter は io.Writerを内包している
io.Writerはからインターフェースを内包している
Io.ReadWriter => io.Writer => interface{}
他の言語は階層構造を明示しているけどGoの場合はそれがコンパイラによって自動化されているってだけでは?
もちろん自動化されているってのはありがたいけどね。
>だから、他の言語でObjectからキャストし直すときに、キャスト先の階層構造を考えなくてもいいし、
どういうこと?Object型は大抵すべてのインスタンスの親のはずでは?
一度Object型の変数に突っ込んだなら、それってもう実質、動的言語的扱いになるから人間側が元の型を意識しなきゃいけない。
これはGoでもおんなじでしょ?
あと以下は正直どうでもいい話なんだけど敢えて突っ込む。
Goのインターフェースは階層構造を持たないって言ってるけど
も結局用語の違いってだけで実質階層構造みたいなのはあるでしょ。
Io.ReadWriter は io.Writerを内包している
io.Writerはからインターフェースを内包している
Io.ReadWriter => io.Writer => interface{}
他の言語は階層構造を明示しているけどGoの場合はそれがコンパイラによって自動化されているってだけでは?
もちろん自動化されているってのはありがたいけどね。
151デフォルトの名無しさん
2018/03/10(土) 12:07:47.02ID:XYrxJ2qt■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★2 [ぐれ★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★7 [おっさん友の会★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… [BFU★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- 「高市人気」どこに? 自民候補が福島市長選で大敗、葛飾区議選でも苦戦 衆院早期解散論に冷や水 [1ゲットロボ★]
- 【ホタテ】中国が水産物輸入停止を伝達「ビクビクしながら…」北海道の水産業者からは落胆の声 [おっさん友の会★]
- 中国「水産物輸入停止は高市首相の発言が理由」 [256556981]
- 日本人、ついに気づく「あれ、日本が対中国で取れる対抗措置ってなくない…?」 [931948549]
- 【号外】中国外務省、高市首相が台湾関連の発言を撤回しなければ「断固たる対抗措置」を取らざるを得ないと述べた [115996789]
- 中国「次に禁止してほしいものを教えて」 [358382861]
- 【画像】外務省局長のあの写真、日本側に無許可で撮影されたものだったwwwwwwwww [834922174]
- 嫌儲、1人で発狂してると話題にwwww [279254606]
