次世代言語Part8[Haskell Rust Kotlin TypeScript]

1デフォルトの名無しさん2017/12/01(金) 23:08:21.45ID:FxdZTiuZ
スレタイ以外の言語もok

前スレ
次世代言語Part7[Go Rust Swift Kotlin TypeScript]
http://mevius.5ch.net/test/read.cgi/tech/1508403098/

722デフォルトの名無しさん2018/01/25(木) 14:31:25.81ID:NsBjyJ7C
>>721
人間が無理なく扱えるデータは二次元の表が限界なんだよ
考えてみろ
お前がよく使う構造体やクラスのリストや辞書は実質二次元の表だろ
オブジェクト指向では直接深く階層掘ったアクセスは嫌われるだろ?
なんだかんだ格好いい理屈を付けても、結局人間にはExcelのデータ構造が馴染むんだよ

723デフォルトの名無しさん2018/01/25(木) 14:38:39.64ID:ArcwQAgj
>>722
再帰的 or 多相な構造どうすんのよ、ってのはまあExcelの用途では滅多にないとしても
単純に三次元配列が欲しい時もあるし
Sheet増やしだすと急に面倒くさくなるんだよなあ

724デフォルトの名無しさん2018/01/25(木) 14:41:15.02ID:NsBjyJ7C
>>723
再帰なんか同じ表の行番号を持たせるだけだろ

725デフォルトの名無しさん2018/01/25(木) 17:16:48.70ID:sWzOL5fe
3次元以上を汎用に使おうとするとSQLみたいだったり tensor flow だったり
かなりめんどくさいインターフェイスになるのはしゃーない。

726デフォルトの名無しさん2018/01/25(木) 17:55:47.33ID:R+9hEl/X
まぁ、Haskellで作られたものより、Excelで作られたモノのほうが多いしな(笑)
純関数型(笑)

727デフォルトの名無しさん2018/01/25(木) 20:01:29.48ID:0RuyxExF
>>719
このようなtypoを防ぐためにも強い型付けが必要なんだよ

728 ◆QZaw55cn4c 2018/01/25(木) 22:05:59.50ID:LX8HI+AO
>>727
変数宣言(型宣言ではない)だけでいいと思うが、それだけでもいいから、事前チェックを可能にしてほしいなあ
python のバイトコンパイル機能は変数名をチェックしてくれるのでしょうか?

729デフォルトの名無しさん2018/01/25(木) 22:42:04.62ID:uaT/xfzY
flake8を使えば

730デフォルトの名無しさん2018/01/26(金) 01:29:50.06ID:2fuI1BST
headerをincludeしてチェックする言語は簡単だけど
コンパイル済みのライブラリの中身を見て名前をチェックする言語は大変そうだ
コンパイル後も情報を全部残しておかないといけない

731デフォルトの名無しさん2018/01/26(金) 16:21:27.98ID:Zz9xFin2
変数宣言を省略できる機能(スペルミスが検出できない)と、型付けは別だよね?
昔のFortranやBASICは変数はいきなり使っていいけど名前で型が決まる静的型だったし

732デフォルトの名無しさん2018/01/26(金) 16:36:58.42ID:G7ZCkEjP
宣言がない変数は、省略ではなく他のファイルで宣言している可能性がある
そのファイルをincludeするか、全てのファイルを検索する必要がある

733デフォルトの名無しさん2018/01/27(土) 13:04:44.52ID:7uBpZq93
レベル下がったなぁ

734デフォルトの名無しさん2018/01/27(土) 14:31:34.34ID:fjEoblON
下がってから言っても遅いな
レベル高かった頃に、なにこれ高いって評価できる奴が勝つ

735デフォルトの名無しさん2018/01/27(土) 14:40:54.49ID:7K+kXdeY
まぁ、その時から無駄なつっかかりしかできない奴ばっかだったし仕方ないんだろうな。
今更option explicitじみた話に戻るとは。

736デフォルトの名無しさん2018/01/27(土) 22:13:06.80ID:RNgYnDaT
>>734
天井Lみたいなこと言うな

737デフォルトの名無しさん2018/01/28(日) 15:51:11.09ID:CWAHXL7y
自分で書いたコードが三ヵ月後に読めないっていうやつは素人
プロは三ヵ月後の記憶喪失を織り込んでる

738デフォルトの名無しさん2018/01/28(日) 23:40:40.83ID:ZERk9zo5
保守受注独占するために汚くするんやぞ

739デフォルトの名無しさん2018/01/29(月) 22:16:09.55ID:4480+Jxl
そういう足を引っ張る人には保守受注の代わりに
ベーシックインカムをあげたらいいんじゃないかと言われている
足を引っ張る悪人より善良な怠け者の方がいい

740デフォルトの名無しさん2018/01/30(火) 01:45:49.07ID:ZcZnTiUX
しょーもない理想論はいらんねん
こっちはきっちり世間様に仕事回してんねんで
頭の悪いガキは黙っとき

741デフォルトの名無しさん2018/01/30(火) 01:47:45.52ID:ZcZnTiUX
ソースがきれい → オタクの自己満足
ソースがきたない → 工数取れて残業代も出る、みんなニッコリ

これが現実やで

742デフォルトの名無しさん2018/01/30(火) 10:52:36.78ID:2Eamtv1n
そんなことしてるから他国の技術に駆逐されるんだよ。。

743デフォルトの名無しさん2018/01/30(火) 14:43:26.40ID:xaKIrtPB
その理屈だと、まるで必要もない次世代言語で書くやつみたいだな。
汚いソース書くやつは。

744デフォルトの名無しさん2018/01/31(水) 23:31:38.87ID:Rp2Mauf0
次世代言語で書くだけならいいんだよ
故意に汚くするとはいってないから、改善する可能性がある
故意とただの偶然とでは罪の重さが違う

745デフォルトの名無しさん2018/02/01(木) 08:43:21.74ID:AVafL46K
故意にその言語で書いてる以上、もう偶然でもなんでもないだろ。

ちゃんとその言語のメリット、デメリット含めて布教してから使うべきだと思うが。

746デフォルトの名無しさん2018/02/01(木) 11:05:23.20ID:niJJgdbA
ちゃんとする可能性があるならいい
その可能性をわざと排除するなら悪質
最初からそう言ってるんだろ

747デフォルトの名無しさん2018/02/01(木) 13:10:20.37ID:Bj9uVLC2
まあ大体がカスな開発体制に問題があるところに
新しい言語なら問題解決できる!
とかめちゃくちゃな広告が出回って導入、失敗っつークソパターンがここ20,30年の間繰り返されてるわけだからな。

748デフォルトの名無しさん2018/02/01(木) 15:37:35.21ID:suqSmKNo
Elm はどう?
ここ見てたら興味出てきた
https://nulab-inc.com/ja/blog/typetalk/elm-introduction-tutorial/

749デフォルトの名無しさん2018/02/03(土) 02:04:53.95ID:VC8JN1NA
JSに依存するのはいいがGHCがな
もしもF#がGHCに依存していたら面倒臭いじゃないか

750デフォルトの名無しさん2018/02/12(月) 17:15:27.49ID:NkUQn5xe

751デフォルトの名無しさん2018/02/12(月) 17:16:33.56ID:NkUQn5xe

752デフォルトの名無しさん2018/02/14(水) 20:27:03.68ID:SwEfqZxS
ASM.net

753デフォルトの名無しさん2018/02/15(木) 23:40:47.93ID:yLr3787F
clojure やれよ?

754デフォルトの名無しさん2018/02/16(金) 00:35:29.80ID:JK/MGoqE
気の科学 ★朝は気合いで起きる★ 雑学


https://youtu.be/E6lvPide0JA

755デフォルトの名無しさん2018/02/18(日) 01:30:59.56ID:5P/pcqvC
>751
これ初めて見た

756デフォルトの名無しさん2018/02/18(日) 15:38:35.68ID:CW1UlThv
なんかTypeScriptのジェネリクスがどんどん変態じみてきたんだけど、ジェネリクスってこういうもんなの?
これならgoに乗んなくていいなぁ

757デフォルトの名無しさん2018/02/18(日) 15:51:20.83ID:AYB00j0e
>>756
欲求は際限なく広がって、そしてゴミの塊みたいな仕様になるもんだ。
ずっと前からTypeScriptは手段と目的をどっかで履き違えたと言ってたが、最近シャレになってない。

Goの割り切りは納得に値するよ。あったら便利なのは認めるけど。
Cppのtemplateみたいに、それだけでチューリング完全になってしまう前に、最初から入れない、やるならgenerateで別立てで勝手にやれと言う割り切りしたのは英断だと思う。

758デフォルトの名無しさん2018/02/18(日) 17:25:12.30ID:CW1UlThv
>>757
ジェネリクス関連のエラーメッセージは本当に意味がわかんないよね。
ユーザー視点ではimmutable.jsとかでも補完が効くのは便利になっていいんだけど、
いざ型関連エラーが出た時にエラーメッセージから原因を予測するのが困難なんだよね。

rustもあんな感じなの?
正直TypeScriptはエラーメッセージをわかりやすくする方向に軌道修正頼んます。

759デフォルトの名無しさん2018/02/18(日) 18:16:19.28ID:WV1p31YW
>>758
変性注釈とか、やりたいことはわかるし、なぜ必要かもわかるが、一方でjsとどんどん乖離していって、jsのプロジェクトと繋げるときに結局any使うことになったり、グダグダも良いところだと思う。
TSだけでもの作るんなら、良いと思うが、そうなるとJavaScriptにコンパイルできる必要もなく、逆に早くwasmなんかに対応しろとか、ネイティブにTSの良いところを保ったまま実行できる環境出せとか、色々文句が言いたいけど、
全部ほったらかしにされてるからな。
ずーっと言語の改良してる。

760デフォルトの名無しさん2018/02/18(日) 18:37:05.69ID:Ct2k6iqr
一方的にjsのライブラリを使用する分には問題ないだろうし、その資産にただ乗りできることこそ
jsとの相互運用性を維持する理由だろう。
言語仕様としては奇麗だけどライブラリが揃わなくて実用性がいまいち、みたいになるよりは。

761デフォルトの名無しさん2018/02/18(日) 19:25:55.39ID:WV1p31YW
>>760
jsのライブラリ側が自由な感じのライブラリだと定義ファイルが無茶苦茶ややこしいものになったりするし、なかなか微妙だけどな。
ライブラリが揃わなくてイマイチ、は確かに無いか。ほとんどタダ乗り出来るからなぁ。

762デフォルトの名無しさん2018/02/18(日) 22:15:41.08ID:+Qsqi9wm
>>761
せめて関数のオーバーロード定義みたいなことが出来ればコードが整理しやすくなると思うんだよね。

つまり
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ってこれできんよね。

763デフォルトの名無しさん2018/02/18(日) 22:19:58.51ID:+Qsqi9wm
あと詳しい人に聞きたいんだけどやっぱりジェネリクス一つとっても
言語によって全然仕様が違うのかね?

だとしたらGoはコードジェネレートと組み合わせも考慮したちょうどいい便利さの
ジェネリクスというのも考えていて実装を見送ってるのかも。

でもGoにはそれ以前にnull安全を実装してほしい気がするが。
レシーバがnullの可能性があったりnull周りに罠があるんだよねGoは

764デフォルトの名無しさん2018/02/18(日) 22:47:38.32ID:Ct2k6iqr
>>762
オーバーロードってまさにそんな感じでできた気がするが。

765デフォルトの名無しさん2018/02/18(日) 23:30:02.62ID:/vdt0GUK
ジェネリクスは途中から入れるようなもんじゃないと思うがね
型自体はフラットな構造で、階層構造はHaskellみたいに型の境界(型クラス)として作ると綺麗にまとまりやすい
型≒クラスで、型自体に階層構造を作ってるような言語だと、ジェネリクスの使い方が面倒よ
Javaの<T extends ClassFoo>とかC#のin/outとかは元の型システムに合わせて入れないといけない面倒な部分

TSの元々の型システムはよく知らないけど、ダックタイピングできるならジェネリクス入れる必要がないし、
クラスがあったり型に階層構造があるなら面倒なのはしょうがない

766デフォルトの名無しさん2018/02/18(日) 23:45:12.91ID:LabDqOSD
むしろJavaScriptさんが悔い改めるべきではないか?

767デフォルトの名無しさん2018/02/18(日) 23:52:24.01ID:AYB00j0e
Goでレシーバがnilになれるのは案外便利だぞ。
あれは罠ではない。

型や型クラスに階層構造持つのはいつでも便利なわけではないと言うか、結局コンパイラ都合を押し付けられてるだけな気がするけどな。
その辺、後出しジャンケンできるGoのinterfaceの方が楽な事が多い。

768デフォルトの名無しさん2018/02/19(月) 00:07:59.55ID:B+b1Q4Nq
ジェネリクスは、コード上別の箇所に出現する型Aと型Bが同一であることを明示することにより、型情報の損失を避けるために使うんだよ
ダックタイピングは関係ない
C++やHaskellをやってる人は>>765みたいに混同しがちだけど、JavaやC#だと多態とGenericsをわりとはっきり区別する文化がある
TypeScriptのGenericsも同様に、型の同一性を示すマーカーとしての性格が強いね

769デフォルトの名無しさん2018/02/19(月) 01:32:35.15ID:1YgzgKOj
「型が同一である」の定義がわからない
犬型と猫型は異なるともいえるし同じ動物型ともいえる
この辺の仕様を捨ててからジェネリクスを追加するのが基本

もし両方入れてゴミ言語ができたら
捨てられないのが原因ともいえるし追加したのが原因ともいえる

770デフォルトの名無しさん2018/02/19(月) 01:40:02.40ID:U+qaWnxw
それに対して型の制限を型でなくしたのがHaskellの型クラスやRustのtraitだし、型を分解する事で非同一性を示すのが多くの言語にあるパターンマッチじゃないの

771デフォルトの名無しさん2018/02/19(月) 07:49:12.96ID:HJ1z9rHd
型階層のある言語でアドホックに型クラスをやりたいなら別途Comparableみたいなインスタンスを受け取るようにするだけだろ
ジェネリクスと区別するっていうのは端的にはそういうことで、実際に引数として明確に分かれることになる
JavaやC#, TSだと型引数に制約を付けることで中途半端に似たことができてしまうのが微妙に直行してなくてダサいけど、それは基本的にあまり使われない機能

7727712018/02/19(月) 07:54:42.45ID:HJ1z9rHd
すまんComparatorの間違いだ
補足しとくと、直行してないというのは例えば具体的には <T extends Comparable> と (T obj, Comparator<T> comparator) みたいなののことな

新着レスの表示
レスを投稿する