独断と偏見のプログラミング言語比較

# はじめに
この記事では、自分が使ったことのある言語の中から独断と偏見で比べていきます。
順次言語は追加していく予定です。
使用歴が浅い言語もあるので、いろいろ間違っているかもしれませんがお付き合いください。

# 見かた
言語名と軽い説明ハローワールドの表示の仕方を書きます。

# 比較
## C
### 概要
プログラミング言語としてはかなり古株な言語です。いろいろな言語に大きな影響を与えた言語でもあります。Linuxを始めとしたOSなどでは一般的に使われているようです。
個人的にはCよりC++のほうが好きです。(ただし、C++が使いこなせるとは言っていない)

|型システム|主な処理系|
|:------:|:-------:|
|静的型付け|gcc, clang, Visual C++(cl.exe)|

### 比較的珍しい(と思う)機能
+ ポインタ
+ 共用体(union)

### Hello, world!
```c
#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;
}
```

## C++
### 概要
Cにクラスを追加したことから始まった言語で、少し前まではCと完全な互換性があったようです。Cに存在するほぼすべての機能が使える上にC++のテンプレートを使ったコンテナやその他アルゴリズムがあります。Boostと合わせるとかなり強力な言語と言えると思います。

|型システム|主な処理系|
|:------:|:-------:|
|静的型付け|g++, clang++, Visual C++(cl.exe)|

### 比較的珍しい(と思う)機能
+ ポインタ
+ 共用体(union)
+ テンプレート
+ コンパイル時定数(constexpr)
+ 演算子のオーバーロード

### Hello, world!
```cpp
#include <iostream>

int main() {
    std::cout<<"Hello, world!"<<std::endl;
}
```

## Java
### 概要
C++は割とカオス気味な言語なのでそれを改善したり、安全性にシステムがある程度気を使ってくれる言語です。非常に多くのライブラリを標準で持ち、一般的なアプリケーションからWeb系まで様々な用途に使える言語です。Write once, run anywhere(一度書いたらどこでも動く)な言語です。

|型システム|主な処理系|
|:------:|:-------:|
|静的型付け|JDK, OpenJDK|

### 比較的珍しい(と思う)機能
+ パッケージ
+ ジェネリクス(C++のテンプレートのほうがなんでもありで珍しいと考えられます)

### Hello, world!
```java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}
```

## C＃
JavaはC++と比べいろいろな機能がなくなったり機能が制限されたりしました。しかし、C＃では演算子のオーバーロードなどいろいろな機能を復活させました。最近ではMicrosoftも.NET Coreをオープンソースにしたりと頑張っているようなので使ってみるのも良いかもしれません。

|型システム|主な処理系|
|:------:|:-------:|
|静的型付け(動的型付けも可能)|.NET, Mono|

### 比較的珍しい(と思う)機能
+ ポインタ(unsafe内でのみ可能)
+ 演算子のオーバーロード
+ ジェネリクス
+ LINQ(C#そのものの機能なのか不明)

### Hello, world!
```csharp
using System;

public class Hello{
    public static void Main(){
        Console.WriteLine("Hello, world!");
    }
}
```

## JavaScript
JavaScriptはWeb上でよく使われる言語でHTMLを動的に変化させたりすることに使われます。最近ではNode.jsによってサーバーサイド、Electronで一般的なアプリケーションも作れるようになってきた言語です。割とアバウトでも動いてしまうためstrictモードなどのモードが存在しています。

|型システム|主な処理系|
|:------:|:-------:|
|動的型付け|各ブラウザ, Node.js|

### 比較的珍しい(と思う)機能
+ strictモード
+ DOM
+ 文字列の中に変数を入れることができる機能(テンプレート文字列)

### Hello, world!
```js
console.log("Hello, world!");
```
流石にスクリプト言語は短いですね。

## Dart
Googleが作った言語でAltJSの一つに当たる言語です。DartVM上での実行やJavaScriptへのコンパイルに対応しています。文法は割とJavaとCっぽい雰囲気がします。動的型付けですが、型を明示することで処理系による型チェックも行ってくれます。

|型システム|主な処理系|
|:------:|:-------:|
|動的型付け, 静的型付け|DartVM, dart2js|

### 比較的珍しい(と思う)機能
+ 文字列に変数を組み込める機能

### Hello, world!
```dart
void main() {
  print("Hello, world!");
}
```

## Kotlin
IntelliJ IDEAで有名なJetBrainsが作った言語です。JavaVM上で動く言語でJavaとの互換性を考えて作られています。Javaクラスを扱うときも演算子のオーバーロードが使えたり、プロパティが使えたり、型推論をしてくれたり楽しい感じの言語です。Android開発には割とおすすめな言語です。

|型システム|主な処理系|
|:------:|:-------:|
|静的型付け|IntelliJ IDEA, Android Studio, kotlinc|

### 比較的珍しい(と思う)機能
+ 文字列に変数を組み込める機能
+ Java系の言語なのにフリー関数が使える
+ シングルトンのサポート

### Hello, world!
```kotlin
fun main(args: Array<String>) {
    println("Hello, world!")
}
```
文末のセミコロンは省略できます。

## PHP
動的Webページを作るための言語です。言語自体はわかりやすいものだと思うのですが、なんか癖がある感じがします。動的Webページを作る言語としては良い言語だと思います。

|型システム|主な処理系|
|:------:|:-------:|
|動的型付け|PHP|

### 比較的珍しい(と思う)機能
+ ソース内にHTMLとPHPのソースを一緒に入れることができる機能

### Hello, world!
```php
<?php
print("Hello, world!");
?>
```

## Python
スクリプト言語としてはRubyやPerlと並んで有名な言語です。インデントでブロックを表現する珍しい言語です。Pythonは2系と3系で文法が微妙に異なるので、互換性がありません。

|型システム|主な処理系|
|:------:|:-------:|
|動的型付け|Python2, Python3|

### 比較的珍しい(と思う)機能
+ オフサイドルール

### Hello, world!
```py
print "Hello, world!"
```
```py3
print("Hello, world!")
```

## Nim
Pythonぽい見た目のコンパイル言語です。スクリプト言語並みの書きやすさでC並の速度が出ます。個人的にはPython & C++という感じの言語です。

|型システム|主な処理系|
|:------:|:-------:|
|静的型付け|nim|

### 比較的珍しい(と思う)機能
+ オフサイドルール
+ ユーザー定義演算子

### Hello, world!
```nim
echo("Hello, world!")
```