Gibt es einige Arten von Software, die nicht von allen gängigen Programmiersprachen entwickelt werden können?

8

Ich würde gerne wissen, ob einige der wichtigsten Programmiersprachen überhaupt nicht zum Erstellen bestimmter Softwaretypen verwendet werden können.

Mit Hauptprogrammiersprache meine ich C ++, C #, Java, Ruby, Python. Mit "kann nicht entwickelt werden" meine ich, kann nicht entwickelt werden oder es ist unrealistisch, dies aufgrund der Leistung, der Schwierigkeit der Implementierung usw. zu tun.

Ich habe immer gedacht, dass jede Programmiersprache verwendet werden kann, um jedes Problem zu lösen, aber in letzter Zeit habe ich gedacht, dass einige Sprachen für einige Projekte ungeeignet sind.

Wenn Sie Beispiele für solche Anwendungen bereitstellen können, wäre dies wünschenswert. Vielen Dank.

mbillard
quelle
15
Für eine Aufgabe ungeeignet zu sein und eine Aufgabe nicht ausführen zu können, sind zwei sehr unterschiedliche Dinge.
Covar
@Covar, ich habe gerade geändert taskzu project. Hoffe es ist weniger verwirrend.
Mbillard
Sie kennen das Konzept der Turing-Äquivalenz?
1
Verwandte (auf die Frage, wie gut einige Sprachen für bestimmte Fälle geeignet sind): paulgraham.com/avg.html
Doc Brown

Antworten:

13

Übergeordnete Sprachen, vor allem diejenigen , die nicht bieten keine Mittel mit Speichern direkt von Hantieren (aus der Liste: Java, Ruby, Python) sind nicht geeignet für die Systemprogrammierung. Um konkrete Beispiele zu nennen, würde ich in Python kein Betriebssystem (z. B. Treiber) oder eine virtuelle Maschine / einen virtuellen Interpreter implementieren.

Die Umkehrung ist bei weitem nicht so nah an "unmöglich", aber das Schreiben von z. B. Utility-Skripten oder eines Prototyps für komplexe und komplizierte Software wie einen Compiler in z. B. C ++ (doppelt so in C) kann so umständlich sein, dass es in Anbetracht dessen zu einem Motivationskiller wird Sie erhalten viele kleinere Belastungen auf dem eigentlichen Problem.


quelle
Dies ist weiterhin möglich - siehe z. B. jnode.org , ein in Java geschriebenes Betriebssystem.
1
@ ThorbjørnRavnAndersen Ja, solche Forschungsprojekte tauchen von Zeit zu Zeit auf. Sie sind jedoch weit entfernt von realen Projekten. Und wenn Sie versuchen, z. B. Speicherverwaltung in Java (oder Python oder einer anderen speicherverwalteten Sprache) zu implementieren, müssen Sie die Sprache stark einschränken und am Ende etwas erhalten, das weit entfernt von idiomatischem Code ist, oder viele implementieren Erweiterungen (vgl. das GC-Framework von PyPy und das MMTK von Jikes RVM).
7

Absolut, alles hängt von der zugrunde liegenden Hardware ab

Wenn ich beispielsweise den Jaquard-Webstuhl programmieren würde , könnte ich C ++ nicht dazu verwenden, da für diese Hardware kein Compiler vorhanden ist. Ich würde davon ausgehen, dass kein Compiler möglich wäre, da die Hardware viele der Anforderungen, die C ++ benötigt, um als Sprache zu arbeiten, nicht unterstützt.

Eine Erweiterung davon betrifft die Welt der analogen Computer, die ganz anders arbeiten als die heute vorherrschenden digitalen.

Sie können jedoch davon ausgehen, dass Sie bei genügend Zeit einen Compiler / Assembler für jede von Neumann-Maschine (Eingabe-> Prozessor / Speicher-> Ausgabe) entwickeln können. Einige von Neumann-Maschinen wie die MU0 sind jedoch einfach zu einfach, um sie ausführen zu können. Weitere Infos zu MU0 für den interessierten Leser .

Gary Rowe
quelle
5
Ja, aber wenn der Jaquard-Webstuhl eine Turing-Maschine simulieren könnte, könnten Sie einen C ++ - Compiler dafür schreiben, wenn Sie dazu geneigt wären.
Whatsisname
2
@whatsisname, Turing-Äquivalenz ist nur dann interessant, wenn die verwendete Zeit kein Problem darstellt.
Neben der Turing-Äquivalenz gibt es auch das Problem der E / A: Verfügt sie über einen Mechanismus für die Kommunikation mit der Außenwelt während der Ausführung? Wenn nicht, ist die Sprache wie ein Gehirn in einem Bottich . Wenn es mindestens eine Eingabe- und eine Ausgabemethode gibt, können Sie mindestens einen Bildschirmschaber dafür erstellen.
Rwong
6

Ja, es gibt bestimmte Dinge, die mit verschiedenen Sprachen nicht möglich sind. Hier sind einige der wichtigsten Kriterien, die dies beeinflussen:

  • Low-Level : Gerätetreiber und Hardwaresteuerungsmodule erfordern möglicherweise Zugriff auf bestimmte Speicherorte und Montageanweisungen. Wenn die Sprache dies nicht bietet, können Sie sie einfach nicht verwenden (nur wenige bieten benutzerdefinierte Zeigerpositionen und Assemblys an).
  • Leistung : In einigen Fällen dauert es nicht nur lange. Wenn Sie über einen kontinuierlichen oder Live-Daten-Feed verfügen, haben Sie keine andere Wahl, als schnell genug zu sein, um ihn in Echtzeit zu verarbeiten.
  • Binär : Für die kommerzielle Produktion müssen Sie möglicherweise nur Binärdateien verteilen. Viele skriptähnliche Sprachen haben keine Binärformen.
  • Speicher : Für eingebettete Geräte mit geringem Platzbedarf steht nur sehr wenig Speicher (oder andere Ressourcen) zur Verfügung. Sprachen, die VMs oder große Standardbibliotheken benötigen, können nicht auf einen solchen Computer ausgerichtet werden.
  • Echtzeit : Abgesehen davon, dass bestimmte Geräte nur schnell genug sind, müssen sie auf Ereignisse innerhalb eines garantierten Zeitrahmens reagieren, der auf einem bestimmten Ereignis basiert. Eine Sprache müsste sowohl das Ereignis unterstützen als auch die Verarbeitungszeit garantieren (so etwas wie ein Garbage Collector würde dies verhindern).
  • Mathematik : Viele Berechnungen erfordern eine vollständige Bibliothek mit mathematischen Funktionen und geeigneten Datentypen. Dies erfordert häufig spezifische Implementierungsdetails. Einige Skriptsprachen geben dies möglicherweise nicht gut genug an oder bieten keine Schlüsselfunktionen.
  • Kompatibilität : Einige Hardware verfügt einfach nicht über Compiler / Interpreter für bestimmte Sprachen.

Das sind einige Dinge, an die ich denken könnte. Ich bin sicher, es gibt noch mehr. Aber der wichtige Punkt ist , dass ja gibt es Schlüsselbegrenzenden Anforderungen, die die Verwendung einer Sprache verhindern.

edA-qa mort-ora-y
quelle
1
Viele dieser Probleme sind nicht der Sprache eigen, sondern Probleme mit unseren aktuellen Implementierungen.
Whatsisname
1
@whatsisname: Bis zu einem gewissen Grad eignen sich jedoch unterschiedliche Sprachen für unterschiedliche Implementierungen. Darüber hinaus können einige Sprachen nicht so stark optimiert werden wie andere. Das klassische Beispiel sind Matrixroutinen, bei denen Fortran-Implementierungen viel aggressiver optimiert werden könnten als Pre- restrictC-Implementierungen.
David Thornley
Die Speicherbereinigung kann (und wurde) in Echtzeit erfolgen.
NUR MEINE korrekte MEINUNG
4

Ich habe immer gedacht, dass jede Programmiersprache verwendet werden kann, um jedes Problem zu lösen, aber in letzter Zeit habe ich gedacht, dass einige Sprachen für einige Projekte ungeeignet sind.

Ja, das ist richtig und war es schon immer. "Unfähigkeit" und "Ungeeignet" sind sehr unterschiedlich.

Sie könnten mit dem Kolben eines Schraubenziehers einen Nagel in ein Brett schlagen. Sie könnten eine Schraube mit der Kante eines Klauenhammers einschlagen. Der Hammer ist jedoch weitaus besser geeignet und ein besseres Werkzeug zum Einschlagen von Nägeln, und ein Schraubendreher ist ein besseres Werkzeug für Gewindebefestigungen.

Programmiersprachen sind Werkzeuge. Bestimmte Tools sind bei bestimmten Aufgaben besser.

Whatsisname
quelle
1

Das einzige, was ich als unrealistisch betrachten kann, ist die Entwicklung von Gerätetreibern auf niedriger Ebene in einer stark virtualisierten Sprache wie Java oder C # - wenn Sie versuchen, Hardware zu manipulieren, die beeindruckendste VM (die so viele Dinge so schön und schön macht einfach) wird dir in die Quere kommen. Ich bin sicher, es könnte getan werden, wenn Sie WIRKLICH wollten, aber es würde eine Menge VM-Anpassungen erfordern, damit es funktioniert.

Alles andere kann so ziemlich in jeder Sprache gemacht werden, die Sie mögen.

Michael Kohne
quelle
1

Eingebettetes System fällt mir ein. Es ist unrealistisch, beispielsweise einen Router oder eine Art Robotik mit einer Sprache wie C # zu programmieren. Obwohl es Projekte wie Netduin gibt, die das Mikro-Framework nutzen, habe ich möglicherweise meinen eigenen Standpunkt widerlegt.

aceinthehole
quelle
1
Es ist nicht unbedingt unrealistisch, C # für einen Router oder eine Robotik zu verwenden. Wenn Sie die Programmierzeit mit C # verkürzen können, kann sich die Erhöhung des Rechenbedarfs lohnen. Das gilt für jede Sprache / Umgebung.
Whatsisname
@whatsisname: Natürlich sind sehr ernsthafte Router in VHDL programmiert. :-)
Zan Lynx
0

Sogenannte 4GL-Sprachen werden durch die Programmierumgebung eingeschränkt, an die sie gebunden sind. Sie konnten beispielsweise keine GUI mit ABAP programmieren. Alles, was man tun kann, ist wie eine GUI in der eingeschränkten Umgebung eines SAP-Clients (und dies kann nur in Verbindung mit einer SAP-Instanz ausgeführt werden).

Ingo
quelle