他の言語から学ぶべきこと

Ruby

Pros
  • if文などが式である (値をもつ)
  • ブロックの構文いいよね
  • すべてがオブジェクトなのいいよね
  • 豊富なリフレクションAPI
  • duck typing
Cons
  • Fileクラスとか雑然としている
    • IOとFileとDirとPathnameを統合すべきだとおもう
    • ファイルパスの表現としてのPathname, 実際のファイルシステムに対応するIO, File
  • UnboundMethodとMethodとProcって別れてるのわかりづらいしめんどくさい
    • 後述のScalaと同じくクラスベースのオブジェクト指向と関数型指向は両立させるのが難しいのでは
  • モンキーパッチするならサンドボックスほしいよね
  • モジュールの合成とかしたい

Scala

Pros
  • 関数型言語いいね
    • パターンマッチ
    • 部分適用
    • 高階関数
  • 型システムいいね
    • シグネチャごとにメソッドを生やせるのはべんり
Cons
  • implicit conversionダサい
    • 変換元のオブジェクトとは別の名前空間で定義できるのイヤ
    • 名前が意味をなしていないのがすごく気持ち悪い
    • だったら convert(src: String => AwesomeString(src)) みたいなかんじで変換マップみたいなのをつくって、それを参照するのでいいのでは
  • コンパニオンオブジェクトの使い道がいまいち
  • プレースホルダの仕様がキモすぎ (同じ識別子が同じスコープで別のオブジェクトを指す)

結論

  • すべてはオブジェクト
  • メタプログラミングしやすいAPI
  • 整理されたライブラリ
  • 関数もファーストクラスオブジェクト
  • 型シグネチャによる多重定義
  • 明示的なオブジェクトの変換
  • 略記法は慎重につくるべき

Perlのデフォルト変数の多用なんかは可読性を下げまくる。デフォルト変数の存在それ自体はよしとしても、それをライブラリとかで平然と使う文化みたいなのはコードを読むコストを上げていてダサい。(それでいてsigilを許容するのだから気が狂っている)

Perl (とScala) をあらゆる面で反面教師としながら、Better JavaScript, Better Rubyを心掛ける。