すべての主要なプログラミング言語で開発できない種類のソフトウェアはありますか?


8

特定の種類のソフトウェアを作成するために主要なプログラミング言語の一部を絶対に使用できないかどうかを知りたいのですが。

主要なプログラミング言語とは、C ++、C#、Java、Ruby、Pythonなどを指します。「開発できない」とは、開発できない、またはパフォーマンスや実装の難しさなどにより、開発することが非現実的であることを意味します。

どのプログラミング言語でも問題を解決できるといつも思っていましたが、最近、一部の言語が一部のプロジェクトに適さないと考えています。

このようなアプリケーションの例を提供していただければ幸いです。ありがとう。


15
タスクに適さないこととタスクを実行できないことは、大きく異なる2つのことです。
コバール

@Covar、私はに変更taskしましたproject。混乱が少ないことを願っています。
mbillard

あなたはチューリング同値の概念を知っていますか?

1
関連する(特定のケースで一部の言語がどの程度適しているかという質問に):paulgraham.com/avg.html
Doc Brown

回答:


13

高級言語、提供していない、特にもの任意の直接メモリをいじるの手段は、(あなたのリストから:ジャワ、ルビー、Pythonの)プログラミングシステムには適しません。具体的な例を示すために、私はオペレーティングシステムまたは仮想マシン/インタープリター(ドライバーなどの一部)をPythonで実装しません。

逆は「不可能」に近いものではありませんが、たとえばユーティリティスクリプトや、たとえばC ++でのコンパイラなどの複雑で複雑なソフトウェアのプロトタイプを書くことは非常に面倒で、実際の問題に加えて、多くの小さな負担がかかります。


それはまだ可能です-例えば、Javaで書かれたオペレーティングシステムであるjnode.orgを参照してください。

1
@ThorbjørnRavnAndersenはい、そのような研究プロジェクトは時々ポップアップします。ただし、実際のプロジェクトとはかけ離れています。たとえば、Java(またはPython、またはその他のメモリ管理言語)でメモリ管理を実装しようとすると、その言語を厳しく制限し、慣用的なコードとはかけ離れたものにするか、多くのことを実装する必要があります。拡張機能(PyPyのGCフレームワークとJikes RVMのMMTKを参照)。

7

絶対に、それはすべて基盤となるハードウェアに依存します

たとえば、Jaquard織機をプログラムする場合、そのハードウェアにコンパイラが存在しないため、C ++を使用してそれを行うことはできません。ハードウェアがC ++が言語として機能するために必要とする要件の多くをサポートしていないため、コンパイラーは不可能だと私は思います。

これを拡張したものが、今日普及しているデジタルコンピューターとはまったく異なる方法で動作するアナログコンピューターの世界です。

ただし、十分な時間が与えられれば、フォンノイマンマシン用のコンパイラー/アセンブラー(入力->プロセッサー/ストレージ->出力)を思い付くと考えることができます。ただし、MU0などの一部のフォンノイマンマシンは、単純すぎて実行できません。興味のある読者のためのMU0の詳細


5
はい。ただし、ジャカード織機がチューリングマシンをシミュレートできれば、その傾向がある場合は、そのためのC ++コンパイラを作成できます。
whatsisname

2
@whatsisname、使用された時間に問題がない場合にのみ、チューリング等価性が興味深い。

チューリング等価性に加えて、I / Oの問題もあります。実行中に外部と通信するためのメカニズムはありますか?そうでない場合、言語はバットの脳のようなものです。少なくとも1つの入力メソッドと1つの出力メソッドがある場合は、少なくともスクリーンスクレイパーを作成できます。
rwong

6

はい、いくつかの言語ではできないこともあります。これに影響する主な基準のいくつかを以下に示します。

  • 低レベル:デバイスドライバーとハードウェア制御モジュールは、特定のメモリ位置とアセンブリ命令へのアクセスを必要とする場合があります。言語がこれを行う方法を提供しない場合、あなたはそれを単に使用することができません(非常に少数がカスタムポインターの場所とアセンブリを提供します)
  • パフォーマンス:場合によっては、時間がかかるだけではなく、継続的またはライブのデータフィードがある場合は、リアルタイムで処理するために十分な速度を選択するしかありません。
  • バイナリ:商用製品の場合、バイナリのみを配布する必要がある場合があります。多くのスクリプトのような言語にはバイナリ形式がありません。
  • メモリ:組み込みデバイスや小さな設置面積のデバイスの場合、メモリ(またはその他のリソース)の量は非常に限られています。VMまたは大規模な標準ライブラリを必要とする言語は、そのようなマシンをターゲットにすることはできません。
  • リアルタイム:特定のデバイスは、十分に高速であるだけでなく、特定のイベントに基づいて保証された時間枠内でイベントに応答する必要があります。言語はイベントをサポートし、処理時間を保証する必要があります(ガベージコレクターのようなものはこれを防止します)。
  • 数学:多くの計算には、数学関数と適切なデータ型の完全なライブラリが必要です。多くの場合、これには特定の実装の詳細が必要です。一部のスクリプト言語では、これを十分に指定していないか、主要な機能を提供できない場合があります。
  • 互換性:一部のハードウェアには、特定の言語用のコンパイラー/インタープリターがありません。

それらは私が考えることができるもののいくつかです。まだまだあると思います。しかし、重要な点は、あるはい言語の使用を防ぐことができますキー制限の要件があります。


1
これらの問題の多くは言語に固有のものではなく、現在の実装の問題です。
whatsisname

1
@whatsisname:ある程度までは異なりますが、異なる言語は異なる実装に適しています。さらに、一部の言語は他の言語ほど最適化することができません。古典的な例は、Fortran実装がrestrictC 以前の実装よりもはるかに積極的に最適化できるマトリックスルーチンです。
David Thornley、

ガベージコレクションはリアルタイムで行うことができます(されています)。
私の正しい意見だけ正しい

4

どのプログラミング言語でも問題を解決できるといつも思っていましたが、最近、一部の言語が一部のプロジェクトに適さないと考えています。

はい、それは正しいと常にされています。「無力」と「不適切」は大きく異なります。

あなたはスクリュードライバーのお尻の端でボードに釘を打つことができます。あなたはクローハンマーのエッジでネジを打ち込むことができます。しかし、ハンマーの方がはるかに適していて、釘を打ち込むための優れたツールであり、ねじ回しはねじ付きファスナーのための優れたツールです。

プログラミング言語はツールです。特定のツールは、特定のタスクに適しています。


1

私が非現実的だと考えることができる唯一のことは、JavaやC#のような高度に仮想化された言語での低レベルのデバイスドライバーの開発です-ハードウェアを操作しようとしている場合、最も素晴らしいVMシンプル)が邪魔になるでしょう。あなたが本当に望めば、それは可能だと私は確信していますが、それを機能させるには、多くのVMの調整が必要になります。

それ以外のことは、好きな言語で行うことができます。



1

組み込みシステムが思い浮かびます。たとえばルーターや、C#のような言語を使用したある種のロボット工学をプログラムすることは非現実的です。マイクロフレームワークを活用するnetduinのようなプロジェクトがあるので、私は自分の主張を反証したかもしれません。


1
ルーターやロボットにC#を使用することは必ずしも非現実的ではありません。C#を使用してプログラマーの時間を削減できる場合は、計算の必要性を増やす価値があります。それはあらゆる言語/環境に適用されます。
whatsisname

@whatsisname:もちろん、非常に深刻なルーターはVHDLでプログラムされています。:-)
Zan Lynx

0

いわゆる4GL言語は、それらがバインドされているプログラミング環境によって制約されます。たとえば、ABAPでGUIをプログラミングすることはできません。できることは、SAPクライアントの制限された環境でのGUIのようなものです(これはSAPインスタンスに接続してのみ実行できます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.