トップページtech
1002コメント366KB

次世代言語議論スレ【Go Rust Haskell Scala Erlang Elixir】 第二世代 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2017/02/11(土) 21:32:37.61ID:0GjTSBdX
いざ、語ろうぞ。

前スレ
次世代言語議論スレ【Go Rust Haskell Scala Erlang Elixir】 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1479434349/
0153デフォルトの名無しさん2017/02/13(月) 23:44:14.31ID:HSaRDCl9
>>151
そうかもね。抽象化の最たるものだね、数学は。
>>152
emacsのLispモードについてんじゃないの?(適当)
0154デフォルトの名無しさん2017/02/13(月) 23:50:25.63ID:ut1LFOtS
>>153
「S式(lisp)ならマクロに対する特別な支援は(殆んど)要らない」ってこと
Juliaでマクロ書いてて思ったのよ、インデント崩れたりとか
0155デフォルトの名無しさん2017/02/13(月) 23:57:47.13ID:kQGSvZ2q
S式は括弧使って構文解析サボってるだけ。
逆ポーランドとかの怠け記法と同類。
0156デフォルトの名無しさん2017/02/13(月) 23:58:31.38ID:HSaRDCl9
>>154
なる。Julia知らんけどemacsなら(ry
0157デフォルトの名無しさん2017/02/13(月) 23:59:24.88ID:HSaRDCl9
>>155
emacsなら(ry
0158デフォルトの名無しさん2017/02/14(火) 00:35:59.85ID:gfvqdCIF
数学知識より国語力高いやつのほうが欲しい
0159デフォルトの名無しさん2017/02/14(火) 00:40:40.70ID:4G8SInJT
数学知識。まずは自分の国語力を見直そうか。
0160デフォルトの名無しさん2017/02/14(火) 00:46:48.47ID:gfvqdCIF
それはごもっともだが>>151の引用だから
0161デフォルトの名無しさん2017/02/14(火) 00:53:58.87ID:4G8SInJT
これは失礼。国語力も大事ですね。
0162デフォルトの名無しさん2017/02/14(火) 02:34:10.88ID:4XLa6m2a
オブジェクト思考はそもそもの設計思想からミスってるというのが持論だけど、割とハードにちかいとこでのでーたのやりとりのラップにつかえんのかなってかんじ
0163デフォルトの名無しさん2017/02/14(火) 07:08:37.44ID:izwS/hYI
LispやってるとなんでCでは中括弧を閉じるとき重ねずに一つ一つ改行していくんだろうと感じる
0164デフォルトの名無しさん2017/02/14(火) 07:54:13.53ID:deUQRuVA
>>163
LISPは行エディタ時代の言語。Cは画面エディタ時代の言語。
カーソルを縦に下ろしていって、ブロックを確認するのに、
改行しておいた方が都合よかったからではないか。
0165デフォルトの名無しさん2017/02/14(火) 08:15:42.74ID:uoklH2m8
実際に書いてみると、以下みたいなタイミングで改行を押すことになると思う

(define (fact n)[改行] (if (<= n 1)[改行]1[改行](* n (fact (sub1 n)))))

そうなると自然に閉括弧の中には改行が入らなくなるんじゃないかな
特にコーディングルールなんかを意識しなくても、閉括弧が密集するはず
0166デフォルトの名無しさん2017/02/14(火) 08:19:39.83ID:uoklH2m8
Juliaってまだ次世代言語という認識も無い感じなのかな、ver1.0出ないし
それとも対象領域が狭いのか
0167デフォルトの名無しさん2017/02/14(火) 08:41:27.92ID:ptdZF2Do
Juliaはすでにダメかと
放置ぎみ
これは言語に特色あるというより、LLVM用のスクリプト言語って位置づけだろ?
JavascriptをベースにしてLLVMを動かしてもいい。
01681222017/02/14(火) 08:44:44.67ID:deUQRuVA
>>124 >>125
どう答えればよいか考え倦ねていたのですが、
Prologの場合は、基本論理式であることは確かですから、論理かなと
言われればその通りなのでしょう。
>>107の「私は帰ります」から始まるスレッドで言いたかったのは、
受け取った文そのものが、シンボルで即ち述語となるということ。
それが我々が自然言語を扱う時、自然言語に接する時の作法に近い。
そのシンボルはやがて分解されて、詳細な述語が生まれる。そしてまた
それがDCG節で書いた二番目の定義、即ち、句構造への文法的な解析と
ほぼ同型になる。そういう主張です。
0169デフォルトの名無しさん2017/02/14(火) 08:45:48.11ID:ptdZF2Do
開発されてた

GitHub - JuliaLang/julia: The Julia Language: A fresh approach to technical computing.
https://github.com/JuliaLang/julia
0170デフォルトの名無しさん2017/02/14(火) 09:38:35.37ID:OAj0rQR0
>>168
Prolog、面白そうですね。やってみます。

FPでの自然言語処理だと、全てを読んだ訳ではない上での感想と理解いただきたいですが、
Computational Semantics with Functional Programming
がFPらしい流儀で本格的なことやってるように見えました。
Draft版がpdfで読めます。
0171デフォルトの名無しさん2017/02/14(火) 10:03:37.62ID:lPJlbUrB
Juliaはとりあえず永遠にStableにならなそうなふいんき()をなんとかしてくれ。
同じ事がNimやElmにも言えるが。
0172デフォルトの名無しさん2017/02/14(火) 11:20:46.81ID:QO8CQqzs
俺数学大っ嫌い文系だけどオブジェクト指向言語より関数型言語のが好きなんだが異端なのか?
0173デフォルトの名無しさん2017/02/14(火) 11:33:19.82ID:ptdZF2Do
手続き型は関数型を一般化したようなもので、関数型は手続き型を制限したようなもの。
手続き型ができれば、注意深くやれば関数型はかけるはず。
記法は別にしてほぼ一行でプログラムするようなこと。ハンターハンターでこんなのあるが。



制約と誓約についての詳しい考察 | キルアから見たHUNTER×HUNTER
念能力における概念の一つ。
自らの念能力に対し制約と誓約を課すことによってその威力と精度を著しく向上させることが出来る。
能力者のほとんどは「制約」のほうだけを自らの念能力に取り入れているケースが多く、
純粋に制約と誓約の両方を取り入れている能力者はクラピカくらいだと言える。
クラピカ
中指の鎖に対して「旅団以外には使わない」という制約と「旅団以外に使った場合は命を絶つ」という誓約を立てた。
作中では述べられていないが、恐らく制約のみを課すよりも制約と誓約の両方を課した方が能力がより向上するものと思われる。
http://kirua-hunterhunter.com/seiyaku/
0174デフォルトの名無しさん2017/02/14(火) 12:28:22.89ID:PhsD9VtO
>>172
洗練ということに価値をみる人だと至極当たり前の方向だと思う。
0175デフォルトの名無しさん2017/02/14(火) 12:33:23.61ID:OAj0rQR0
>>172
物事の抽象化という点では文理関係ないのでは?

受験数学だと抽象的でない暗記的な内容もあるでしょうし。例えば積分公式の暗記とか。
微分と積分が逆だとぼんやり理解するのが大事で、
ばっちり解析解(公式)が出るかはそりゃ出れば嬉しいけど、出ない方が多い。
そういう狭い領域が○×を判定しやすいという理由で試験にでているだけなのに、
それが数学の全てで、そういうテクニカルなことが嫌いだから数学も嫌いと思っている人は多いのではないでしょうか。
0176デフォルトの名無しさん2017/02/14(火) 13:05:57.35ID:he6YB8dM
lim
ver->1.0 JULIA ver
0177デフォルトの名無しさん2017/02/14(火) 15:41:28.41ID:90/NuRRw
Haskellからは関数型言語という制約を課しながら手続き型言語になりたい
という気持ちが伝わってくるからな。
結局、多様なオブジェクツからなる手続き型言語の理想世界を関数という
アトムで表すことが夢の最終目的なんだよな。
0178デフォルトの名無しさん2017/02/14(火) 18:50:23.77ID:uwayiWk9
>>149
篩にはなるだろうね
0179デフォルトの名無しさん2017/02/14(火) 19:05:13.35ID:IrYMwUeI
関数型にとって副作用有りのクロージャってどうなの?
使わずに済むなら使わずにおきたいものなの?
0180デフォルトの名無しさん2017/02/14(火) 19:25:54.26ID:smZbva6r
>>179
副作用を使いたいかどうかは型を調べればわかる
他にもnullを使いたい型や代入を使いたい型など色々作れる
0181デフォルトの名無しさん2017/02/14(火) 19:36:47.66ID:MJDh4U5x
関数型イコール免許皆伝はどうかと思う。
手続き型も書けて、関数型も書けて、それぞれをそれぞれに転記できるならまあ意味はあるだろうけど。
大体今まで会った関数型関数型と叫んでるやつは、シンプルだ、表記が素晴らしいと言うばかりで、ではこの関数は最大でヒープをどれくらい使うのかねと聞くと、時代錯誤だと危険回避する奴ばっかり。
再帰関数を書けないから再帰関数を叩くパンチカード叩きとレベルがかわらん。
ただ関数型プログラミングができる、は危険物乙4みたいな感じでしょ。
0182デフォルトの名無しさん2017/02/14(火) 19:51:31.16ID:m+Xk96Lk
>>168 Prologについて教えてください。
型もスコープもクロージャもないと聞きました。ほんとうですか。
0183デフォルトの名無しさん2017/02/14(火) 20:00:20.53ID:crAPAQjf
>>181
そんな奴は滅多におらん
予測しにくい部分はプロファイル取るのが当たり前
メモリとか気にしないのは、Java出身者のがよほど多いよ
0184デフォルトの名無しさん2017/02/14(火) 20:17:22.93ID:crAPAQjf
むしろ人口の比率の問題か、手続き型しか触って無い人のが偏屈なの多い気がするな
Cで再帰もなく、外向けの関数でもないのに、構造体の値渡しやコピーで怒る奴とか、
forループのカウンタをいちいち前置デクリメントにしろとか言う奴とか
宗教じみてると感じる
0185デフォルトの名無しさん2017/02/14(火) 20:18:27.68ID:4XLa6m2a
関数型のプラットフォームで、頻繁に呼ばれる関数だけ手続き型でかきたい、GPUとかもつかいたいんだけど、できる?

今想定してるのはclojureからJNI介してGPU叩くみたいな感じなんだけど
0186デフォルトの名無しさん2017/02/14(火) 20:57:13.91ID:D+3Qy3lW
>>182 難しい質問が来ていますね。はっきり言えることは、
Prologプログラマのレベルでは、型、スコープ、クロージャのどれも、
習いませんし、話題になりませんし、意識しません。マニュアル等の中にも
これら用語は現れません。プログラムコードにもそういう痕跡はないと思います。
述語定義の中の変数の単一化が起こる範囲がその実行時の節に限られる
ことなどは外部の人はスコープに当たるのではないか、と思うかも
知れませんが、Prologプログラマはそういう捉え方をしません。
ただですね、処理系の開発者や、遅延評価を含む制約論理を取り込んだ
部分のライブラリの開発者さらに、ISO規格のPrologの言語定義を担当する
人達などは、多分に意識して質問にあったような用語を用いて議論も
しているのではないかと想像しています。
0187デフォルトの名無しさん2017/02/14(火) 21:21:11.74ID:4G8SInJT
>>181
時代錯誤なのは環境によってはそうなのでは?
逆にそういうシビアな時代には全てのプログラマは優秀だったのだろうね。
シビアな手続き型の時代と、関数型の時代。その中間があれなのだろう。
0188デフォルトの名無しさん2017/02/14(火) 21:37:51.90ID:smQktxQa
何を作れるか、じゃなく何の道具を使ってるかでマウンティングする奴が多いのは否定できない
0189デフォルトの名無しさん2017/02/14(火) 22:18:02.07ID:OomJZo4F
>>183
プロファイルとかテストとか言語好きが一番嫌いな作業だろう。
0190デフォルトの名無しさん2017/02/14(火) 23:22:35.34ID:4G8SInJT
○○erは普通だが、○○istになると何か拗らせてそうにみえる不思議。
0191デフォルトの名無しさん2017/02/14(火) 23:24:21.91ID:lp4LJeik
◯◯istaは?
0192デフォルトの名無しさん2017/02/14(火) 23:44:37.20ID:gfvqdCIF
-istは〜の専門家って意味もある接尾語だからそういうものかも
(-istaも同じ)
0193デフォルトの名無しさん2017/02/14(火) 23:44:39.81ID:4G8SInJT
確かにそんなのもあった。
Haskellistとかいかにもだけど、そうじゃないのだね。
0194デフォルトの名無しさん2017/02/14(火) 23:56:23.74ID:4G8SInJT
istやistaを使うほどに専門的なのかね、それら言語は。
0195デフォルトの名無しさん2017/02/15(水) 00:32:52.53ID:WU5+o8Pm
専門家っていう意味でつけてるんじゃなくて日本語だと〜使いとか〜愛好家くらいの気持ちなんじゃね
マルキシストやフェミニストみたいな〜主義者みたいなニュアンスもあるし拗らせてるように見えてもそう不思議じゃない
ハルキストがいい例
0196デフォルトの名無しさん2017/02/15(水) 01:36:02.80ID:tEMTwX42
>>189
テストについては人による
TDD派もいる
プロファイルについては危険性高いからこそ、不安で取るんだよ
むしろなんで取らないと思うんだ?
0197デフォルトの名無しさん2017/02/15(水) 01:38:18.18ID:q4yDcCHe
Vista
0198デフォルトの名無しさん2017/02/15(水) 03:41:28.06ID:Hii7olK0
>>182
まさに、Prologの時代ですねw
http://echo.2ch.net/test/read.cgi/tech/1486946202
0199デフォルトの名無しさん2017/02/15(水) 05:47:41.94ID:De10g5Ib
>>172
文系でも英語が苦手なら、外国語よりは馴染みのある数学に近い関数型のが馴染みやすい。
0200デフォルトの名無しさん2017/02/15(水) 06:05:02.91ID:1UZn1FbQ
自分の書いたある関数に対して、同じアウトプットが出る他の速い関数に自動的に置き換えてくれる、
というのを関数型(証明支援系?)なら出来るという認識で良いんですかね?
0201デフォルトの名無しさん2017/02/15(水) 06:25:50.95ID:De10g5Ib
>>173
手続き型も制約の歴史。
その論で言えば最も制限のない言語はアセンブラ。
OOPや構造化が邪魔でアセンブラは文法がないとか言うならBASICが一番バランスしてるとでも言うのか。

構造化やOOPはデータや処理の流れを押し込めたり制限することで、大きくなり過ぎた仕様を人間に扱える様に切り出して来た。

関数型、論理型を始めとした宣言型言語は、より仕様そのものに近い形でアプローチをしてる。

関数型は性質で切り出す。
論理型は関係で切り出す。

問題は、CPUアーキテクチャから離れ過ぎて、理屈の上ではもっと最適化が進めば手続き型に負けないはずが、逆にコード上の最適化のヒントが少なくなり過ぎて最適化が進まない事。
結局別にライブラリが要る。

例えばリスト処理を状況に合わせて勝手にパックしてSIMDで処理するか、マルチスレッドで処理するか(あるいはその両方)は理屈の上ではコンパイラが決めてくれても良いが、そんな賢いコンパイラは無い。
この点、手続き上でSIMD使えるのはガリガリSIMD命令にして行く手続き型のが、少なくともシングルスレッドにおいてだけは、地道な最適化の歴史の重みが宣言型のポテンシャルを現時点で上回ってる。

宣言型の理想郷はまだ遠い。
0202デフォルトの名無しさん2017/02/15(水) 07:39:44.05ID:tgZ9ou3/
>>183
プロファイル取らずに机上で計算しとけよ…
そういう話をしてるんだよ。
お前も気にしないのは、の一人でしかない

>>187
今も、本質は変わらないよ。
ただスペックで力押しできるようになってきただけで。
それを、今のパソコンはスペックが良いので実行効率が悪いコードでも記述性が良ければそれで良いのです、
というのはエンジニアとして違う。
0203デフォルトの名無しさん2017/02/15(水) 07:54:49.66ID:3snx1bil
>202
>エンジニア 嘲笑
0204デフォルトの名無しさん2017/02/15(水) 08:07:49.51ID:NcaQdaDl
>>202は言葉はあれだが、言ってることは間違ってはいないと思う。
だからこそ、速くて高効率の手続き型で書かれたものと関数型スタイルで書かれたものとが、
同じ結果を出すことを証明できたら、と思うのだけどどうなんだろう?原理的に無理なのかな?
0205デフォルトの名無しさん2017/02/15(水) 08:13:45.18ID:WDBEc38A
手続き型が速くて効率がいいとはかぎらん。
JavaやC#みたいな仮想マシン上で動くやつ、あるマシンをソフトでエミュレートした環境でも
手続き型言語は動作する。
動くまでにかなりの複雑さ。
0206デフォルトの名無しさん2017/02/15(水) 08:15:13.90ID:4NekN3gF
>>203
嘲笑されようが、まぁそれでお金頂いている以上は無駄遣いしちゃいかんし、一体どう動いてるか知ってなきゃいかんと思うよ。
増してや、それを資格としたいならなおさら。
>>204
証明は簡単だよ。ベンチマークとっても良いし
アセンブリ見て何クロックかかってどれくらいメモリ使うか読めれば一番良い。
GC言語やJITでなんとかする類の言語だと、想定でどこまでヒープをどう使うかは把握してコーディングして、
それをベンチして欲しいけど。
まともなC#使いとかF#使いは自然にやってる。
0207デフォルトの名無しさん2017/02/15(水) 08:16:31.94ID:4NekN3gF
>>205
JITもあるし、フルAOTもあるよ。
限らん、は事実だけど、それは関数型言語で末尾最適化が利かないコーディングする程度の低レベルな人の話。
0208デフォルトの名無しさん2017/02/15(水) 08:35:46.11ID:WDBEc38A
言語速度は実装次第。
JavascriptがC言語並みの速度を出すのは実装次第で可能。
たとえばJavascriptをC言語にトランスレートしてからコンパイルすればいい。
処理の順序を認めない純粋関数型のほうが、処理待ち、ロックが発生しない分、速くなる余地がある。
混合型言語でも処理待ちを発生させたくない部分を関数型の制約で書くことで処理系の最適化次第で高速に動く。
0209デフォルトの名無しさん2017/02/15(水) 08:41:18.64ID:4NekN3gF
>>208
順序を認めないってのはちょっと語弊があるんじゃないか?
0210デフォルトの名無しさん2017/02/15(水) 08:43:08.58ID:WDBEc38A
マルチコアCPUの性能を活かすため並行/並列プログラミングを行う際には
競合状態やデッドロックへの対処が課題となりますが、Haskellでは上記の通り、
関数はいつどのように実行しても同じ結果が得られることが言語仕様上保証されていることから、
命令型言語に比べ並列化の対応が容易になります。

http://www.casleyconsulting.co.jp/blog-engineer/haskell/haskellで学ぶ関数型プログラミング入門/
0211デフォルトの名無しさん2017/02/15(水) 08:58:54.65ID:v/KlZINp
言うほど並行処理やりやすいか?関数型って
0212デフォルトの名無しさん2017/02/15(水) 09:08:57.09ID:WDBEc38A
ループの自動ベクトル化みたいに、C/C++言語ソースでも
関数型ルールに適合する部分を検出して、自動で関数型としておもに並列最適化するのも不可能ではないと思った。



コンパイラー最適化入門: 第4回 自動ベクトル化はどんな時に行われるか | iSUS
http://www.isus.jp/products/c-compilers/compiler_part4/
0213デフォルトの名無しさん2017/02/15(水) 09:14:49.65ID:WDBEc38A
理想の関数型処理系ならばシングルもマルチコアも、プログラマ側がソースコードを書き分ける必要がない。
いくら並列処理、コア数が増えたとしてもシングルコアと同一コードで動作する。
0214デフォルトの名無しさん2017/02/15(水) 10:00:49.58ID:urFAvqLF
シングルコアのプログラムを書くときでも
マルチコアの鉄の掟を厳守させられるという話

大企業病みたいなもの
0215デフォルトの名無しさん2017/02/15(水) 10:07:12.06ID:ZOlpsGL6
>>213
よく知らないのだが、Erlangなんてそうなるんじゃないの。
0216デフォルトの名無しさん2017/02/15(水) 10:32:51.74ID:JsTxjjGi
Haskellは並列化に強い!ってのは踊らされるには随分古いネタだな。
そもそも↑の理屈で並列化できる箇所は、前の計算結果に依存しない計算だけだぞ。mapは可能だけどfoldは不可能。
で、mapだけなら他の言語でも簡単に機能追加できる。10年以上前にGoogleがMapReduceをリリースしてるだろう。

Haskellの強みに並列化を(今でも)挙げるのはよっぽどアンテナ低いか使ってない奴だけじゃないか。
実際に使う人なら、柔軟で強力な型システムで「コンパイルが通れば大体はバグ無く動く」体験を重視する。
0217デフォルトの名無しさん2017/02/15(水) 10:37:13.31ID:9ZjtEPYx
>>203 が言いたいこと全部言ってくれたわ。
Haskell原理主義者ほどこの辺のことなーんにもわかってない。
本当関数型言語は害悪。この世のゴミ。
0218デフォルトの名無しさん2017/02/15(水) 10:38:29.22ID:9ZjtEPYx
>>217
ごめん203じゃない。>>202だった。慎んでお詫び申し上げる
0219デフォルトの名無しさん2017/02/15(水) 10:48:04.87ID:1HgqHGpq
>>198
これ最高ですが、Prologのキラーソフトにはなりませんね
0220アマゾン2017/02/15(水) 11:15:10.19ID:knsgAz8Q
フィリピンの海と空
フィリピンに行ってきた
https://neko-hirune.com/2017/01/16/philippines/
0221デフォルトの名無しさん2017/02/15(水) 11:28:59.88ID:WDBEc38A
現行Haskellではなく理想的な純粋関数型言語ならば
シングルスレッドとして書いたコードで自動でマルチコアに対応できる
0222デフォルトの名無しさん2017/02/15(水) 11:38:17.58ID:9ZjtEPYx
>>221
Javaがかつては「Write once, run anywhere」を謳ってたのを思い出したわ。
0223デフォルトの名無しさん2017/02/15(水) 11:38:33.47ID:L/2xzbEx
Goはエディタ支援ツールが充実してるね
この辺がRustと違うわ
0224デフォルトの名無しさん2017/02/15(水) 12:51:55.20ID:mUP4oUYS
>>219 ウェブブラウザの制御もJavascriptなんか排してPrologにすればいいんですよ
0225デフォルトの名無しさん2017/02/15(水) 13:00:53.70ID:mUP4oUYS
>>224
Prologは学んだことはあるが使ったことはないという人が
圧倒的に多い言語だからな。それには理由があると思うのだが。
02262242017/02/15(水) 13:06:40.71ID:mUP4oUYS
>>225
なにか、動機付けというか、使い方の示唆というか、そういう部分で
間違ってしまっている。論理の教材でしかない。
ブラウザの制御などで使えば、いくらでも面白いコードが生まれるし、
この部分に一般ユーザーが戻ってくるよ。
0227デフォルトの名無しさん2017/02/15(水) 13:08:19.96ID:4NekN3gF
>>221
そうかな?
物理的なリソースは各コアごとに無いし、そもそも向いてない作業もある。
ソートはどうするのか、そこからのtakeはどうするか。
any的なものは「一つあれば」なのか「一つでもあれば」なのか。
firstは「firstのfirst」でも良いのか、純然たる「first」なのか。
これはそこそこ違ってくるし、実際の記述も変わる枠組みも多い。
常にupdateがかかるテーブルを元にした処理、に、テーブルロック要求したり、それでは不味いとロックのエスカレーションをさせていくレベルの話になる。
掛かっても気にしないんだろうけど。

>>223
言語仕様を縛ったからね。
コンテキスト依存なものも少なくて、さらに演算子のオーバーロードはさせない。
0228デフォルトの名無しさん2017/02/15(水) 13:09:11.87ID:mUP4oUYS
>>226
ブラウザなんて『けものフレンズ』でいいじゃないか。
0229デフォルトの名無しさん2017/02/15(水) 13:35:00.08ID:L/2xzbEx
Prologおじさん何やってんの…
0230デフォルトの名無しさん2017/02/15(水) 16:09:53.66ID:w0SHr4I6
論理型言語の命題とは型で証明は関数なんだよな。
だからprologは関数型言語なんだよな。
一階述語論理は自動証明できるからそれを利用したのがprologなんだよな。
つまり型を指定すると自動でプログラムを作ってくれる関数型言語が
prologなんだよな。
0231デフォルトの名無しさん2017/02/15(水) 16:17:56.52ID:DZkwefyE
>>230
型が実は述語であるということには同意しますが。
0232デフォルトの名無しさん2017/02/15(水) 18:12:05.78ID:4NekN3gF
銀の弾丸は無い、を引き合いに出す気はないけど、
いわゆるベストはものによって変わると思うよ。
どう頑張ってもCPUは手続きとして処理するんだし。
写像を手続き無しに瞬間的に作ってくれるプロセッサってアナログコンピュータ以外に今現時点個人が手に入れられるものは無い。
荒っぽく言うと1を10で割った結果が有理数では無い事は仕方無いんだから、それを理解して物作る必要があるとしか言えないでしょ。
その理屈を知ってるからサチらない程度に10倍しとくってのと、
何かわからないけどそう言うのは古代文明で、今は○○が都合よくコンパイルしてくれて、○○が都合よくコプロなりGPUなりなんなり使ってくれるから、見かけ上正しければ良い、無駄な10倍は見る書く上で都合が悪い
ってのは、だいぶ違うんじゃないの?
0233デフォルトの名無しさん2017/02/15(水) 19:11:19.15ID:1UZn1FbQ
>>232
相変わらず表現が独特でわろた。

ベストを尽くすために手を抜かないこと、
そのためには手続型だろうが関数型だろうが論理型だろうが全て知っておくべきなのは確かだろうね。
0234デフォルトの名無しさん2017/02/15(水) 19:54:26.04ID:XdeTM6Wg
>>216
foldも結合則(例 (1+2)+3 = 1+(2+3))が成り立つなら順番どうでも良いので並列化出来るよ。

クイックソートやマージソートに見られる二重再起による分割統治方も並列化し易い。
関数型の場合、要素1のリストまで並列出来るので、そこまですると並列化の利点よりスレッド生成コストの方が高く付いて逆に遅くなるけど。

どこら辺でスレッド生成を止めるか?も環境によるので、自動化するには環境を把握する機能がコンパイラが吐き出すバイナリに埋め込まれる必要がある。
(現在の場合、並列化スイッチ入れると自動でコア数は見る。コア数指定も出来る)
0235デフォルトの名無しさん2017/02/15(水) 20:20:11.46ID:Th31PT5v
Haskellって、自動で並列化してくれるような頭の良いコンパイラあったっけ?
まだ実現してなかったような
0236デフォルトの名無しさん2017/02/15(水) 20:36:58.49ID:XdeTM6Wg
今の所、parとかseqを普通の関数に付けて、これは並列化出来るって教えて、並列化に対応させるスイッチでコンパイルすると並列化出来る。
はずだが、遅延評価が邪魔して上手く動かないので正規系にする関数を別に用意したり。。。
(一番手軽だが、逆効果になり易い手法)

専用データ構造や関数が手法ごとに用意されてるので、どの並列化手法使うかでも選択肢あり過ぎて分からん。。。
(Haskellコンパイラの開発者の1人は並列化手法のエキスパート。あらゆる手法をライブラリで提供してる。カンブリア時代状態)

まどろっこしいので、もっと賢くなってほしい。
ポテンシャルとしては全自動が理論上可能なのだから。
(並列Prologも効果的な並列化が課題とか。ワトソンがPrologベースなら、スパコン分野で地味に進化してるのかね。。。)
0237デフォルトの名無しさん2017/02/16(木) 07:01:54.85ID:C8TUip5w
1/10は明らかに有理数じゃろ......
0238デフォルトの名無しさん2017/02/16(木) 07:19:28.85ID:4KP2Pywx
2進でか?
0239デフォルトの名無しさん2017/02/16(木) 07:26:16.22ID:Wr6Ic1dD
そうだね
0240デフォルトの名無しさん2017/02/16(木) 10:15:18.61ID:KWZoWk4l
「有理数」ではあるが「2進数における非循環小数」ではない。
0241デフォルトの名無しさん2017/02/16(木) 10:15:46.55ID:KWZoWk4l
間違えた。「2進数における非無限小数」ではない。
0242デフォルトの名無しさん2017/02/16(木) 10:53:34.48ID:xrKz9Vp6
>>202
空間計算量を大雑把に把握するなんて程度はできて当然
ただシステムとランタイム含めて、現実にどれぐらいか見なきゃならない

そしてお前はそれすらまともにやっとらんとバレたわけだ
他人をけなす前にもう少し考えた方がいいんじゃ無いか?
0243デフォルトの名無しさん2017/02/16(木) 10:57:56.10ID:xrKz9Vp6
>>204
いやこいつはただ貶したいだけだよ
メモリについては言語というか主に処理系に依存するんでない?
オーダーの事言ってるなら、言語関係ないしな
0244デフォルトの名無しさん2017/02/16(木) 11:14:33.36ID:Ql+ZhAJA
>>242
空間計算量なんて大雑把なレベルじゃなくて、使ってるデータのサイズと言語ごとのランタイムを足し上げた値くらいすっと出せよって話では。
プロファイリングは答え合わせであって、作ってからプロファイル見てみようなんて姿勢はプログラマ名乗るのも恥ずかしいレベル。
自分はだいたいなんか見落としてるせいでよく外す程度には未熟だが、それでも書く前に計算してる。

で、そういう事前計算を怠る奴ほど思考停止して関数型言語ごり押しにくるんだって話なんだよなぁ……

自分は >>202 じゃないし >>242 がそうだというつもりもないが。
0245デフォルトの名無しさん2017/02/16(木) 11:19:39.88ID:81TflRQB
なんかフワっとした主観の話ばっかりでつまらんな
具体的に言語の話をしようよ
0246デフォルトの名無しさん2017/02/16(木) 11:33:50.95ID:xrKz9Vp6
>>244
何か特定の言語での話してない?
まずJavaのように動的にコードが変化する言語じゃ、計算じゃ正確には出せない
C系ですらアラインメントやlibcの実装だけでズレるし

それと、何も把握せずにプロファイルを見るとは言っとらんよ
客観的なデータのが重要と言ってる
意識的に使う分は把握して当たり前
それでも組み込みのように全て環境を固定しているわけでもなければ、結局推量でしかないわけ
0247デフォルトの名無しさん2017/02/16(木) 11:44:26.26ID:xrKz9Vp6
少なくとも自分は特定の関数のヒープ使用量を正確に出せって言われて、
自分の推量だけで答えるとか、過信してるとしか思えないけどね
それこそエンジニアとしてどうかと
0248デフォルトの名無しさん2017/02/16(木) 11:52:36.67ID:H/8owqMI
ハッカーと画家って本の0章になぜ日本人がソフトウェアを
作れないか書いてあるから見てみるといいよ。
0249デフォルトの名無しさん2017/02/16(木) 12:08:34.14ID:wnT1ZsVz
>>242
できて当然だから、やってからプロファイルしろって言ってんだけど。
システムとランタイムの、を現実に見るのは答え合わせで、ランタイムがどうかってのを知らなくても勝手にやってくれるんだから良いじゃん、勝手にやってる事は知らねえよww、ってどうなの、って事。
ごく普通にやってるよ。

>>243
処理系に依存するなら、処理系の実装読んどけって言ってるんだよ。
貶すつもりは無いが、当たり前が出来てない事を指摘するとキレる奴多すぎって言ってんの。

>>246
動的にコードが変化する、って何だ?
JITがどう効くか、GCがどう走るかって話なら、それこそ織り込んでコーディングしろって話なんだよ。
末尾再帰になるように再帰関数書くのと同じレベルの話なの。

>>247
正確に、とは言ってないよ。
だから、最大で、と聞くんだよ。
ここまでに未開放がこう溜まって、GCが走るのは最短でここ、の想定が出来ないのに書いてるなら、単なる物量押しでしかないって言ってる。

妙に反論するけど、お前なんか同じような事を言われたトラウマでもあるの?
0250デフォルトの名無しさん2017/02/16(木) 12:20:00.88ID:xrKz9Vp6
>>249
プロファイルを取ってるって事は、副次的に何が高いか把握してるって事だよ
やってりゃ勝手に覚えるから
それがわからないって事は、普段からマメに見てないって話になるわけ

それとGCやJIT云々はランタイムの設定値やシステムの状況などに直接依存する
これらは運用で適宜変更するものでもあるわけで、
ここで開放とか最適化なんて、書くときに決め打ちするものではないよ
はっきり言って、知らずに無茶苦茶言ってるとしか思えない

設定を無視できるほど、小さなメソッドや関数や、
競技プログラミングなどなら話は別だけど、そういう話じゃないでしょ?
0251デフォルトの名無しさん2017/02/16(木) 12:25:26.46ID:Ql+ZhAJA
>>246
だからその、意図的に使うデータ把握して当たり前ってことができない奴が、特にHaskell原理主義者に多いんじゃねえかって話。
その当たり前満たした前提の行動を議論してもしょうがない気がする。

こっちのスキルも高いとは言えんのは100も承知。
0252デフォルトの名無しさん2017/02/16(木) 12:30:15.66ID:wnT1ZsVz
>>250
副次的にも何も、それは確認であって想定ではないよね。
想定は結果から逆算するべきものではない。

運用で変更するためには、変更するとどうなるかの根拠があるわけだよね。
足りなそうだから増やすなんて場当たり的な運用でない限りは。
そのためには、何故そう変更すると、どう挙動が変わるかを把握してる必要があると思うけど。
決め打ちではないって。
少なくともここまでは動かないってラインを考えるんだよ。
ここまではこれだけのオブジェクトが確実に生きてるって話。
そのラインを超えるように、環境を構成するべきもの。

無茶苦茶でもなんでもない。お前がやりたい事(実行環境変更)を叶えるために必ず必要な事。

大きなシステムは小さな関数から出来てるんだよ。
小さな関数を把握できずに、大きなシステムを把握出来るはずが無いでしょ。
■ このスレッドは過去ログ倉庫に格納されています