出稼ぎでの実装やら、今までの後始末経験を踏まえて、
「仕事」での理想の言語を考えます。
- 未定義変数をいきなり参照する(代入式の右辺で使う)とエラー(例外)が出なければならない。
- 極めて当たり前の話の筈が、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とかが有りません。これらは「カプセル化」って奴で、「オブジェクト指向」で重要ってことになってるファクタです。ただし小生はカプセル化を重要視してません。