- 1 名前:デフォルトの名無しさん mailto:sage [2017/12/01(金) 23:08:21.45 ID:FxdZTiuZ.net]
- スレタイ以外の言語もok
前スレ 次世代言語Part7[Go Rust Swift Kotlin TypeScript] mevius.5ch.net/test/read.cgi/tech/1508403098/
- 705 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 21:28:06.72 ID:L/NwSAXQ.net]
- >>681
上の人が書いてるように、ただの場合分けだと思う。ただ、>>684の人も書いてますが、本当に網羅しているか、を考えると理論が出てくる気がする。 定義域の型が、型コンストラクタで定義されてれば、そいつら全てについて場合分けする、 で、そいつらも型コンストラクタが入ってれば、、てのを続けていけば、全てについて網羅的な場合分けが出来る。 言葉だとわかりにくいですが、Agdaの動画を見るといいと思います。 定理を証明するのに、上の場合分けを考慮する必要があって(漏れたら困りますよね?)、 実際EmacsのAgdaモードだとそういうのを勝手に展開してくれるコマンドがあり、 ゲーム感覚で証明してく感じ。 で、カリーハワード対応を考えると、関数の定義も結局は同じで、実際同じコマンドを使って進めてくことになる。その流れでやれば、後で漏れてる云々は問題にならない。 こんな感じですかね?
- 706 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 22:20:04.44 ID:4frS9VE4.net]
- >>684
動的言語はデータクラスをほとんど使わず、辞書や配列を生で扱うことが多いからじゃないかな 型で分岐するケースがそもそも少ないし、when Some a みたいにパターンマッチと同時に要素を抽出したくても抽出の仕方が定義されていない
- 707 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 23:10:12.11 ID:fmAc02d6.net]
- >>680
俺は最近書いてないぞ。 つまらんからな。
- 708 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 00:17:54.03 ID:DgAEmkFM.net]
- パターンマッチで変数にバインドするところとかあれってどう還元できんですかね?
- 709 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 01:01:46.61 ID:PzzAcO+j.net]
- ・頭文字が大文字ならコンストラクタ (引数0個以上)
・そうでなければ変数 (引数なし) 少なくともこの仕様を守れば動的言語でもパターンマッチできるよ
- 710 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 01:02:49.35 ID:2R9CDqfY.net]
- 難しく考える必要はない
タプルは関連する複数の値をまとめて扱ってるだけ レコードはタプルに型名というラベル値が付いただけ 型によるパターンマッチはその型名で条件分岐してるだけ 変数へのバインドはタプルの特定の要素の値にに別名を付けただけ
- 711 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 01:37:10.13 ID:kGWmn81W.net]
- つまり・・・どういうことだってばよ?
- 712 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 06:13:50.88 ID:pnNTWTyQ.net]
- >>684
動的言語どうこうではなく、オブジェクト指向の情報隠蔽とパターンマッチの相性が悪い。 アクセス制御をかいくぐってデータ構造にマッチさせるぐらいなら オブジェクトを受け取ってからメソッド叩いたり条件分岐したほうがマシ。
- 713 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 10:42:33.20 ID:kGWmn81W.net]
- >>692
SuccessとFailをパターンマイッチングするんじゃなくて class Success implements Resultと class Fail implements Resultみたいにしろ ってこと?
- 714 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 11:06:54.37 ID:I3ORKf0i.net]
- 本物のオブジェクト指向はTrueクラスとFalseクラスを使う
Bool &True::ifTrue(Block f) {f(); return this;} Bool &True::ifFalse(Block f) {return this;} Bool &False::ifTrue(Block f) {return this;} Bool &False::ifFalse(Block f) {f(); return this;}
- 715 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 11:22:08.22 ID:1jbGMztY.net]
- こういうときオブジェクト指向ってアホの自慰っぽいなと思う
- 716 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 12:05:31.75 ID:kGWmn81W.net]
- 全てのif文を消し去るのです
- 717 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 13:37:58.84 ID:I3ORKf0i.net]
- その次の世代はtemplateを使いvirtualを消し去る
だからifが復活
- 718 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 14:30:35.35 ID:kGWmn81W.net]
- >>697
はいサイクリングマチカル複雑度増加
- 719 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 23:54:04.18 ID:U0xKcFDq.net]
- 多次元配列と第一級関数をサポートしている静的言語ってなんかあったっけ?
- 720 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 00:18:19.80 ID:WYTiMnwL.net]
- C#
- 721 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 00:18:46.23 ID:7qCCLtD1.net]
- サポートするの定義が曖昧すぎる。
- 722 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 00:28:37.30 ID:+fzK3Dih.net]
- そうかC#があったか。ありがとナス
- 723 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 05:54:32.12 ID:V1qhcEkf.net]
- >>699
それサポートしてない言語って何があるの?
- 724 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 10:06:55.58 ID:Gs9CrZMb.net]
- >>703
多次元配列サポートしてる言語なんて他にはFortran, R, Python, Julia, Racketくらいしか思いつかない 第一級関数は最近増えて来てるけどFortranみたいな古い言語はだいたいサポートしてない
- 725 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 10:13:41.67 ID:apJvYiuW.net]
- >>704
多次元配列サポートすると何の役に立つの?
- 726 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 10:30:59.45 ID:Gs9CrZMb.net]
- >>705
行列計算とか、その他数値的な解析がめちゃくちゃ書きやすくなる。 いわゆる数値解析や流行りの機械学習からゲーム開発まで、くまなくアルゴリズムが書きやすくなるぜ
- 727 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 10:44:28.83 ID:tYoa+WgF.net]
- サポートてのは、数値計算でよく使う引数が2の関数と、そういう関数とと中置演算子との間の糖衣構文が標準でオーバーロード気味に存在するってことですかね?
- 728 名前:702 mailto:sage [2018/01/24(水) 10:59:06.24 ID:J/V7RjN6.net]
- >>706
Racket挙げてるし中置演算子は重要度低いけど、よく使う関数はチューニングされたものを置いておいて欲しいな Numpyだって標準ライブラリじゃないし、最悪標準ライブラリじゃなくてもいいけど、「数値計算するなら常識的に考えてこれ」という一つに定まっていてほしいな。 あるライブラリはEigenに依存しているが他のあるライブラリはublasに依存してるみたいなのはやめて欲しい
- 729 名前:702 mailto:sage [2018/01/24(水) 10:59:37.34 ID:J/V7RjN6.net]
- 間違えた。
安価は>>707で
- 730 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 11:04:32.91 ID:RrrJ1nlK.net]
- >>704
良かった。言語として普通にあるもんだと思ってたから 無いことを想像したこともなかった。
- 731 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 11:09:12.83 ID:J/V7RjN6.net]
- 第一級関数のことかな?
多次元配列はレアだよ
- 732 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 11:24:52.80 ID:veFPPCA3.net]
- Pythonは多次元インデックスをオーバーロードできるけど組み込みの多次元配列は無い
PythonレベルのサポートでいいならKotlinも同等だね
- 733 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 11:58:57.43 ID:apJvYiuW.net]
- そういえばExcel方眼紙もある意味二次元をサポートしてるな
Excelの異常な人気の原因はそこか
- 734 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 19:16:29.18 ID:CULWU8L2.net]
- 義務教育に向けて親もプログラミングやっときたい、どれが良い?
Pythonとかよく目にするけど、と聞かれた。 どう答える?
- 735 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 19:30:37.89 ID:D4W5cGwF.net]
- 相手が挙げて来た言語のメリットを適当に言ってそのまま勧めれば良い
親が教えるためにやる言語なんて何でも良いし、違いがわかる頃には子供は卒業してる 選ぶのも面倒くさい
- 736 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 19:50:08.15 ID:N2tfbGLJ.net]
- >>714
まずはExcelのVLOOKUPを使いこなせるようになれ 次はVBAをやれ でいいよ 教える側が何の役に立つのか分からないまま人に教えるなんて全く何の意味もない
- 737 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 20:27:01.77 ID:0VEJNLN9.net]
- >>714
教育ママに特定の言語やらせて認識を固定させんな、むしろ子供に害悪だろ 数学パズルでもやらせとけ
- 738 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 20:29:15.40 ID:c9tmIiAF.net]
- 子供にはScratchをやらせることになるらしいから、親もScratchをやればいいじゃん
- 739 名前: mailto:sage [2018/01/24(水) 20:39:13.05 ID:m3QL6muE.net]
- >>714
やはり再帰的思考が勘所かと考えていますので、scheme をお勧めしようかと思っています
- 740 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 01:24:29.68 ID:mR4+Kf/H.net]
- >>714
Haskel 関数型を理解できないバカはプログラミングする資格も意味もなし 保守困難なウンコをひり出すだけのゴミは消えろ と伝えてくれ
- 741 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 02:32:13.16 ID:uqKgsWDy.net]
- >>720
Haskellの綴りも正しく書けない池沼は文章を書く資格も意味もなし 無意味なウンコをひり出すだけのゴミは消えろ
- 742 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 12:45:10.82 ID:R+9hEl/X.net]
- >>713
excelは関数型言語だ、と言う人々も居るくらいだからな(笑)
- 743 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 14:09:07.50 ID:ArcwQAgj.net]
- Excelはビ
- 744 名前:Wュアルリアクティブプログラミング環境と言えばまあ間違ってはないんだけど
二次元配列以外の構造の扱いが難しすぎて、学習用にしてしまうと 他のデータ構造を学ぶ機会がないまま何でも二次元配列に落としこむ悪癖がついてしまいそうで [] - [ここ壊れてます]
- 745 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 14:31:25.81 ID:NsBjyJ7C.net]
- >>723
人間が無理なく扱えるデータは二次元の表が限界なんだよ 考えてみろ お前がよく使う構造体やクラスのリストや辞書は実質二次元の表だろ オブジェクト指向では直接深く階層掘ったアクセスは嫌われるだろ? なんだかんだ格好いい理屈を付けても、結局人間にはExcelのデータ構造が馴染むんだよ
- 746 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 14:38:39.64 ID:ArcwQAgj.net]
- >>724
再帰的 or 多相な構造どうすんのよ、ってのはまあExcelの用途では滅多にないとしても 単純に三次元配列が欲しい時もあるし Sheet増やしだすと急に面倒くさくなるんだよなあ
- 747 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 14:41:15.02 ID:NsBjyJ7C.net]
- >>725
再帰なんか同じ表の行番号を持たせるだけだろ
- 748 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 17:16:48.70 ID:sWzOL5fe.net]
- 3次元以上を汎用に使おうとするとSQLみたいだったり tensor flow だったり
かなりめんどくさいインターフェイスになるのはしゃーない。
- 749 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 17:55:47.33 ID:R+9hEl/X.net]
- まぁ、Haskellで作られたものより、Excelで作られたモノのほうが多いしな(笑)
純関数型(笑)
- 750 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 20:01:29.48 ID:0RuyxExF.net]
- >>721
このようなtypoを防ぐためにも強い型付けが必要なんだよ
- 751 名前: mailto:sage [2018/01/25(木) 22:05:59.50 ID:LX8HI+AO.net]
- >>729
変数宣言(型宣言ではない)だけでいいと思うが、それだけでもいいから、事前チェックを可能にしてほしいなあ python のバイトコンパイル機能は変数名をチェックしてくれるのでしょうか?
- 752 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 22:42:04.62 ID:uaT/xfzY.net]
- flake8を使えば
- 753 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 01:29:50.06 ID:2fuI1BST.net]
- headerをincludeしてチェックする言語は簡単だけど
コンパイル済みのライブラリの中身を見て名前をチェックする言語は大変そうだ コンパイル後も情報を全部残しておかないといけない
- 754 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 16:21:27.98 ID:Zz9xFin2.net]
- 変数宣言を省略できる機能(スペルミスが検出できない)と、型付けは別だよね?
昔のFortranやBASICは変数はいきなり使っていいけど名前で型が決まる静的型だったし
- 755 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 16:36:58.42 ID:G7ZCkEjP.net]
- 宣言がない変数は、省略ではなく他のファイルで宣言している可能性がある
そのファイルをincludeするか、全てのファイルを検索する必要がある
- 756 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 13:04:44.52 ID:7uBpZq93.net]
- レベル下がったなぁ
- 757 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 14:31:34.34 ID:fjEoblON.net]
- 下がってから言っても遅いな
レベル高かった頃に、なにこれ高いって評価できる奴が勝つ
- 758 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 14:40:54.49 ID:7K+kXdeY.net]
- まぁ、その時から無駄なつっかかりしかできない奴ばっかだったし仕方ないんだろうな。
今更option explicitじみた話に戻るとは。
- 759 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:13:06.80 ID:RNgYnDaT.net]
- >>736
天井Lみたいなこと言うな
- 760 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 15:51:11.09 ID:CWAHXL7y.net]
- 自分で書いたコードが三ヵ月後に読めないっていうやつは素人
プロは三ヵ月後の記憶喪失を織り込んでる
- 761 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 23:40:40.83 ID:ZERk9zo5.net]
- 保守受注独占するために汚くするんやぞ
- 762 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 22:16:09.55 ID:4480+Jxl.net]
- そういう足を引っ張る人には
- 763 名前:ロ守受注の代わりに
ベーシックインカムをあげたらいいんじゃないかと言われている 足を引っ張る悪人より善良な怠け者の方がいい [] - [ここ壊れてます]
- 764 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 01:45:49.07 ID:ZcZnTiUX.net]
- しょーもない理想論はいらんねん
こっちはきっちり世間様に仕事回してんねんで 頭の悪いガキは黙っとき
- 765 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 01:47:45.52 ID:ZcZnTiUX.net]
- ソースがきれい → オタクの自己満足
ソースがきたない → 工数取れて残業代も出る、みんなニッコリ これが現実やで
- 766 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 10:52:36.78 ID:2Eamtv1n.net]
- そんなことしてるから他国の技術に駆逐されるんだよ。。
- 767 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 14:43:26.40 ID:xaKIrtPB.net]
- その理屈だと、まるで必要もない次世代言語で書くやつみたいだな。
汚いソース書くやつは。
- 768 名前:デフォルトの名無しさん mailto:sage [2018/01/31(水) 23:31:38.87 ID:Rp2Mauf0.net]
- 次世代言語で書くだけならいいんだよ
故意に汚くするとはいってないから、改善する可能性がある 故意とただの偶然とでは罪の重さが違う
- 769 名前:デフォルトの名無しさん mailto:sage [2018/02/01(木) 08:43:21.74 ID:AVafL46K.net]
- 故意にその言語で書いてる以上、もう偶然でもなんでもないだろ。
ちゃんとその言語のメリット、デメリット含めて布教してから使うべきだと思うが。
- 770 名前:デフォルトの名無しさん mailto:sage [2018/02/01(木) 11:05:23.20 ID:niJJgdbA.net]
- ちゃんとする可能性があるならいい
その可能性をわざと排除するなら悪質 最初からそう言ってるんだろ
- 771 名前:デフォルトの名無しさん mailto:sage [2018/02/01(木) 13:10:20.37 ID:Bj9uVLC2.net]
- まあ大体がカスな開発体制に問題があるところに
新しい言語なら問題解決できる! とかめちゃくちゃな広告が出回って導入、失敗っつークソパターンがここ20,30年の間繰り返されてるわけだからな。
- 772 名前:デフォルトの名無しさん mailto:sage [2018/02/01(木) 15:37:35.21 ID:suqSmKNo.net]
- Elm はどう?
ここ見てたら興味出てきた https://nulab-inc.com/ja/blog/typetalk/elm-introduction-tutorial/
- 773 名前:デフォルトの名無しさん mailto:sage [2018/02/03(土) 02:04:53.95 ID:VC8JN1NA.net]
- JSに依存するのはいいがGHCがな
もしもF#がGHCに依存していたら面倒臭いじゃないか
- 774 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 17:15:27.49 ID:NkUQn5xe.net]
- arison.jp/wordpress/wp-content/project_comedy_l.gif
- 775 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 17:16:33.56 ID:NkUQn5xe.net]
- i.imgur.com/WlyRTkz.jpg
- 776 名前:デフォルトの名無しさん [2018/02/14(水) 20:27:03.68 ID:SwEfqZxS.net]
- ASM.net
- 777 名前:デフォルトの名無しさん [2018/02/15(木) 23:40:47.93 ID:yLr3787F.net]
- clojure やれよ?
- 778 名前:デフォルトの名無しさん [2018/02/16(金) 00:35:29.80 ID:JK/MGoqE.net]
- 気の科学 ★朝は気合いで起きる★ 雑学
https://youtu.be/E6lvPide0JA
- 779 名前:デフォルトの名無しさん [2018/02/18(日) 01:30:59.56 ID:5P/pcqvC.net]
- >753
これ初めて見た
- 780 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 15:38:35.68 ID:CW1UlThv.net]
- なんかTypeScriptのジェネリクスがどんどん変態じみてきたんだけど、ジェネリクスってこういうもんなの?
これならgoに乗んなくていいなぁ
- 781 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 15:51:20.83 ID:AYB00j0e.net]
- >>758
欲求は際限なく広がって、そしてゴミの塊みたいな仕様になるもんだ。 ずっと前からTypeScriptは手段と目的をどっかで履き違えたと言ってたが、最近シャレになってない。 Goの割り切りは納得に値するよ。あったら便利なのは認めるけど。 Cppのtemplateみたいに、それだけでチューリング完全になってしまう前に、最初から入れない、やるならgenerateで別立てで勝手にやれと言う割り切りしたのは英断だと思う。
- 782 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 17:25:12.30
]
- [ここ壊れてます]
- 783 名前: ID:CW1UlThv.net mailto: >>759
ジェネリクス関連のエラーメッセージは本当に意味がわかんないよね。 ユーザー視点ではimmutable.jsとかでも補完が効くのは便利になっていいんだけど、 いざ型関連エラーが出た時にエラーメッセージから原因を予測するのが困難なんだよね。 rustもあんな感じなの? 正直TypeScriptはエラーメッセージをわかりやすくする方向に軌道修正頼んます。 [] - [ここ壊れてます]
- 784 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 18:16:19.28 ID:WV1p31YW.net]
- >>760
変性注釈とか、やりたいことはわかるし、なぜ必要かもわかるが、一方でjsとどんどん乖離していって、jsのプロジェクトと繋げるときに結局any使うことになったり、グダグダも良いところだと思う。 TSだけでもの作るんなら、良いと思うが、そうなるとJavaScriptにコンパイルできる必要もなく、逆に早くwasmなんかに対応しろとか、ネイティブにTSの良いところを保ったまま実行できる環境出せとか、色々文句が言いたいけど、 全部ほったらかしにされてるからな。 ずーっと言語の改良してる。
- 785 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 18:37:05.69 ID:Ct2k6iqr.net]
- 一方的にjsのライブラリを使用する分には問題ないだろうし、その資産にただ乗りできることこそ
jsとの相互運用性を維持する理由だろう。 言語仕様としては奇麗だけどライブラリが揃わなくて実用性がいまいち、みたいになるよりは。
- 786 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 19:25:55.39 ID:WV1p31YW.net]
- >>762
jsのライブラリ側が自由な感じのライブラリだと定義ファイルが無茶苦茶ややこしいものになったりするし、なかなか微妙だけどな。 ライブラリが揃わなくてイマイチ、は確かに無いか。ほとんどタダ乗り出来るからなぁ。
- 787 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 22:15:41.08 ID:+Qsqi9wm.net]
- >>763
せめて関数のオーバーロード定義みたいなことが出来ればコードが整理しやすくなると思うんだよね。 つまり export function h(name, attributes /*, ...rest*/) { // 省略 return typeof name === "function" ? name(attributes || {}, children) : { nodeName: name, attributes: attributes || {}, children: children, key: attributes && attributes.key } } ってあった時に export function h(name: string, attributes:obj /*, ...rest*/) {} export function h(nextFunc: (attributes:obj)=>void, attributes:obj /*, ...rest*/) {} みたく出来れば型定義自体も綺麗にできる気がする。 でも今のTypeScriptってこれできんよね。
- 788 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 22:19:58.51 ID:+Qsqi9wm.net]
- あと詳しい人に聞きたいんだけどやっぱりジェネリクス一つとっても
言語によって全然仕様が違うのかね? だとしたらGoはコードジェネレートと組み合わせも考慮したちょうどいい便利さの ジェネリクスというのも考えていて実装を見送ってるのかも。 でもGoにはそれ以前にnull安全を実装してほしい気がするが。 レシーバがnullの可能性があったりnull周りに罠があるんだよねGoは
- 789 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 22:47:38.32 ID:Ct2k6iqr.net]
- >>764
オーバーロードってまさにそんな感じでできた気がするが。
- 790 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 23:30:02.62 ID:/vdt0GUK.net]
- ジェネリクスは途中から入れるようなもんじゃないと思うがね
型自体はフラットな構造で、階層構造はHaskellみたいに型の境界(型クラス)として作ると綺麗にまとまりやすい 型≒クラスで、型自体に階層構造を作ってるような言語だと、ジェネリクスの使い方が面倒よ Javaの<T extends ClassFoo>とかC#のin/outとかは元の型システムに合わせて入れないといけない面倒な部分 TSの元々の型システムはよく知らないけど、ダックタイピングできるならジェネリクス入れる必要がないし、 クラスがあったり型に階層構造があるなら面倒なのはしょうがない
- 791 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 23:45:12.91 ID:LabDqOSD.net]
- むしろJavaScriptさんが悔い改めるべきではないか?
- 792 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 23:52:24.01 ID:AYB00j0e.net]
- Goでレシーバがnilになれるのは案外便利だぞ。
あれは罠ではない。 型や型クラスに階層構造持つのはいつでも便利なわけではないと言うか、結局コンパイラ都合を押し付けられてるだけな気がするけどな。 その辺、後出しジャンケンできるGoのinterfaceの方が楽な事が多い。
- 793 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:07:59.55 ID:B+b1Q4Nq.net]
- ジェネリクスは、コード上別の箇所に出現する型Aと型Bが同一であることを明示することにより、型情報の損失を避けるために使うんだよ
ダックタイピングは関係ない C++やHaskellをやってる人は>>767みたいに混同しがちだけど、JavaやC#だと多態とGenericsをわりとはっきり区別する文化がある TypeScriptのGenericsも同様に、型の同一性を示すマーカーとしての性格が強いね
- 794 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 01:32:35.15 ID:1YgzgKOj.net]
- 「型が同一である」の定義がわからない
犬型と猫型は異なるともいえるし同じ動物型ともいえる この辺の仕様を捨ててからジェネリクスを追加するのが基本 もし両方入れてゴミ言語ができたら 捨てられないのが原因ともいえるし追加したのが原因ともいえる
- 795 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 01:40:02.40 ID:U+qaWnxw.net]
- それに対して型の制限を型でなくしたのがHaskellの型クラスやRustのtraitだし、型を分解する事で非同一性を示すのが多くの言語にあるパターンマッチじゃないの
- 796 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 07:49:12.96 ID:HJ1z9rHd.net]
- 型階層のある言語でアドホックに型クラスをやりたいなら別途Comparableみたいなインスタンスを受け取るようにするだけだろ
ジェネリクスと区別するっていうのは端的にはそういうことで、実際に引数として明確に分かれることになる JavaやC#, TSだと型引数に制約を付けることで中途半端に似たことができてしまうのが微妙に直行してなくてダサいけど、それは基本的にあまり使われない機能
- 797 名前:771 mailto:sage [2018/02/19(月) 07:54:42.45 ID:HJ1z9rHd.net]
- すまんComparatorの間違いだ
補足しとくと、直行してないというのは例えば具体的には <T extends Comparable> と (T obj, Comparator<T> comparator) みたいなののことな
- 798 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 09:53:32.16 ID:isUwiiOH.net]
- >>769
便利さを教えてほしいな。 純粋なnilと型があるけど中味はnilって正直わかりづらくないかな。 reflectionのお勉強をしないと理解できない。 Goのインターフェースは後出しジャンケンってのは面白いな。パクらせてもらおう
- 799 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 09:58:27.89 ID:isUwiiOH.net]
- >>770
このへん詳しく知りたいな。 C++とかHaskellのジェネリクスってTypeScriptとかと違うの?
- 800 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 12:10:56.39 ID:BdVjRyEG.net]
- >>775
それがnilでも、メソッドチェーンできる。 だから、errを伝搬するのに便利。 末尾のDoなんかで、本当の結果,errorとして取り出せば良いよ。 いちいち失敗構造体なんぞ書かんでも良い。 Nullable的に使える。 どっちかというと下回り書いてるときに便利かも。
- 801 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 12:44:49.19 ID:g9K5jJLr.net]
- >>776
C++はテンプレートを使ってダックタイピングができる Haskellはアドホック多相を使って>>774でいうcomparator引数に相当する要求をTの型制約に含められる
- 802 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 14:19:03.08 ID:x9oxab6h.net]
- >>777
なんかサンプルある?とょっとイメージがつかめない。nilでメソッドチェーンができるのはわかるけど、それがメリットになるかな? 結局nilを、返してるメソッドがエラー状態な訳で、そいつが暫定的な値を返せばメソッドチェーンはできるよね。
- 803 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 15:23:40.87 ID:FUvFB9Jm.net]
- ハスケルのメイビーみたいなことだろうな。
- 804 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 16:10:57.83 ID:BdVjRyEG.net]
- >>779
暫定的なオブジェクトに、レシーバ書いてくの? Hoge().Get().ReadAll().AsString() で、毎度nilチェックとか暫定レスポンスのオブジェクト置いてたら非効率じゃん。 ToXXX以外の関数が、Hoge()の返す型やinterfaceを返せば楽じゃない? Getに失敗したかReadAllに失敗したかが必要ならまた別だろうけど、だいたいひとからげにして問題ない事の方が多い。
- 805 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 18:59:46.08 ID:esiJbF27.net]
- >>781
error情報を最初から諦めるってことね。 とにかく最終結果がnilだからメソッドチェーンのどっかで失敗してんだろーなー。くらいの感じなのか。 標準ライブラリでそういう実装してるのあるかな?reflect.Valueとかかな。 あれメソッドチェーンできる代わりに不正なメソッド操作するとpanicしててなかなかしんどい。
|

|