Open7

プログラミング言語を計測する際の指標リスト

やまゆやまゆ
  • S: json のパース能力とマッピング能力
    • 文字列の json をいかにして class や struct などの型に落とせるか
    • PHP は json_encode json_decode が非常に強力だが型マッピングが微妙
    • JavaScript も JSON.parse JSON.stringify が強力だが型マッピングが微妙
    • golang も struct にメタ貼って展開出来るので優秀
    • validation も含めたい
  • S: エラー処理の表現力
    • PHP は $context = [] がデフォルトの Throwable にないので結構つらい
    • golang は例外を持たないことでエラー処理を explicit にしている
やまゆやまゆ
  • S: Formatter/Linter/LSP が存在すること
    • 現代自動 format や LSP による支援がないことにはコードが書けない
  • A: Unit test のしやすさ
    • コア機能に搭載されているととても良い go test とか deno test とか
    • Ziglang はソースコードとテストコードを同じファイルに置けるので非常に良い
やまゆやまゆ
  • A: 日時の表現力
    • JavaScript Temporal くらい正確に出来ると良い
    • Third-party Library にデファクトがあってもよい
やまゆやまゆ
  • S: 壊れづらさ
    • 失敗した時に致命的に壊れるかどうか
    • NullPointerReference があるかどうかなど
    • ユーザーが壊れないようにするためにかける労力と書き換えても良い
    • PHP はどう書いても壊れづらい
    • Rust は壊れづらいが、そのためにかける労力が多い
    • C は壊れやすい(生ポインターの扱いなど)
やまゆやまゆ
  • B: 開発時のコード編集の反映速度
    • ホットスワップがあるかどうかなど
    • JVM 系はちょっと遅いイメージ
    • PHP はF5リロードで済む
やまゆやまゆ
  • A: パッケージマネージャ―
    • hoist するかどうかとか
    • lock ファイルがあると良い
  • S: エコシステムの繁栄度
    • サードパーティライブラリが豊富
  • A: 一般的なインターフェースがある程度決まっていること
    • golang の Writer/Reader とか良い
    • PHP の PSR とか良い
  • B: 非同期処理の書きやすさ
    • Promise, Future, async/await
  • A: パターンマッチング
    • match 式など PHP はちょっと改善してきた
    • JavaScript はしんどい
  • B: 戻り値の表現力
    • Result<T, E> や golang のタプル返却など
やまゆやまゆ
  • A: モジュール分離
    • private, protected, internal, public など可視性で要素を公開するか設定できる
    • import が explicit である