- 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/
- 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しててなかなかしんどい。
- 806 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 19:03:08.21 ID:BdVjRyEG.net]
- >>782
ちょっと違うけど、protobufあたりはもう少し有意義に使ってたな。
- 807 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 19:14:13.94 ID:esiJbF27.net]
- 流れをぶった切って悪いけどTypeScriptはさすがMS。開発リソースたっぷり。という余裕を感じる。vscodeと一緒に毎週くらいの勢いでアップデート繰り返してる。
ジェネリクスの気持ち悪さもエラーメッセージがわかりやすく進化する感じで直してくれれば全然良いので頑張ってもらいたい。
- 808 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 19:17:59.63 ID:u7QgBPEb.net]
- goのことは全然知らないんだが、型付きnilとやらは実行時ディスパッチしてくれて
その型のメソッドにnil引数付けてやってくるという理解でOK?
- 809 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 20:22:12.51 ID:BwjO59+V.net]
- まずメソッドではなくて、ちょっと変わった構文のの関数ぐらいに受け取ったほうが良いかも。
Foo.Bar()は Bar(Foo)と、 Foo.Bar(a,b) は Bar(Foo,a,b)と同じぐらいの意味。 だからFooがnilでも(ポインタに対してのレシーバであれば)呼べる。
- 810 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 23:02:26.53 ID:cDVYUoQ2.net]
- やはりメソッドチェーンは何回も値 (nil) を返すのが気になる
Haskellでは ((Nothing >>= f) >>= g) >>= h こうするとNothingのパターンマッチを3回するのに対し Nothing >>= (\ y -> f y >>= (\ z -> g z >>= h)) これなら1回だけ
- 811 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 23:09:11.19 ID:g9K5jJLr.net]
- >>787
記号がキモい 見てて痒くなる
- 812 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 23:41:51.38 ID:cDVYUoQ2.net]
- 記号がなくても右結合がきもい
h(g(f(x))は右結合 x.f().g().h()は左結合
- 813 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 00:33:09.75 ID:uyRcVPMC.net]
- こんなのをありがたがるくらいならCommonLisp書くわ。
- 814 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 01:53:25.83 ID:IMJo1v/e.net]
- その気持ちは分からんでもない
- 815 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 05:20:12.69 ID:o3fs2Zzy.net]
- goの場合nilの場合分けを関数の中でしなくちゃいけないわけだろ。
それが嫌だからモナドができたわけだからな。 メソッドチェーンも嫌だからasyn/awaitとかdo構文が出来たわけで 全部が劣っているな。
- 816 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 17:49:07.93 ID:uyRcVPMC.net]
- 秀でるのと、こねくりまわすのは違うからな。
原理上、変態構文と純でも何でもないモナドで出来るとか抜かすぐらいなら、nilチェックするほうがマシ。
- 817 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 18:26:18.82 ID:SK024iMW.net]
- コンパイラはモナドをコンパイルエラーにしない
一部の人間は忖度してモナドを自主規制する コンパイラと人間はどっちが正しいかというだけの話
- 818 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 18:12:35.61 ID:WKR1veUF.net]
- 機械と人間の両方に指図されるのは不自由過ぎる
両方採用するのは過激派 どっちか一つだけにした方が中道という可能性がある
- 819 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 19:30:26.52 ID:BxLkRHyS.net]
- goにいまさらnil安全は無理かな?
python3並の断絶が起きちゃう?
- 820 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 20:32:34.11 ID:qR5uNCei.net]
- そもそもnil安全にする必要もない。
その変数に型的にnilが入ることが無かろうがあろうが、 他の言語のnullとはちと違うレベルでnilを取り扱える。 タプルで返す前提だと大した問題には無いと言うか。 他の言語は、nullに本来のその型が持つ意味以上の意味を与えてしまうからわざわざnull安全にしないといかんのでは?
- 821 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 02:26:39.63 ID:zGB/N5H/.net]
- タプルで値が返せるから必要ないってただの理屈の上の話で、エラーチェック漏れをおこしたり、エラーチェックしててもnilの入った変数を次の処理に引き継ぐミスは起こり得るだろ。それを防ぐのがnil安全なわけで。
- 822 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 04:32:43.91 ID:+RpZ2cWG.net]
- 俺も>>799と同意
>>798の言ってることはいまいちよく分からん nilに余計な意味を与えるからダメとか言ってるがnil自体がそもそも余計だと思う nilは便利すぎるがゆえにチェック忘れ系の地雷がある ポインタ演算みたいに強力な機能は同時に危険も引っ付いてまわる そういった機能は出来うる限りは排除・制限していくべきだと思う
- 823 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 05:41:36.72 ID:ePT/3hrM.net]
- nilに余計な意味を与えないための基準がnil安全なのでは?
- 824 名前:デフォルトの名無しさん [2018/02/22(木) 08:14:10.74 ID:p8NiYEqx.net]
- 同僚のコトリンのコードがビックリマークだらけで、こりゃだめだと思った
- 825 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 08:54:55.92 ID:MB1I4+Gh.net]
- だから、便利に使わなければ良いと思うんだが。
参照にしない限りnilにはなれないし。
- 826 名前:デフォルトの名無しさん [2018/02/22(木) 12:53:25.00 ID:+RpZ2cWG.net]
- >>799
すまん。番号ズレてるな。以下訂正 > 俺も>>798と同意 > >>797の言ってることはいまいちよく分からん スマホアプリ使ってると時々ズレるんだよな クソが そのせいで自分で自分に同意するというアホな文章になってやがる
- 827 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 13:11:15.71 ID:0cZDh8Nv.net]
- 修理しない自由 vs. 修理する権利
- 828 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 14:54:41.89 ID:ei88pKkZ.net]
- >>800
基準がどうこうってnil安全な言語ってのがわかっていないのかな? 設計思想とかの話じゃなく言語仕様の話をしてんだけど。 つまり変数に明示しない限りnilを代入不可能な変数が作れるってのか nil安全な言語ってこと。 TypeScriptなら let some?:number = null; // OK let some:number = null; // NG ってこと someにnullが入っている可能性をコンパイル時点で排除できる。 Goだって func hoge(s *Some) { // sが絶対nullじゃないことが保証されるスコープ } func (s? *Some) SomeFunc() { if (s != null) { hoge(s) } hoge(s) // NG コンパイルエラー sがnullである可能性が残っている } みたいな感じで書ける。?が使えると仮定
- 829 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 16:43:44.83 ID:ePT/3hrM.net]
- >>805
しょぼ! その例はnull安全の中でも一番弱いやつ。 書き方を気をつければnullを避けられるってだけ。 本物のnull安全はスコープ単位ではなく、型検査が通ればプログラムにnullによる誤りを完全に排除されるんだよ。Haskellのように。
- 830 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 17:06:16.89 ID:zGB/N5H/.net]
- >>806
elmも実行時エラーを完全排除できるというのを売りにしてたね。 しょぼくても学習コスト最小でメリットは十分享受できる。 とりあえずelm触ってみようかな
- 831 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 18:59:35.60 ID:MB1I4+Gh.net]
- >>806
haskellはそんな事の前にもっと解決すべき問題を解決できる言語になってくれ。
- 832 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 01:19:34.60 ID:i8nFKqus.net]
- 動的型で解決できる問題はすべて静的型で解決できるし
もしこれが嘘八百だと証明されたとしてもそれはそれで大きな成果だし いずれにせよHaskellは静的型の歴史に貢献している
- 833 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 01:23:42.56 ID:KFd5WK6x.net]
- でも需要はハケスル(笑)<<<<<PHPで圧倒的な件w
- 834 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 08:46:52.58 ID:LZyM23a9.net]
- 歴史に貢献するって、ラテン語でもあるまいし。
実用言語にしてよ。
- 835 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 10:35:29.52 ID:fGTUWBf8.net]
- 実在するだけでは不満か
実在すら怪しいものがあったらもっと不満だろ 実用よりも実在の方がモチベーションが強い
- 836 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 10:45:07.36 ID:HJaUFAvs.net]
- >>811
ラテン語は良い喩えだね。印欧語ヒエラルキーの上の方にいるし。 俗ラテン語を見て、どこが欠落してるかの見通しが良くなる。 Haskellも足りてないけどさ、型理論的に。そういう点でもラテン語あたりなのは妥当。
- 837 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 11:35:44.21 ID:2M6dxKUJ.net]
- コンパイル時に解決できるならそれに越したことは無いが
そのための学習コストは増大する傾向にあるよね。 Elmはブラウザのviewに特化したDSLとして学習コストを抑えてる。 Rustもメモリリークを静的に解決しようとするけどそのためのコストはかなり高め。 何事もバランスだよね。
- 838 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 21:27:40.00 ID:LZyM23a9.net]
- >>813
そう。 そんなに格いるか?確かにあれば便利だけど前置詞のほうが実質簡潔じゃねえの?とか、 今更ラテン語使う必要無いだろ。足りない語彙を現代語から借用するの?とか、 ヒエラルキーの上位と言うより、広がる枝の根本にほうっておかれた存在だろ。 全く次世代で無い。
- 839 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:03:17.49 ID:GuloKGfV.net]
- Haskellの熱心なアンチが全くのエアプだった事件があるので、そういう意見はHaskellに精通していることを示さないとなかなか受け入れられないと思うよ
- 840 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 23:44:14.84 ID:NePmI3sA.net]
- まあカス仕様を必死に守るのにコストかけるくらいなら
goみたいにコンパイラの性能上げてもらった方がよっぽど有益だったりはする。
- 841 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 00:32:37.74 ID:LvxjVVyK.net]
- お、型付λアンチか?
- 842 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 01:03:27.04 ID:67+llEBF.net]
- >>816
エアプって言葉好きだなぁ。 正直触ってダメ出ししたぐらいだけど、精通せんでも文句は言える。 ラーメン食いに行って「まずいわこれ」って言って、店主に「じゃあお前はこれ以上のラーメン作れんのかよ」「それだけラーメン食って言ってるのか?」ってキレられても困るだろ。 客観的にまずいもんはまずい。まずいと誤解されるものもその次にまずい。
- 843 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 01:06:09.79 ID:67+llEBF.net]
- 意識高い系のおもちゃとして使うんじゃなくて、なんか使えるプロダクト出してから言ってくれよな。
古代言語を次世代言語スレで出すんなら。
- 844 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 01:21:53.07 ID:ZueQv0Xl.net]
- >>817
https://taiyaq.com/contents/YgxOd3YjadMa5c793O1j1d9VX goの設計思想自体が依存関係解決の高速化だったりコンパイル速度優先の実装みたいだね。 ジェネリクスみたいなコンパイル時の計算速度に大きく影響を与える仕様はなさそうだ。 (あっても限定的な機能になりそう)
- 845 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 02:01:52.41 ID:9192Hwvs.net]
- goにはクラス階層も無いんでしょ?ジェネリクス以外の多態が無いならまだ綺麗に導入できる可能性がある
swiftはバージョンアップで型推論を入れるようなスジの悪い進化を進めてるから好きになれんよ
- 846 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 06:02:14.88 ID:VvbK4X3N.net]
- コンパイル速度優先の上で云々ということであれば
goがDelphi/FreePascalを超えてるかというのは正直疑問
- 847 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 07:01:37.55 ID:VvbK4X3N.net]
- >>822
goはinterfaceによる多態が既にあるから、そこにジェネリクス入れるとJava同様になるぞ
- 848 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 07:57:18.04 ID:ZueQv0Xl.net]
- >>823
現在も絶賛コンパイル速度更新中だからいいんじゃないの。 そもそもdelphiって古すぎて早く見えるってだけでは、、、? >>824 interfaceを進化させるイメージでジェネリクスぽいものを作るんだろうね 現状複数のinterfaceを受け入れる可能性のある変数は空インターフェース(interface{}) (javaでいうところの何でもありのObject型みたいなの) にするしかないのがツラミになってる。 ここを改善する方向に進化させるでしょう。 直積型をつくるのはできてるから直和型(union)をサポートして someFunc(o interface{}) error {} みたいなのを someFunc(o A & B) error {} someFunc(o A | B) error {} みたいにできればいい。TypeScript好きだからこうなったら感動する
- 849 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 11:17:45.72 ID:LvxjVVyK.net]
- >>819
だっさw
- 850 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 11:20:37.36 ID:pBIylWjV.net]
- 古すぎて速いってのは正しい
あとはジェネリクスがない言語は古いと認識できたらもっと正しい
- 851 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 13:37:19.37 ID:67+llEBF.net]
- >>826
俺がダサいだけでhaskellが良くなって実プロダクト出てくるならいくらでもダサくなるわw
- 852 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 14:17:08.41 ID:4YJEYBsv.net]
- 実はDelphiにはジェネリクスあるんだぜw
- 853 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 14:17:22.06 ID:WPlCcRak.net]
- >>827
TypeScriptの最近のジェネリクス変態進化ぶりを見ていると ジェネリクスが正しいという意見も なんとも言えないかも。
- 854 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 14:39:08.92 ID:ozvKRveg.net]
- 言うほど変態か?
JSによるOOPの実装方法や、即値を型として扱うTypeScriptの特性を十分に理解してないと new () => Tとかkeyofなんかは分かりにくいかもしれないけど、それはGenerics以前の問題だろ 基本的には必要以上の驚きのない自然な仕様だと思うよ
|

|