パスワードを忘れた? アカウント作成
13187494 journal
日記

kondouの日記: Rustで組み込み 9

日記 by kondou

組み込みの分野では 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で組み込みにトライしている。

私もやってみた。

https://github.com/nkon/rust_blinky

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2017年03月11日 23時50分 (#3174906)

    Wikipediaを見る限りは
    Rust グレイドン・ホアレ
    Swift Chris Lattner
    みたいなのだけど。

  • by Anonymous Coward on 2017年03月12日 0時11分 (#3174925)

    C#と比べるべきはJavaだと思います。

    あと、ReSharperなしのVisualStudio 2010は悲しくて、
    2015はかなりがんばっている感でした(しかしすぐReSharper入れた)。
    2017はどんなものでしょう。
    (JetBrainsのRiderにも期待ですねぇ)

    「組み込み」に使われる言語、とくるとLuaを連想しますが、たぶんお求めものではないでしょう。

    • by kondou (7687) on 2017年03月12日 0時30分 (#3174936) ホームページ 日記

      Windowsのアプリは C++ では書きたくないですね。C# 一択です。
      Javaは、Android用言語の印象があります。私がシステム開発をしないからかもしれません。
      Luaは「組み込まれる」ことが多いのではないでしょうか。

      親コメント
      • by Anonymous Coward

        さすがにJavaがそれだけってのはないです。まあ、使われ方の話はおいといて。
        コードで説明するときにJavaが使われることが多い(多かった?)ので、
        基本的な記述だけでも覚えておくといいかな、と。
        (C#使えればJavaも読めるでしょ、ぐらいのレベルで)

        Luaは、たとえばゲームの一部がLuaで書かれていて再コンパイルなしに変更できる、
        という「組み込み」。kondouさんのおっしゃられるほうは家電の中に入っている
        コンピューターで、よくリソースが足りないとかきくシビアな環境のほうですね。
        (受け身形だっけとか考えると間違えそうになるので、あえてべたっと書きました)

        C++はOS独自寄りの話が多い(印象)ので、私もC#がよいのですが、ハードウェアを操作しようと
        するとC++でとか、良くてもCOMが、みたいな話があって、さんざんな目にあいました。
        (しかし、C#しか知らないので…)
        TCP/IPでHTTPなインターフェイス万歳であります。

  • by Anonymous Coward on 2017年03月12日 14時43分 (#3175141)

    生ポインタ使いまくり、unsafeブロック使いまくりである。
    おまけにトレイト化するとか、モジュール化して隠す気もさらさらないので、
    いきなりunsafeブロック展開してメモリ直書きするような生々しいブツがそこら中に乱れ書き。
    ここまで酷いRustコードは中々お目にかかれない。

    Rustの変数に対するデフォルトイミュータブルや所有権、借用といった制約は、一番最初にRustを採用
    したMozillaの開発者達が、何度も何度もそういった凡ミス的バグを潰してきた苦悩の末にようやく
    たどり着いたものであると推測できる。

    そんなRustでわざわざこんなものを書くことに一体どんな意味があるのだろう?
    普通に、というか素直にCで書けよと。
    一々unsafeするまでもなくいつでもunsafe仕放題。
    ポインタもメモリ直書きも全てCの十八番だろ。
    百歩譲っても、生々しい部分はCで書いといてRustからはクレートでアクセスすべきだったろ。

    つーか、キャッチコピーが私の希望とぴったりだとか言っておきながら、
    やってることはRustシステム全否定。
    これはひどい。

  • by Anonymous Coward on 2017年03月12日 23時39分 (#3175401)

    goがjavaっぽいってのはちょっと筋違いじゃないかな
    javaの対抗はむしろC#なんじゃ…

    立場的にはむしろgoとrustが競合してると思うよ

typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...