kondouの日記: Rustで組み込み 9
組み込みの分野では C が用いられることが多い。ベンダからのツールやライブラリはほとんどが C だ。
個人的には C は好きだ。スラスラ読み書き出来るし、隠れた動作をしないのが良い。組み込みから、OS、アプリまで幅広く(Linuxの場合はCとマクロだ)こなせる。
C++は、データ構造が複雑なアプリに向いている印象。Turbo C++のぐらいの時に少し触ったが、モダンなC++と標準ライブラリはほとんどわからない。CのコンパイラはC++も理解できるので、ベターCとしてライブラリを呼び出すことがたまにある。
C/C++の一番の欠点は、自由度がありすぎてバグを生みやすいことだ。これによる損失は、個人的なものも社会的なものも、甚大だ。それの解消を目指して、いくつかの言語が提案されている。
C#。Windowsのプログラミング言語としてC++をあっという間に駆逐した。Visual Studioが優秀すぎて下手なコードを書くことが出来ない。
Swift。Rust言語の作者がRustの次に作った言語として興味深い。しかし、Appleが嫌いなのであまり興味がわかない。
Go。Googleが押しているが、Javaっぽくて…
Rust。次に示すキャッチコピーが私の希望とぴったりだ。
Rustは安全性、速度、並行性の3つのゴールにフォーカスしたシステムプログラミング言語です。 ガーベジコレクタなしにこれらのゴールを実現していて、他の言語への埋め込み、要求された空間や時間内での動作、 デバイスドライバやオペレーティングシステムのような低レベルなコードなど他の言語が苦手とする多数のユースケースを得意とします。 全てのデータ競合を排除しつつも実行時オーバーヘッドのないコンパイル時の安全性検査を多数持ち、これらの領域をターゲットに置く既存の言語を改善します。 Rustは高級言語のような抽象化も含めた「ゼロコスト抽象化」も目標としています。 そうでありつつもなお低級言語のような精密な制御も許します。
他にも、標準のコマンドラインツールで、ほとんどの範囲がカバーされていて迷い無い、多言語インターフェイスがわかりやすく、ライブラリ不足を補える、などが良い。言語制約が強く、まだ、うまく書けないことも多いが、それこそが Rust のメリットなのだろう。
結構な数の人がRustで組み込みにトライしている。
私もやってみた。
RustとSwiftの作者って一緒なの!? (スコア:0)
Wikipediaを見る限りは
Rust グレイドン・ホアレ
Swift Chris Lattner
みたいなのだけど。
Re:RustとSwiftの作者って一緒なの!? (スコア:1)
すみません、私の勘違いだったようです。
たんに、グレイドン・ホアレさんが Apple に入社した、とのことですね。
C# (スコア:0)
C#と比べるべきはJavaだと思います。
あと、ReSharperなしのVisualStudio 2010は悲しくて、
2015はかなりがんばっている感でした(しかしすぐReSharper入れた)。
2017はどんなものでしょう。
(JetBrainsのRiderにも期待ですねぇ)
「組み込み」に使われる言語、とくるとLuaを連想しますが、たぶんお求めものではないでしょう。
Re:C# (スコア:1)
Windowsのアプリは C++ では書きたくないですね。C# 一択です。
Javaは、Android用言語の印象があります。私がシステム開発をしないからかもしれません。
Luaは「組み込まれる」ことが多いのではないでしょうか。
Re: (スコア:0)
さすがにJavaがそれだけってのはないです。まあ、使われ方の話はおいといて。
コードで説明するときにJavaが使われることが多い(多かった?)ので、
基本的な記述だけでも覚えておくといいかな、と。
(C#使えればJavaも読めるでしょ、ぐらいのレベルで)
Luaは、たとえばゲームの一部がLuaで書かれていて再コンパイルなしに変更できる、
という「組み込み」。kondouさんのおっしゃられるほうは家電の中に入っている
コンピューターで、よくリソースが足りないとかきくシビアな環境のほうですね。
(受け身形だっけとか考えると間違えそうになるので、あえてべたっと書きました)
C++はOS独自寄りの話が多い(印象)ので、私もC#がよいのですが、ハードウェアを操作しようと
するとC++でとか、良くてもCOMが、みたいな話があって、さんざんな目にあいました。
(しかし、C#しか知らないので…)
TCP/IPでHTTPなインターフェイス万歳であります。
遠回しにRustをDisってるだけ… (スコア:0)
生ポインタ使いまくり、unsafeブロック使いまくりである。
おまけにトレイト化するとか、モジュール化して隠す気もさらさらないので、
いきなりunsafeブロック展開してメモリ直書きするような生々しいブツがそこら中に乱れ書き。
ここまで酷いRustコードは中々お目にかかれない。
Rustの変数に対するデフォルトイミュータブルや所有権、借用といった制約は、一番最初にRustを採用
したMozillaの開発者達が、何度も何度もそういった凡ミス的バグを潰してきた苦悩の末にようやく
たどり着いたものであると推測できる。
そんなRustでわざわざこんなものを書くことに一体どんな意味があるのだろう?
普通に、というか素直にCで書けよと。
一々unsafeするまでもなくいつでもunsafe仕放題。
ポインタもメモリ直書きも全てCの十八番だろ。
百歩譲っても、生々しい部分はCで書いといてRustからはクレートでアクセスすべきだったろ。
つーか、キャッチコピーが私の希望とぴったりだとか言っておきながら、
やってることはRustシステム全否定。
これはひどい。
Re:遠回しにRustをDisってるだけ… (スコア:1)
ようやく、Lチカが出来ました。
Rust自体、始めたばかりで、基本的な言語機能もこれから覚えてゆきます。
これら Rust らしい組み込みプログラムが書けるよう、道具を揃えてゆきたいですね。
トレイト化、クレート化もこれからです。
良い資料を知っていたら、教えてください。
goとjava (スコア:0)
goがjavaっぽいってのはちょっと筋違いじゃないかな
javaの対抗はむしろC#なんじゃ…
立場的にはむしろgoとrustが競合してると思うよ
Re:goとjava (スコア:1)
他の方からも、いろいろコメント頂いていますが、
他言語に対して、余計な印象を書いたことは、完全に蛇足でした…