次世代言語10[Rust Swift TypeScript Dart]

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/04/25(水) 07:02:27.60ID:OmWDt0SE
スレタイ以外の言語もok

前スレ
次世代言語9[Haskell Rust Kotlin TypeScript Dart]
http://mevius.5ch.net/test/read.cgi/tech/1520298555/
2018/05/13(日) 15:50:11.19ID:bgY0d3zI
デタラメ言ってるだけだぞw
このスレの連中はホント騙されやすいな
2018/05/13(日) 16:00:43.94ID:bgY0d3zI
1次元のリニアなメモリをシーケンシャルに読むだけなのにブロック化とか
ここは物事の真偽もわからない初学者の集まりなんだからデタラメで混乱させるなよ
検証できることはちゃんと検証してから発言しよう
2018/05/13(日) 16:15:28.33ID:NXXuYZ+p
うわマジやん糞かよ死ねや
2018/05/13(日) 16:24:23.38ID:1GQ1TBB+
でも検証にはコストがあるからな
お前は嘘つきだと宣戦布告して戦争か裁判をやって勝つまでが検証です
535デフォルトの名無しさん
垢版 |
2018/05/13(日) 17:28:06.32ID:JK3lyAGE
xとy別々の配列じゃなくて
x0y0x1y1x2....のように並べるってことだよ。
そうするとメモリーアクセスが早くなる。
2018/05/13(日) 18:40:55.81ID:bgY0d3zI
>>535
コード読めよ
xとx掛けてるんだぞ
2018/05/13(日) 21:55:04.60ID:MDWbrDHx
検証もせずに適当に推測するが
>>457のHaskellの方がCより速いというのはループを1回で済ます最適化がされた結果であって、
1ループあたりの実際の速度はCの1/80の速度なのかもね
2018/05/13(日) 23:16:22.73ID:aRNPCfaw
Haskellが早いと言うかHaskellだと早く出来ることがあるって感じだろ
539デフォルトの名無しさん
垢版 |
2018/05/13(日) 23:53:00.06ID:eikXWKbu
そりゃそうだろ

言語によって得意な処理は違うし、プログラマの実力によっても変わる
数値計算に限定すればjuliaは手軽に書けて尚且つ実行速度も速かったりする
バカが書いたCのコードより天才が書いたHaskellのコードのほうが(多分)速い
言語の速度だけ比較してあーだこーだ言う前に
各言語に関する詳細な知識とコーディングの実力を身に着けるべし
2018/05/14(月) 00:07:25.34ID:NNbrsR8u
SEYANA
2018/05/14(月) 06:12:40.31ID:Hm1IiEDM
ドット積のような簡単な計算ならCPUの処理速度が速すぎて
メモリー転送速度がボトルネックになることは明らかだしな。
ハスケルの場合、ランダムな数値をメモリーに記録することなく
オンザフライで計算したのかもしれないな。
2018/05/14(月) 07:36:06.84ID:P8BYP3+b
ドット積が律速になることってある?
2018/05/14(月) 07:59:32.34ID:WfY57EXm
バイナリサイズも気になるけど。
と言うか、速い遅いはあんまり簡単に割り切るわけにいかんし、
推測より実測は確かだけど、その前に何を実測してるのか、
大体どれぐらいになるかをもう少し予測したほうがいいと思うんだけどな。
こういう小さい関数単位のベンチは特に。

最新の処理系は両方持ってないから俺出来ないけど、ネイティブコード比べたほうが良いのでは?
gccは(いろんな意味で)信じられない最適化かかってる事あるし。
2018/05/14(月) 08:36:31.93ID:zbYXMED5
>>542
HPCならなくはないけど、その場合は手計算で展開して前後の計算も含めたもっと大きなドメインで最適化するわな
単独でdotだけの最適化なんて、自分の息子を気持ちよくする以上の意味はない
545デフォルトの名無しさん
垢版 |
2018/05/14(月) 13:14:41.23ID:0aBfdvZZ
C++の定数式を使う。
2018/05/14(月) 17:04:14.47ID:ar4V5qZH
>>539
そういう話でしかないからそういう話だという指摘をしたんだろ
2018/05/14(月) 18:11:35.62ID:kUkLIG4O
SEYANA
2018/05/15(火) 07:41:24.21ID:cBszxXz8
ハード的なことは自分はよう知らんが、純粋関数のみで書いたところは、筋の良い関数への置き換えが利いてくれる、てことなのだろう。
知る限りだと、map、fold、filter、zipみたいな基礎的な高階関数と、配列更新はupdate関数を使っとけばその辺が勝手にかかるみたい。

>>457の例は、sumはfoldで、zipWithはzipとmap。

速度ガチ勢は満足しないだろうが、宣言的にやってる割に速度を出したければ、この辺りを気をつけてれば良い印象。

逆に気をつけないと、相当遅い。LazyとStrictも気をつける必要がある。
2018/05/15(火) 09:00:25.93ID:ykJK+It6
これはhaskellじゃなくて理系がバカなんだ
文系がhaskellを勉強しても速度のことなんて考えないだろう
2018/05/15(火) 15:12:17.78ID:+IcyTYky
このスレは何を議論するスレなんだ
2018/05/15(火) 15:24:27.98ID:RQo6Vb+e
雑段するぞ
552デフォルトの名無しさん
垢版 |
2018/05/15(火) 18:37:20.71ID:3hgL0M2i
SOYANA
553デフォルトの名無しさん
垢版 |
2018/05/15(火) 19:24:43.54ID:0x8zM7pd
>>550
次世代言語と言えば関数型、関数型と言えばHaskell、ホルホルホル。
2018/05/15(火) 19:50:21.10ID:dt28ByE7
>>549
理系が馬鹿ってことは文系が頭いいってこと?そんなバカな
2018/05/15(火) 20:03:43.73ID:TjuX/LAp
先入観は可能を不可能にするって二刀流の人が言ってた
2018/05/15(火) 20:20:31.80ID:maavPO86
このご時世理系文系なんて言ってるのもどうかと思うがね
2018/05/15(火) 21:18:11.07ID:+IcyTYky
>>553
くっさ。流石にそういう返答は求めとらん。性格悪すぎか
2018/05/15(火) 22:06:27.79ID:cAjQsfjh
理系文系で語る奴にはろくなものがイないはず
ソースは川上
2018/05/15(火) 22:38:41.36ID:TjuX/LAp
そのろくでなしを討ち取るか逃げ切られるか確定してないソースにはあまり意味がない
2018/05/16(水) 00:35:59.84ID:y71KiaeG
はてな民の悪口はやめロッテ
2018/05/16(水) 04:13:18.32ID:/r6FU1qw
>>548
加えて >>457 には left fold にしとかないと遅いよとある
理由はあまりに明白だからか触れられていないけど
ここはあまり実践に拘る人いないからわりとどうでもいいか
2018/05/16(水) 06:37:06.57ID:wZFh8fJh
コンパイル時と実行時で語る奴は速いよ
OOPと関数型で語る奴にはろくなものがいない
2018/05/16(水) 06:47:58.51ID:OmXLSXyH
LazyかStrictかってな。評価戦略も考えてかなならん。

まあ、Haskellも使いこなすには、それなりの背景知識がないとあかんという事だね。
2018/05/16(水) 07:09:06.16ID:wZFh8fJh
lazyは無限の計算を打ち切る
遅い計算をちょっと速くするだけの最適化とは次元が違う
2018/05/16(水) 07:20:15.91ID:mOBIQo/B
>>562
これは同意かな。
結局抽象論でドヤるの好きなだけなやつってのは
実測を嫌う傾向にあるから問題を引き起こす。
2018/05/16(水) 07:35:27.07ID:/r6FU1qw
>>564
初めから無限の計算をしないように書いた方が多くの場合(ずっと)速いのでないかみたいな話だろ
2018/05/16(水) 07:51:39.34ID:R9tYk9Qj
そんなlazy全否定するような話題だったのか
2018/05/16(水) 07:55:55.64ID:wZFh8fJh
そういう話題だったら初めからそう言えばいいのに
現実的には後出しが便利だから後出ししてる
現実を実測しよう
2018/05/16(水) 08:00:59.77ID:9/p4w1/n
いや後出しも何も>>457のブログにlazy遅いよねとか書いてあってそれについて話してるわけだし…
2018/05/16(水) 08:02:16.32ID:9/p4w1/n
と俺は思ってたんだが違うのか?
2018/05/16(水) 08:23:21.13ID:OmXLSXyH
あってるよ。
2018/05/16(水) 08:30:32.29ID:SZWziQ/v
もう少し真剣に考えてもいいんじゃないか?
誰も最適化が完璧に行われてる、の追試しないの?
ghcの最適化結果のバイナリをgdbで眺めるだけでも全然違うと思うが。

俺がやるとおま環でオラつくなとか言われるの目に見えてるから静観してるけどさ。
2018/05/16(水) 09:41:30.81ID:L2yt4rd4
お前の静観ってうるさいのなw
2018/05/16(水) 09:50:51.21ID:+AvdAm/t
例がクソすぎて正直興味わかない
2018/05/16(水) 09:51:48.57ID:ub+CyxOt
>>573
やめたれw
2018/05/16(水) 10:11:53.73ID:+AvdAm/t
これ正味のところコンパイラのバックエンドの性能比較にしかなってないし、
その差も最適化オプションの違いと想像できる範囲だもの
2018/05/16(水) 15:45:52.24ID:f5OfgQEL
うーん、だったら異なる言語の速度比較に説得力を持たせるためには、どんなルールを定めればいいの?
2018/05/16(水) 16:15:52.78ID:w3xM0aVb
お題を設定して、そのお題を解く実行速度でも競えば
2018/05/16(水) 17:11:19.52ID:nSjgdD8L
これは反対意見が多いと思うんだけど任意の問題について各々の言語で素直な(読み書きしやすい/一般的な)書き方で解いた際の速度比較が一番だと思ってる
コンパイルオプションレベルでの最適化はアリだと思うけどソースでの最適化なんてほんとにそれするの?っていうのあるし
2018/05/16(水) 17:35:38.66ID:JOa7NyYz
問題の難度が低すぎるから早押しクイズになってしまう
正解者が1名いるかいないかの難問なら速度はどうでもいいだろ
2018/05/16(水) 17:54:36.37ID:bvYagxcd
>>579
いや、そもそもソースを1つに限定しようとするのがダメだと思う
読みやすい(一般的な)コードと最適化を前提としたコードの両方を用意する
そうすれば両方のケースで比較できるようになる
あと、その任意の問題とやらも複数ケース用意する必要があるだろうな…
面倒臭いけどそれがベストだと思う
2018/05/16(水) 18:10:24.62ID:JOa7NyYz
>バカが書いたCのコードより天才が書いたHaskellのコードのほうが(多分)速い

一方ロシアは天才が書いたCのコードを用意した
2018/05/16(水) 18:51:37.22ID:w3xM0aVb
>>580
ある種の難問を解きやすいのが関数型言語のウリのはずだし、それはそれで一つの結果じゃない?
2018/05/16(水) 19:03:04.49ID:mn6BTyTm
それはそれとして
個人的に>>457の確認をしてみたいのだけど、
どんな main 書けばいいのか誰か教えてくれないか?

ghc -O2 で下記のようなコードをコンパイルすると
一切メモリ使わずレジスタだけで0.1ずつ増加させた数を積和していくからテストにならないし、
10M個の積和を100回実行するところも1回に省略される気しかしない…

https://ideone.com/gjFBNp

module Main (main) where
import Prelude hiding (sum, length, zipWith, map)
import System.Environment (getArgs)
import Data.Vector.Unboxed

test :: Data.Vector.Unboxed.Vector Double -> Double
test v = sum $ zipWith (*) v v

main :: IO ()
main = do
(n':_) <- getArgs
let n = read n' :: Int
let v1 = enumFromStepN 0.0 0.1 n
print n
print $ test v1
2018/05/16(水) 19:11:48.70ID:mn6BTyTm
いやごめん
Haskell スレで聞いてみます
2018/05/16(水) 19:50:33.80ID:mn6BTyTm
せっかくだから一応貼っておくと ghc -O2 は上記の sum zipWith をここまで最適化した

_c8Gb:
testq %r14,%r14 // 全て終わったら
jle _c8Gh // ループ終了
_c8Gi:
movsd %xmm1,%xmm0 // m0 <= m1
mulsd %xmm1,%xmm0 // m0 <= m1*m0
addsd %xmm0,%xmm2 // m2 <= m2+m0
addsd _n8GK(%rip),%xmm1 // m1 <= m1+0.1
decq %r14 // 回数カウンタ減らす
jmp _c8Gb // ループ

遅延評価と fusion すごいw
2018/05/16(水) 19:58:05.30ID:ub+CyxOt
ソースコードより短いのは流石に草
2018/05/16(水) 21:37:36.10ID:JOa7NyYz
これO(1)じゃなくてO(n)だけど速いのか?
聞くは一時の恥、聞かぬは一生の恥
2018/05/16(水) 21:40:07.47ID:ub+CyxOt
O(1)になるまで最適化って、それ1/6公式使わないと無理じゃね?
2018/05/16(水) 21:43:37.16ID:JOa7NyYz
つまり、鳥人間コンテストのような謎のルールで縛られてまともな飛行機作れない状態か
2018/05/16(水) 21:50:17.17ID:ub+CyxOt
1/6公式使うまで最適化してくれるようなコンパイラあんの? あったら見て見たいんだけど
2018/05/16(水) 22:22:29.79ID:/X1sH6Jm
visualc の出したコードではループ回数が10の倍数だということを織り込んで
10回分ずつ loop unrolling して端数回を処理するコードは略されてた。

そこまでわかってるならもう全部計算しといて略せよという気がした。
2018/05/16(水) 22:57:07.69ID:/X1sH6Jm
1/6公式使うのは違う計算をして微妙に違う値になるから最適化というより簡略化だな
2018/05/16(水) 23:22:07.02ID:kpFCptG2
先に除算を分岐処理しないとオーバーフロー条件変わっちゃうからなぁ
2018/05/16(水) 23:44:41.84ID:mOBIQo/B
まあ最適化してるってことでコンパイル時に全て計算してしまえば
ランタイム速度はいつだってO(1)だよ。
2018/05/17(木) 00:08:51.80ID:44AbGMy1
悪質な反則と正しいハックの違いを
理系の学問では説明できない
2018/05/17(木) 01:23:03.74ID:GvGg8gY/
コンパイル時に計算可能なのは>>457
>>584は実行時の引数使ってるから計算しとくのは無理だな
いつだってO(1)に最適化できる、未来を予測する神のコンパイラがあれば別だけど。

積和しないで公式使うのがよろしくないってのは、
数学や算数の計算と違って丸め誤差のあるコンピュータ言語での
浮動小数点数演算は誤差に関する統一的な挙動、
通常 IEEE 754 に準拠した挙動が期待されるわけで、
式を変形したり変えたりすると丸め誤差の出方が違って結果の値が変わっちゃうから。

もちろん規格を守らなくて良いというオプションはあっても良いわけどけど。

…誰か何か他の話題を
2018/05/17(木) 17:09:11.06ID:UKx8yrTb
自分で考えろカス
2018/05/22(火) 10:01:58.35ID:C41sjEPZ
お前が考えろゴミ
2018/05/22(火) 17:54:26.91ID:IYYsp57a
ほなワイが集めたるで〜
2018/05/22(火) 21:27:22.64ID:XSJVgfVv
つまりRust最強
2018/05/22(火) 21:57:35.93ID:eYNszKh+
何がどういう理屈で「つまり」なんだってばよ(; ̄Д ̄)?
2018/05/22(火) 22:03:03.16ID:+QrWxPmY
Rustは最近impl traitが実装されて使いやすくなった
2018/05/22(火) 22:41:37.50ID:eYNszKh+
impl trait は確かに嬉しかった
これでやっとトレイトオブジェクト使わずにイテレータが返せるようになった
2018/05/22(火) 22:50:22.39ID:BI9R8Qza
rust わかりやすいくらいダメな方向に行ってるな。。
2018/05/22(火) 23:12:28.14ID:auQt52bO
Juliaは?
けっこう化けそうな希ガス
607デフォルトの名無しさん
垢版 |
2018/05/22(火) 23:20:40.27ID:eYNszKh+
何が理由で「ダメの方向」って言ってるのか分からない
C++の後継としてはRustは限りなく理想に近い言語だと思うが…
2018/05/22(火) 23:23:35.78ID:eL1QxRDx
>>606
去年も全く同じこと言ってたよなお前
2018/05/22(火) 23:28:27.19ID:m7LLEOxE
JuliaはPythonを殺せない気がする。ボトルネック以外速くてもあんまり意味ないし
2018/05/22(火) 23:38:51.33ID:rpUF29sL
py 3.6で標準で型付けできるようになったし
av女優の名前借りたゲス言語なんてオワコンでしょ
2018/05/22(火) 23:41:37.77ID:CTd7FMth
型システムだけはJuliaの方が好き。っていうかクラス嫌い
612デフォルトの名無しさん
垢版 |
2018/05/23(水) 00:06:43.07ID:QWeWgJFJ
結局Dartなんだよなあ
2018/05/23(水) 00:10:03.78ID:NeMRQIGN
数値計算の話をwebで流すのやめろ!
2018/05/23(水) 00:24:34.00ID:lm4BwuCE
Juliaいらね
数値計算に使う分には記述性はFortranと大差ない
2018/05/23(水) 00:30:13.83ID:8U/w+cdS
Julia使ってるとコンパイル不要のスクリプト系の強みをjitのプリコンパイルの時間で失ってる気がするんだけど分かる人いない?
2018/05/23(水) 00:30:32.27ID:NeMRQIGN
>>614
パ……パイプとより柔軟な内包表記があるから……
グラフも出せるし……
2018/05/23(水) 00:32:43.88ID:xLXjXRd/
>>614
第一級関数がFortranにはないじゃん?
2018/05/23(水) 01:02:46.26ID:mwVk/jhM
Rustはクラス嫌いなだけでなく第一級関数も嫌う方向に行った
2018/05/23(水) 01:25:54.25ID:LjfntoLm
内包表記とかいうそびえ立つ糞
あのガイジ文法が読みやすいってpython作った低学歴はメクラのガイジなのか?
2018/05/23(水) 01:28:00.60ID:01TEDvfp
使わなきゃいい
621デフォルトの名無しさん
垢版 |
2018/05/23(水) 01:48:18.92ID:NeMRQIGN
内包表記読みにくいって方が理解できん
2018/05/23(水) 01:52:39.56ID:prSTZoE+
包皮
放屁

やっぱ読みにくいわ
2018/05/23(水) 01:55:25.46ID:prSTZoE+
ピリオド.でpropertyをつないでいく何たら記法ってやつ
Rubyのゴルフ好きがよく使うが
あれこそ読みにくい
2018/05/23(水) 01:55:41.96ID:lm4BwuCE
>>615
Juliaは数時間〜数日単位の時間のかかる処理に使うもの
全く問題にならないオーバーヘッド
2018/05/23(水) 02:34:11.07ID:V0Z2NuNB
>>618
なに言ってるんだ?
Rustは普通に第一級関数使えるんだが…
いろんなクレートがクロージャ使いまくってるんだが…
あとクラスを嫌ったのはむしろ正解だろ?
データと操作を一緒にするのは失敗で関連付けるのが正解
つまり、クラスは失敗でRustのimplかGoのレシーバが正解
2018/05/23(水) 04:36:59.97ID:L+y822nJ
Haskellの移植だっけか?あっちは分かりやすい。
2018/05/23(水) 04:38:52.45ID:L+y822nJ
Pythonic wwなリスト内包表記
もう少しうまくパクればいいのに。
2018/05/23(水) 06:54:23.85ID:eQfPSYhe
確かに for がネストしてたり if else がネストしてんのに内包表記するのは馬鹿だなと思うわ。
素直に for 文書いて append しろやと。
2018/05/23(水) 07:02:28.47ID:eQfPSYhe
>>607
後継っつーか、ほぼc++と同じ方向に行ってるだけになってるだろ。
それに意味があるか?
2018/05/23(水) 09:26:47.69ID:McbJvmIi
Python の内包表記はややこしいって、Guido 自身が言ってるw

たぶん、a.b.c.d など、Ruby, jQuery みたいに、
Python では、関数型のメソッドチェーンができないからだろ
2018/05/23(水) 09:50:48.87ID:V0Z2NuNB
>>629
GCがないこと以外はほぼ全て真逆の方向に進んでると思うんだが…
Rustほど信頼性に極振りしてる言語なかなかないぞ
アレのどこが同じ方向なんだってばよ?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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