・Dockerじゃないsystemd-nspawn+machinectlが非常に良い・99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その1】「計算機科学のほんとうの基礎」を理解していない。IQ145の女子高生の先輩から受けた特訓5日間』を大変多くの方々にお買い求めいただき、感謝します。本書の全目次を公開し、質問を受け付けます。本エントリは、後世の記録のために残します。当方の主張の是非については、大げさではなく、長い時系列をもってフェアに判定されることを望みます。このエントリは、2015年現在の国内における、関数型プログラミングをめぐる言論状況について分析し、広い読者に各自、色付きの情報を公正中立だと勘違いして惑わされないように注意を促し、正しい情報を見極めて理解を推進していただくために投稿します。少なくとも日本国内のSNS界隈には、ある一定数の人数が集う【自称】「関数型コミュニティ」なるものが存在しています。【自称】「イスラム国」が、国際社会からは国家として認められていない物騒な存在であるのと同様に、国内SNSで今特に巷で騒がしい自称「関数型コミュニティ」の言説については、国際的なプログラミング界隈の言説とはまったく異なる特異な主張であることに十分に留意しておく必要があります。「特異な主張」というのは無碍に扱ってはなりません。「特異な主張」には発見もあるでしょうし、往々にしてきらめく知性もある「かも」しれません。私見や独自見解、あるいは単なるより好みの「特異な主張」をまるで、それが広く世界的にコンセンサスがある「一般論」に見せかけたり、「関数型言語」に関するFAQ形式の一般的説明、と強弁するような事は、多くの学習者へ間違った理解や認識をもたらす行為であるのは言うまでもないことです。自分たちの私見や独自見解、あるいは単なるより好みの「特異な主張」こそが正しく、その意向に沿わない見解、主張、意見を封じようと試みる行為が正当化されて当然という風潮が醸成されると、これはもう言語道断です。これが今、日本国内の関数型プログラミングの言論界隈で起こっていることです。恐れおののき、この辺のトピックについては腫れ物に触るように口を閉ざしてしまいました。「この問題に触れるのは【地雷】を踏むようなものだ」といった感じです。【自称】関数型コミュニティは、なんのことはない、単に自分たちの単なるより好みを、まるでそれが唯一無比の王道であるが如く世間に押し付けて喜んでいるわけです。私は彼らの横暴については学問、学究的な態度と認めることは到底できず、単なる感情的な排他的宗教行為であると見做しています。冒頭で【自称】「イスラム国」について言及してしまいましたが、まあ根本の思想的行動傾向としては同レベルです。公正にフェアに状況を俯瞰すると、国内の【自称】関数型コミュニティによる見解のようなものは国際的に存在はしているのでしょう。して同様の感情的な排他的宗教行為を展開することもある、かもしれません。それはあくまでひとつの特殊な集団でしょうし、彼ら、一部の特殊な集団による言動が他のすべてを制圧するような愚かな状況には陥っていないことだけは確かです。ここで「一般的」な国際的な論調と異なる、日本国内の【自称】関数型コミュニティによる独特な特徴とは以下のようなものです。1.オブジェクト指向に傾倒しており、関数型プログラミングとオブジェクト指向を「マルチパラダイム」というように差異を曖昧にすることでパラダイムの違いを処理し、そもそものパラダイムの差異については認めようとしない。より好みを正当化するために根底の世界観の差異を曖昧にしようとする。2.関数型プログラミングの根幹である、宣言的プログラミングでなく、命令形プログラミングに何故か執着している。3.関数型プログラミングの根幹である、宣言的プログラミングと不可分である「遅延評価」でなく「先行評価」のほうを何故か好む。賢明な読者にとっては明白ですが、1から3は全部密接な関係があります。2に執着するならば、3にも執着するんだろうな、ということですし、3に執着するならば、1に執着して当然なんだろうな、というようなことですね。@camloeba関数型言語とオブジェクト指向の研究は両者とも同じ数学的基盤に支えられて行われています。片方で主に知られている研究者がもう片方の学会で発表するのはごく普通の事です。こちらは「λマン」がオブジェクト指向の国際学会に登壇している様子です。あの方の記事に関数型言語を良く知らない人が流れ込んで、あそこから得体の知れない何かを得ているのを複数観測しました。私はそれを出来るだけ止めたい。これはマズいという記事は消えて頂くかそれとも順位が下がってもらいたいが、そのために火事場するのは逆効果です例の「焚書」行為に(実際にそのように働きかけたことは確認)勤しんだことを批判した方ですが、Qiitaでは、当方のアカウント停止行為があった後、当方にあてつけて「粛清したい」という言葉遣いもされていたのを見ました。上記引用のとおり、「関数型言語とオブジェクト指向の研究は両者とも同じ数学的基盤に支えられて行われています。」と、同じ数学的基盤だと強調されています。プログラミングとはなんであれ詰まるところは数学的行為であるので、あらゆる手法は数学的であるし、数学的に同一基盤、共通項を見いだせてもそれは驚くに値しません。実際このことは、中世そしてルネサンス以後、「天動説」と「地動説」の論争においても、さんざんキリスト教神学者とガリレオ・ガリレイなどの数学者の間でも必ず持ちだされました。詰まるところ、天体の回転運動なので、いくらでも同じ「数学的基盤に支えられている」と言えるんですね。本質的にはなんら変わらない、単なる数式上座標軸の置き方の違いに過ぎないと。これがガリレオが異端ということで有罪判決を受けてからローマ法王がごく最近に公式に誤りを認め謝罪するまでキリスト教によって300年くらい延々と正当化されてきた欺瞞的説明の仕方です。ここでもちろん問題は、「天動説」と「地動説」のようなパラダイムや世界観の違いは、単なる数式上座標軸の置き方の違い、ではない、ということです。関数型プログラミングとオブジェクト指向についてもそれは同様でしょう。@camloebaというアカウント名でも明白ですが、この人は、OCamlという関数型、オブジェクト指向のマルチパラダイム言語の愛好者です。プログラマにとって、どの言語を道具にするか?というのは、これこそまさに宗教的より好みと言って過言でない重要な選択であるので、もう、この時点でこの人物の言説には【色】が着いていることを普通に認識して割り引いて評価する心構えが必要です。Wikipedia日本語版で、OCamlの項目を見てもわかりますが、http://ja.wikipedia.org/wiki/OCamlMinCaml[編集]MinCamlは、ペンシルベニア大学(当時)の住井英二郎がOCamlで実装した、Caml似のMLの小型版である。2004年度の未踏ソフトウェア創造事業に採択された。@esumii氏のお名前が確認できますね。【自称】関数型コミュニティの中心メンバーとも思える彼らの技術的立ち位置は、けっして中立公正なものではなく、個人のより好みが強く反映された【色つき】のものである、という客観的認識は、広く共有したうえで、一連の騒動は理解されたほうが健全である、と私は考えています。いうより、私は、関数型プログラミングとオブジェクト指向のパラダイムとしての対立について言明することで、この彼らのなんのことはない、単に自分たちの単なるより好みにすぎない、OCaml愛好スタンスとしての関数型、オブジェクト指向のマルチパラダイムの親和性を実質否定した、彼らがより好みする先行評価、命令形よりも遅延評価、宣言型の優位性を主張したというだけで、彼らから延々と「有害」だの「低湿なワードサラダ」だの「キチガイ」だの侮辱、罵倒され続けているわけです。いや別に良いのですよ、1−3に執着しても。一個人としてのより好みとしてのスタンスであるのならば。なくて、あたかも1−3が絶対真理であるがごとく他者に押し付け、侮辱し、人格否定までするような真似が愚かであるということです。以前いただいたメールもひとつだけ引用しましたが、基本的に結構多くの人が、上記のような状況に「論理的」にまったく納得していません。私達は馬鹿ではないのです。「論理的」には納得してはいないが「地雷」であるとの認識が強いので、公に言葉を発することを恐れている人がかなり多いです。私の方へ多くのメールが寄せられたりするわけです。下手なことを発言して、【自称】関数型コミュニティに眼をつけられると、自分も面倒に巻き込まれると恐れているのですね。非常に言論として不健全な状況に今我々はいると感じています。プログラミングは、本来自由に、無制限な発想が発揮できる、現実世界では稀有な一種の芸術的側面が強い創作的活動分野であり、こういう状況はあってはならないと私は信じています。関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考えるというブログの論調について質問をいただきました。概念的に無理があるので整理するという趣旨でポストした記事を「茶番」として当てつけるタイトルの対抗記事です。このブログ執筆者による記事の結論的な成果物としては、さっそく、ObjectのHaskellによる実装を作った。Object型に加え、Objectのインスタンスとして利用するためのユーティリティ関数も備えている。http://hackage.haskell.org/package/objectiveその「思想的背景」としては、オブジェクト指向の仕組みが、たった一つの型の特殊な場合として表現できるのは、なかなか魅力的ではないだろうか。岡部はどう考えるか?ということでした。「好きなように楽しんでおられるのだし、それがプログラミングの醍醐味なのではないか?」ということでしたが、この回答にイマイチ満足もされなかったようで、もう一歩踏み込んだ考察を示しました。Haskellというのは、有名な関数型言語ですが、クロージャの機構が他の多くの関数型言語同様に実装されているので、オブジェクトや、オブジェクト指向のレイヤを整えることなんて(超簡単に)出来て当然である。して機能しうる!という考えているっぽいのは、まるで理解不能であるし、また、成果物をライブラリとして公開してHaskellコミュニティが評価してくれる、魅力的だと人気を得るとは到底思えない、という旨お返事しました。何度も繰り返しますが、そもそも、関数型とオブジェクト指向というのは、思想的背景が異なるので、それが技術的に片方がもう片方をエミュレートするレイヤをこしらえようと何にしようと、マルチパラダイムにしようと何にしようと、根本の、そもそもの異なる思想背景からすると本末転倒であるのは論を待ちません。論を待たないことで、私は個人的にはあくまで、至極当たり前のことを当たり前に論じているだけだと思っているわけですが、そういう当たり前の行為を、いわば「イレギュラー」なより好みをもって、私の主張のほうが異常だ、と強弁する連中が少なくない、ということです。上記ブログの執筆者は、Twitterアカウントでふみ(OOP系Haskeller)@fumievalオブジェクト指向の使い手であり、単なる音楽好きでもあるで、「オブジェクト指向の使い手」(OOP系Haskeller)と自己紹介しているわけですが、まあ普通に、オブジェクト指向から対比的に関数型を論じる私の論調が気に入らないことは、理解できます。非常にわかりやすい感情論のスタンスです。コミュニティ」なるものの特徴です。@fumievalはさっそくヘイト行為を流布すべく行動に打って出ました。関数型プログラミングコミュニティにおける災害まとめました。@fumievalあるQiitaユーザーにより、関数型プログラミングに関して、用語をでたらめに使用した記事が投稿され、Googleの「関数型言語」の検索結果の上位に出たり、記事の内容を実際に信じてしまうなどの被害が出ている。これらの記事は「ポエム」と呼ばれ批判の的となっている。問題は予想以上に深刻となり、Qiita自体の評価の低下や記事の削除などの騒ぎになる。“このアカウントはユーザー資格を取り消されています。コミュニティ」の縄張り意識、宗教的より好みといいう主観的被害にすぎません。要するに気に入らない意見を封殺した、ということですね。確実に、国際的な常識であるわけです。そんなに、オブジェクト指向が素晴らしくて、先行評価、手続き型・命令形に執着したいのであれば、わざわざ関数型言語なんて無理して使わなければいいのに、と素朴に思うわけで、Haskellが純粋関数型言語で(クロージャでオブジェクトが当たり前に実装できるっていうのはまったく別の話)、デフォルトで遅延評価で、完全に宣言型のコードになるのは、それ相応の理由があってのことです。関数型とオブジェクト指向のパラダイムが違う、なんてことは、これはもちろん私が「キチガイ」だから、私の独自研究による独自主張で世の中をひっくりかえす妄想として流布している、わけもなくて、どこでも世界中で普通に明言されていることです。【自称】関数型コミュニティの横暴な振る舞いに抑圧されている方々は、そういう当たり前の常識さえも抑圧されかねない状況にあり、極めて異常な状態がまかり通っている昨今の国内状況であると危惧しています。いいのですよ?私のように当たり前に正しいことを発言して。ほんとうのところ、彼らは少数派であり、間違っているのは、特殊でイレギュラーな個人的なより好みを絶対的社会通念がごとく押し付けてくる彼らなのですから。以下が広く一般的で国際的な【「関数型言語」に関する一般的説明】です。1まず、マイクロソフトのサイトから見てみましょう。念の為ですが、マイクロソフトから引用するのは、「権威」を拝借したいから、権威主義的説明を試みたいからではありません。一般にマイクロソフトが「権威」であると考える人は居ないでしょう。マイクロソフトというのは、まさに、IT世界で、広い範囲で、どこにでもあるWindowsその他のプロダクトを提供している、一般に馴染の深い国際的な企業であり、その技術的説明も一般的で普遍的であるという観察と前提に基づいています。関数型プログラミングと命令型プログラミング関数型プログラミングのパラダイムは、問題解決に適用する純粋関数型の方法をサポートするために、わかりやすく作成されています。関数型プログラミングは、宣言型プログラミングの一種です。プログラミングをサポートするために作成されています。命令型の方法では、開発者はコードを記述して、目的を達成するためにコンピューターが実行するステップを詳細に示します。プログラミングと呼ぶこともあります。それぞれの関数に何が入力され、何が返されるのかが、慎重に定義されます。つの方法の一般的な違いを次の表に示します。実行方法と状態の変化の追跡方法。目的となる情報と必要な変換。