組込みでCからRustにステップアップする順序
はじめに
先日、twitterで以下のアンケートを行ったところ、予想以上に多くの方にご回答頂けたため、まとめと私の考えを書きます。
組込みでCからRustにステップアップするための順序。
— 錆ありはぐれベアメタル (@LDScell) 2019年4月16日
C → ?? → Rust
さぁ??に入るのは?
日頃C言語を主に利用している開発者に、Rustをおすすめするアプローチを探っています。 CとRustは、言語仕様の乖離が激しい、という事実があります。そのため、アプローチの仕方を間違えると拒絶反応を引き起こしそうです。
そこで、私以外の人がどう考えているか知りたくなったため、アンケートを行ってみました。
私の場合
Rustを学び始めた時点で、私は次の状況でした。
あまり違和感なく、Rustに入門できたと思います。 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に臨むのが良いのではないか、ということでした。
その他、ご意見、ご感想、お待ちしております。