プログラミング言語の選択

プログラムを作成する初期段階では、何らかの形でプログラミング言語を選択することが問題になります。 誰かが個人的な好みからのみ言語を選択し、誰かがその言語のみを知っているという理由だけで、誰かがそれについて考えさえしません。 ただし、この開発段階は非常に重要です。これは、将来問題を引き起こす可能性がありますが、問題へのアプローチ方法によっては発生しない場合があるためです。



この記事は簡略化されており、100%正確なスキーム、仕事の原則は含まれていません。 すべての微妙な点ではなく、本質を理解するために、すべてが簡略化された概略的な方法で説明されています。 この記事は、複雑な文献をあまり整理したくない初心者や、プログラミングの道をたどるだけの人に適しています。



はじめに

現時点では、味と色が言うように、どの言語にも膨大な数の言語があります。 コンパイルされ解釈された言語があり、非常にシンプルで頭を悩ます言語があります。まじめでコミックな言語があります。 一般的に、それらの多くがあります。 そして、それぞれが特定の目的のために作成されました。 プログラムの作成中にプログラミング言語を選択することは非常に重要なポイントであり、プログラム作成の速度、テストの速度、他のプラットフォームに転送する能力、迅速に変更を加える能力、最終製品の速度などに大きく依存します。 理想的な言語は存在しないことを覚えておく価値があります。それらはすべてポジティブな面とネガティブな面があり、開発プロセスに何らかの影響を及ぼします。

では、プロジェクトの言語を選択するための基準は何ですか?



  1. 最終製品の速度。

    物理システムのモデリング、大量の経済データの計算、3次元グラフィックスの導出など、大量の数学的計算を伴うプログラムでは、実行速度が要求される場合があります。 コンパイルされた言語は、アセンブラー、C / C ++、fortranなどの目的に適しています。 なぜまさにこれらなのでしょうか? アセンブリ後、プログラムは(大体)余分なものを必要とせず、不必要な遅延なしに実行されるマシン命令を含みます。 このようなプログラムの動作スキームは次のとおりです。1)プログラムはすぐに実行されます。つまり、自給自足であり、追加のライブラリを必要としません。 2)プログラムは、そのコードに加えて、マシンコード(システムとプロジェクトの一部)を含むライブラリへの呼び出しを含むため、独自のコマンドの実行に加えて、プログラムはライブラリから関数を呼び出します。 3)ケース1および2に加えて、プログラムは低レベル言語で記述されたドライバーのレイヤーを介して動作し、デフォルトで迅速に動作します。 ご覧のように、回路では最大4ブロックが可能です: プログラム->ライブラリ->ドライバー->ハードウェア。
  2. 使用されるRAMの量。

    この要件は、組み込みシステム、モバイルプラットフォーム、マイクロコントローラーなどのプログラムを開発するときに表示されます。 これらの場合、特定の言語のプログラムが消費するメモリが少ないほど良いです。 これらの言語には、 アセンブラー、C / C ++、Objective-Cなどが含まれます。 言語のリストは、実行スキームの機能ブロックが少ないほど、使用されるコンピューターメモリが少ないため、段落1のリストに似ています。

    この要件が重要でない場合は、「真の高レベル言語」を使用できます。
  3. プログラム開発速度。

    この要件は、上司が「昨日までにプログラムが必要です!」または何らかの緊急性がある場合に発生します。 その場合、選択は、最も人道的な構文を持つ高レベル言語に当てはまります。 これは、たとえば、 Java、Flashなどです。 これらの言語では、豊富なサードパーティライブラリ、最も「人間化された」構文、および同様のものにより、開発時間を大幅に短縮できます。 これらの言語で書かれたプログラムの実行速度は低下し、時には非常に顕著です。 Java実行フローチャート:

    バイトコード形式のプログラム->仮想マシンアナライザー->システムライブラリ->ドライバー->ハードウェア。

    アナライザーは、この回路で最も低速なユニットです。命令の正確な定義に多くの時間を費やしつつ、プログラムのバイトコードをその場でマシンコードに変換する必要があります。 したがって、開発が高速になると、実行が遅くなることがよくあります。
  4. コンピューターまたは人向け

    そもそもプログラムは誰と連携しますか? 男と、またはコンピューターと? 前者の場合、プログラムにはデザインと使いやすさの要件を満たす強力なグラフィック部品が必要です。 グラフィックパーツの開発には、多くの場合、多くの時間が必要です。 かなり複雑です。 ここでは、グラフィックスの出力が多くの数学であるという事実に問題が生じます。つまり、実行速度が必要であり、開発が複雑であるため、高レベルの言語が必要です。 この場合、私の意見では、 C ++ / C#は 、それらの同時および高レベル、およびそれらに対するプログラムの実行速度に非常に適しています。 ただし、 GUIがそれほど複雑でなく、美しい場合は、 JavaおよびFlashを使用できます。JavaおよびFlashでは、C ++および特にCよりも美しいインターフェイスの作成がはるかに簡単です。ユーザーとの対話、その後の選択は高速言語の方向にあるべきです( ASM、C
  5. クロスプラットフォーム。

    クロスプラットフォーム-最小限の変更でさまざまなオペレーティングシステムのさまざまなプラットフォームでプログラムを実行する機能。 この領域では、次の言語を区別できます。Java、C#、Flash、さまざまなライブラリを備えたC ++およびその他の使用頻度の低い言語。

    Javaは、この言語のプログラムがJVM - Java仮想マシンがあるプラットフォームで動作するという条件で作成されました。 Javaプログラムはまったく変更する必要がありません。コンパイル後、Windows、Mac OS、Linuxなどで動作する.jarファイルが得られます。 状況はFlashの場合と同様であり、プラットフォームのリストだけがはるかに広範囲ではありません。 C ++では、事態はさらに難しくなります。 純粋なC ++では、クロスプラットフォームプログラムの作成は非常に難しく、コードには広範な冗長性があり、実行速度の尊厳が失われます。 Qtなどのクロスプラットフォームライブラリを使用すると、「すべてのプラットフォームで1つのコード」の原則を簡単に実現できますが、プラットフォームごとに(異なるコンパイラで)プログラムを個別にビルドする必要があります。

    このセクションでは、インタプリタ型のスクリプト言語を含めることもできます-その作業のために、システムに言語インタプリタが必要です。 これらの言語は、開発の点では非常に便利ですが、かなり遅いです。 ワークフローはJava / Flashのワークフローに似ており、アナライザーだけがさらに遅くなりました。ハーフマシンバイトコードは、人間のコードよりもオンザフライで分析する方がはるかに簡単です。 また、より多くのメモリ消費につながります。
  6. 変化率、テスト速度

    プロジェクトは急速に発展しており、絶えず変更が行われています。 次に、機能ブロックをすばやく書き直すことができる高レベル言語に選択を委ねる必要があります。 確認のために-アセンブラよりも同じC ++をデバッグする方がはるかに簡単だと思います。 さらに簡単なのはJavaです。 しかし、プログラミングスタイルとコンパイラを使用する開発者ほど、言語にはそれほどこだわらない多くの微妙な点があります。 それにもかかわらず、言語はこの問題に何らかの形で貢献しており、何らかの方法でプログラマーの作業を単純化/複雑化しています。


おわりに

プログラミング言語を選択するトピックは、非常に大きなサイズに膨らませることができ、この問題で起こり得る、不可能な微妙な点をすべてリストします。 また、機能に応じて、大きなプログラムを異なる言語で作成できることも考慮する価値があります。 たとえば、作業速度に重要な部分は低レベル言語で記述され、グラフィック部分は高レベルで低速です。 ほとんどすべての段落で、この記事は言語CおよびC ++に言及しています。 これらは非常に普遍的な言語であり、多数のライブラリを備えており、高速で他の多くの利点があります。 しかし、プラスに加えて、かなり大きなマイナスがあります-この汎用性のため、これらの言語は習得するのが非常に難しく、多くの微妙な点があります(C ++はCよりも多くのパラダイムを含んでいるため) Java言語も普遍的で、習得しやすいのですが、私の意見では、マイナスは非常に小さく、非常に低速です。 これにより、アプリケーションが大幅に制限されます。強力なハードウェアの必要性が高まっているため、大きなプログラムを作成しない方が良いでしょう。 スクリプト/インタプリタ言語は、「ワンタイムプログラム」の作成、一部のアクションの自動化、および他の言語との連携に適しています。 アセンブラー-一般的に言えば、同様の構文を持つ言語のグループですが、プラットフォームに応じてさまざまなパラメーターがあります(たとえば、x86アセンブラーはSPARCアセンブラーとまったく同じではありません)。 プログラミング言語の比較wikiに関する記事も、適切な言語の選択に役立ちます。



PS記事を補完したり、間違いを修正したりできる主に建設的なコメントを見たいと思います(ただし、サンドボックスからトピックを強調することができないため、コメントを選択できません)。 この記事は情報源に基づいたものではなく、独自の考察と独自の頭からのみ書かれています。



All Articles