6

自由に設計できる新しいアプリケーションの課題に直面し、チームを編成して開発および管理します。

  1. どの言語/プラットフォームを選択しますか?
  2. なんで?

背景:デスクトップ アプリケーションは、ハードウェア デバイスを制御し、計算を実行し、それによって返されたデータを分析および表示します。

要件: (重要度: 10 = 最も重要)

  • USB および/またはイーサネットを使用してデバイスと通信する必要があります (9)
  • 関連するスキルを持つエンジニアの可用性 (8)
  • 高品質の IDE/ツールの可用性 (8)
  • IDE/ツールのコスト (7)
  • リソース、チュートリアル、サポートの可用性 (9)
  • 言語/API/プラットフォーム/フレームワークの寿命 - つまり、このアプリケーションへの投資は将来にわたってどの程度保証されるでしょうか?... 製品のライフサイクルは長い(10)
  • クロスプラットフォーム (3)
  • 利用可能なライブラリの豊富さと幅広さ (9)
  • アプリケーションはスクリプト言語を解釈できる必要があります (6)
  • 単体テスト (9)

仮定:

  • デバイスの USB バリアントの場合、デバイス ドライバーは C/C++ で記述されます。
  • 応募はゼロからの全く新しい試み
  • 既存のエンジニアのバックグラウンドは C/C++ であり、強力な OO 能力を備えています。既存のエンジニアは最適な言語/プラットフォームを喜んで採用し、適切なスキルを持つ新しいエンジニアが採用されます。

ショートリスト(追加可能):

  • Java/J2SE
  • C#/.NET
  • C++/wxWidgets
  • C++/QT

あなたの考えを聞くのを楽しみにしています!

4

8 に答える 8

11

私の最初の選択はC++です

  1. 「言語の寿命」... C/C++ がすぐになくなるとは思いません。
  2. USB/イーサネット/その他との低レベル通信のサポート
  3. あなたのチームにはすでに知識/スキルセットがあります
  4. 多くの高品質のライブラリ/IDE などが利用可能
于 2009-01-22T01:37:31.917 に答える
11

正直なところ、あなたの要件に基づいて、次の理由から Java (C の小さなコンポーネントを使用) を選択します。

  • Lifetime of language/API/platform/framework- i.e., how future-proof will the investment in this application be?... the product has a long life-cycle (10).それは本当に長いという意味に依存します。インストールベースが巨大なだけに、Java が消えてなくなるとは到底思えません。C や C++ も消えていませんが、C# の将来を考えるとき、私は常に VB6 から VB.net への移行の問題を考えています。

  • Will need to communicate with devices using USB and/or ethernet (9).Java はこれには直接理想的ではありませんが、面倒な作業を行う JNI があります。これを行うには C コンポーネントが必要です (プラットフォームごとに変更されますが、コードの大部分を 1 回だけ記述した方がよいでしょう。C では、おそらくプラットフォームごとにほとんどのコードを変更する必要があります。 C# では、Windows 以外のプラットフォームで本当にサポートされているのでしょうか?)。もう 1 つの代替手段は、Java 用のように見えるJNA"Python ctypes"です (JNI インターフェイス層なしで共有ライブラリと DLL にアクセスします)。

  • Availability of resources, tutorials, support (9).すべての言語は、Web 上に膨大なリソースの断面を持っています。

  • Richness and breadth of libraries available (9).Boost for C++ とクロスプラットフォーム GUI がありますが、それらは追加する必要があります。Eclipse/Java のような開発環境には何も組み込まれていません。

  • Unit testing (9).以下のツールの可用性と同じ反応 - 単体テストを自動化する (無料の) Eclipse プラグインがたくさんあります。

  • Availability of engineers with relevant skills (8).あなたが言及したすべての言語には、仕事をすることができる人がたくさんいます (私はその言葉を使うのが大好きです)。

  • Availability of quality IDE/tools (8).これがエクリプスです。私の考えでは、それについて2つの方法はありません。そのためのプラグインの数は本当に膨大です。NetBeans の方が見栄えは良いかもしれませんが、私は見た目より機能性の方が好きです (私の妻もそうなので、ラッキーです :-)。

  • Cost of IDE/tools (7).エクリプスは無料です。

  • The application will need to be able to interpret a scripting language (6). 最後に聞いた話によると、Java には JavaScript が組み込まれているだけでなく、開発者が独自のスクリプト エンジンを追加する機能も含まれています。

  • Cross-platform (3).C#、いいえ (Mono の存在にもかかわらず、Mono がいつか MS と衝突するリスクがあり、FOSS の世界では MS との関連性のためにそれに取り組んでいる人は多くありません)。

于 2009-01-22T01:56:02.770 に答える
6

いくつかの理由から、これには C# を使用します。

  • 構文の点で C++ に最も近い。
  • unsafeブロックで必要な場合は、メモリへの直接アクセス。
  • どの C++ UI フレームワークよりも開発コストが低い最新の UI。
  • 高いスキルの可用性;
  • Microsoft などのおかげで、ほぼすべてのライブラリ (USB を含む)。
  • Visual Studio は比較的安価です。
  • 期待される寿命が長い: .Net はかなり成熟しており (7 年以上)、「バイトコード プラットフォーム」(主に Java を含む) の中で最も長期的な見通しが立っています。
  • DLL によるネイティブ コードの簡単な統合。Java/JNI (経験から言えば) は、それだけ厄介です。と
  • 単体テスト フレームワーク。

正直なところ、C++ デスクトップ アプリの時代は過ぎ去ったと思います。それらは、(比較して)エラーが発生しやすく、開発するには費用がかかりすぎます。

C#/.Net ソリューションに欠けているのは、クロスプラットフォーム (Mono にもかかわらず) だけです。それがあなたにとってどれだけ大きなことかわかりませんが、あなたはそれを 3 とだけ挙げました。

于 2009-01-22T01:57:46.773 に答える
4

もし私が今何かをリリースしていたら、C++/wxWidgets が圧倒されるでしょう。この組み合わせは非常に移植性が高く、可用性とコストに関する懸念をすべて満たします。

私の記憶が正しければ、来月初めに Qt が LGPL ライセンスでリリースされる予定です。私自身は使ったことはありませんが、何人かの人々がその賞賛を歌っているのを聞いたことがあります。ライセンス要件だけが、私がそれを見るのを妨げていました。あなたのニーズには wxWidgets と同じくらい良いでしょう。

私の知る限り、これらはどちらもスクリプトや単体テストを処理しません。

Python をスクリプト言語として使用することを検討します。他のプログラムの組み込みスクリプト言語として定評があります。

好きな単体テスト フレームワークを見つけたことがないので、お勧めできません。

于 2009-01-22T02:39:38.033 に答える
4

個人的には、低レベルのハードウェア インターフェイスには C++ または C (または D ) を選択しますが、そのコードをクリーンな API にまとめて、ユーザー向けのすべてのコードを記述します。 WPF と XAML を使用した C# の GUI 機能。

デバイス ドライバーの作成に必要なスキルセットは、GUI 開発者のスキルセットとはまったく異なります (特に、豊富なグラフやレポートを提供する必要がある場合)。非常に小さなチーム)、異なる (ただし互換性のある) 言語で 2 つの層を実装すると、これらの層の間で懸念事項を分離するための優れたメカニズムが提供されます。

于 2009-01-22T01:43:43.963 に答える
3

デスクトップ アプリケーションはハードウェアデバイスを制御します

C++

于 2009-01-22T01:42:00.193 に答える
3

ここには C# の人がたくさんいるようです。 - C#: Windows 以外のプラットフォームではうまく動作しません。それは悪い考えです。忘れてください。- Java: デバイス ドライバーには適しておらず、C や C++ よりも低速です。Java にはいくつかの優れた機能がありますが、Java を高く評価している人がたくさんいます。- VB: なぜそれを使いたいのですか?

私はおそらく C++/Qt を使用するでしょう。唯一の欠点は、Qt が商用製品である場合は費用がかかり、そうでない場合は無料であることです。あなたのチームはすでに C++ の経験があるので、Qt の使い方を学ぶのは難しくないとおっしゃっています。これは、Windows、Linux、および Mac の両方で機能し、見栄えがよくなります。Ide は Qt では問題ありません。Trolltech はクロス プラットフォームの ide を開発しており、Visual Studio、Eclipse、またはその他の C++ ide を使用できます。

于 2009-01-22T07:24:21.547 に答える
2

私はC#に投票します。C++ から離れるという学習曲線があっても、開発者の生産性は向上し、ツールとライブラリは優れています。

C# がプロジェクトの複雑さを増す唯一の場所は、USB デバイスとのインターフェイスですが、P/Invoke と / C++/CLI を使用して C/C++ ドライバーを .NET に公開するのはかなり簡単です。

于 2009-01-22T01:33:51.910 に答える