2010年12月28日火曜日

仕事で使う言語の条件(1)

似たようなエントリは何度か書いてますが。

出稼ぎでの実装やら、今までの後始末経験を踏まえて、
「仕事」での理想の言語を考えます。

  • 未定義変数をいきなり参照する(代入式の右辺で使う)とエラー(例外)が出なければならない。
    • 極めて当たり前の話の筈が、PHPではNotice
  • 関数の内側から、グローバル変数を使うには、特殊な宣言がなければならない。
    • 勝手に外部スコープを参照しちゃうのは読みにくい。
    • 非オブジェクト指向での実装を助長している気がします。「カプセル化」に逆行する挙動。
  • クラス関数(メソッド)内部で、クラス変数(プロパティ)を使うには、this経由でなければならない。
    • 勝手に外部スコープを参照しちゃうのは読みにくい。
    • グローバル変数への参照と区別が付きにくい。「判るに決まってるだろ!」とか言わないように。
  • mixinのための多重継承。http://ja.wikipedia.org/wiki/Mixin
  • 動的型付け。
  • 関数が第1級オブジェクトでなければならない。http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88 
    • create_functionとかあり得ない。
  • 関数の可変長の引数の受け渡しを、自然な構文で運用できなければならない。
    • func_get_argsとかva_argsとか駄目だと思うわけですよ。
  • 必要であれば、バイトコードの保存/利用も可能であること。
  • 例外処理のサポート。
  • Unicodeサポート。
    • 機能が使える、だけじゃ無意味。プログラマが意識せずとも、任意バイト文字をそれぞれ同じように扱えないと困る。
      • PHPでは変数の中身をプログラマが区別して運用しなければならない、シングルバイト文字はstrlenで、マルチバイトはmb_strlenで、エンコーディングはmb_languageでとか、テンでバラバラ)
    • 比較的理想に近いのはpythonのstr及びunicodeオブジェクト。両者、同じ操作メソッドを持つし、相互変換も容易。
ハイ、聡明な皆さんならもう判りましたね。pythonの宣伝です。

pythonは所謂スクリプトなので、というわけではないのでしょうが、protected/privateとかが有りません。これらは「カプセル化」って奴で、「オブジェクト指向」で重要ってことになってるファクタです。ただし小生はカプセル化を重要視してません。