#おきた
##これ読むとするか
#読むという行為に入ると眠くなるの法則
#によって寝てしまったからな
#読んだ
#まぁ普通だな
#山本さんもいた飲みで言ったけど
#ふむ
#そう考えると命令型言語っもコンパイルされたものは
#同じものを返すもんね
#入出力ってなんじゃらほい
#でも実行すると副作用があるもの
#プログラムの内側から見て、プログラムの外側と情報を交換するように見える行為。
#> 入出力
#命令型言語でも関数型言語でもコードの外の世界か?というとどうだろう
#Yes
#言語関係ない
#そうなるな、やはり
#ああだめだこの説明じゃ。
#じゃあコードの中に入出力をしているというものを見るのはなぜだ?
#というと?
#説明がまわりくどすぎる。
#もうすこし質問の内容を具体化してくださいな。
#そうだな
#少し前に命令型言語の計算モデルはチューリングマシンで
#ふむ
#チューリングマシンにも入出力なんてないよねということを言った
#私が
#覚えてます?
#覚えている
#メモリテープ上の0,1を変えるだけで
#その状態の変化が「計算する」ということだ
#で
#テープも含んでマシンだから
#?
#その状態の変化に目をつけて
#ある番地にある01のパターンが書かれたら
#ああ。そこが微妙
#それをモニタに表示しようと
#ああでも先をつづけてくださいな。
#はい
#おお、まだ続いている。おはようございます。
#それをモニタに表示しようという風に外から解釈を与えている
#おはよう
#いったん寝たけどね
#ねもい
#うん、まだ眠い
#夕方から泳ぐからそれまでにもう一度寝る必要がある
#もうちょっとしたらShibuya.lispにおでかけ
#今日なんだ
#そ
#同じく。
#ゲストは?
#shiro
#あーそうか
#この状態の変化をプログラムコードとして記述するんだと思うのだが(命令型言語では)
#入出力というそとから意味を与えたものを
#なんとなく記述できるようにしているという風に見える
#状態の変化を記述するわけじゃないと思うけど。
#状態を変更するように命令*文*を書く
#これならどう?
#最初にテープに書いてあったのがプログラム
#停止した結果テープに書いてあるのが実行結果
#うん
#続きをどうぞ
#いや、おわり
#停止した結果
#そのテープに書いてあるのを
#そうだな
#ある特定番地から書いてある
#情報をモニタに流して
#それがHello worldと表示するように
#そもそも意味を与えている
#ふむ。
#あーそうかおれやっぱりスタートは勘違いしてるかな
#あらら
#自分の中で今破たんしあt
#もっかい考え直す必要があるか
#ただ、入出力については
#ふむ
#その結果のメモリテープを見る側か
#解釈している。つまり意味を与えている
#もちろんそういう解釈が成り立つように
#最初にプログラムをロードして
#いるわけだけど
#にも関わらず
#その意味解釈の部分である入出力が
#すとっぷ。
#はい
#入出力ってなに?
#たとえば今の場合
#チューリングマシンが停止した結果
#ある特定番地から続く01のパターンをそのままモニタというデバイスに解釈させることで表示するという解釈を出力する
#というかな
#停止した後に解釈するとしたら入力はどうなるのかわからない
#おお。
#解釈が重複してしまた
#うん。
#この前いったようにある特定番地からある特定番地までをVMEMのようなものだと思って
#マシンがメモリテープのそのあたりを書き換える都度
#モニタに流し込むスタイルと
#停止し終わったあとにある番地から続く
#01のパターンをモニタにずらずらと食わせることで
#表示する形式と
#(この場合はラインフィードや画面クリアなどのコントロールコードがふくまれる)
#どちらの*解釈*でも入出力できる
#でもチューリングマシンにとっては
#入出力なにそれ?
#おれは知らん
#言われたことをやってガチャガチャ動いただけ
#それを解釈してるあんたがその結果をどう意味付けるかは俺には関係ない
#と言えたらいいのだが、プログラムコードに含められたものとあとからの解釈には関連があるだろうなー
#まぁ要領を得ないけど
#完全に切り離せると思ってたけど
#なんか切り離せない気がしてきた
#なにとなにを切り離すの
#「入出力」と「チューリングマシン」
#もっといえば命令型言語の計算モデルと入出力
#対応が逆になったけど
#入出力は外からかってにそう解釈してるだけ
#としたかった
#nobsunの「入出力の記述ができるということが副作用があるというのなら副作用はある。参照透明性云々なら、参照透明なのだから。。。」というのはなるほどと思った。副作用をそう定義するというのは考えたことなかったです。
#それも入出力の定義があいまいだと議論ができないよ。
#まず、kazuさんの副作用の定義を採用して話をすすめるといいかも。
##そろそろ出かけるけど、途中アクセスできるところではアクセスしてここ見るから、書きこんでおいてくださいな。
#たぶんもう一度勉強しなおしてから>チューリングマシン
#になるなぁ
#ただ、「runtimeでは副作用があって」というのは、まだわかんないです。というのも、これまで出てきた副作用や参照透明性の定義は、いずれも言語の形式的性質であって、言語ではないruntimeに対して形容するのは category mistake だとしか思えないので。
#kazuさんの定義は見てみます。
#それに、もしruntimeに対してそういう言い方を認めるならば、「C言語の解釈系を純粋関数的に実装可能なので、C言語には副作用がない」と言ってしまうことだってできるでしょうし。
#と、私も Shibuya Lisp に行ってきます。
#もう昼か
#今日は何を食うか
##conal は癒し系
#DonoMoiの話と同じですね。私が英語を誤読してなければ
#cppha
#cppはpurely functionalだ
#cpp+Cと対応してHaskell+IOってのがどういう感性かついていけてない
#移動中
#電車にのったところ
#kazuさんの定義では、
#- グローバル変数の変更
- ローカルのスタティックな変数を変更
- 入出力
#が副作用。
#まず、ここからはじめる。
#言語の形式的性質についての言及なのかどうかが不明なので、
#(1)言語の形式的性質について(2)そうではないものの性質について
#と二つにわけることにする。
#aa dempa joutaiga warui
#(1)の立場なら副作用は入出力とは関係なく、変数の問題だけ。
#変数の値は変更できないので副作用はない。
#さてここからが説明しにくい。
#(2)の立場というのはなんなのかがよくわからないが、
#(1)の場合と逆で、
#変数云々は関係ない。
#入出力だけが問題。
#入出力の定義が曖昧ではあるけど。入出力がどこかで起ったと考えることには妥当性がありそう。
#げ、shibuya lisp の開始時間が訂正されてた orz
#これが、「実行時まで含めて」という議論。
#13:30開場
#昨夜haskell-jpの裏番組(おぃ)のGaucheでそういう話をしていた。
#> shibuya.lisp の時間
#ただし、それは入出力がおこったんだから副作用があるでしょ。という議論であって、getCharが実行時ごどに違う文字を返すから副作用があるという話ではない。
#Worldの話はHaskellの実行系をHaskellで書くときの入出力モデルの話。
#Worldモデルには副作用はない。
#とまあぁ。こういう説明でどうかな。
#地下にもぐるので接続がきれます
#cpp+CとHaskell+IOはそうか
#purely functional(cpp,Haskell)な絵筆を使って副作用を描きました
#かな
#純粋関数型言語には副作用はないけど
#それを使うプログラマが副作用を表現したかったら好きに書ける
#IOというものがruntimeによってどう処理されるかを予測した上で
#好きに描ける
#もう電車乗っちゃったよー。どっかで時間をつぶさなくては。
#昨日のnewtypeの話にちょっと補足。
#Numのようなクラスなら、Int2 が data で定義されていても newtype で定義されていても、Num Int をもとに Num Int2 の定義を作ることが(cut-seaさんが書いていたように)普通に出来る。
#ただ、これは常に出来るとは限らなくい。例えば class C x where m :: Arrow a => a x x のような変なクラスとかね。
#そのような場合でも、newtypeで宣言されていれば、a Int Int と a Int2 Int2 が同じ表現を持つことが保証されているので、コンパイラはInt用のメソッドを型だけごまかしてInt2に使うことが出来る。
#Arrow a => a x xって x -> xみたいなものですよね?特定化すれば?
#変なクラスなのかどうかすら私には判断できない
#みんなよく異常なとか変なとかいうのの大半が私にはまだ理解できるレベルにないというかなしい状態
#変なのと書いたのにはあまり深い意味はないです。
#newtypeなら~保障される
#の、保障の元はnobsunが言ってた制約かな?
#typeってaliasつまりUNIXのファイルシステムにおけるハードリンクみたいなもんだと理解しているけど
#もう渋谷につくのでまた後で。
#その類推になぞらえるとnewtypeって?
#おう
#soft link
#会場到着。
#やはりそうか
#まあ比喩は比喩なので微妙かもしれないけど。。。
#shibuya lisp はじまった
##純粋技研「汚染鉄道に破壊航空さん、いつまでも化石燃料を使って環境破壊してていいんですか?
いまやエコじゃない企業は生き残れませんよ?」
破壊航空「なにを言うんですか、お宅だって同じようなものじゃないですか?」
純粋技研「何がですか。うちの生産ラインを見ていかれますか?
太陽エネルギーだけでまかない、汚染物質も0%!
うちの工場は完全クリーンな世界最先端のエコ企業ですよ」
汚染鉄道「なにをおっしゃいます。おたくが先日発表した新車。
イカれた若者に人気だそうですが、燃費は最悪、化石燃料を馬鹿食いするって評判ですよ」
純粋技研「だからどうしました?」
破壊航空「だからお宅も環境破壊しまくってるでしょ?と言いたいんですよ」
純粋技研「だから何度も言うように、うちは一切環境破壊してませんよ。」
汚染鉄道「じゃあ乗り物は環境破壊してないんですか?」
純粋技研「乗り物が環境破壊するか?と言われればするでしょうね。
でもうちは環境破壊なんかしてませんよ。
騒音を出して環境破壊する自動車こそが世間の若者のニーズであり
そういったものをクリーンな生産ラインに乗せて製造販売しているだけです。」
汚染鉄道「いや、我々が言いたいのはお宅環境破壊してるよねってことなんだけど」
純粋技研「そこまで言うなら、うちの工場の中をくまなく監査してみてくださいよ。
どこにも環境破壊するようなものはありませんから。全然。」
汚染鉄道「でも環境破壊する乗り物を作ってる。」
純粋技研「ええ、作ってますとも。100%クリーンな技術を使ってムチャクチャ燃費の
悪いスポーツカーを作ってます。はい。
乗り物ですからね、走らせればそりゃ環境破壊するでしょう。
ガソリンを消費してCO2を排出することが環境破壊だと定義するならね。
でもうちの工場内は100%クリーンだから問題はないのでは?」
破壊航空「副作用自動車さんが先日発表した新型車、あれこそエコですよ。
副作用自動車さんこそ環境にやさしい企業なんじゃないの?」
純粋技研「ああ、わたしは同業だから知ってますがね、あそこの工場は環境破壊しまくりですよ。
あの会社は自分でエコな会社じゃないって言ってますよ。
副作用自動車さんは100%化石燃料を使った環境にやさしくない技術で
ソーラー車を製造販売しているだけでしょう。
あそこの生産ラインは別にエコじゃないですよ。」
汚染鉄道「生産販売している自動車まで含めれば環境破壊してるって見えるのでは?」
純粋技研「うちの生産ラインを見てどこにもないのに、その外で起きていることを議論してなんになる?」
#なーんてな
#ストリーミングで生中継ができるっていい時代だ
#これ録画したままにできるのかな?
#そろそろおれも出かけようかと思うのだが
#あとで見たい
#それとも勝手にどんどんたまってあとからこのページに来れば見えるの?
#failしあt
#WEBサーバか
#今30人くらいがみてるのか
#そっちの会場には何人いるの?
#継続ベースか
#Kahuaだ
#おおおおお
#俺は継続とAjaxっていいところを潰し合うと思ってたけどその辺どう感じてるかなこの人
#お、Arc Challengeだ
#MCさん真面目そう
#アナウンサー口調だな
#Kahua!
#スクリーンでかい!
#こら会場も結構でっけえな
#雑談なんかも聞こえて結構雰囲気伝わるな
#みんな Lisp か、いいなー。
#ところで Chaton 表示されるまで時間がかかるぞー!
#責任者を出せ!責任者を!
#あ、責任者みんな shibuya.lisp か。
#私はそろそろ出かけます
#楽しんでください
#いいなあ。
#独り遊び。
#寂しいからお風呂入ろっと。
#「newtypeなら~保障される」の保証は Haskell 98 の 4.2.3 Datatype Renamings の「newtype does not change the underlying representation of an object」というところ。それが実現できる理由はnobsunも言っていた話。
#今気づいたんだけど、GeneralizedNewtypeDerivingはGADTの型安全性を壊すね。
#data IsInt x where IsInt :: IsInt Int
class C x where m :: IsInt x
instance C Int where m = IsInt
newtype Int2 = My Int deriving (C)
#その会場、白石、ぼのたけ、います?> sakai
#いないと思います。
#そうですか。会議室の話をそちらでまとめてもらおうかと思ってました
#泳いで飲んで充実!
#乳酸LOVE!
#副作用むずい……
#お帰りなさいませ、だんな様。
#ご主人様だっけ。
#lisp は堪能されましたか。
#hiyamaさんが副作用について書いたのを見つけた。
##
#副作用とは、関数、メソッド、手続きなど(計算/処理の単位)が、外部(環境)に影響を及ぼすことです。例えば、ローカル変数以外の変数への値のセット、ファイル入出力、画面への描画などは副作用です。