はてなキーワード: frpとは
何度も指摘されているが「岡部氏のFRP」は同じメンバ変数tに何度も値を上書きしてるだけの
FRP以前に関数型でもない普通の命令型プログラム。いくら論文を曲解したり哲学とか言い訳しても
http://kenokabe-techwriting.blogspot.com/2016/05/ocamlgui-esumii-camloebanonstarter.html
__items.t = __value.t
const ListElement = __Element(__([__items])
.__(() => ......
というように、「破壊」されたはずの、過去の__items.tすべてのデータにアクセスして列挙表示できてるのは何故?
説明どうぞ?
http://kenokabe-techwriting.blogspot.jp/2016/05/frp_18.html
残りは全部、使ってるライブラリのソースコードからfrequencyやリフレッシュレートやら、timerの解像度っぽいことをアピールしてるみたいですが、
タイマーの解像度設定しながらマウスイベントを同時にとってなんかやることと、
状態f(0),f(1),f(2),…を得る、という本来のFRPの基本原理
ってまったく違うでしょ?
誤魔化すなと。
状態f(0),f(1),f(2),…を得る
というのはどこだ?とけなされているのだけど、
イベントごとに写像されているのだから、状態f(t)だ、とかいうのなら、
岡部氏の言う時間軸をストリームにする、という話と関係ないのに、
ただ「実際のシステム時刻t=0,1,2,…」って言いたかっただけちゃうんか?ってのは見るものすべてにバレてる誤魔化しだ、って意味でしょ?
http://kenokabe-techwriting.blogspot.jp/2016/05/frp_18.html
残りは全部、使ってるライブラリのソースコードからfrequencyやリフレッシュレートやら、timerの解像度っぽいことをアピールしてるみたいですが、
タイマーの解像度設定しながらマウスイベントを同時にとってなんかやることと、
状態f(0),f(1),f(2),…を得る、という本来のFRPの基本原理
ってまったく違うでしょ?
誤魔化すなと。
状態f(0),f(1),f(2),…を得る
というのはどこだ?とけなされているのだけど、
イベントごとに写像されているのだから、状態f(t)だ、とかいうのなら、
岡部氏の言う時間軸をストリームにする、という話と関係ないのに、
ただ「実際のシステム時刻t=0,1,2,…」って言いたかっただけちゃうんか?ってのは見るものすべてにバレてる誤魔化しだ、って意味でしょ?
言い訳だよね?
結局、nonstarterは「状態渡し」でもFRPでも複雑なアプリになっても事情は全く同じということを主張しているのだから、その真実性を証明してくれと要求されているにすぎない。
nonstarter氏のエントリについても、kenokabe氏は
>>(イベントのシグナルから状態のシグナルを構成する際に状態遷移をそうした関数で表現する必要が出てくるので)
>まあ、この人物がFRPが何たるか理解していないのは、ほぼ確実でしょう。
などと言っていますが、「イベントのシグナル」(各時間ごとの入力の列)から「状態のシグナル」(各時間ごとの出力の列)を「構成」する、
平たく言えば前者から後者への関数を定義しようとすると、例えば前者をe1,e2,e3,...、後者をs1,s2,s3,...として、
多くの場合はs1とe1からs2を求め、s2とe2からs3を求め、s3とe3からs4を求め…となるので
s4 = f(s3,e3)
...
なるfを考えれば、そのfがまさに状態渡しを行う遷移関数そのものになります。
このことはnonstarter氏のエントリでもHaskellのFRPライブラリで書かれたGUIプログラムの実例を用いて具体的に説明されているのですが、
何度も指摘されているが「岡部氏のFRP」は同じメンバ変数tに何度も値を上書きしてるだけの
FRP以前に関数型でもない普通の命令型プログラム。いくら論文を曲解したり哲学とか言い訳しても
客観的には単なるメンバ変数への破壊的代入。オブジェクトにconstをつけたところで
じゃあOCamlで純粋関数型や(本当の)FRPで複雑なGUIアプリが書けるかと言うと、
誰もそういうライブラリを整備してないから、ライブラリから作るのは
まあ面倒だろうし、わざわざ非純粋関数型言語で純粋関数型のGUIを作る動機も
現時点ではまずないだろう。これもすでに指摘されているとおり。
http://anond.hatelabo.jp/20160517023637
それを処理系が実際のシステム時刻t=0,1,2,…に適用して
状態f(0),f(1),f(2),…を得る、という本来のFRPの基本原理
http://anond.hatelabo.jp/20160517023637
それを処理系が実際のシステム時刻t=0,1,2,…に適用して
状態f(0),f(1),f(2),…を得る、という本来のFRPの基本原理
>それを処理系が実際のシステム時刻t=0,1,2,...に適用して状態f(0),f(1),f(2),...を得る、という本来のFRPの基本原理
>それをユーザから見て命令型変数への破壊的代入ではなく参照透明な関数型インターフェースで実現するのがいわゆるモナドや(誰かの独自解釈ではない本来の)FRP。
命令型プログラムをFRPとか言ってる人が決定的に理解していない点は、
それを処理系が実際のシステム時刻t=0,1,2,...に適用して
http://elm-lang.org/examples/time
view : Model -> Html Msg view model = let angle = turns (Time.inMinutes model) handX = toString (50 + 40 * cos angle) handY = toString (50 + 40 * sin angle) in svg [ viewBox "0 0 100 100", width "300px" ] [ circle [ cx "50", cy "50", r "45", fill "#0B79CE" ] [] , line [ x1 "50", y1 "50", x2 handX, y2 handY, stroke "#023963" ] [] ]
HaskellのライブラリもElmのような言語も、サンプルもJavaScript実装も
https://en.wikipedia.org/wiki/Functional_reactive_programming#Implementations
いや、おまえは、単に、マウスイベントを拾って、FRPストリームに流す、という接続部分、つまり、FRP変数への書き込みについて、イチャモンつけてるんだよな?おまえにとっての「自動」の「同期」って何?
マウスイベントなりをラップしたFRPライブラリで、そのラップイベント宣言したら、ラップ変数に自動的に流れるとかそういうこと言いたいんだろうが、そこからその変数、関数なりで変換して行くのに、それがラップされてようがされてまいが、手間はまったく一緒だって理解してる?
あと、そういう既知のイベントなら、既知のマウスイベントなりを全部ラップしてやろうとおもえば、やれないことないだろうし、できるが、
既知ではない、FRPライブラリでラップされてないIOイベントとかどうすんの?w あほなの?w
たとえば、HTTPイベント、WebSocketイベント、全部FRPライブラリでラップして、
みたいにやるのか? 誰かが書いてくれるまで待つとか?w
あと、マウスの位置から10オフセットさせたい、とかオプションも無数にありうるわな?
オプションサポートされてないラップだったらどうすんの?w やっぱアホなの?w
それは示してるつもりだけど
マウスイベントをFRPライブラリでラッピングして、そのラッピングした場所に、リアクティブな処理を書き込むのがFRPライブラリだという定義?
そこまでは言わないけど「状態を自動的に最新に更新してくれる」はFRPライブラリの要件じゃないの?
入力と内部状態の同期を意識しなくても、内部状態は常に最新を反映している、っていうのがFRPの抽象化だと思うんだけど。
マウスの位置と、変数を自動的に同期してくれるのはその1つでしょ?
https://en.wikipedia.org/wiki/Reactive_programming
automaticallyってあるじゃん
まず、
>……と言っても聞き入れていただけるとは思えないので、私ももうこれ以上の書き込みはやめます。
できるだけ丁寧に技術的な誤りだけを指摘したつもりですが、やはり誹謗中傷しか返ってこないようで残念です。
。
住井乙。 実名相手に反論するのなら実名でオモテでやれ、糞が。おまえこれまで一度たりとして、正面きって、自分の名前かけて批判したことあんのか?
ほんと卑怯者の糞だよな?
次。
> __x.t = __x.t + 1;
2
自分で、わざわざ
命令型言語の破壊的代入そのものコード書いて、論理破綻だと?頭湧いてんのか?
JavaScriptにおいて、時間軸を抽象化したファーストクラスを導入したFRPライブラリを実装することは、
JavaScriptにおいて、おまえがやらかしたような命令型言語の破壊的代入そのものコードを書くことを禁じる仕組みを導入することとを保証するものでもなんでもない。
「できるだけ丁寧に技術的な誤りだけを指摘したつもり」とか、おまえが相当頭悪いのは前から知ってるので、今更だ。
おわり
>岡部氏のコードは時間軸を抽象化したファーストクラスになってないでしょ?
つーか、おまえの悪質なイチャモンにはうんざりしてるんで、なってないでしょ?とかほざく前に、どこがどうなってないのか?「お前が意味を理解していること」の大前提を当然同時に示しながら批判するなら批判しろや。
>自分で書き換えるんじゃ抽象化されてないじゃん。自分で書き換えなくても、フレームワーク側で自動的に最新の状態に保ってくれる仕組みが「時間軸を抽象化」してるってことでしょ?
えーっとどういうこと?
マウスイベントをFRPライブラリでラッピングして、そのラッピングした場所に、リアクティブな処理を書き込むのがFRPライブラリだという定義?
で、どこの誰がそんなオレオレFRP定義をしたんだい?w ソースをどうぞ?W
あのなあ、「時間軸を抽象化したファーストクラス」ってのは、別にイベントから自動的に更新される「読み取り専用」じゃねーのよw
イベントと紐付いてない、他の、「時間軸を抽象化したファーストクラス」との関係性を記述するときに「読み取り専用」ならどうやって記述するの?
おら、こたえてみろボンクラ
>岡部氏のコードは時間軸を抽象化したファーストクラスになってないでしょ?
つーか、おまえの悪質なイチャモンにはうんざりしてるんで、なってないでしょ?とかほざく前に、どこがどうなってないのか?「お前が意味を理解していること」の大前提を当然同時に示しながら批判するなら批判しろや。
>自分で書き換えるんじゃ抽象化されてないじゃん。自分で書き換えなくても、フレームワーク側で自動的に最新の状態に保ってくれる仕組みが「時間軸を抽象化」してるってことでしょ?
えーっとどういうこと?
マウスイベントをFRPライブラリでラッピングして、そのラッピングした場所に、リアクティブな処理を書き込むのがFRPライブラリだという定義?
で、どこの誰がそんなオレオレFRP定義をしたんだい?w ソースをどうぞ?W
あのなあ、「時間軸を抽象化したファーストクラス」ってのは、別にイベントから自動的に更新される「読み取り専用」じゃねーのよw
イベントと紐付いてない、他の、「時間軸を抽象化したファーストクラス」との関係性を記述するときに「読み取り専用」ならどうやって記述するの?
おら、こたえてみろボンクラ
岡部氏のコードは時間軸を抽象化したファーストクラスになってないでしょ?
自分で書き換えなくても、フレームワーク側で自動的に最新の状態に保ってくれる仕組みが「時間軸を抽象化」してるってことでしょ?
まず、
1.繰り返しになるが、お前の言う「グローバル変数」とかいうイチャモンは批判になっていない。なぜなら、サンプルコードでそれがグローバルなのは、単に、マウスイベント、座標と、階層が一層の単純で、一層=グローバルになっているだけ。おまえの初見の思い込みを延々と押し付けてトンチンカンなイチャモンつけるな。
2.ブログや公式サイトにさんざん説明されているとおり、FRPとは時間軸を抽象化したファーストクラスにリアクティブな関数をひも付けたもので、その実装とDEMOコードがさんざん示されている。その上で、「おれのおもってること違う?」とか、馬鹿が駄々こねているようにしかみえないし、「違う」と切り捨てる気にしかならない。
3.FRP変数、定数と、リアクティブな振る舞いはサンプルコードにおいて接続されて実装されているし、自分でイベント拾って、とか、そのイベントをあるFRPライブラリがわざわざなんかでラッピングして、無駄に使いにくくしようとも、素のママでかけるFRPライブラリであっても、FRPライブラリはこうであるはずだ、とかいうお前の無知とは無関係。