月別アーカイブ: 2018年8月

頭の中のざわざわ

ざわざわという言葉が正しいのかどうかわからないが,昔から頭の中で何かが暴れだすような感覚に襲われて苦しい状態になることが時々あった.特に子供の頃,風邪などで寝込んでいるときにこの状態になることがあって,その場合は辛くて寝ることができなくなる.

大人になるに連れて症状が軽減されてきていて,今の今まで完全に忘れていたのだが,つい先程その症状に襲われて,そういえばと思い出したのであった.頭の中がざわついて辛くなるという症状がよくある話なのかわからないが,実際にそれに悩まされている人の話を聞いたことは殆ど無い.この症状についてすぐに思い当たったのは脳内のニューロンの発火が暴走するような現象が起きているのではないかという仮説だ.ビッグファイブでいうところの開放性は,脳内のニューロン同士の結びつき(シナプス)が強さを示す指標で,開放性が高い人はそれが災いして幻聴や幻覚などを感じ取る傾向にある.それと似たようなことが頭の中で起きて,勝手に頭の中がざわつき始めるのではないだろうか.もしそうであるならば,この症状は開放性が高い統合失調症やADHDの患者によく当てはまるように思われる.

実際に調べてみると,やはり統合失調症やADHDなどの疾患と関係があるようだった.私の場合は症状が軽い上に,現在は比較的落ち着いてきているため,そこまで問題になってはいないが,この状態に頻繁になる人は生きていくのが結構大変なのだろう.

内容についてどう思いますか?
  • いいね (2)
  • だめ (0)

summer pockets

Key作品といえば,Kanon,Air,Clannad,Little bustersあたりが有名だろうか.その後に出た,RewriteやAngel Beats,charlotte などはいまいち話題にならなかったように思う(実は知らない間にHarmoniaというが出てたみたいだが).ただ,Litlle bustersは今からすでに10年ほど前の作品であり,その後に出た作品がどれも不発に終わっていることを考えれば,Keyに昔ほどの勢いはないだろう.

ところが最近Keyから発売されたSummer pocketsがものすごい高評価を得ていることをレビューで知り,興味本位でやってみることにした.以下はその感想である.

Air,Clannadのいいとこ取りをした作品

やり終えて最初に思ったのは,これは鍵好きが好きそうなお話だなという印象だった.Key作品といえば,微妙にファンタジー要素を含みながら,でも基本は日常を描いたようなものが多い.この作品も例に漏れず,島にまつわる秘密を軸に各シナリオが描かれている.だーまえが原案とはいえ,シナリオライターが別であることを考えれば,今までのKey作品を踏襲して書いたように感じられる.特に,Clannadの影響はもろに受けていて,メインヒロインからグランドルートに至るまでの一連の流れは,Clannadで出てきた演出を組み合わせて作られたように思われる.そのため,Clannadの内容を知っていると,Summer pocketsは全体的に二番煎じ感があり,よくできたKey作品という印象が拭えない.逆に言えば,Key作品としてSummer pocketsから入った人であれば,そういう前知識がないぶん,話をすんなり受け止められるのではないだろうか.それに,二番煎じとはいえ,シナリオ全体の出来は非常によく,名作と呼ばれる所以がよく分かる.シナリオのできが良かっただけあって,やはりもう少しオリジナルティがあっても良かったなと思わざる得ないのが残念だ.

Key作品でおすすめは?と聞かれたら進められる作品

今までであれば,Key作品でおすすめは?と聞かれれば,やはりClannadやLittle bustersなどを勧めていただろう.しかし,これらの作品はやはり古くなってきているし,かと言ってRewriteやAngel BeatsなどはKeyらしくなかったり,内容的にイマイチだったりと問題があった.それに対して,今回のSummer pocketsは過去のKey作品のいいところを引き継ぎながら,現代版として甦った作品だ.長さ自体も,過去のKey作品と比べれば比較的短いが,かといって別に不十分というほど短いわけでもない.したがって,おすすめのKey作品として名を挙げやすい作品になっているのではないかと思う.

総評

このところ不調続きだったKeyだが,ここに来てSummer pocketsという名作を生み出した.全体として二番煎じ感があったとはいえ,過去のKeyのいいところが全面的に出たいい作品になっていると思う.この追い風に乗って,良い作品を更に生み出してもらえればと思う次第である.

内容についてどう思いますか?
  • いいね (1)
  • だめ (0)

関数型言語に関して思うこと

ここ最近というわけではないが,関数型言語に関する話題をよく目にするようになったような気がする.何を持ってして関数型言語であるかというのは非常に悩ましい問題ではあるが,おそらく最も古くに生み出された関数型言語がLispであろうことを考えれば,関数型言語の歴史は非常に古い.それに対して,世の中のコンピュータの基盤であるOSなどの低レイヤを支えるc言語がLispより20年近くあとに生み出されたことを考えれば,c言語やその影響を受けた後続の言語(JavaやLLなど)がいかに新しいかがわかるはずだ.

私はもともとc言語からプログラミングを入門し,次にC++を学び,Java,Pythonと進めてきた.特にC++に触れてきた時間は非常に長く,プログラミングの思考回路がC++をもとに組み上がっていると言っても過言ではない.したがって,初めて関数型言語に触れたときは強い隔たりを感じた.特に違和感を感じたのは,関数型言語の記述がアセンブリから完全に乖離している点だった.CやC++などの手続き型言語が,何をしたいのかを書くのに対して,関数型言語が何が成り立つのかを書くというのはよく言われる話だが,コンピュータの根幹をなすアセンブリ言語が前者の立場にあることを考えれば,関数型言語がそのままの形では全く相容れないことは明らかである.

ではなぜそのような関数型言語が今になって注目されているのだろうか.その一つの答えは,関数型言語を支える非常に強力な仕組みである型システムが,プログラムの記述を簡単にし,更にはバグさえも防ぎ得るということにあるではないだろうか.そもそもc言語やそこから派生した言語は,人間がミスをすると簡単にバグが挿入される可能性がある.これは例えれば鋭いナイフのようなもので,その切れ味をうまく活かせれば大抵のことは効率よく行うことができるが,使い方を誤れば自身を傷つけてしまう諸刃の剣となる.これはc言語の前身であるB言語の更に前身であるBCPLの哲学である

BCPLの哲学は、最良を知ると皆が考える暴君がいるのではなく、何が許されて何が許されないのかという決まりが定められているのでもない。どちらかといえばBCPLは、たとえ明らかに馬鹿げた事態に直面したときでさえ、不平を言わずに自らの能力を最大限に活かしてサービスを提供せんとする召使いとして振舞う。彼が何をしていて、細かい制限に制約されないということを、プログラマーは常に理解しているものと考える。
「BCPL, the language and its compiler」より

にあらわれている.これはプログラマが過ちを侵さないという絶対の信頼のもとで成り立っている.しかし,実際にはそのようなことは絶対にありえない.むしろ世の中にこれほど人為的ミスとしてのバグがはびこっているのは,人間がそこまで賢くないことを示唆しているのではなかろうか.

さて,人の書くプログラムには絶対にバグが入り込むと考えたとき,これを防ぐためにはどのようにしたら良いだろうか.関数型言語における,この問題に対する答えはバグが入り込む可能性があるような書き方は,そもそも許さないというものである.関数型言語では,関数の副作用を極力許さないことと,型に基づいた統一的な記述により制約をかけている.このような制約は,動的型付けであり副作用がてんこ盛りのLLから見れば,非常に強いものだが,バグを防ぐ上では非常によく機能することがわかっている.

ある言語が,手続き型言語と関数型言語のどちらであるかは程度の問題であって,完全な線引があるわけではない.pythonやperlなどであっても記述の仕方によっては関数型言語のように書くことができるだろうし,LispやOCamlでも手続き型言語のような記述ができるはずである.しかし,言語のサポートによって関数型言語として代表されるような記述がどこまで可能であるかが変わってくる.特に大きな線引は高階関数が扱えるかどうかではないかと思う.関数型言語が特に流行りだした頃から,多くの言語でラムダ式(無名関数)をサポートするようになったが,部分適用が言語レベルでサポートされているのは殆ど見たことがない.しかし,関数型言語にとって高階関数が無くてはならない存在であることを考えれば,これをサポートしていない多くの言語は一般には関数型言語とは呼べないのではないか.

とにかく,高階関数はもちろんとして,完全に純粋すなわち副作用を持たない言語としてHaskellが有名である.Haskellのすごいところは,その徹底ぶりにある.多くの関数型言語は,副作用を全く持たないことを保証できていない.これはおそらく,利便性の観点から完全に副作用を除外すると,非常に書きづらくなる恐れがあるからではないだろうか.画面に文字を表示するということですら,簡約のやり方によっては表示の順番が変わってしまう恐れがあるため,そのままでは副作用は避けられない.しかし,Haskellではモナドを用いることで,理論的にも妥当なやり方で副作用を追いやることに成功している.さらに,Haskellは遅延評価を用いることで便宜的とはいえ,加算無限の概念を記述することも可能である.Haskellのすごいところは,そういった,一見達成困難なことを理論的に美しい方法で,コンピュータ上の実装のレベルまで落とし込んでいる点にある.これにより,Haskellは数学と非常に相性が良い.特に関数型言語の利点である,性質を記述することでプログラムが可能であるという点がうまく引き出されており,これは数学の式の記述に非常に近いものになっている.

ここまで思ったことをつらつら書いてみたが,あまりに何も考えてなさすぎてとりとめのないものになってしまった.とにかく,最後に私が言えることは,関数型言語を全く知らない人はどのようなものかを一度勉強してみるべきだということだ.そこには,手続き型言語だけでは感じることができない,理論によって整理されたきれいな世界が広がっているのだから.

内容についてどう思いますか?
  • いいね (2)
  • だめ (1)