\r\n\r\n

なぜ、あるプログラミング言語は他の言語より速いのですか?

プログラミング言語はたくさんあります。どれも癖があり、用途によって使い分けています。しかし、あるプログラミング言語が他の言語より速いのはなぜなのか...。

現在、多くのプログラミング言語が存在し、それぞれに特徴がある。設計上の選択やユースケースの違いにより、速いものや遅いものがあります。もちろん、この速さ(あるいは速さのなさ)には、通常、代償が伴います。簡単に言えば、このような違いがあるからこそ、性能のばらつきがあるのです。

プログラミング言語は何ですか?

プログラミング言語の見た目がどうであれ、「コンピュータに何かをさせる」ということに変わりはないのです。すべてのコード行は、最終的に一連のファジー数(機械語コードとも呼ばれる)に変換される。プログラミング言語(数字を読みやすい言葉に変換するアセンブリ言語も含む)は、ソフトウェアを作りやすくするために作られたものであることは言うまでもない。

これらの言語は、プログラマーのために行う抽象化のレベルによって分類することができる。基本的には、言語自体が処理しなければならないことと、より低いレベルで手作業で処理する必要があることを、どれだけ多く処理するかということです。このため、高級言語は覚えることが少なく、プログラミングがしやすい傾向がある。

メモリ管理はその一例です。抽象度の低い言語では、プログラマーが手元のタスクに必要なRAMの容量を手動で発言し、タスクが完了したらそれを解放しなければならないものもあります。そうしないと、あるいは考えてもみなかったようなことが起こると、メモリの使用量が増えてしまうのです。Javaなどの高水準言語はこれを自動的に行う。

自動化コスト

とはいえ、高級言語を使うことには、スピードというデメリットがあることも確かだ。プログラマーがコントロールすればするほど、プログラムの効率が悪くなることもある。

例えば、自動メモリ管理(しばしばゴミ収集と呼ばれる)を実装した言語は、この機能を実装していない言語よりも遅くなる場合があります。これは、プログラムが自身をトラバースし、特定の間隔でメモリをクリアするのに時間がかかるためです。

Edit: Your mileage may vary

一般に、CやC++で書かれたプログラムは高速に動作すると言われています。ほとんどのオペレーティングシステムは、さらに低レベルのアセンブリコードと一緒に、このコードで書かれています。主な要因の一つは、(インタープリタではなく)コンパイルされていることに由来する。

つまり、プログラムのソースコードは、実行する前にまず下位のレベルであるマシンコードに翻訳されるのである。生成された製品はバイナリ(DLLファイルなど)と呼ばれ、関連するファイルとリンクして動作させるため、いわゆる実行ファイルが作成されます。

しかし、このようなプログラムを実際にコンパイルするのに時間がかかるというデメリットがあります。mozillafirefoxのような大きなブラウザでは、30分程度かかることもあります。幸いなことに、最近のほとんどのソフトは、このプロセスをあらかじめ完了させているので、インストールや使用は非常に簡単です。

最終的にコンピュータが直接理解できる言語で書かれているため、かなり高速に処理できることが多い。これを別のステップを経たインタプリタ型言語と比較する。とはいえ、コンパイルされた言語がすべて同じというわけではありません。

コンパイラの効率

どんな種類のコードでも、コンピュータが理解できるもの(機械語コード)に変換するためには、コンパイラと呼ばれる特別なプログラムを通す必要がある。1つの言語には複数のコンパイラが存在することがあります。例えば、GCC(GNU Compiler Collection)とClangはどちらもC言語で書かれたプログラムをコンパイルするために使用することができます。

コンパイラはプログラムを機械語に翻訳するのが仕事なので、その翻訳の効果はある程度速度に影響する。例えば、コンパイラの設定によって、同じソースコードでも微妙に結果が異なることがあります。

これは、コンパイルされた言語によって、実行速度が速くなったり遅くなったりすることも意味します。一般にCやC++は、コンパイラの開発・改良が長年にわたって行われてきたため、非常に高速とされています。他の言語は、必ずしも成熟しているとは限りません。

説明文:もう一歩

前述したように、インタプリタ型言語はプリコンパイルされていない。その代わりに、通常はインタープリタと呼ばれる別のプログラムによって、実行時に翻訳されます。例えば、JavaのプログラムはJVM(Java Virtual Machine)を通して実行されます。

これらの言語は事前のコンパイルを必要としないため、通常、この言語で書かれたプログラムは、**やテストが容易です。しかし、その結果、ソフトウェア自体の動作が著しく遅くなることがあります。インタープリターはプログラムのソースコードを一行ずつ実行するため、速度が低下する。これに加えて、インタプリタ自体の起動に少し時間がかかる。

バイトコード:小さな妥協点

インタプリタ型言語の多くは、その低速な性質から、実際には何らかの形でコンパイルを行い、高速化を図っています。これらのプログラムは、実行する前にインタプリタが使いやすいバイトコードという言語に翻訳される。例えば、JavaとPythonは実行前にこれを行い、それぞれクラスファイルとPYCファイルを作成します。

基本的には、開発のしやすさとスピードの妥協点です。単にコードを解釈するよりも高速で、完全にコンパイルされたコードよりも簡単にセットアップすることができます。バイトコードは、機械語コードにコンパイルされたプログラムよりも移植性が高いという利点もあります。CPUアーキテクチャに対応したインタプリタが存在する場合は、それが実行されます。

また、一部の言語ではJIT(ジャストインタイム)コンパイルという方法もある。基本的にはバイトコードを受け取り、マシンコードにコンパイルします。その名の通り、プログラムの実行中に発生します。その目的は実行速度を上げることですが、その代償として、コンパイルに時間がかかる部分があるため、最初の起動が遅くなります。

ご心配なく

とはいえ、これらの違いは、特にコンピュータが高速化している現在では、ほとんどの人にとってあまり問題にはならないでしょう。確かに速いプログラミング言語もありますが、本当に重要なのは、それが物事を成し遂げることです。

もちろん、プログラミングの経験がある人なら、コードからパフォーマンスを引き出そうとするのは素晴らしいことです。しかし、これから始めるのであれば、まず心配なのは動き方を覚えることです。いくら言語が速くても遅くても、最初は何も書かないのでは意味がない。

また、道具をどう使いこなすかという問題もある。例えば、アセンブリ言語は非常に低レベルであるため、オペレーティングシステムを書くのに最適な言語です。しかし、普通のデスクトップアプリケーションではやりすぎです。また、TypeScriptなど、Web用に設計された言語や、バグの多いコードを削減するための言語もあります。

プログラミング言語を学習する際、どのような要素を考慮しますか?

  • 2021-03-13 15:07 に公開
  • 閲覧 ( 13 )
  • 分類:IT

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ