組込みでCからRustにステップアップする順序

はじめに

先日、twitterで以下のアンケートを行ったところ、予想以上に多くの方にご回答頂けたため、まとめと私の考えを書きます。

日頃C言語を主に利用している開発者に、Rustをおすすめするアプローチを探っています。 CとRustは、言語仕様の乖離が激しい、という事実があります。そのため、アプローチの仕方を間違えると拒絶反応を引き起こしそうです。

そこで、私以外の人がどう考えているか知りたくなったため、アンケートを行ってみました。

私の場合

Rustを学び始めた時点で、私は次の状況でした。

  • C++11/14を業務で1年
  • Haskell入門を途中挫折 (すごいH本を半分くらいまで)

あまり違和感なく、Rustに入門できたと思います。 C++Haskellの次の知識が入門で役立ちました。

  • C++
    • ムーブ
    • スマートポインタ
    • テンプレート
  • Haskell

また、日頃のプログラミングを行う中で、可能な限りイミュータブルな作りにしたり、型指向の考え方を多少身につけていました。

C++の知識はRust習得に確実に役立ちますが、学習しにくい部分があると感じています。 それは、新旧の情報が混ざっている点と、○○できるけどしてはいけないというプラクティスが多すぎる点です。 (ちなみに私はCもC++もけっこう好きです)

そのため、うまく最初からRustを触ってもらう方法を考える方が良いような気がしています。

アンケート結果

投票率の高い順から見ていきましょう。

不要

CからRustに一気にジャンプしよう派です。

私も、今はこの派閥です。 C++11以降や近代的なプログラミング言語 (Scalaなど) を学ぶコストと、Rustを学ぶコストとが、それほど変わらないように感じているためです。

C++

Cとの互換性が高く、Rustとも比較的似ている言語です。 C++11以降の知識は、Rustを理解する上で役立ちます。

また、組込みエンジニアも、アプリケーションはC++で書くこともあるため、実務をこなしながらRustの素養を身につけることができる点は、大きいです。 この項目に回答が集まったことは、妥当な感じを受けます。

Haskell

17%も入ったのは意外でした。 Rustは関数型のパラダイムも多く取り入れているので、その部分の理解を意図した回答だと思われます。

その他

ScalaとF#を推す声がありました。 Rustでは、オブジェクト指向、関数型に加え、所有権もあるため、非常に複雑になっています。

そこで、ScalaやF#のような言語で、オブジェクト指向、関数型、および、両者を組み合わせるパラダイムを理解した上で、Rustに臨むのが良いのではないか、ということでした。

その他、ご意見、ご感想、お待ちしております。