settings


Nim、Rust、Go、ASP.NET Core のどれがオススメ?

local_offer

ASP.NET Core

C# でコードを書けるところがメリットではあるんですが何もかもが冗長です

MS 製だから仕方ないにしろ project.json とかカオスな感じです

何よりも実行速度がおっそいです・・・

Go に比べて 10 倍遅いです

https://stefanprodan.com/2016/aspnetcore-vs-golang-data-ingestion-benchmark/

メモリも驚くほど食います

そのうちどうにかなるのかもしれませんが正直これだけゴタゴタしたものが速くなる気がしません

ですが C# はコードをものすごく美しく書ける上に言語的には意欲的に最先端を突っ走るとても良い言語だと思うのでこれからに期待したいです

Go

言語的に冗談きついです

言語の幅が恐ろしいレベルで狭いです

学習は容易でしょうがプロが使うと端々でストレスに苛まされることでしょう

https://github.com/ksimka/go-is-not-good

たらふく非難されています

昔から非難が飛んでますが一向に改善する気が無いですね

http://postd.cc/why-go-is-a-poorly-designed-language/

この人も言っていますが

> 私が我慢できないのは、言語が抱えるこうした類の厄介ごとに対して「それはそうだけど、別にいいじゃないか」と言い続ける人が実に多いということです。そのままでいいわけがありません。そういう態度が、Goという言語をダメにしているのです。

これに尽きると思います

自分的に一番ドギツイのは Exception 使うなってやつです

返り値でエラー捌けとか嘘でしょ

thread/pipe(goroutine/channel)の扱いやすさを打ち消すほどのデメリットがそこにはあると思います

さらに自分的に「無し」と判断したのが

http://blog.mattbasta.com/things_that_make_me_sad_in_go.html

この人も怒っているようにパッケージ構成がかったるいのが非常に痛々しいです

$GOPATH も煩雑さを増長してますし

なんか Node.js とか言う狂った代物がブームになった時と同じ匂いを感じます

Google 製じゃなかったら話題にもならなかったんじゃないでしょうかね

いくら簡単とは言え言語の感性がズレてしまうので初心者の場合使うのは避けた方が良いと思うレベルです

Rust

Rust は色んな所でガミガミ怒られます

GC が無いばかりに借用だのライフタイムだの C と同等かそれ以上にタチの悪いメモリ管理をさせられます

mut mut 書かなきゃならないし「そっちの方が普通使うだろ?」と言う方で冗長的な書き方をいたるところで強いられます

「もうCで良いわ!」

と速攻叩き消しました

Nim

最高であり最低です

Unix で C を書いた事があるプログラマは諸手を挙げて「最高!!」と叫ぶこと請け合いです

なんせ make や Autotools のようなアレげなハマり方をする連中や、メモリ管理から開放されつつ

むちゃくちゃ簡潔にコードが書けて、過去に自分が書いた C の資産やその他もろもろの C の資産をものすごく簡単に再利用できる化物だからです

proc printf(format: cstring) {.header: "<stdio.h>", importc: "printf", varargs.}

printf "%s %s\n", "HOGE", "FUGA"

どうですこれ

Nim のコードですよ、これ

超簡単に C の関数引っ張ってこれるんですよ!可変引数だって余裕ですよ

今すぐ C を捨ててしまって良いレベルです

Nim 自体のコードもその全てが簡単+簡潔に書けます

例えばこんなノリでファイル読み出しが出来ます

echo "test.txt".readFile

または

echo readFile("test.txt")

または

for line in lines "test.txt": echo line

どうです?これだけで「お?」と思いませんか

至るところで短く簡潔に書けることがコンセプトになっていてそれは Unix の考え方そのものでとても気持ちが良いです

おかげでコードのノイズが今まで使ってきた言語で一番少ないと思います

文字出力が echo でさらにデフォルト改行アリにしてしまっているセンスから好きですね

文字出力は Hello, world!! 的なやつで最初にやるのでここで長ったらしいものを書かされてゲンナリさせられるのは嫌なもんです

fmt.Println、Console.WriteLine、Syste.out.println だの・・・あ~やだやだ

ruby の puts、perl の say 感覚で使えるのはやはり良いですよ

この言語は Perl、Python、Ruby、PHP 等の LL を使っている人でも使える言語仕様になっていると思います

型あり言語なんですが暗黙で殆ど解決出来てしまうのでストレスは限りなく無いです

echo 10, " - ", 1.2

こんな風に余裕で書けますし

var
 i = 10
 str = "NUMBER -> " & $i

$ をつけてしまえば全て string になるんですねこれが

こんなライト感覚で使えるのにむちゃくちゃパワフルです

コードはすべてデフォルトで C のコードに変換されてそいつがコンパイルされるので高速・省メモリで動作します

C 系のデバッグツールだのプロファイラだのその他もろもろの Unix 資産がこれまたそのまま使えます

そしてクロスコンパイラで BSD/Mac/Linux は当然として Windows でも実行ファイルが作れます

デフォルトは C でコードが吐かれますが C++、Objective C、Javascript、Node.js にも変換出来たりします

(正直 JS へのトランスパイルは要らないですけどね・・・ここらあたりをバサッと切って nim 自体の開発速度を上げても良いと思うんですよね個人的に)

LL 感覚で書けるのに、実行速度は何百、何千倍の速度で突っ走れるので是非使ってみて欲しいです

が!

「最高であり最低です」と言った通りで最低な部分があるんです

この言語は水辺でパチャパチャやってる分には楽なんですよ

ただ、ものすごく奥が深くてですね・・・

そこのドキュメントが壊滅的でしてですね・・・

どうしても言語の奥底まで行きたいと思う人間には何と言うか Vim script、zsh、Autotools、PerlのXS とかにありがちな

「あれ?これ出来るならこんな事出来るんじゃね?」

「ドキュメントがねぇ・・・」

~ ソースコードを読み散らかす旅へ・・・ ~

この地獄が待ってます

macro や pragma を駆使すると暴力的な事バッキバキに出来るんですがこれが最初大パニックです

この言語の奥底まで手を突っ込めるだけあって、言語の奥底までバッチリ知る羽目になります

そしてこれらを使うとものすごいブラックマジックコードが出来上がります

初心者避けにはバッチリです

ドキュメントがほぼ英語しか無いのでそもそも初心者にはおすすめ出来ないですけどね

ある程度複数の言語を使いこなせるようになったエンジニアで新しい刺激が欲しい方は是非使ってみて欲しいですね

とても素晴らしい言語だと思います

まとめ

ASP.NET Core: 遅くてメモリを馬鹿みたいに食う。今後に期待

Go: いろいろ足らなくてストレスフルで Java を使っていた方が幸せになれる

Rust: がんじがらめが大好きなマゾ専用言語で C が可愛く見えるようになれる

Nim: C 使いなら今すぐ使うべきで、複数の言語を操れるエンジニアならば絶対に触っておくべき