Skip to content

Instantly share code, notes, and snippets.

@KisaragiEffective
Created August 18, 2019 13:26
Show Gist options
  • Save KisaragiEffective/2f4d2dc2e0f9428eb245955c037ad9cf to your computer and use it in GitHub Desktop.
Save KisaragiEffective/2f4d2dc2e0f9428eb245955c037ad9cf to your computer and use it in GitHub Desktop.
それぞれの言語の利点・問題点

C

By: AT&T From: '80s Spec: アセンブラから機種依存性を排除した。

メリット

  • 低レイヤを操作するのにほぼ必須
  • 優秀なコンパイラが優秀に最適化をしてくれる
  • 実行可能ファイルを生成する

デメリット

  • とにかくポインタがわかりにくい
  • 配列を引数に渡せない (Array<T>T*として渡す必要がある)
    • というか、Cでは配列はオブジェクトじゃない
  • * (ポインター)と&がわかりにくい
  • 関数型だとかコレクションだとか例外だとかそんなモダンなものは存在しない
  • getsは絶対に使うな
  • お前のメモリ管理、大丈夫?

C++

メリット

  • モダン

デメリット

  • 渋谷ダンジョン
  • なんでジェネリックな書き方のように見せかけて山カッコの中に式をいれる??????!!!!!!!!!!!!
  • リフレクションが存在しない (しかし、それでも十分複雑である - 誰もC++の全容を把握しているものはいない)
  • ラムダ式の文法が複雑
  • 誰も全容を把握していない (- O'REILLYのC++ハンドブックがその辺のキングジムのファイルといい勝負している)

Java

By: Sun, Oracle, OpenJDK contributors From: '90s

メリット

  • だいたいどこでも動く (そう、native宣言されたメソッドの実装を.soなり.dllなりで準備すればね)
  • 古いコードがぶっ壊れにくい

デメリット

  • なんでSystemクラスにgc()メソッドをはやした?????????????!!!!!!!!!!!!
  • デフォルトでfinalじゃない
  • (C++ほどではないが)標準APIが広すぎる
  • java.utilのパッケージ分けとけや
  • package-private
  • new T[]ができないこと
    • 一応、リフレクションを使うとできるのだがまあまどろっこしい。
  • null-check-syndrom
  • どうすれば速度が向上するのか環境によって異なる (もっと言うと、被呼び出し回数や、ライブラリの実装アルゴリズムによっても異なるため、一概にどんな書き方をしたら早いという定量的な考えが存在し得ない)

Kotlin

メリット

  • だいたいどこでも動く (JVM言語)
  • new T[]が(funの中でしかできないなど制限はあるものの)できる
  • クラスに属さない純粋な関数を宣言できる

デメリット

  • 頼むからシンタックスシュガーはkotlin.syntaxとかに収まっててくれ
  • あとto(): Pair<A, B>、おまえ何者だ
  • たまにJavaとの境界またぐとき@JvmStaticつけるの忘れていてトラブルを発生させることがある
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment