平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

Lispへ向けて進化

C#Lispの機能を取り入れるのは、たぶんわりと早くから考えられてたことだと思う。

Perl5, Python, Ruby, JavaScriptを横目に見ながら。(ポール・グレアムのエッセイが与えた影響は知らない)

ただ、C#は(Java2インスパイアド)静的型。

ってことでまずOCamlを研究。F#を公開。

それとは別にクエリ統合を研究。プロトタイプはXen(X#)。これは公開はされなかった。

それらの研究成果を取り入れたC#のあり方を模索して、その中で生まれたのが

以上すべての成果を受けて、C#2.0および3.0があるわけで。

C#以外のCLI用処理系で興味深いのはIronPython、Boo、Nemerleかな。

LINQ

C#は強い型付けの言語なわけですが、LINQのような書き方が可能になるまでにはいろいろありまして。

  • C# 1.1
    • ジェネリックなし
    • メソッド参照あり(デリゲート、一級オブジェクトではないと思う)
      • (追記)デリゲートは変数にセットしたり、引数や戻り値に使ったりできる。だから一級オブジェクトといえるようだ。型がある(引数と戻り値の組が型になる)のに注意。
    • 匿名メソッドなし
    • クロージャなし
    • デリゲートはイベントとか非同期処理とかのハンドラって感じ
  • C# 2.0
  • C# 3.0

思うに

  • ラムダ式とかクロージャとかいうような記述ができるならLINQと同じような処理は実現できる
  • でも強い型付け言語のC#で気軽にクロージャを使えるようになるには、Javaに毛が生えた的なC#1.1ではだめで、Javaにはない機能をどんどん取り込まないといけなかった
  • ラムダ式とかクロージャとかが簡単に書けるような言語を前提にすれば、LINQのようなシンタックスシュガーを採用するかどうかは、言語の優劣には関係ないと思う
  • C#はいわゆるエンタープライズアプリケーションの世界で使われることを大きく意識しているはずなので、利用頻度とか、開発者たちの好みとか、そういったところを考えてLINQの採用を決めたのだろう
  • なんでもありな感じがMSっぽいと感じる

CSSXSS

わっほーいヤバいよー。

思い出したのはCSRFだけど、あれはダイレクトに書き込み(改ざん)されてしまうという問題。CSRFの場合は情報の読み取りはできなかった(と思う)。

フレームやインナーフレームの場合、同じドメインじゃないとスクリプトからHTMLにアクセスできなかったはずだし、XmlHttpRequestなら、同じドメインじゃないとリクエストもできない。

ところがCSSの@Importだと、上記方法にはできないことを平然とやってのけるゥ!そこに(略)

スクリプトから内容の読み取りができてしまうと。

対策としてはCSRFと同じで、機密ページへダイレクトに画面遷移できないようにするのがいいんだろうけど、とはいえGETで遷移できてしまうとまずそうだな。2連続で@Importできるなら乗り越えられるもんな。(2連続で@Importってできるのかわからないけど)それよりはIECSS実装を直してもらうほうが筋か?