Skip to content

Instantly share code, notes, and snippets.

@tomotaka
Last active June 4, 2018 08:02
Show Gist options
  • Save tomotaka/8124868 to your computer and use it in GitHub Desktop.
Save tomotaka/8124868 to your computer and use it in GitHub Desktop.
静的型言語 vs 動的型言語

静的型 vs 動的型

※個人の見解です!!

静的片付け言語のいいところ

  • コード自体の情報量が多い
    • ドキュメントの自動生成が楽(少ないドキュメンテーション作業で質の高いドキュメントが作れる)
    • エディタ/IDEの自動補完をより強力にすることができる
  • 実行するまでもなく様々なことがコンパイル時に検査される
  • 実行速度が速い(言語が多い)

動的型付け言語のいいところ

  • タイプ量が圧倒的に少ない
    • やりたいことの実装に集中できる。いろいろ定義を書くだけのキーボード入力が減り本質に集中できる。
      • 静的型言語だって補完機能あるからタイプ数はそんな増えないというのはちょっと違って、そもそもそういう記号を入力しなければいけない、という思考に脳みそを占有されることがデメリットだと思う
    • 慣れてくると型が動的に決まることによって起こる問題は書いてて気付くので書く分にはそんなに困らない

賛否両論あるよねポイント

  • 動的型言語は書く量が減る => 読みやすい
    • と思いきやそうでもないシチュエーションもある
    • 型があったほうが読みやすいこともある(エディタのコード追いかける機能も静的型言語の方が強力)
  • duck typing
    • いろいろできる <=> いろいろできすぎる
  • リフレクション
    • いろいろできる <=> いろいろできすぎる

個人的な使い分け

  • パフォーマンスが必要なもの, 人数の多いチームで実装 => 静的型言語
    • 人数が多いとAPI仕様などの共有コストが高い, 静的型言語の方がエディタや型情報からAPIの仕様がわかりやすい
    • 実行時パフォーマンスはいわずもがな
  • ひとりで気軽にhack, 少人数なチームで実装 => 動的型言語
    • ひとりで作ってればだいたいAPIの仕様は頭に入っている(よね?)
    • 少人数での開発ならAPI仕様のコミュニケーションコストもそこまで問題にならない
    • 自動化テストで多くのことはカバーできる

新しいテクノロジー

  • JITコンパイラ(各種JavaScript実行エンジン)や型アノテーションありの動的型言語(Dartなど)、動的型言語の特性を持ちながら高い実行時パフォーマンスを出せる時代が来るかも?
  • Cython(Python文法のスクリプトをC/C++コードに変換)みたいなアプローチもあったり
  • 個人的にはパフォーマンスが必要な部分をc/c++などで実装して動的型言語でうまく繋ぎ合わせて使う、というスタイルがいいなぁと思ってますが、そういう繋ぎ込みがもっと革命的に簡単になったらうれしい。(Cythonは結構便利だと思います。)
@tomotaka
Copy link
Author

積んできた経験によっていろんな視点や考え方があると思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment