web-dev-qa-db-ja.com

pythonのような高レベルの言語がほとんどすべてを実行できる場合、なぜ低レベルの言語を使用する必要があるのでしょうか?

私は知っていますpythonは、マイクロコントローラ、ドライバの作成などには適していませんが、それ以外に、Pythonを使用してすべてを実行できます。会社は、リアルタイムシステムの速度最適化に行き詰まりますが、その他は忘れます。 pythonプログラムをそれに適合させるために、ハードウェアを高速化するためにアップグレードできる要素の1つを提案します。会社がCで記述されたシステムを維持する必要があると考えられる場合、比較は次のようになります。たとえば、10人のプログラマがcで記述されたシステムを管理し、1人のプログラマがpythonで記述されたシステムを管理します。python pythonプログラム、プログラマーはハードウェアのアップグレードよりも安くはないので、低レベルの言語の方がコストがかかる傾向があると思います。それが私のポイントです(システムはpythonではなくcで記述されます

6
killown

主な理由は、ソフトウェアがすでに C(またはC++など)で記述されていたため、Pythonが正当な選択になる前でした。

100万行のCコードをPythonに書き直すか、Cコードを続行するかという問題であれば、12か月かけてPythonでコードを書き直すと、12になります。 新しい機能を追加していないであり、基本的には、12か月で正確に元の場所に戻ります。

言うまでもなく、Cバージョンで長年にわたって修正されていたすべてのコーナーケースのバグを見逃してしまったが、実際にはコードで呼び出されていないため、Python = devがそれを移植して「コードがこれを行う理由は?奇妙に思えます...私はこれを他の方法で行うだけです」と言い、12か月分の給与を失った6年前の顧客を実際に忘れています。 その特定のコード部分で回避されたRAIDコントローラーのこのあいまいなバグのためです。

それは基本的に人々が「Microsoftが.NETでWindowsやOfficeや(insert-product-here)を書き換えないのはなぜですか?最近、.NETはすべてのMicrosoft開発の元になる子だと思ったのですか?」

new製品の開発に関しては、Python(および他のすべての可能な選択肢)がより実行可能なオプションになります。しかし、 CまたはC++よりもPython(または何でも)を使用する利点、特に、新製品がすでにCまたはC++で記述されている多くの既存のコードとインターフェースしている場合。

24
Dean Harding

デバイスドライバーなどの「低レベルアプリケーション」を作成していない場合でも、低レベルの必要性codeはあらゆる種類の場所に現れる傾向があり、特に計算のパフォーマンス最適化のために-アプリの集中的な部分。これは、Cや他の静的な完全にコンパイルされた言語で記述されたアプリでも十分に一般的であり、動的型付けやマネージドポインターなどの本質的に遅い「高水準」言語機能を方程式に投入し始めた場合にのみ悪化します。

Pythonなど、すべての低レベルの詳細を抽象化する言語がある場合、このような問題を修正するために必要なレベルに下げることができません。そのため、コンパイルされた言語でコアコードを記述し、コアコード上で実行されるスクリプト言語で軽量のビジネスロジックを実装するパターンがよく見られるようになり、最近人気が高まっています。

9
Mason Wheeler

よく私はあなたの質問を「より良い選択肢が存在するのになぜC/C++で物事を書き続けるのか」と理解しました。良いハンマーがあるからといってすべてを書き直そうとは思いません。そして私は理論的にはあなたに同意します。 「高水準」言語でうまく機能する問題が非常に多く存在することが判明したため、CまたはASMで新しいものを作成する理由は何ですか。

James GoslingがJavaチームについて思い出した物語について考えます。元々Cで書かれたVMのコードの巨大なセクションを見ていたので、彼らはそれがより高速であると考えました。時間が経つにつれ、それを改善し、維持し、新機能を追加する必要がありました。チームはなぜそれをJavaに移行しないのか疑問に思い始めました。彼らはそうしました。 、および変更が容易です。記載されている例外を除いて、C/C++で新しい開発を行うべきではないと思いますが、業界が成長し続けているのはプラットフォームの変更です。コンピュータに関する新しい質問には、まだ答えていません70年代以降は科学ですが、私たちは驚くべき方向に成長し続けています。それは、10年ごとに新しいプラットフォームを作成し、そこにすべてを再実装しなければならないため、以前の言語から新しい言語に移行する機会が開かれているためです。私たちの産業の成功の秘密。

1980年から2010年までの簡単なまとめは次のとおりです:Unix C-> Windows C++-> Web Java/Javascript/Python/Ruby-> mobile Objective C/Java)。

7
chubbsondubs

「システム」が科学的なライブラリまたは囲碁のプログラムである場合、最高のパフォーマンスを必要とする可能性があるためです。 10倍速いハードウェアを購入した場合でも、低レベルの実装のパフォーマンスは向上します。

そして、私の考えでは、かなり哲学的な理由があります。私たちは、マシンの最低レベルと連絡を取り合う必要があります。 C言語のような基本的な楽器の知識を失うことは、地球の隅々までセメントで覆い、その上に完全に機能する「システム」を構築するようなものです。無知。

カーニハンとリッチーはそれについて非常に動揺します。

7
Lorenzo Stella

いくつかの観察:

  • コンピューティングの大きなトレンドはモバイルです。これは、いくつかの点で、マイクロコントローラーや組み込みシステムの開発からそう遠くありません。 PythonはまだiOS専用の言語ではありません。AndroidまたはWindows Phone 7。

  • デスクトップコンピューティングでは、ハードウェアの高速化はますます困難になっています。CPU速度は3GHzにとどまり、複数のコアのすべてのパワーを得るのは簡単ではありません。低レベル言語には、Pythonここよりも優れています。

  • 保守性については、Cに触れたことはないが、PythonおよびRubyおよびその他すべての新しい言語。上級開発者の大多数にとって、この比率はPythonを支持しません。

  • 数年前、すべてがJavaで作成され、同時に移植可能になりました。数年前はPerlでした。明らかに、最近の実際の勝者はC、C++、C#およびObjective-です。 C.

4
mouviciel