・Dockerじゃないsystemd-nspawn+machinectlが非常に良い・99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その1】「計算機科学のほんとうの基礎」を理解していない。IQ145の女子高生の先輩から受けた特訓5日間』を大変多くの方々にお買い求めいただき、感謝します。本書の全目次を公開し、質問を受け付けます。「これ以上は説明も回答もしない。(東北大)、らくだの卯之助@camloeba、@nonstarterその他へむけてC言語は純粋関数型である。ついてこの辺の続きとなります。前回、スケールするFRPアプリ課題:わかりやすい嘘誤魔化しをしないようにこの課題についてです。FRP必要ない、とかぶちあげてた@nonstarterを「擁護」あるいは結託してたんだから、FRP使うとかもちろんなしで。関数型「状態渡し」をもって書けるはずです。適当な嘘ハッタリじゃあなければね。さあやって見せてください。煽ったら、まんまと書いてくれました。これまで連中がやらかしてた嘘誤魔化しを徹底的にこちらが糾弾する形で、追い込んだので、(そういう作業も手間がかかるんですよね、最初から誤魔化ししなければいい)ここに来てようやくそれなりに嘘ごまかしが排除された実用的GUIアプリの比較対象となりうるコードが登場してきました。「FRPも状態渡しも一緒、FRPはなんら必要なし、メリットなし@nonstarter」という趣旨の大嘘@はとりあえず確定したようなので、確認していきましょう。ここまでDOMの準備。Js._false)まず、「非常に長い」です。これまで、あたかも簡単に短く書けるようなフリしたコードを出していたけど、ほんの少し複雑にスケールしたアプリが課題になると、途端に急にコードが倍増した。なんで?これまで課題が簡単である、というある種の特性を利用し、それが複雑になるとすぐに破綻するコードである、という、学習者にとってもっとも重要な情報をひた隠しにし、あたかも汎用的に通用するスケールする設計とコードである、というフリをしてきたのが、実際に破綻してしまったからです。これまで誤魔化していた、課題の単純性という特性の利用、誤魔化しが通用しなくなり、破綻して、一気に膿が出てきた分量が、この目に見えるコード量の急増分です。言い換えると、すでにこうやって急増したコードをベースに、いろいろ削る形で修正すれば、一個前のより単純な、ToDoリストアプリが簡単に書けます。単純な、ToDoリストアプリからまた順当に機能追加すれば、このコードになるでしょう。いうのがスケールする設計で、コードであると言います。前回からまるで様子の異なった、コードがなんか倍増しているということは、前回の設計が、問題がスケールしたら、まったく通用せず破綻した、ということを意味します。この人物のコメントです。動いてると思うけど書き殴りだから細かいことは気にしないでね単に機能が増えて面倒になっただけで、状態渡しのしかたは前回と同じ。ちなみに今回も頑張れば状態渡しすら使わずに書けそうだけど、これは使ったほうが楽かな。メインループではなくハンドラでOCaml部分の状態渡しをしてるので、「メインループを書き直してるからスケールしない」というのとは少し違う。(状態渡しや関数型云々とは無関係に)やっぱりDOMかつ静的型だとちょっと長くなるね(定数倍ファクターなのでスケール云々とも無関係)。前回のから改造しててOCaml部分の不整合はデバッグしなくてもコンパイラが見つけてくれるので開発は明らかに楽だったけど。それなりの試行錯誤の末に「苦労したんだな」というのが行間から溢れ出ています。以前の「状態渡し」のほうがOCaml上のGUIアプリの実装としては異常。書けないとか言うから反例として書いただけ。OCamlは非純粋関数型なので、普通は副作用(破壊的代入を含む)を使う。FRPを含め、純粋関数型のGUIプログラミングがしたかったらHaskellのライブラリなりElmなり、それ用の適切な道具を使えば良い。「状態渡し」のほうがOCaml上のGUIアプリの実装としては異常つまり、今回慣れない、かなりイレギュラーな実装を試みた、というのがわかります。静的型だとちょっと長くなるらしいです。実用的なGUIアプリをOCamlで静的(イミュータブル)な関数型のスタイルをもって実装しようとすると、簡潔になるどころか、コードがかなり煩雑になり長くなるということが、反発していた、誤魔化し続けていた当のOCamlプログラマー自身の手により実証されました。これが、この人物を含め、胡散臭い連中がずっと誤魔化してきてけして表明しなかった動かしがたい事実であり、私が、当初、あんたら関数型について偉そうな事言ってるけど、スケールする実用的なGUIアプリとか、そのやリ方ですんなり書けるわけ?と批判した核心的な要素となります。@nonstarterはじめ、連中がさんざん中傷してきた、JavaScriptの関数型において、いまやGUIフロントエンドのデファクトとなってしまっている、FacebookReact、それに、私のTimeEngineというFRPライブラリを適用してFRP、関数型で書いた、同じGUIアプリのソースコードは以下でした。比較検討のために再掲します。可読性とバランスを双方とっているようにみえる現行のコードでの単純比較となります。同じGUIアプリを関数型で実装するのに、JS+TimeEngine(React)のFRPでは、OCamlの状態渡し関数型より、行数にして半分以下で書けている、ということが証明されました。視認しても、ぱっと見でも、どちらが簡潔に短く表現できているのか?一目瞭然だと思います。念の為ですが、ちょっと例題を複雑にしたらこうなった、ということであり、より複雑性が増したら、さらにこの差は顕在化し、デバッグその他の差異は深刻になる、というのは明らかです。定義している定数をそのまま抜き出して列挙してみると、これらはそのまま関数型コードの構造になっています。mountこうなります。GUI部品のReactのElementは、ToDoElementが、最後にmountされる一番外側のコンポーネントであり、それらの内訳は以下の3つ。(ユーザ入力テクスト)(__seqEl)以上の各constの宣言を列挙することは、そのままアプリの設計の概略となっています。関数型、宣言型コード全体として極めて見通しのよいコードになっています。アプリケーションがいくら複雑になろうとも、このシンプルな構造の延長でいくらでもスケール可能です。このような明瞭簡潔な構造が、この人物が苦労して書いた「スパゲッティ・コード」OCamlの状態渡し関数型コードにあるでしょうか?動いてると思うけど書き殴りだから細かいことは気にしないでね単に機能が増えて面倒になっただけで、状態渡しのしかたは前回と同じ。ちなみに今回も頑張れば状態渡しすら使わずに書けそうだけど、これは使ったほうが楽かな。DOMかつ静的型だとちょっと長くなるね前回のから改造しててOCaml部分の不整合はデバッグしなくてもコンパイラが見つけてくれるこういう発言からも明らかでしょう。このコードは、コンパイラが不整合を見つけてくれないと、コーダーには手に負えないほど複雑であり、「面倒」であり、「動いてると思うけど、細かいことは気にしないでね」と言い訳せざるをえないほどに、設計についてはあやふやで、関数型でイミュータブルに書くには「異常」な努力が必要で、当然、長いコードである、ということになります。不整合をコンパイラが見つけてくれる?私がJavaScriptのFRPのコード書くときは、そんなもんは必要ないですが?この人物の最後の言い訳です。俺もOCamlの勉強になったけど、「できない」と断言されたことをすぐにやって見せたんだから(それも3回。他人に「課題」とか言った本人は1年がかり、かつ関数型ではなく全くの命令型。)、もうつきあう義理はないよね。「長くなる」、ということを痛感して、自分らが主張していたことが「机上の空論」であった、とようやく理解できたんじゃないかな?「できない」と断言されたことをすぐにやって見せた(それも3回)正確に書き直してあげると、こっちの議論、批判の趣旨くらいは理解していたはずだ。関数型「状態渡し」をもって書けるはずです。「絶対出来ない」という当方の予想通りであり、課題は不合格ということになります。「できもしないことを簡単にできるように見せかけてきた」ことが白日の下にさらされた、にすぎない。関数型ではなく全くの命令型。前回のから改造しててOCaml部分の不整合はデバッグしなくてもコンパイラが見つけてくれるなどと、不整合について、設計段階では確信すらもてずコンパイラ頼み、という惨憺たる状況を自分自身で白状してしまっている。以前の「状態渡し」のほうがOCaml上のGUIアプリの実装としては異常。書けないとか言うから反例として書いただけ。OCamlは非純粋関数型なので、普通は副作用(破壊的代入を含む)を使う。FRPを含め、純粋関数型のGUIプログラミングがしたかったらHaskellのライブラリなりElmなり、それ用の適切な道具を使えば良い。異常、不適切であることをすでに認めてしまっていることからも、語るに落ちている状態。以上のような、自信の悲惨なパフォーマンス、こちらがきちんと詰めたら、しっかりと嘘誤魔化しが暴かれた、証明された、という自覚くらいはもってるだろうから、もうつきあう義理はないよね。逃げたくなる気持ちはよくわかる。今回もうはっきりとした結果は出た。万人が追認してくれるだろう、非常にわかりやすい結果だ。これ以上やっても、結果は同じなので、これ以上、こちらがハードルを上げる意味もないだろう。いや、あるかな?こういうGUIアプリなんて、こっちは、いくらでも複雑に書けるんだよ、何の苦労もなくね。これ以上複雑にしたら、もうそちらは、関数型で書くのは非常に苦しくなるんだろう?そういうのを確認してやるのも面白いと思うけど、あらかじめ逃げの先手うってるところをみると、もう限界っぽいし、繰り返しになるが、必死にコード書けたとしても、結果は同じだよね?「中国製不正アクセス機器を使って誹謗中傷してる犯罪者集団」みたいな妄想はマジ勘弁。それを釣りで煽ってる奴ら(単独?)もな。当面は以下の通りで行きます。いかんせん、Qiita以降の奴しか知らないので、不慣れなところはレギュラーが極力、バックアップ願います。◆p02ZTYXhPKG5にしたことも知ってる。英二郎@esumiiのことだろう。君は、国民の税金をもらって仕事させてもらっている立場だよね?住井さん。明らかに平日の勤務時間中に、2ちゃんねるで当方を誹謗中傷するスレッドにお友達の駱駝と一緒に書き込んで、「先生」だの、「8賢者」「ウィザード組」だの持ち上げられて、犯罪集団と合流して何やってるんだい?またもちろん、今回のOCamlを書いた人間は、OCamlを勉強している人、などではなく、ご指名ではないけど久々に書いてみました。俺もOCamlの勉強になったけどなどとその他、複数回、OCamlを勉強中の人間をアピールしているのは、「カモフラージュ」であると見ている。別に褒め称えるつもりじゃないけど、まあOCamlで飯を食ってる人間だけのことはあるね、君は断じて「OCamlを勉強している人」などではない。短時間で「書き殴り」で書ける、それなり以上に手慣れた人間が書く実装とコード。FRPとか使ってないので状態渡しでかなり無理して書いているけど、無理したら書ける程度のスキルがちゃんとある。「OCamlを勉強している人」という嘘ついて、カモフラージュしてるのか?プロだと特定されたら都合が悪いからだよね?ご指名ではないけど久々に書いてみました。自分ではない、とアピールしないと都合が悪い。