Gibt es Programmiersprachen mit einer integrierten Datenbank als erstklassige Sprachfunktion, anstatt eine Verbindung zu einer externen SQL-Datenbank (oder einer anderen Datenbank) herzustellen? Was wären die Nachteile und Vorteile einer solchen Funktion? Wie würde ein solches Feature aussehen und wie würde es die Art und Weise, wie wir programmieren, verändern?
programming-languages
language-design
language-features
database
VirtuosiMedia
quelle
quelle
Antworten:
Die einzige Sprache, an die ich denken kann, sind die alten xBase-Sprachen wie DBase, Clipper und FoxPro. Es gibt ein GNU-Projekt, das eine kostenlose und größtenteils kompatible Version namens Clip anbietet
Das war auch Pick Basic, das eine Programmiersprache direkt mit einer Datenbankplattform verband.
Das wurde gemacht. Es war eine evolutionäre Sackgasse, die den Zugriff einer Sprache auf Daten einschränkte.
quelle
Sprachen sind "klein" und Datenbanken "groß"; Wenn also beide kombiniert werden, handelt es sich nicht um eine Sprache mit der Datenbank als Feature, sondern um eine Datenbank mit der Sprache als Feature. Viele Datenbanken haben einige proprietäre Sprachen, z. B. PL / SQL, T-SQL.
quelle
Ich denke nicht unbedingt, dass die richtige Frage lautet: "Warum gibt es das nicht?" aber "warum sollte es sein?" Was bringt es, wenn Datenbanken ein Merkmal der Sprache sind? Denken Sie daran, dass sich die Sprache ganz unten im Programmierstapel befindet. Eine aufgeblähte Sprache wirkt sich auf alles aus . Daher müssen Sprachentwickler langsam neue Funktionen hinzufügen, insbesondere solche, die eine solche Investition erfordern.
quelle
fopen()
".Es gibt 3 Legacy-Systeme, die Ihren Anforderungen entsprechen:
Pick und MUMPS wurden Jahre vor dem ersten wissenschaftlichen Artikel über relationale Datenbanken entwickelt (etwa ein Jahrzehnt, bevor das erste kommerzielle SQL-basierte Datenbanksystem auf den Markt kam) ein erfolgreiches SQL-basiertes System war später). Möglicherweise werden sie noch verwendet (unser öffentliches Nahverkehrssystem hat Pick bis vor kurzem für das Reiseplanungssystem verwendet). Du willst weder mit Pick noch mit MUMPS etwas zu tun haben, und der beste Rat, den ich geben kann, ist "Schritt weg von der Tastatur mit deinen Händen in der Luft!" Wenn Sie tun alles , was mit ihnen zu tun haben, der Begriff „werden Sie es bereuen“ sollte in den Ohren klingeln werden.
Microsoft Access wird in IT-Kreisen stark verspottet und kritisiert, da es für Nicht-Entwickler recht einfach ist, eine wichtige Geschäftsanwendung aus Access zu machen und sie zu etwas mutieren zu lassen, ohne das das Unternehmen buchstäblich nicht leben kann. Es ist auch sehr wahrscheinlich, dass einige Entwickler ihre Anfänge mit der Entwicklung über MS Access hatten und im Laufe der Zeit lernten sie, wie man diese Probleme behebt (der erste Schritt besteht traditionell darin, Visual Basic zu lernen und die Access-App erst in VB umzuschreiben, dann in etwas "Besseres"). Es ist möglich, eine gut erzogene Access-App zu erstellen, die mit einer großen Menge an Daten verteilt ausgeführt wird - ich habe es gesehen -, aber es gibt einfachere Möglichkeiten, Dinge zu tun, und es erfordert viel weniger Geschick, eine gut zu machen (und zu warten) verhaltene App aus VB und SQL Server.
Seit SQL Server 2005 bietet Microsoft die Möglichkeit, CLR in gespeicherte Prozeduren und Funktionen einzufügen. Und wenn Sie es knifflig machen möchten, können Sie Datentypen erstellen, die Sie dann als Spalten in der Datenbank verwenden können. Ich denke, Oracle hatte etwas Ähnliches mit Java.
Abgesehen davon glaube ich nicht, dass Sie irgendetwas daran hindert, eine solche zu erstellen oder eine Hypothese über sie aufzustellen. Pick und MUMPS sind älter als die meisten Codierer und spiegeln eine sehr COBOLY Sichtweise auf die Welt wider.
Mein persönlicher Rat ist, die Dinge getrennt zu halten. Verwenden Sie eine Sprache, die die Daten, die Ihr Projekt benötigt, gut manipuliert (mit dem Vorbehalt, dass manchmal die "beste" Sprache eine ist, die Sie leicht finden können, wenn Programmierer den Code lesen / schreiben können). Verwenden Sie ein Datenbanksystem, das die für Ihr Projekt erforderlichen Daten gut verwaltet.
quelle
Das Hinzufügen einer Datenbank zu einer Programmiersprache richtet sich möglicherweise nur an eine sehr begrenzte Anzahl von Benutzern. Was ist, wenn sie einige Nicht-RDBMS-Funktionen verwenden möchten? Oder möchten Sie gar keine Datenbank verwenden? Der Compiler wird für solche Anwendungsfälle unnötigerweise aufgebläht.
quelle
Err.
Zunächst fragen Sie sich, warum das Framework, in dem die Sprache ausgeführt wird, keine Datenbank bietet. Eine Sprache ist einfach ein Mittel, um etwas auszudrücken, das Sie in festgelegten Grammatiken tun möchten. es bietet solche Dienstleistungen nicht wirklich an. :)
Das heißt, es gibt mehrere Gründe.
Das Erstellen eines effizienten Datenbankspeichersystems ist ein schwieriges Problem, wahrscheinlich in der Größenordnung von oder größer als das Erstellen von .NET Framework (zum Beispiel). Wenn ein Team versuchen würde, eine Datenbank in sein Framework aufzunehmen, wäre dies alles, woran sie gearbeitet haben.
Eine Datenbank, die geladen wird, sollte sich auf einem eigenen Computer befinden und nicht auf dem Code, der darauf zugreift.
ORMs bieten einen Großteil der Sicherheit und der Überprüfung der Kompilierungszeit, die der Vorteil einer solchen Aktion wäre, ohne dass das Framework tatsächlich versucht, eine Datenbank zu sein.
Ich denke jedoch, es wäre nicht schlecht, eine Art SQLite-Implementierung in das Framework aufzunehmen, gegen die Anwendungen mit geringerem Bedarf an Datenzugriff arbeiten könnten. Ich bin mir jedoch nicht sicher, ob es für nicht-triviale Anwendungen nützlich wäre.
quelle
Sie sind; Solche Sprachen werden 4GLs genannt . DataFlex ist mein Favorit, obwohl ich es nicht mehr benutze.
Vorsichtsmaßnahme: Ich habe die objektorientierte Version von DataFlex v3.0 mitentwickelt
quelle
Ich denke, Ihre eigentliche Frage lautet: "Warum gibt es keine Programmiersprachen, die mit Datenbankbibliotheken geliefert werden ? ".
Allzwecksprachen behandeln alle E / A-Vorgänge als ein und dasselbe, sei es das Schreiben oder Lesen auf / von einer Festplatte, einer Webcam, dem Netzwerk, dem Bildschirm, einem Speicherort - es sind alles E / A-Vorgänge, und das ist alles, was Programmiersprachen selbst betreffen mit.
Abgesehen vom Lesen / Schreiben auf den Heap und Stack, übernehmen die meisten Programmiersprachen nicht einmal die eigentliche Eingabe. Einige Sprachen bieten native Funktionen zum Ausdrücken von E / A-Operationen (z. B. der
print
Befehl in BASIC), die meisten Sprachen behandeln sie jedoch nur als normale Funktionsaufrufe (z. B.printf
in C) und lassen die Bibliotheken das eigentliche Schreiben übernehmen.Einige Sprachen wie C # bieten Sprachfunktionen zum Ausdrücken von Abfragen, aber selbst dann sind dies nur Ausdrücke in der grundlegendsten Datenstruktur von Listen (oder
IEnumerable
s, wie sie in .NET genannt werden), die von Bibliotheken in SQL-Operationen übersetzt werden. Die Sprache selbst arbeitet immer noch mit sehr abstrakten Vorstellungen von IO.Warum es nicht sinnvoll ist, ein Datenbankpaket in die Standardbibliothek einer Programmiersprache zu integrieren, liegt höchstwahrscheinlich daran, dass nichts anderes in einer Standardbibliothek normalerweise von der Datenbankfunktionalität abhängt.
quelle
Ja. Die Sprachen auf der AS / 400-Plattform unterstützen erstklassige native Datenbanken.
Dies liegt daran, dass die AS / 400-Plattform die Datenbank überall vollständig integriert hat und viele sehr schöne Funktionen bietet, wie die einfache Navigation durch ein Resultset, das die Werte auf dem Weg durch aktualisiert.
quelle
Kommt auf die Sprache und die Plattform an. Zum Beispiel ist es für mich ziemlich trivial, eine Vielzahl von Datenbanken zu verwenden, während ich mit C arbeite. Ich verwende einfach die entsprechende Bibliothek.
Eine Sprache muss ihre Standardimplementierung beibehalten. Dies bedeutet in der Regel, dass die erforderliche Mindestmenge bereitgestellt wird, damit eine Person erstellen kann, was sie erstellen möchte. Alles andere wird zu einer Bibliothek oder vielleicht zu einer Erweiterung der Sprache, die von anderen gepflegt wird.
Dies gilt zumindest für Sprachen, die Standards von Organisationen wie ISO folgen.
quelle
Wie bereits erwähnt, ist die Frage zum Teil falsch, wie einige der obigen Gegenbeispiele gezeigt haben.
Daher würde ich zunächst die Frage verfeinern, die lautet: "Warum ist ein DBMS normalerweise nicht als Funktion einer allgemeinen Programmiersprache auf hoher Ebene integriert?".
Dies ist der gleiche Grund, warum andere Softwareprodukte wie Betriebssysteme, Dateisysteme, Webserver, Caching-Layer usw. normalerweise nicht integriert sind. Allzwecksprachen arbeiten im Allgemeinen auf einer Abstraktionsebene, die über der solcher Produkte liegt. So ist es sinnvoll ist für einen Programmierer ein DBMS zu implementieren inEine Allzwecksprache, und das DBMS kann sogar Aspekte der übergeordneten Sprache oder eine DB-spezifische deklarative Sprache zur Verwendung durch DB-Programmierer verfügbar machen. Es gibt jedoch zu viele Entwurfsoptionen beim Schreiben eines DBMS, als dass es sinnvoll wäre, sie in einer universellen Programmiersprache zu reparieren. Wenn Sie diese Probleme beheben, haben Sie es mit einem Fall wie MUMPS zu tun, in dem die Verflechtung der beiden zu einer ganzen Branche führt, die in einem Henne-Ei-Problem steckt, das mit einem veralteten DBMS und einer veralteten Programmiersprache behaftet ist.
quelle
Wird verwendet, um in NonStop / SQL zu arbeiten, das vollständig in NonStop / C, NonStop / C ++, NonStop / Cobol, NonStop / Fortran und wahrscheinlich auch in andere Sprachen integriert ist, sowie in NonStop / Guardian, dem Betriebssystem, auf dem die Computer installiert sind lief.
Ich denke, das ist wahrscheinlich die engste Integration, die Sie bekommen können, wenn die Datenbank das Dateisystem des Betriebssystems ist. Es ist auch eine Sackgasse. Es gibt keine Möglichkeit, Komponenten, die Datenbank, das Betriebssystem, die Hardware und die darauf geschriebene Software zu entkoppeln. Sie können niemals separat verwendet und in eine andere Umgebung portiert werden.
Am nächsten an einem PC ist wahrscheinlich MS Access, gefolgt von Embarcadero / Borland Delphi.
Danach sehen Sie sich eingebettete Datenbanken in Ihrer Anwendung an, die möglicherweise nur für Einzelanwendungen geeignet sind, die hierarchische Daten benötigen, die nicht einfach in einer einfachen Konfigurationsdatei gespeichert werden können und / oder während der Ausführung der Anwendung regelmäßig aktualisiert werden müssen . Oder für Leute, die eine tragbare Version einer Anwendung haben möchten, die einen Schnappschuss eines Teils einer größeren Datenbank verwaltet und diesen möglicherweise mit der größeren Datenbank synchronisiert, wenn die Anwendung eine Verbindung herstellen kann (praktisch für einen Verkäufer, der oft außerhalb der Reichweite von ist) Das Unternehmensnetzwerk benötigt jedoch Verkaufsdaten für seine Kundengruppe oder einen Arzt im Außendienst, der Patientenakten möchte, sich jedoch nicht mit dem Krankenhausnetzwerk verbinden kann, da kein Netzwerkzugriff besteht, zu dem er gehen muss.
quelle
Als ehemaliger Visual Foxpro-Entwickler finde ich es merkwürdig, dass keine gängige Sprache das relationale Modell als Teil der Sprache definiert.
Es ist keine gute Idee, die vollständige Datenbank-Engine zu haben, aber stattdessen könnte die Sprache "SQL" SEHR nützlich sein.
In OO existiert die Impedanzfehlanpassung. Dies geschah, weil sich Objekte und Sets nicht mögen. Aber wenn ich in einer Sprache TABELLEN, FELDER, BEZIEHUNGEN, BESCHRÄNKUNGEN usw. definieren kann (ohne sie an einen bestimmten Speicher zu binden), ist das sehr mächtig. Außerdem ist das Erstellen eines ORM eine 1-zu-1-Zuordnung.
quelle