【2017】各プログラミング言語への愛

はじめに

VBが酷いのでVBの良さを必死に探していたのだが、そこでふと思った。「○○(言語名) 良さ」でググれば各言語を好きな人が良さを語っているのではないかと。

するとどうだろう。例えばRubyPythonだと「愛してる」「最高」などのタイトルが目立つが、VBでは「VBがダメな理由」など否定的なタイトルが目立つ。

これは面白いと思ったので、2017年3月30日時点での検索結果を見ながら各言語の現状をまとめてみようと思う。

 

C

特徴

各言語の先祖みたいな言語。学校などではおそらく最初にやらされるであろう言語でもある。パソコンや組み込みなどの大体の環境でコンパイラがあるのでどこでも動かせる点は魅力かな。とはいえ最近はいろんな言語がマルチプラットフォーム化しているけど。

低レベル(ここで言う低レベルとはマシンにより近いという意味での低)なのでシステムに直接作用するコードも書ける。というかLinuxってC言語でできてるもんな。

古い言語なので最近の言語では当たり前にあるような便利機能がなかったり、使うのがよろしくない機能などもある。gotoとかね。

検索

f:id:myon886:20170330185220p:plain

やはりCから入ったであろう初心者の質問が出てきた。あとは最初にCをやれという意見の人もやっぱり居た。自分もCから入ったが今の時代は入門するにもっと素晴らしい言語がたくさんあると思う。

 

C++

Cをオブジェクト指向に対応させるため正統進化させた言語。CでできることはすべてC++でもできるはず。高速。実際画像処理させたらC#の何倍も速かった。

しかしCとの互換性のためにCでのよろしくない構文なんかもそのまま引き継がれていたり、なにぶん古い言語なので構文が冗長だったりもする。

もしCをやるなら素直にC++をすればいいと思う。

 

f:id:myon886:20170330191048p:plain

オブジェクト指向とは何か クラスとは? といった質問が目立つ。

また、便利だが人が扱うには強大すぎる力を持つポインタという存在についてもやはり触れられている。

意外(?)にもC++最高!みたいな記事はでてこなかった。

 

D言語

 C言語並の実行速度が欲しいけど、Javaっぽくもしたいよね!! というかC++の複雑仕様うぜぇぇぇ!!」

ニコニコ大百科より引用

後述するJavaなどのいいところをとって、かつネイティブなバイナリをコンパイルするので速いという特徴を持つ

が、仕様がすごいスピードで変わるので少し前のサンプルコードがうごかないなんてこともザラらしい。1.0系は保守されてるようだが結局2.0系で仕様変更しまくってるらしい。

基本構文自体は一般的なC系で読みやすい。まぁいいとこどりしてるんだから当然か。

また大きな特徴として契約プログラミング用の構文が用意されている点がある。

契約プログラミングは結構便利そうなのでちょっとうらやましい。

いりす症候群!というめちゃおもしろいゲームはD言語でかかれているらしい。

f:id:myon886:20170330192258p:plain

「最高の」とまで言われている。ちなみにD言語くんというのは

d3.png

こいつ。D言語erはこんなヤバそうなやつを崇めながらコーディングしている(偏見)

ちなみにD言語くんアドベントカレンダーなるものまであるという…。

 

Java

Cなどのコンパイル言語と違うのは、JVMという仮想マシン上で動作するということ。コードをJVM用にコンパイル(?)し、マシンはJVMを起動してその上でコードを実行するという手順を踏む。各マシンごとにJVMを用意さえすれば、Javaのコードはどこでもうごく。インストールする時何億のマシンで動いてます的なキャッチコピーが出るのはそのため。ただ、JVMを実行してその上でコードを実行して…という手順なので若干遅い。

f:id:myon886:20170330204526p:plain

メリットはありますか?とか利点はありますか?といった記事が多い。皆Javaを使うことに疑問を感じているんだろうか…?

C#

Microsoftが開発した、JavaC++VBのいいところをパクってとってきた言語。大好き。

.NETというオープンソースフレームワーク上で動く。

バージョンが上がるごとに便利機能がどんどん追加されて書きやすい。ただしC/C++などに比べると遅い。

専らWindowsアプリを作るのが専門だったが、最近はLinuxでもうごくしiOS/AndroidにビルドするXamarinというツールもある。

f:id:myon886:20170330205341p:plain

C++Javaなど他の言語との比較記事が目立つ。C#は他の言語のいいとこ取りみたいな言語なのでそういった記事が多いのだろう。

 

Visual Basic

Microsoftが開発している言語。BASICという古い言語を元にしている。.NET上で動くようになった。なのでC#と比較されることが多い。Excel上で動くVBAはほぼVisual Basicと同じ。正直.NETになったのでVBでできることは大体C#でもできる。そしてVBC#より給料が1割少ないという調査があるらしい…悲しい。

f:id:myon886:20170330210120p:plain

やはりC#と比較されている。VBAがおすすめされているがNaverまとめ(察し

.NETに統合されたのでC#の下位互換感が…

Perl

フリーのスクリプト言語インタプリタというプログラムに書いたコードを読ませながら実行する。記述が自由で、同じことをするのに幾つもの書き方がある。それは逆に読みにくくなるということでもあるけれど。

ただPerlというとPerl5までの事を指すことが多いようだ。というのも、1987年のPerl1からPerl5までは互換性が保たれていて、古いコードでも動くが、Perl6とは互換がない。

WEBアプリケーションに多く使われている。後発のスクリプト言語RubyPythonと比較されがち。

f:id:myon886:20170330211751p:plain

PerlユーザーはPerl大好きなイメージがあるので、Perl賞賛記事が見当たらないのが驚き。そしてやはりRubyPythonと比較されてる。

 

Ruby

まつもとゆきひろ(Matz)氏が開発したスクリプト言語。国産。

Rubyの言語仕様策定において最も重視しているのはストレスなくプログラミングを楽しむことである (enjoy programming)」

とあるように、プログラマーが自然に思いつくような構文が多いのでストレスがかかりにくい。

特に有名なのはWEBアプリケーションフレームワークRuby on Railsだろう。GitHubTwitterクックパッドなどが一時期Railsで開発されていた。

こちらも構文が比較的自由。ただしrubocopというコードを自動でルールに従って整形してくれるツールがあるので、チーム開発時などでも構文を統一できる。

ライブラリをインストールするgemというツールが搭載されていて、ライブラリを扱いやすい。

実行速度が遅めだが、バージョンアップの度に改善はされている。

f:id:myon886:20170330212658p:plain

ラブ勢が多い。楽しく書けることをスローガンにしているからだろうか。

またWEBアプリケーションを作るのにPHPRailsを比較する記事も目立つ。

Python

こちらもスクリプト言語だが、構文が自由なPerlRubyと大きく違うのは、構文がガッチガチなところ。「誰が書いても、同じ事をするコードは同じコードになるはず」という感じ。誰が書いても同じになるのであれば、誰もが読めるという理屈。まぁ実際にはそううまくいかないだろうけど、理にかなっている。

ガッチリ固めることで、ヒューマンエラーをなくそうという試み。

また、C/C++のライブラリと連携できるので、速いしたくさんのライブラリを使える。

f:id:myon886:20170330213823p:plain

最高という意見もありますね。それとやはりRuby,Perlと比較されている。

 

 PHP

スクリプト言語。少し昔はWEBサイトはこれ一択みたいな感じだった気がする。今は選択肢が多くて嬉しいネ。

かつて栄えていた歴史から、大体のレンタルサーバーで動くという魅力はあります。

個人的にはあんまり書きたくないです。

f:id:myon886:20170330215008p:plain

「言うほど悪くない」「僕は肯定する」というタイトルの通り、一般的なイメージは良くない様。

JavaScript

 他の言語と大きく違うのは、ブラウザ上で動作する言語だということ。発表当時人気だったJavaの勢いに乗っかろうとJavaScriptとかいうややこしい名前をつけたが、Javaとは関係ない。物凄い昔、開発元がMicrosoftにライセンスを渡さなかったせいで、MicrosoftJScriptという微妙に互換がない似たやつを作ったので、後述するECMAが統合しようとしたりなんだりして大変だったらしい。

昔はブラウザ上でうごくプログラムといえばJavaアプレットFlashが流行だったが、Google MapというAjaxという技術でぬるぬるサクサクなサイトができたので一気に人気になった。最近はNode.jsというサーバー側で動かすことも行われるようになった。

 

f:id:myon886:20170330204245p:plain

JavaScript周辺環境が複雑すぎるためか、JavaScriptそのものの話より、JSライブラリに関する話題のほうが多く出てくる…

 

Dart

JavaScriptがセキュリティ的に怪しかったり書きにくかったりするので、ブラウザ上で動作するあたらしい言語を作ろう!みたいな感じでGoogleが開発した言語。

JS代替言語(AltJS)の一つ。

Javascriptの代替を考えなきゃなとはみんなが思っているのだが、なかなか難しい様子。

そんなこんなで結局Dartをブラウザに搭載することは叶わず、Javascriptへのコンパイルという方法にシフトしたらしい。残念。しかしJavascriptコンパイルする方法になったことで、他のJavascriptライブラリと連携しやすくなったりして良いこともあるようだ。じゃあTypeScriptでいいんじゃ…

f:id:myon886:20170330194304p:plain

最高と唱えるひともいるようだ。ただ、あまり新しい情報がないですね。JS代替言語はたくさんあるので、なるべく更新されているものを選んだほうが良さげ。個人的にはJS+jqueryで十分なケースしか扱ったことがないのでなんとも言えない…

CoffeeScript

AltJSの一つ。Rubyライクな構文の書き方ができる。つまりRuby環境(Ruby on Railsなど)だと、構文をあまり変えずにJS部分も書けるので良さげ。

ただぱっと見の人気はTypeScriptのほうが高いっぽい。それぞれ動的型付けと静的型付けなので純粋に比較できないけどね。

f:id:myon886:20170330195834p:plain

「駄目なのか?」「自分にとっては有益だった」とあるように、他でなんと言われていても俺にとってはいいやつだったよ感がある。

ただやはりちょっと古い情報が多い。盛り上がってないのかな?

TypeScript

 こちらはMicrosoftオープンソースで開発しているAltJS。静的型付けで同社のC#に近い構文。Visual Studioで開発できるのはちょっと嬉しい。

 

f:id:myon886:20170330200110p:plain

良さを熱く語る記事は見当たらないが、「つくってみた」などの実践した感想が多い。

 

ECMA Script

Javascriptの仕様をみんなで標準化しようぜっていうもの。つまり新しいJavascript。ついでに新しい機能もつけた感じ。もちろん新しい機能を追加したのでブラウザ側が対応していないと動かない。

ES2015

ECMA Script2015。クラスなどが使えるようになった。

ECMAScript 6 compatibility tableのサイトで各ブラウザの対応状況がわかる。が、現在は新しいブラウザはほぼ対応している。

ES2016

Exponentiation OperatorとArray.prototype.includesメソッドの追加。

**でべき乗ができるようになったのと、配列の中に要素が含まれてるかわかるようになった。

ES2017

 async/awaitとか使えるようになる予定。

f:id:myon886:20170330202846p:plain

熱く語る人はそんなに居ないようだ。というかJS界隈はごっちゃりしすぎてて愛を叫ぶどころではなさそうだ。移り変わりも速いし。