クローズ。この質問は
意見ベースです。現在、回答を受け付けていません。
コメント
回答
質問は"現代の典型的なアプリケーション開発に適した言語はどれですか?"。
編集:以下のコメントのいくつかに対処しました。ちょっとした注意:イディオムとしてネイティブに多くのものがある場合、それは「毎回自分で実装またはダウンロードして使用することとは大きな違いです。ほとんどすべてがこれらの言語のいずれかで実装できます。問題は-何ですか言語はネイティブに提供します。
頭から離れて(いくつかの議論は両方の言語に適用されます)…
C#はC ++よりも優れています:
C#は次の点でJavaよりも優れています:
- 多くのノイズ(EJB、プライベート静的クラスの実装など)の代わりに、プロパティやイベントなどのエレガントでフレンドリーなネイティブ構造を取得します。
- 実際のジェネリック(Javaがジェネリックと呼ぶ悪いキャストジョークではない)があり、それらを反映することができます。
- ネイティブのリソース管理イディオム(
using
ステートメント)。 Java 7もこれをサポートする予定ですが、C#はずっと長い間サポートしてきました。
- 例外をチェックしていません:)(これが良いか悪いかは議論の余地があります)
- 必要に応じて、Windowsと緊密に統合されています。
- LambdasとLINQを備えているため、少量の関数型プログラミングをサポートします。
- 一般的な共変性と反変性の両方を明示的に。
- 必要に応じて、動的変数があります。
-
yield
ステートメントによる列挙サポートの向上。
- 新しい値(または非参照)型を定義できます。
編集-コメントのアドレス指定
- C ++がネイティブRAIIをサポートしていないとは言いませんでした。 Javaにはそれがない(明示的にtry / finalを実行する必要がある)と言いました。C++にはRAIIに最適な自動ポインターがあり、(何をしているのかがわかっている場合は)ガベージコレクションを置き換えることもできます。
- 無料関数のエミュレートについては何も言いませんでした。ただし、たとえば、
this
ポインタでフィールドにアクセスする必要がある場合はそれを行うメソッドを汎用関数ポインタ(つまり、同じクラスにない)にバインドすると、ネイティブな方法はありません。 C#では、を無料で入手できます。それがどのように機能するかを知る必要さえありません。
- "メンバーメソッドを無料の関数として扱う"たとえば、メンバーメソッドは"密かに"には
this
ポインタが必要です。
-
using
ステートメントは、明らかにIDisposableラッパーとともに、次の優れた例です。 RAII。 このリンクを参照してください。 GCがあるため、C#ではC ++ほどRAIIは必要ないことを考慮してください。必要な特定の時間には、using
を明示的に使用できます。もう1つの小さな注意点:メモリの解放はコストのかかる手順です。GCには多くの場合(特にメモリが多い場合)にパフォーマンス上の利点があります。メモリがリークすることはなく、多くの時間を費やすこともありません。割り当て解除の時間。さらに、メモリを毎回割り当てるのではなく、たまにしか割り当てないため、割り当ても高速になります。new
を呼び出すと、最後の値がインクリメントされます- object-pointer。
- " C#は、ガベージコレクション"があるという点で劣っています。これは確かに主観的なものであり、しかし、冒頭で述べたように、最新の一般的なアプリケーション開発では、ガベージコレクションは非常に有利です。
C ++では、new
a nd delete
は、経験的に常にあちこちでエラーが発生します。または(C ++ 11では)自動ポインターをネイティブに使用できますが、ロットが追加されることに注意してください。コードに多くのノイズがあります。したがって、GCにはまだ優位性があります。
- "ジェネリックはテンプレートよりもはるかに弱いです"-私はただそうしません」テンプレートには利点があるかもしれませんが、私の経験上の制約では、ジェネリックパラメーターの型チェック、反変性、共分散ははるかに強力でエレガントなツールです。テンプレートの強みは、言語で遊ぶことができることです。かっこいいかもしれませんが、何かをデバッグしたいときに多くの頭痛の種を引き起こします。したがって、全体として、テンプレートには優れた機能がありますが、ジェネリックはより実用的でクリーンだと思います。
コメント
回答
環境
.NETFrameworkとWindowsクライアント
Windowsは、クライアントコンピューターの主要なオペレーティングシステムです。 Windowsアプリケーションに最適なGUIフレームワークは、WinformsとWPF、および。NETFrameworkです。 。NETFrameworkとそのAPIを使用するのに最適なプログラミング言語は C#。Javaはこれに代わるものではありません。また、C ++は、自動メモリ管理のない古い言語です。 C#はC ++に似ていますが、自動メモリ管理があり、ポインタを操作する必要がないため、生産性が向上します。C++は場合によっては最適なオプションですが、で一般的なフォームを多用するデータベースアプリケーションには適していません。ビジネス。
IISとWindowsServer
Windows環境とC#での作業に慣れている場合は、サーバープログラミング用のIISとWindowsServer用のIISを学ぶための投資が最小限で済みます。基本的な管理。
ActiveDirectoryとWindowsサーバー
企業ネットワークに展開されるソフトウェアを開発している場合、Windows中心の環境を使用している可能性があります。 ActiveDirectoryを備えたWindowsサーバー。このような環境では、 C#および .NET Framework 。
個人的には、私はJava開発者であり、C#開発者ではありませんが、Webを使用しています。 Windowsネットワーク用のネットワークアプリケーションを開発している場合は、C#に切り替えます。しかし、私はLinuxベースのWebサーバーにはJavaを好みます。組み込みシステムにはC ++を選択しますが、依存関係があまりない場合は
はい、 C#は、C ++やJavaよりも最新の機能を備えた優れた言語ですが、はを選択する上で最も重要なことではありません。 div id = “0b0df27ab7″>
C#。
概要
ソフトウェアの環境は選択するために最も重要です C#。 Windowsクライアント、Windowsサーバー、Active Directory、IIS 、およびおそらく SQL Server 次に C#が最も優れた言語です。NETFrameworkを使用します。
Unix環境で作業する場合Webサービス、Javaが私の選択です。また、組み込みシステムを使用している場合、またはハードウェアデバイスと統合する必要がある場合は、 C ++ が適しています。
コメント
回答
C#およびJava
C#は、次の場合に非常に優れた言語です。
- 汎用のオブジェクト指向開発を行いたい場合。これは「古典的な静的に型付けされたOOP言語です。
- Microsoftプラットフォームのみを対象としています(MicrosoftがJavaを効果的に複製してC#を作成したのは、人々を閉じ込めるJavaのような言語が必要だったからです。 Windows。Javaを使用することもできましたが、それにより、他のプラットフォームでアプリケーションを簡単に実行できるようになりました。…)
言語としてのC#は、さまざまな点でJavaよりも優れています(優れています)。プロパティ、値の型、修正されたジェネリックなどの構文)。私はJavaよりも言語として C#を好みますが、大まかなスキームでは、C#はかなり類似した言語であり、類似したアプリケーションに適しています。
一方、Javaにはいくつかの大きな利点もあります。
- 巨大なオープンソースエコシステム-無料で入手できるJavaのライブラリはあらゆる言語の中で最高です。これの重要性を誇張するのは難しいです-物事を成し遂げるという観点から、Javaは非常に効果的です。
- ツール-Javaツールは、.Netの世界で得られるものよりも優れていると私は考えています。 。例えばMaven(一度習得したら!)は特に印象的です。
- 保守性-Javaは比較的安定しており、下位互換性に多大な努力が払われてきたという理由だけで、しばらく前から大企業で成功を収めてきました。シンプルで少し冗長な構文は、ここでもJavaに役立ちます。コードが非常に明確で明示的であれば、コードの読み取りと保守が簡単になります。
- 新しい言語-JVMにはいくつかの驚くべき新しい言語(Scala、Clojure)があります。 、Groovyなど)はJavaプラットフォームの未来です。これは言語の革新の多くが行われている場所であり、JavaやC#よりもはるかに高速に行われています。
したがって、JavaとC#は非常に密接な関係にあり、Microsoftキャンプに参加するか、オープンソース/クロスプラットフォームキャンプに参加するかによって決まります。
個人的には、Javaが好きです。理由は次のとおりです。
- ライブラリエコシステムは、C#の構文がJavaよりも優れているという事実よりもはるかに重要であると考えています
- 長期的には、すべてのコードを適切にクロスさせたいと考えています。 -プラットフォームであり、クラウド上の安価なLinuxマシンの大きなクラスターで実行できます。
- Clojureは、現在世界で最も有望な言語です。JVMプラットフォームを使用すれば、次のことが可能になります。トランへコードとスキルを時間の経過とともにClojureに簡単に配置します。
C / C ++
C / C ++は基本的にまったく別の獣です。次の理由から、今日の汎用アプリケーション開発にはお勧めしません 。
- メモリ管理-最近のほとんどの汎用プログラミングでは、独自のメモリの管理。C#またはJavaでのガベージコレクションは、C / C ++で使用する必要のある明示的なメモリ管理手法よりも生産性と健全性の点ではるかに優れています。
- 複雑さ-特にC ++は非常に複雑な言語。習得には長い時間がかかり、コード自体も非常に複雑になる可能性があります(たとえば、C ++テンプレートは特に厄介です…)
- 生産性-ほとんどの場合およびその他すべて同等であると、C / C ++で処理を実行するのに時間がかかります。
ただし、特に特定の限られた数の特別なドメインでは、間違いなく優れた選択肢です。
- オペレーティングシステム-オペレーティングシステムを作成している場合は、おそらくC / C ++を使用することをお勧めします。
- ゲーム開発-ほぼすべてのt彼の最高の商用ゲームエンジンはC / C ++です。要求の厳しいAAAタイトルを開発している場合は、それでも最良の選択です(C#とJavaは、要求の少ないカジュアルゲームには完全に適しています)
- 高性能コンピューティング-最適化されたC / C ++がおそらく最良の方法です。非常に高性能なコードを作成します。このレベルの最適化を行うほとんどのアプリケーションでは、努力する価値はありませんが、特定のドメインでは非常に価値があります(たとえば、高頻度の取引)
- ハードウェアアクセス-直接必要ですハードウェアへのアクセス(例:組み込みシステムの場合)
したがって、基本的に、C / C ++は、特に適しているドメインの1つに焦点を当てている場合にのみ最適です。 。
コメント
回答
I heard that syntactically they are almost the same.
構文的に?誰が空飛ぶ猿に構文について教えますか?構文は、構文的に類似した言語からのより高速な移行を可能にするという1つのことだけに適しています。それでおしまい。
C#はJavaよりもはるかに優れています。それらの汎用および関数型プログラミングのサポートを検討してください-C#はJavaよりもはるかに進んでいます。オペレーターのオーバーロードやその他の優れた機能は言うまでもありません。C#の方がはるかに優れています。 JavaがC#よりも優れていると見なされる可能性はありません。
C ++とC#は、よりコンテストです。C++には、非常に厄介な古風なコンパイルモデルと、多数のレガシー疾患はCからのものですが、using
は完全な失敗であるため、テンプレートはジェネリックよりもはるかに強力であり、リソース管理アプローチは一般的にはるかに柔軟で強力です。 、そしてそれはより速く実行されます。
コメント
Answer
C#
には、LINQ
や代表者。 Java
とC++
の両方の世界から最高のものを手に入れています。完全な比較については、こちらをご覧ください。
しかし、私はJava
の世界の方が好きです。より多くのオープンソースフレームワークがあり、すべてのプラットフォームで実行されます。また、Mono
について教えてはいけません。信頼できるオプションではありません。
コメント
回答
一部の情報源によると(例: http://www.indeed.com/jobtrends )C#はJavaほど人気がなく、C ++と同じくらい人気があります。
C#はJavaに欠けている機能を提供しますが、例えばプロパティ、関数型プログラミングスタイルなどの特定のプログラミングイディオムの直接サポート。 C#はC ++よりも抽象化レベルが高いため、プログラムの速度よりも開発時間が重要な場合に有利です。
個人的には、Java / C ++の世界が好きです。 Petar Minchevが言ったように、Javaにはより多くのオープンソースフレームワークとアプリケーションがあり、どこでも実行でき、特定のベンダーやオペレーティングシステムとの結びつきが少なくなっています。 C ++にも同様の利点がありますが、コードはプラットフォーム間で調整が必要になることがよくあります。私はLinuxで開発することを好み、私の知る限り、LinuxでC#を本格的に開発することはできませんでした。プログラミングのニーズは、C、C ++、Java、Scalaでカバーされているため、C#に本当に興味を持つことはありませんでした。
一方、特定のベンダーに縛られている多くの開発者にとっては問題ではありません。Microsoftはオペレーティングシステム市場で支配的な地位にあり、C#は多くの雇用機会を提供します。したがって、IMOの多くの開発者はC#を採用しています。これは、機能が豊富な言語であるだけでなく、優れた投資でもあるためです。
コメント
回答
"プログラミング言語を含むソフトウェア開発フレームワーク"についてより良いですか?
"環境"などの他のものを含めるのを忘れました。
-
Windows OSでのみ動作しますが、低レベルである必要はなく、メモリやその他のリソースがたくさんありますか?
.NETをWindows上のフレームワークとして使用し、C#を使用します。
-
Windowsでのみ機能しますが、低レベルである必要はありませんが、そうではありません。たくさんのリソースがありますか?
Delphiフレームワーク(およびObject PascalDelphiプログラミング言語またはLazarusObject Pascalプログラミング言語)を選択してください
-
アプリは必要ですか? seveをサポートするさまざまなモバイルでのゲームのようなralプラットフォーム?
JavaフレームワークとJavaプログラミング言語を選択してください。
-
グラフィックとしてKDEを備えたLinuxですかインターフェイス?
C ++を使用するQTフレームワークを選択します
-
グラフィックインターフェイスとしてGnomeを使用するLinuxですか?
GObject / GLibフレームワークを選択します、C ++を使用
-
ドライバの開発など、多くの低レベルの操作を処理しますか?
プレーンCまたはC ++は、いくつかの操作に使用されますフレームワークとしての標準ライブラリを備えたシステム。
ちょうど2セント。
コメント
回答
検索を行うと、上位のプログラミング言語についての議論に出くわす可能性があります。これが検索結果の1つです- http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html -Javaは今でも最も人気のある言語のようです。
Javaは、C ++の欠点のいくつかを取り除こうとしました(そして、非リアルタイムで重要でないアプリケーションのプログラマーの生活をよりシンプルにしました)。 C#はパーティーの後発であり、Java言語のいくつかの欠点を回避しました。 C#は(Microsoftがそれを十分に制御しているため)多くの進歩を遂げましたが、Javaの進歩は、C#の利害関係者間の対立のためにかなりの期間ブロックされました。
回答
まだ言及されていないことがいくつかあります:
C#はC ++よりも優れています。理由は次のとおりです。
ヘッダーファイルを使用するため、非常にシンプルになります。
C#はJavaよりも優れています。理由は次のとおりです。
ユーザー定義の参照型(クラス)と値型(構造体)の両方をサポートします。何をしているのかを知っていれば、パフォーマンスに大きなメリットをもたらすことができるタイプ。
単一メソッドインターフェイスのようなデリゲートをサポートしているため、単一メソッドオブジェクトを含む頻繁に発生する構造のコーディングが大幅に簡素化されます。
コメント
回答
予想される環境と専門知識に最適な言語を選択する必要があります。
Microsoftのみの環境で作業している場合は、C#を選択してください。 C#はISO / IEC 23270:2003で標準化されていますが、完全な実装はMicrosoftのバージョンのみです。言語のいくつかの重要な部分は標準でカバーされていないため、Microsoftの特許の対象となります。他のシステムと完全に互換性のあるバージョンの言語を実装する人は他にいないため、実際には、その言語を使用している限り、MicrosoftWindowsと.Netにベンダーロックインされます。モバイル市場で使用するスキルを探している場合は、別の言語を探すのが最善です。
Javaは機能しますが、ガベージコレクションなどの機能もあり、かなりのオーバーヘッドがあります。 JavaもISO / IECによって標準化されていないため、Javaのプラットフォームとバージョンを切り替えても保証はなく、Sun / Oracleの最善の意図のみです。最終的にAndroidでの作業を計画している場合は、これが間違いなく進むべき道です。 .Androidのプログラミングは基本的にJavaですが、いくつかの変更が加えられています。
C ++は標準化されており、ほとんどすべてのコンパイラは国際標準に準拠しているため、動作は保証されていますが、言語によって保護されるわけではありません。自分でクリーンアップとオーバーフローチェックを実行する必要があります。これは難しいことではありません。 C / C ++プログラマーは、これらを長年行ってきました。 AppleはすべてにObjectiveCを使用しているので、Appleを目指したい場合は、代わりにこれを試すことをお勧めします。
ある時点でWindowsを置き去りにしていることに気付いた場合は、C / C ++とJavaの両方を学ぶことをお勧めします。どちらも現時点で市場に出回っています。
回答
C ++とC#に関連して(Javaに精通していないため)、ここで不足しているのは、Windows上の低レベルのものにアクセスする機能です。たとえば、C#でネイティブディスプレイドライバを開発することはできませんが、C ++を使用することはできます。これにより、C ++が改善されるわけではありません。C++とC#は、アセンブリとCのように見えます。
C#は私の中にあります。機能を実際に実装するのにかかる時間を見ると、はるかに効率的に表示されます。開発されたアプリケーションの99%で、.Netランタイムのパフォーマンスの低下はごくわずかです。タイトなループを実行している場合は重要です。どうしてもですが、ほとんどの場合、アプリケーションはアイドル状態で、あらゆる種類の入力、信号、または割り込み(ディスクIO、ボタンクリック、ネットワーク、アニメーションの完了)を待機しています。
CLRライブラリとそのすべて機能は別のものを持っていますr大きなメリット。私がジュニア開発者にC#をトレーニングしていたとき、彼らのほとんどは、クラス、メンバー、名前空間の論理的な命名規則が好きだと言っていました。メソッドの機能を見つけることは、SDK全体で論理的でした。これは、Visual Basic5に重大な欠陥がありました。これは、彼らが図書館を採用するのに大いに役立ちました。言語の構文を学習した後、新しいライブラリを学習することは、SDKを十分に理解する上で重要です。車輪の再発明からあなたを救います。