X



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

■ このスレッドは過去ログ倉庫に格納されています
0663デフォルトの名無しさん
垢版 |
2018/01/17(水) 18:38:24.63ID:XaYj/w5S
>>658
ほんとにな。
ラムダ一つとったって型なし、型あり
型にしたって、型に依存する型、型に依存する項(関数など)、項に依存する型とか色々あるのに。
0665デフォルトの名無しさん
垢版 |
2018/01/17(水) 21:11:15.44ID:zdlnY+SA
>>653
書きにくいから、Python の公式文書では lambda で書いたコードを
手続き型の for ループへ書き換えることを推奨している

https://docs.python.jp/3/howto/functional.html
0666デフォルトの名無しさん
垢版 |
2018/01/17(水) 21:34:21.77ID:zdlnY+SA
>>656
あれれ、日本国内ではそういう認識が浸透してるの?

世界的には Python の lambda が欠陥であることは広く知られていて、
改善に向けた議論も重ねられたけど、結局、作者のGuido氏が
「解けないパズル(unsolvable puzzle)」と匙を投げたという残念な
結論のまま現在に至っているという共通認識があります

https://mevius.5ch.net/test/read.cgi/tech/1415419907/197/

やっぱり日本在住の Pythonista がガラパゴスなのは昔から同じですね

http://mevius.2ch.net/test/read.cgi/tech/1345123070/70-71/
0667デフォルトの名無しさん
垢版 |
2018/01/17(水) 22:01:34.45ID:jFkmgXk5
python のラムダの使い道ってほとんどがソートに渡す比較関数くらいだと思う。
0668デフォルトの名無しさん
垢版 |
2018/01/17(水) 22:47:35.07ID:I48MtSJA
世界的な認識のソースでも貼ってそうな場所にあるリンクが2chの別スレへのリンクで困惑している
0669デフォルトの名無しさん
垢版 |
2018/01/18(木) 05:27:53.26ID:zo82h2qj
Pythonあまり知らんけど、上のリンク見てて思ったのは、

1. 自分で高階関数を作れない(ラムダ式が利用できる関数が少ないと書いてある)
2. where節みたいなスコープの限定されたローカルな書き捨ての関数を用意する文法がない(読みにくいでしょ?とか書いてある)

この辺の縛りがあるからでないかい?
0671デフォルトの名無しさん
垢版 |
2018/01/18(木) 21:25:08.77ID:oG29giIx
関数型っのがどういう定義かは分からないけれど、
HaskellとPythonを比べると、パターンマッチが
なくて再帰が書きにくいと感じたり、
基本破壊的だから、わざわざ非破壊で書くのが
めんどくさいと感じる。

内包表記は似ていて良いかな。
0672デフォルトの名無しさん
垢版 |
2018/01/19(金) 19:12:49.43ID:ih0w0grk
Schemeのマクロ定義でパターンマッチを使えるがすごい不人気だったよ
おそらくパターンマッチのアルゴリズムが透けて見えないと人気出ないよ
0673デフォルトの名無しさん
垢版 |
2018/01/20(土) 08:12:20.84ID:hxs4OOGh
うちのプログラマは大半がコトリンに移ったのでわしらラストを使うことにした
0676デフォルトの名無しさん
垢版 |
2018/01/20(土) 17:28:38.29ID:JZVVUERo
理論的てのが分からんけど、例えばリストを引数にとる関数なら、
空リストとSuccの場合を定義しとけば、帰納的に任意のリストについての適用結果が求められる、
とかそういうの?
0677デフォルトの名無しさん
垢版 |
2018/01/20(土) 18:09:55.87ID:grrE5KFF
評価順序とかモチっと低いレイヤーでの動作規定ってことでないの?
ABIレベルでのさ。
0679デフォルトの名無しさん
垢版 |
2018/01/20(土) 20:48:41.14ID:I76mD3dR
>>676
そうそうそういうの
関数型ってって原理的にはあらゆるものが原始的な計算原理に還元できるものって理解してんだけど
パターンマッチはそういう裏付けあるのかなって疑問
0681デフォルトの名無しさん
垢版 |
2018/01/20(土) 21:02:06.68ID:4frS9VE4
補足
パターンマッチは場合分け、つまり条件分岐そのものであり、
通常はそれ自体が原始的な計算原理の一つとして定義されるってことだぞ
だから裏付けなんぞ必要ない
0682デフォルトの名無しさん
垢版 |
2018/01/20(土) 21:09:03.16ID:zaN+pP6E
学術的なことは分からないけども、静的型のパターンマッチは網羅性を
コンパイル時にチェックしてくれることが多くて
それが凄くありがたい

動的型言語にパターンマッチを持って来ても上手くいかないのは、
上のメリットが得られないからでは?
0683デフォルトの名無しさん
垢版 |
2018/01/20(土) 21:28:06.72ID:L/NwSAXQ
>>679
上の人が書いてるように、ただの場合分けだと思う。ただ、>>682の人も書いてますが、本当に網羅しているか、を考えると理論が出てくる気がする。

定義域の型が、型コンストラクタで定義されてれば、そいつら全てについて場合分けする、
で、そいつらも型コンストラクタが入ってれば、、てのを続けていけば、全てについて網羅的な場合分けが出来る。

言葉だとわかりにくいですが、Agdaの動画を見るといいと思います。

定理を証明するのに、上の場合分けを考慮する必要があって(漏れたら困りますよね?)、
実際EmacsのAgdaモードだとそういうのを勝手に展開してくれるコマンドがあり、
ゲーム感覚で証明してく感じ。

で、カリーハワード対応を考えると、関数の定義も結局は同じで、実際同じコマンドを使って進めてくことになる。その流れでやれば、後で漏れてる云々は問題にならない。

こんな感じですかね?
0684デフォルトの名無しさん
垢版 |
2018/01/20(土) 22:20:04.44ID:4frS9VE4
>>682
動的言語はデータクラスをほとんど使わず、辞書や配列を生で扱うことが多いからじゃないかな
型で分岐するケースがそもそも少ないし、when Some a みたいにパターンマッチと同時に要素を抽出したくても抽出の仕方が定義されていない
0686デフォルトの名無しさん
垢版 |
2018/01/21(日) 00:17:54.03ID:DgAEmkFM
パターンマッチで変数にバインドするところとかあれってどう還元できんですかね?
0687デフォルトの名無しさん
垢版 |
2018/01/21(日) 01:01:46.61ID:PzzAcO+j
・頭文字が大文字ならコンストラクタ (引数0個以上)
・そうでなければ変数 (引数なし)
少なくともこの仕様を守れば動的言語でもパターンマッチできるよ
0688デフォルトの名無しさん
垢版 |
2018/01/21(日) 01:02:49.35ID:2R9CDqfY
難しく考える必要はない
タプルは関連する複数の値をまとめて扱ってるだけ
レコードはタプルに型名というラベル値が付いただけ
型によるパターンマッチはその型名で条件分岐してるだけ
変数へのバインドはタプルの特定の要素の値にに別名を付けただけ
0690デフォルトの名無しさん
垢版 |
2018/01/21(日) 06:13:50.88ID:pnNTWTyQ
>>682
動的言語どうこうではなく、オブジェクト指向の情報隠蔽とパターンマッチの相性が悪い。
アクセス制御をかいくぐってデータ構造にマッチさせるぐらいなら
オブジェクトを受け取ってからメソッド叩いたり条件分岐したほうがマシ。
0691デフォルトの名無しさん
垢版 |
2018/01/21(日) 10:42:33.20ID:kGWmn81W
>>690
SuccessとFailをパターンマイッチングするんじゃなくて
class Success implements Resultと
class Fail implements Resultみたいにしろ
ってこと?
0692デフォルトの名無しさん
垢版 |
2018/01/21(日) 11:06:54.37ID:I3ORKf0i
本物のオブジェクト指向は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;}
0697デフォルトの名無しさん
垢版 |
2018/01/21(日) 23:54:04.18ID:U0xKcFDq
多次元配列と第一級関数をサポートしている静的言語ってなんかあったっけ?
0702デフォルトの名無しさん
垢版 |
2018/01/24(水) 10:06:55.58ID:Gs9CrZMb
>>701
多次元配列サポートしてる言語なんて他にはFortran, R, Python, Julia, Racketくらいしか思いつかない
第一級関数は最近増えて来てるけどFortranみたいな古い言語はだいたいサポートしてない
0704デフォルトの名無しさん
垢版 |
2018/01/24(水) 10:30:59.45ID:Gs9CrZMb
>>703
行列計算とか、その他数値的な解析がめちゃくちゃ書きやすくなる。
いわゆる数値解析や流行りの機械学習からゲーム開発まで、くまなくアルゴリズムが書きやすくなるぜ
0705デフォルトの名無しさん
垢版 |
2018/01/24(水) 10:44:28.83ID:tYoa+WgF
サポートてのは、数値計算でよく使う引数が2の関数と、そういう関数とと中置演算子との間の糖衣構文が標準でオーバーロード気味に存在するってことですかね?
0706702
垢版 |
2018/01/24(水) 10:59:06.24ID:J/V7RjN6
>>704
Racket挙げてるし中置演算子は重要度低いけど、よく使う関数はチューニングされたものを置いておいて欲しいな

Numpyだって標準ライブラリじゃないし、最悪標準ライブラリじゃなくてもいいけど、「数値計算するなら常識的に考えてこれ」という一つに定まっていてほしいな。
あるライブラリはEigenに依存しているが他のあるライブラリはublasに依存してるみたいなのはやめて欲しい
0707702
垢版 |
2018/01/24(水) 10:59:37.34ID:J/V7RjN6
間違えた。
安価は>>705
0708デフォルトの名無しさん
垢版 |
2018/01/24(水) 11:04:32.91ID:RrrJ1nlK
>>702
良かった。言語として普通にあるもんだと思ってたから
無いことを想像したこともなかった。
0710デフォルトの名無しさん
垢版 |
2018/01/24(水) 11:24:52.80ID:veFPPCA3
Pythonは多次元インデックスをオーバーロードできるけど組み込みの多次元配列は無い
PythonレベルのサポートでいいならKotlinも同等だね
0711デフォルトの名無しさん
垢版 |
2018/01/24(水) 11:58:57.43ID:apJvYiuW
そういえばExcel方眼紙もある意味二次元をサポートしてるな
Excelの異常な人気の原因はそこか
0712デフォルトの名無しさん
垢版 |
2018/01/24(水) 19:16:29.18ID:CULWU8L2
義務教育に向けて親もプログラミングやっときたい、どれが良い?
Pythonとかよく目にするけど、と聞かれた。

どう答える?
0713デフォルトの名無しさん
垢版 |
2018/01/24(水) 19:30:37.89ID:D4W5cGwF
相手が挙げて来た言語のメリットを適当に言ってそのまま勧めれば良い
親が教えるためにやる言語なんて何でも良いし、違いがわかる頃には子供は卒業してる
選ぶのも面倒くさい
0714デフォルトの名無しさん
垢版 |
2018/01/24(水) 19:50:08.15ID:N2tfbGLJ
>>712
まずはExcelのVLOOKUPを使いこなせるようになれ
次はVBAをやれ
でいいよ
教える側が何の役に立つのか分からないまま人に教えるなんて全く何の意味もない
0715デフォルトの名無しさん
垢版 |
2018/01/24(水) 20:27:01.77ID:0VEJNLN9
>>712
教育ママに特定の言語やらせて認識を固定させんな、むしろ子供に害悪だろ
数学パズルでもやらせとけ
0716デフォルトの名無しさん
垢版 |
2018/01/24(水) 20:29:15.40ID:c9tmIiAF
子供にはScratchをやらせることになるらしいから、親もScratchをやればいいじゃん
0717 ◆QZaw55cn4c
垢版 |
2018/01/24(水) 20:39:13.05ID:m3QL6muE
>>712
やはり再帰的思考が勘所かと考えていますので、scheme をお勧めしようかと思っています
0718デフォルトの名無しさん
垢版 |
2018/01/25(木) 01:24:29.68ID:mR4+Kf/H
>>712
Haskel
関数型を理解できないバカはプログラミングする資格も意味もなし
保守困難なウンコをひり出すだけのゴミは消えろ

と伝えてくれ
0719デフォルトの名無しさん
垢版 |
2018/01/25(木) 02:32:13.16ID:uqKgsWDy
>>718
Haskellの綴りも正しく書けない池沼は文章を書く資格も意味もなし
無意味なウンコをひり出すだけのゴミは消えろ
0721デフォルトの名無しさん
垢版 |
2018/01/25(木) 14:09:07.50ID:ArcwQAgj
Excelはビジュアルリアクティブプログラミング環境と言えばまあ間違ってはないんだけど
二次元配列以外の構造の扱いが難しすぎて、学習用にしてしまうと
他のデータ構造を学ぶ機会がないまま何でも二次元配列に落としこむ悪癖がついてしまいそうで
0722デフォルトの名無しさん
垢版 |
2018/01/25(木) 14:31:25.81ID:NsBjyJ7C
>>721
人間が無理なく扱えるデータは二次元の表が限界なんだよ
考えてみろ
お前がよく使う構造体やクラスのリストや辞書は実質二次元の表だろ
オブジェクト指向では直接深く階層掘ったアクセスは嫌われるだろ?
なんだかんだ格好いい理屈を付けても、結局人間にはExcelのデータ構造が馴染むんだよ
0723デフォルトの名無しさん
垢版 |
2018/01/25(木) 14:38:39.64ID:ArcwQAgj
>>722
再帰的 or 多相な構造どうすんのよ、ってのはまあExcelの用途では滅多にないとしても
単純に三次元配列が欲しい時もあるし
Sheet増やしだすと急に面倒くさくなるんだよなあ
0725デフォルトの名無しさん
垢版 |
2018/01/25(木) 17:16:48.70ID:sWzOL5fe
3次元以上を汎用に使おうとするとSQLみたいだったり tensor flow だったり
かなりめんどくさいインターフェイスになるのはしゃーない。
0726デフォルトの名無しさん
垢版 |
2018/01/25(木) 17:55:47.33ID:R+9hEl/X
まぁ、Haskellで作られたものより、Excelで作られたモノのほうが多いしな(笑)
純関数型(笑)
0728 ◆QZaw55cn4c
垢版 |
2018/01/25(木) 22:05:59.50ID:LX8HI+AO
>>727
変数宣言(型宣言ではない)だけでいいと思うが、それだけでもいいから、事前チェックを可能にしてほしいなあ
python のバイトコンパイル機能は変数名をチェックしてくれるのでしょうか?
0730デフォルトの名無しさん
垢版 |
2018/01/26(金) 01:29:50.06ID:2fuI1BST
headerをincludeしてチェックする言語は簡単だけど
コンパイル済みのライブラリの中身を見て名前をチェックする言語は大変そうだ
コンパイル後も情報を全部残しておかないといけない
0731デフォルトの名無しさん
垢版 |
2018/01/26(金) 16:21:27.98ID:Zz9xFin2
変数宣言を省略できる機能(スペルミスが検出できない)と、型付けは別だよね?
昔のFortranやBASICは変数はいきなり使っていいけど名前で型が決まる静的型だったし
0732デフォルトの名無しさん
垢版 |
2018/01/26(金) 16:36:58.42ID:G7ZCkEjP
宣言がない変数は、省略ではなく他のファイルで宣言している可能性がある
そのファイルをincludeするか、全てのファイルを検索する必要がある
0734デフォルトの名無しさん
垢版 |
2018/01/27(土) 14:31:34.34ID:fjEoblON
下がってから言っても遅いな
レベル高かった頃に、なにこれ高いって評価できる奴が勝つ
0735デフォルトの名無しさん
垢版 |
2018/01/27(土) 14:40:54.49ID:7K+kXdeY
まぁ、その時から無駄なつっかかりしかできない奴ばっかだったし仕方ないんだろうな。
今更option explicitじみた話に戻るとは。
0737デフォルトの名無しさん
垢版 |
2018/01/28(日) 15:51:11.09ID:CWAHXL7y
自分で書いたコードが三ヵ月後に読めないっていうやつは素人
プロは三ヵ月後の記憶喪失を織り込んでる
0739デフォルトの名無しさん
垢版 |
2018/01/29(月) 22:16:09.55ID:4480+Jxl
そういう足を引っ張る人には保守受注の代わりに
ベーシックインカムをあげたらいいんじゃないかと言われている
足を引っ張る悪人より善良な怠け者の方がいい
0740デフォルトの名無しさん
垢版 |
2018/01/30(火) 01:45:49.07ID:ZcZnTiUX
しょーもない理想論はいらんねん
こっちはきっちり世間様に仕事回してんねんで
頭の悪いガキは黙っとき
0741デフォルトの名無しさん
垢版 |
2018/01/30(火) 01:47:45.52ID:ZcZnTiUX
ソースがきれい → オタクの自己満足
ソースがきたない → 工数取れて残業代も出る、みんなニッコリ

これが現実やで
0743デフォルトの名無しさん
垢版 |
2018/01/30(火) 14:43:26.40ID:xaKIrtPB
その理屈だと、まるで必要もない次世代言語で書くやつみたいだな。
汚いソース書くやつは。
0744デフォルトの名無しさん
垢版 |
2018/01/31(水) 23:31:38.87ID:Rp2Mauf0
次世代言語で書くだけならいいんだよ
故意に汚くするとはいってないから、改善する可能性がある
故意とただの偶然とでは罪の重さが違う
0745デフォルトの名無しさん
垢版 |
2018/02/01(木) 08:43:21.74ID:AVafL46K
故意にその言語で書いてる以上、もう偶然でもなんでもないだろ。

ちゃんとその言語のメリット、デメリット含めて布教してから使うべきだと思うが。
0746デフォルトの名無しさん
垢版 |
2018/02/01(木) 11:05:23.20ID:niJJgdbA
ちゃんとする可能性があるならいい
その可能性をわざと排除するなら悪質
最初からそう言ってるんだろ
0747デフォルトの名無しさん
垢版 |
2018/02/01(木) 13:10:20.37ID:Bj9uVLC2
まあ大体がカスな開発体制に問題があるところに
新しい言語なら問題解決できる!
とかめちゃくちゃな広告が出回って導入、失敗っつークソパターンがここ20,30年の間繰り返されてるわけだからな。
0749デフォルトの名無しさん
垢版 |
2018/02/03(土) 02:04:53.95ID:VC8JN1NA
JSに依存するのはいいがGHCがな
もしもF#がGHCに依存していたら面倒臭いじゃないか
0752デフォルトの名無しさん
垢版 |
2018/02/14(水) 20:27:03.68ID:SwEfqZxS
ASM.net
0753デフォルトの名無しさん
垢版 |
2018/02/15(木) 23:40:47.93ID:yLr3787F
clojure やれよ?
0754デフォルトの名無しさん
垢版 |
2018/02/16(金) 00:35:29.80ID:JK/MGoqE
気の科学 ★朝は気合いで起きる★ 雑学


https://youtu.be/E6lvPide0JA
0755デフォルトの名無しさん
垢版 |
2018/02/18(日) 01:30:59.56ID:5P/pcqvC
>751
これ初めて見た
0756デフォルトの名無しさん
垢版 |
2018/02/18(日) 15:38:35.68ID:CW1UlThv
なんかTypeScriptのジェネリクスがどんどん変態じみてきたんだけど、ジェネリクスってこういうもんなの?
これならgoに乗んなくていいなぁ
0757デフォルトの名無しさん
垢版 |
2018/02/18(日) 15:51:20.83ID:AYB00j0e
>>756
欲求は際限なく広がって、そしてゴミの塊みたいな仕様になるもんだ。
ずっと前からTypeScriptは手段と目的をどっかで履き違えたと言ってたが、最近シャレになってない。

Goの割り切りは納得に値するよ。あったら便利なのは認めるけど。
Cppのtemplateみたいに、それだけでチューリング完全になってしまう前に、最初から入れない、やるならgenerateで別立てで勝手にやれと言う割り切りしたのは英断だと思う。
0758デフォルトの名無しさん
垢版 |
2018/02/18(日) 17:25:12.30ID:CW1UlThv
>>757
ジェネリクス関連のエラーメッセージは本当に意味がわかんないよね。
ユーザー視点ではimmutable.jsとかでも補完が効くのは便利になっていいんだけど、
いざ型関連エラーが出た時にエラーメッセージから原因を予測するのが困難なんだよね。

rustもあんな感じなの?
正直TypeScriptはエラーメッセージをわかりやすくする方向に軌道修正頼んます。
0759デフォルトの名無しさん
垢版 |
2018/02/18(日) 18:16:19.28ID:WV1p31YW
>>758
変性注釈とか、やりたいことはわかるし、なぜ必要かもわかるが、一方でjsとどんどん乖離していって、jsのプロジェクトと繋げるときに結局any使うことになったり、グダグダも良いところだと思う。
TSだけでもの作るんなら、良いと思うが、そうなるとJavaScriptにコンパイルできる必要もなく、逆に早くwasmなんかに対応しろとか、ネイティブにTSの良いところを保ったまま実行できる環境出せとか、色々文句が言いたいけど、
全部ほったらかしにされてるからな。
ずーっと言語の改良してる。
0760デフォルトの名無しさん
垢版 |
2018/02/18(日) 18:37:05.69ID:Ct2k6iqr
一方的にjsのライブラリを使用する分には問題ないだろうし、その資産にただ乗りできることこそ
jsとの相互運用性を維持する理由だろう。
言語仕様としては奇麗だけどライブラリが揃わなくて実用性がいまいち、みたいになるよりは。
0761デフォルトの名無しさん
垢版 |
2018/02/18(日) 19:25:55.39ID:WV1p31YW
>>760
jsのライブラリ側が自由な感じのライブラリだと定義ファイルが無茶苦茶ややこしいものになったりするし、なかなか微妙だけどな。
ライブラリが揃わなくてイマイチ、は確かに無いか。ほとんどタダ乗り出来るからなぁ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況