• 締切済み

制御系ってSTL必要なんですか?

私は、制御系・組み込み系の業務経験がありません。 UNIX C, Java, C#の経験があります。 最近、J2SE 5.0やC# 2.0などで、 「ジェネリック」という概念がでてきました。 C++のSTLがとても似ているように思えました。 自分の認識では、C++は今後、制御系などの分野 ぐらいしか用途がないように思っているのですが・・・ 制御系のC++でも、STLはバリバリ使うのでしょうか? それとも、制御系や組み込み系では、すべての ロジックが自作オンリーで、そのような汎用的な 車輪を使うことは不可能な世界なのでしょうか? この質問を至った経緯を以下に書きます。 1)Java 5.0, C# 2.0のジェネリックの概念を  学習するにあたって、C++のSTLを同時に学習した  ほうが、効果的ではないかとおもった。 2)Java, C#でプログラムを組む以上。C++の存在価値が  制御系・組み込み系への準備という位置づけでしか  見出せなかった 3)しかし、コレクションクラスなどを使った。  Java, C#の開発になれているため、すべてのロジック  をゴリゴリ書く開発に戻りたくないので、  C++なら、STLを使いたいと思った。  そして、それは(1)の目的を果たす意味で  重要だと感じた。 4)しかし、私は制御系、組み込み系の経験がないので、  C++でSTLというやりかたがその分野で通用するのか  わからなかった。  いくら、(1)の目的で勉強になるからといって、  学生がPascalを勉強するような、実務に  あまり関係のないことをやりたいとはおもわなかった  ので、制御系、組み込み系でC++でSTLという  組み合わせが現実的に有りえるのかどうかを  制御系バリバリの方にいろいろ聞いてみたいと感じた。 以上がこの質問をした経緯です。 よろしくおねがいいたします。

みんなの回答

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.5

>「仮想メモリが存在するWindowsやlinux」でなければ >難しいですかぁ・・ >「仮想メモリが存在するWindowsやlinux」上で >制御系ってなにかありますか? >デバイスドライバとかですか? > >「仮想メモリが存在するWindowsやlinux」 >でなければ、難しいという状況は今後(近い将来) >はどうでしょうか? まず組込系や制御系の定義が曖昧です。 私の「制御系」の解釈としては例えばルーターのファームウェア のようなフラッシュメモリやROMに記憶されているソフトウェアと解釈しています。 URL: http://e-words.jp/a/E7B584E8BEBCE382B7E382B9E38386E383A0.html Windows上で動くシステムを組込系とは思っていません。 Windowsのデバイスドライバの開発はそれを専門にする開発ツールもありますが 普通言語はC/C++ですね。(インラインアセンブラも使います。) 制御系とは違う気がします。 >>>「仮想メモリが存在するWindowsやlinux」 >>>でなければ、難しいという状況は今後(近い将来) >>>はどうでしょうか? 既に他の回答者もいっていますが、信頼性に関わります。 仮想メモリがないということは、動的にメモリを確保しようとして 確保できない状況が発生します。(もちろん仮想メモリがあっても発生はしますが) 動的に確保するということは削除するときに メモリのフラグメンテーションが発生するわけですから時間が経過するにつれて 確保できなくなる可能性が高くなっていくわけです。 普通この手のソフトウェアで確保できない状況なんてことは許されないはずです。 >そうですか、でも、今後(近い将来、数年後)は >どうでしょうか? >は、今現在、C#、Javaで充分。飯の種になっています >が、今後について考えたいです。 JavaやC#はSI系ではずっと残っていくでしょうし C++がゲーム等のパッケージソフト開発のメインであることは 当分変わりそうにありません。勿論10年後、WindowsXpが廃れてLonghorn系が主流 等の状況になれば変わるかもしれません。 >>>2)Java, C#でプログラムを組む以上。C++の存在価値が >>> 制御系・組み込み系への準備という位置づけでしか >>> 出せなかった >> >>JavaもC#も基本的には仮想マシンがなければ動きません。 >>ネイティブ出力するツールはありますが、私の知っている限り >>かなりの制限があります。 > >経験不足で、真意がよくわかりませんが。 >ネイティブ出力がやりにくいとどんな不都合が >あるのかあまり想像できないです。 >ネイティブ出力を望んでいるので、あれば初めから >C>/C++等を使えば良いじゃないかと思ってしまいます。 ネイティブコードにしたければ、おっしゃるとおりC/C++を使えばよいのです。 私は(2)の返答としてC++の存在価値を述べたまでです。 ご覧になっているブラウザ(IEでもNNでもOperaでも)だってネイティブコードなわけですし ネイティブコードで出力できるメリットがあります。 ちなみにネイティブコードの利点としては ・OS(或いはハードウェア)の機能を最大限に発揮できる。 ・逆コンパイルはほぼ不可能 ・多言語と比べて実行速度の優位 etc...

lawson
質問者

補足

引き続き、あいまいな質問に対してありがとう。 http://e-words.jp/a/E7B584E8BEBCE382B7E382B9E38386E383A0.html このURLは私のような人間が、基本的なことを 理解するためにあるURLですね。 いままでの質疑応答についての「理由」みたいな ものが、わかったような気がします。 今度は、自分ももっと具体的な質問ができるように したいものです。 まだ、質問は締め切らずに数日間は放置しておきます。 特に、回答がないようであれば、締め切ります。 得点の発行は2つまでですね。 どの回答にするか、悩ましいです。

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.4

>制御系のC++でも、STLはバリバリ使うのでしょうか? >汎用的な車輪を使うことは不可能な世界なのでしょうか? ケースバイケースではないでしょうか? 「制御系」と一言で表現してもその内容は様々です。ものによってはSTLバリバリのものもあるでしょうし、逆にアセンブラなどで毎回作り上げているものもあります。 私は昔組み込み系のプログラミングをするときはアセンブラonlyでした。しかも汎用性とはかけ離れたプログラミングです。しかし今は(アセンブラを使うのが面倒なので)たいていCかC++で作ってしまいます(とは言うもののSTLは使いませんしあまり汎用的にはなっていませんが)。 これは昔のハードウエアに比べて処理速度が上がったというだけでなく、ROMやRAMが非常に大きくなったからです。昔は限られたRAMをどう変数に割り当てて使いまわさないとダメなのかを考えなければいけなかったですし、処理に必要なクロック数を足し算して”これじゃダメだ”みたいにプログラミングしていたため、キメの細かい処理がアセンブラと比べて面倒なCは使えなかったからです。 しかし今は性能が並みのシステムでもMBオーダーのRAMが載っているのは当たり前と言ってもいいくらいですし、下手をするとlinuxどころかWindowsを使ってしまうこともあるくらいです(組み込みでWindowsを使っていて信頼性あるのか~なんて議論もありますが、保守性や開発費downというメリットが信頼性を上回ることも度々です)。こうなってくるともう開発方法は何でもありです。実際PIOボードとVBで作らされたこともあります(組み込みでVBですよ!)。 そんなハードウエア性能が上がった現在でもRAMやROM容量を気にしながらアセンブラで開発しなければいけないこともまだあります。何せRAMやIOが限られている1チップCPUは1つあたりのコストが数十円と全然安いですし消費電力もまったくと言っていいいほどありません。大きさもほんのわずかです。この世界にまで踏み込むとCやC++の出番を探すのは難しくなると思います。 個人的にはジェネリックプログラミングが組み込みや制御系で「一般的に」使われるようになることはないと思います。WindowsプログラミングでのC++でさえ一般的になりそうな雰囲気はあまりないように思います。

lawson
質問者

補足

>「制御系」と一言で表現してもその内容は様々です。 あいまいにしたまま、質問をしてしまってるみたい ですね。 これでは、回答するほうも困る。 普段、自分の周りになかなかいないような人が 回答してれているようなので、いろんな考えが 読めてとても、意味があります。 >下手をするとlinuxどころかWindowsを使ってしまうこともあるくらいです >実際PIOボードとVBで作らされたこともあります(組み込みでVBですよ!)。 いろいろあるんですね。 というより、私の質問があいまい過ぎて、 いろんな話題がでてきているかもしれませんが。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> 制御系の人はアセンブラ言語とかすごいが、 > 以外に最新技術に疎いとか。 制御系の人が疎いのは、他分野で注目されている最新技術ということかと思います。 例えば、C/C++を用いてハードウェアを含めたシステム設計を行うような最新技術などは、Webアプリ等の技術者は疎いはずですね。要はそういうことです。 > ハードウェアスペックがもっと向上してから > 制御系の方シフトしたほうが。 組み込みシステムの場合、時代とともに単純にハードウェアスペックが向上するわけではありません。 LSIの単価や消費電力の問題等があるので、用途によってはローエンドの機種が使い続けられるのです。 また、組み込み系で動的なメモリアロケーションが嫌われるのは、ハードウェアスペックだけの問題ではなく、信頼性の問題が深く関わっています。 > 純粋なオブジェクト指向のテクだけで、 > やっていけそうな気がするので、 オブジェクト指向にも向き不向きがあります。 何でもかんでもそれだけで解決するのは、あまりよい方法とは言えません。

lawson
質問者

補足

厳しいけど、わかりやすい回答ありがとう。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

現状のSTLがそのまま多用されるかどうかはともかく、組み込みシステムとジェネリックプログラミングはかなり相性がよいと思います。 組み込みではどうしても静的に解決することが要求されがちです。ポリモフィズムを実現する上でも、仮想関数等の動的な結合より、STLのアルゴリズムに見られるような静的な結合の方が好まれます。(サイズの肥大化を防ぐテクニックも同時に必要になりますが) ただ、現状では組み込み系の開発者でC++を使いこなせるのはほんの一握りです。ジェネリックプログラミングは、C++でも最上級の分野にあたりますので、今後の啓蒙活動次第では、主流の技術になりえると思います。

lawson
質問者

補足

>ポリモフィズムを実現する上でも、仮想関数等の動的な結合より、STLのアルゴリズムに見られるような静的な結合の方が好まれます。 制御系・組み込み系とか、オブジェクト指向とかの 関連について、Webで検索していくと、 オブジェクト指向のプログラム技術だけじゃなく +αとして制御系ならではの配慮みたいな話が どうしても出てくる。 制御系の人はアセンブラ言語とかすごいが、 以外に最新技術に疎いとか。 そういう内容の文章によく出くわす。 ハードウェアスペックがもっと向上してから 制御系の方シフトしたほうが。 純粋なオブジェクト指向のテクだけで、 やっていけそうな気がするので、 当面は、制御系・組み込み系方面の仕事は 敬遠していたほうがいいと思います。 この考え方について、なにか意見が ある方いるでしょうか?

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

STLって標準化されたテンプレートライブラリ群ですが そのほとんどはダイナミックにメモリを確保するものです。 勿論、vectorのreserve等で容量などは指定できますが 仮想メモリが存在するWindowsやlinuxのようなものでなければ 力を発揮できません。あまり組み込み系では使用しないでしょう。 そもそも使用するコンパイラによってはSTLに対応していない可能性もありますし。 STLというかテンプレートについては知っておいた方が良いかも。 JavaのGenerics自体C++のテンプレートの影響を強く受けています。 >C++は今後、制御系などの分野 >ぐらいしか用途がないように思っているのですが・・・ そんなことはないでしょう。 PS2等のコンシュマーゲームやPCのパッケージソフトの開発はC/C++がメインです。 今のところC#やJavaで作成した市販ソフトはみたことがありませんし。 >1)Java 5.0, C# 2.0のジェネリックの概念を > 学習するにあたって、C++のSTLを同時に学習した > ほうが、効果的ではないかとおもった。 どちらかを知っておけば一方の学習の効率があがるだけで 同時に学習する意味はないかと思います。   >2)Java, C#でプログラムを組む以上。C++の存在価値が > 制御系・組み込み系への準備という位置づけでしか > 出せなかった JavaもC#も基本的には仮想マシンがなければ動きません。 ネイティブ出力するツールはありますが、私の知っている限り かなりの制限があります。

lawson
質問者

補足

さっそく、返事をくれてどうもありがとう。 >STLって標準化されたテンプレートライブラリ群ですが >そのほとんどはダイナミックにメモリを確保するものです。 >勿論、vectorのreserve等で容量などは指定できますが >仮想メモリが存在するWindowsやlinuxのようなものでなければ >力を発揮できません。あまり組み込み系では使用しないでしょう。 「仮想メモリが存在するWindowsやlinux」でなければ 難しいですかぁ・・ 「仮想メモリが存在するWindowsやlinux」上で 制御系ってなにかありますか? デバイスドライバとかですか? 「仮想メモリが存在するWindowsやlinux」 でなければ、難しいという状況は今後(近い将来) はどうでしょうか? >そもそも使用するコンパイラによってはSTLに対応していない可能性もありますし。 そうなんですか・・。 >STLというかテンプレートについては知っておいた方が良>いかも。 >JavaのGenerics自体C++のテンプレートの影響を強く受けています。 >どちらかを知っておけば一方の学習の効率があがるだけで >同時に学習する意味はないかと思います。 よく、わかりました。ありがとう。 >そんなことはないでしょう。 >PS2等のコンシュマーゲームやPCのパッケージソフトの開発はC/C++がメインです。 >今のところC#やJavaで作成した市販ソフトはみたことがありませんし。 そうですか、でも、今後(近い将来、数年後)は どうでしょうか? 私は、今現在、C#、Javaで充分。飯の種になっています が、今後について考えたいです。 >JavaもC#も基本的には仮想マシンがなければ動きません。 >ネイティブ出力するツールはありますが、私の知っている限り >かなりの制限があります。 経験不足で、真意がよくわかりませんが。 ネイティブ出力がやりにくいとどんな不都合が あるのかあまり想像できないです。 ネイティブ出力を望んでいるので、あれば初めから C/C++等を使えば良いじゃないかと思ってしまいます。

関連するQ&A

  • 「制御、組込系の仕事」について

    「制御、組込系の仕事」について いつもお世話になっております。 出来れば、「制御、組込系の仕事」についてみたいと考えております。 C#、javaを使ったweb系の開発経験が3年程あります。(他の言語も併せれば、経験年数は5年程度です) c言語の基本知識はありますが、業務経験はありません。 年齢は30を超えてしまっています。 何らかの努力次第で、「制御、組込系の仕事」に就く事は可能でしょうか?

  • 組込、制御の学習について

    組込、制御の学習について いつもお世話になっております。 組込、制御のスキルを最速(独学)で習得したいのですが、どのような教材が良いでしょうか? 自分ではとことん作り込むのが良いと思うのですが、どのようなものが良いのかと悩んでおります。 ちなみに、C言語の実務経験は無く、基礎知識程度です。C++は触ったことがありません。他言語(JAVA等)のプログラム実務経験はあります。ハードウェアについては、基本情報技術者試験の知識程度しかありません。 回答、宜しくお願い致します。

  • 組み込み系+制御系プログラムの勉強するなら?

    組み込み系か制御系のプログラムの勉強したいのですが、 前からC言語とjavaはやってるのですが、 言語以外に勉強すべき事や、 c/javaよりも、やるべき言語が、あれば教えてください。 学習に、いい本が有ったら本の名前等も教えてください。 よろしくお願いします。

  • VC++.NETと標準C++とSTLの相性などの質問事項

    自己研鑽のために、標準C++を学習し、STLについても学習しました。仕事で、Javaの経験が半年以上あります。正直な感想、勉強してみると、C++のほうが、気に入ってしまいました。 マイクロソフト関連の仕事をしたことがなく、VisualBasicすらありません。最近では、C#.NETなどがでてきています。 C#2.0やjavaのJ2SE5.0ででてくるGenericや、コレクションクラスにGenericを考慮したものが でてくる。など、C++のSTLの模倣のように感じました。 C#にはデリゲートがあるようですが。関数ポインタや関数オブジェクトそのまんまに見えます。 C#2.0が気になりますがまだ、ベータ版で未来の話なので、Visul C++.NETに興味を持ちました。せっかく勉強した標準C++やSTLの知識はそこでは役に立つのでしょうか。.NETにはそちのほうで独自のstring型やコレクション型があるのではないでしょうか? .NETだと、マネージコードなどガベージコレクトがあるようです。STLのコンテナはそれぞれ内部でデストラクタがヒープの内容を廃棄してくれますが、ガベージコレクトの環境で普通にSTLを使うとどういうことになるのでしょうか? 今度、Visual C++.NETの学習をはじめるかどうかの判断材料にしたいので、現時点までの知識が有効活用できるかどうかを知りたいです。宜しくお願いいたします。

  • オープン系とか、組込み系とかって何?

    よく、ソフトウェア開発の世界では、「オープン系」とか、「組込み系」、「汎用系」などと言う分野がありますよね。 これってそれぞれどう違い、どのような特徴があるのでしょうか。 また、上記以外のもので他にも「~系」ってあるのでしょうか。あればそれについても概要が知りたいのです。 「アプリ系」などというのもありますか。市販の、例えばグラフィック関連のソフトとか、ゲーム・ソフトや、会計ソフトなどはこう呼ぶのでしょうか。 また、Webプログラミングはどの分野の系統に属するのでしょうか。 ただ、「組込み系」だけは、多少わかりました。例えば電化製品などに内蔵されているマイコンを制御するプログラムを開発するのですよね。国内でも、この分野の技術者が不足しているということも知りました。 自分のイメージですが、この組込み系というのは、いわゆる市販のパソコン・ソフトを開発する分野と比べると、出力する画面のデザインなどの見た目については、あまりこだわらず、制御にいそしむ、ある意味、地味な領域なのかなという気もしました。 それに、結構、マイコンに関するハードの知識も必要とされるのですよね。 私は、ソフト開発のみというよりも結構、電子基盤の操作などに魅力を感じるので、組込みの仕事もしてみたいなとも思うですが、実は、これからVisualBasic.NETを学習しようかと思っています。 これはまったく、的外れな努力でしょうかね。やっぱり、組込みはC言語で無ければならないのでしょうか。 反対に、VisualBasic.NETを生かす道としてはどのような分野が考えられますか。Webやデータベース、サーバサイドのプログラミングなどでしょうか。 ASP.NETなどもありますしね。 どなたか貴重な解説・御意見を頂けましたら、よろしくお願い致します。

  • C言語を学習することに将来性はあるのか

    現在C言語を勉強中なのですが、C言語自体の将来性はどのくらいあるのでしょうか? せっかく勉強するので、できれば将来性のある言語に重点を置いて学習したいと思って います。 よくC言語は枯れた技術だと言われることが多いのですが、これからはC++やJava等が 使われることが多くなり、C言語はあまり使われなくなる言語なのでしょうか? 現状はゲーム分野や組み込み分野ではC言語は現役バリバリに使われていると 聞いているのですが、今後はJavaやC++といった言語がこういった分野でも 主流になってくる(C言語に取って代わる)のでしょうか? C言語自体、あまり将来性がないようであれば、今後勉強するに当たって、 C言語をとことん追求するよりも他の言語に学習の重点を移行させたいと 考えています。 私自身はプログラムを勉強し、将来はゲーム制作あるいは組み込み分野の 開発に携わりたいと思っています。 こういったことに詳しい方がおられましたら、ぜひ教えて頂けないでしょうか?

  • 制御系ソフト開発技術者とはなんですか?

    転職先を模索している受託型システムエンジニアをやっているものです。 転職先を探していると制御系ソフト開発技術者という言葉が出てきますが、この職種はどのようなことをするのでしょうか?仕事の内容はどのようなものなのでしょうか?組み込みソフト、ドライバーの開発と書いてありますが、何のことかピンときません。 スキルは何が必要なのでしょうか? 私はCOBOL,VBとJavaが少しできますが、Cにはまったく触れたことがありません。汎用機、UNIX、クラサバとそれぞれ経験ありますが、このような経験はプラスになるものなのでしょうか?

  • 業務系から制御系へ異動した場合に必要な勉強

    お世話になっております。 3月末で退職し、転職活動中です。 第一志望は制御系で転職活動をしています。今、不景気で制御系の仕事がないことはしっています。 制御系のみでなく、業務系やweb系の業務も業務指示があればもちろんやります。ただし、1番やりたいのは制御系です。 しかし、前の会社は業務系ばかりで、C言語は学生時代に経験があるものの、制御系の業務経験は0です。 今のうちに、少しでも制御系の勉強とC言語の勉強をしたいのですが、制御系の勉強はどんな勉強をしたらよいのかが分かりません。書籍を購入してみようと思うのですが、どんな本を買えば良いのか分かりません。 質問 制御系未経験ですが、業務系の経験とC言語の経験はあります。 1、参考書籍を購入する場合、どんな本が良いでしょうか?やはり、ベストセラーの入門書を買うべきですか? 2、参考書を読む以外ではどんな学習をすべきでしょうか? プログラムは書けますので、制御技術の勉強を優先させたいです。 以上です。お忙しい所申し訳ないですがよろしくお願いいたします。

  • C言語で制御できる教育向けキット

    この度、専門学校に頼まれて、ちょっとしたC言語による組み込みプログラミングの 講義をすることになりました。 座学では退屈するのは明白ですので、何らかのマイコンボードのようなHWキット (たとえば、7セグを制御するとか音を鳴らすとか、ロボットのようなものを制御するとか)を 使って、それをC言語でプログラミングして制御するような実習を組み込みたいと 考えています。 このような用途で使えるマイコンボードや学習キットの情報を教えていただけないで しょうか。 秋月通商をざっと見たのですが、なかなか見つけることができませんでした。 ●要件 価格はあまり高価ではない。 C言語でプログラミングして、ハードウェアを制御する 型番とか情報がありましたしたら是非おしえてください。

  • 組込みソフトウェアと制御について・・・アナログとデジタル、必要とされるハードの知識

    シーケンス制御・フィードバック制御・PID制御・サーボ制御などの制御を理解するにはアナログ回路とデジタル回路のどちらの知識が必要となるのでしょうか? また、制御系の組込みソフトウェアを開発する場合(例えば、半導体製造装置や工場の組立・加工ロボットなどの産業機械、医療機器、エアコンや洗濯機などの家電、航空機やイージス艦やミサイルなどの兵器)には、ハードに関する知識として上記の制御分野の知識は必須となるのでしょうか? 文系出身で言葉の正確な定義を理解しておらず意味不明な箇所があるかもしれませんが、もしご存知の方がおりましたら回答のほどよろしくお願いいたします。

専門家に質問してみよう