Cross Language Standard Libraries?

8

Wir alle wissen also, dass das Erlernen einer Programmiersprache nur ein kleiner Teil davon ist, auf einer Plattform produktiv zu werden. Es dauert viel länger, die Java-Bibliotheken zu lernen, als es benötigt, um die Java-Programmiersprache zu lernen, genauso wie C #, JavaScript, Python, Ruby ... usw.

Als Programmierer können wir leicht die Beobachtung machen, dass eine for-Schleife oder ein Array eine for-Schleife oder ein Array in irgendeiner Programmiersprache ist. Sobald Sie das Konzept lernen, müssen Sie es nicht neu lernen, aber die Syntax ist anders, aber es wird kein Aufwand betrieben, um das Konzept neu zu lernen. Offensichtlich ist dies bei Standardbibliotheken nicht der Fall, was bedeutet, dass wir neu lernen müssen, wie gängige Aufgaben wie Dateimanipulation, das Sprechen mit einer Datenbank, Netzwerkarbeit auf jeder Plattform, die wir verwenden, ineffizient und schmerzhaft ist ein besserer Weg da draußen.

Das W3C-DOM ist ein Beispiel für eine sprachübergreifende Bibliothek, die dieselben Funktionsnamen und dieselbe Semantik haben soll, unabhängig von der Programmiersprache. W3C DOM ist schwer zu benutzen, aber wenn man es einmal in einer Sprache / Plattform gelernt hat, ist es in anderen gleich.

Gibt es irgendwo für die gängigsten Aufgaben, die ein Entwickler für 2011 interessieren würde, eine Reihe von Sprachbibliotheken, die für alle Sprachen definiert sind.

  1. Datei-IO-Vorgänge
  2. Vernetzung
  3. Prozessverwaltung
  4. Datenbankzugriff
  5. Sammlungen und Datenstrukturen
  6. Kryptographie, digitale Signaturen, kryptografische Hashes
  7. Alles andere, was nützlich ist und keinen UI-Code enthält

Klarstellung: Ich bin nicht an APIs interessiert, die an die aktuelle Plattform wie .NET oder die JVM gebunden sind, da diese an ein einzelnes Unternehmen gebunden sind und in vielen Fällen zeigen sie ihr Alter und würden sie heute neu gestaltet werden Sei viel sauberer / besser. Auch in erster Linie ein Java-Entwickler, der Oracle über Java sue betrachten Google war eine wahre Horror-Show. Ich möchte wirklich nicht, dass die Stunden, die ich in die Beherrschung einer Plattform investiert, von einer einzigen Entität gesteuert werden, sondern vielmehr eine Art Open-Source-Projekt, bei dem die besten Designs gewinnen.

Klarstellung: Ich suche nach APIs, die in vielen verschiedenen Sprachen gleich sind und nicht an eine einzige Sprache gebunden sind. Betrachten Sie zum Beispiel den Inhalt einer Textdatei. Ich muss die Datei öffnen, den Inhalt lesen, ... usw. Ich würde nach einer API suchen, bei der die Funktion genau denselben Namen in allen verschiedenen Sprachen, denselben Parametern, derselben Reihenfolge und denselben Rückgabedaten hat. gleiche Fehlerbehandlung Semantik. Ich kenne verschiedene Programmierparadigmen, so dass ich mit einer OO-Version der API, einer funktionalen Version usw. einverstanden bin.

    
ams 04.10.2011, 22:39
quelle

6 Antworten

4

Eine interessante Frage ... Ich denke, dass Bibliotheken, die spezialisiertere Funktionen mit mehrfachen Sprachbindungen ausführen, größere Möglichkeiten haben (und Sie beginnen, dies mit verschiedenen Webdiensten zu sehen). Leider sind die angebotenen Abstraktionen eher simpel und fühlen sich oft "fremd" trotz der Bemühungen der Entwickler, die Sprachbindungen so natürlich wie möglich zu gestalten. Vielleicht ist es eine bessere Art, das zu sagen, dass sie dazu neigen, unidiomatisch zu sein. Die POSIX-APIs auf niedriger Ebene stellen beispielsweise eine Art kleinsten gemeinsamen Nenner für eine Standardbibliothek dar, aber die Herausforderung besteht darin, dass verschiedene Sprachen diese grundlegenden Abstraktionen in ihrer Suche nach "natürlich" sehr unterschiedlich angehen können. für diese Sprache. Ein anderes Problem (wie bereits in früheren Beiträgen erwähnt) besteht darin, dass Standardbibliotheken von Natur aus zu vereinbaren sind, was für sich genommen eine große Herausforderung darstellen kann. Leider führt dieser Prozess oft zu APIs, die wirklich niemanden zufriedenstellen. (Zum Beispiel ... müssen WIR wirklich 36-Bit-Wörter oder den koptischen Kalender unterstützen? Hängt von Ihrem Standpunkt ab. Sollte die API objektorientiert, funktional oder etwas anderes wie Streams sein? Kommt auch auf Ihre Sichtweise an darauf hinweisen, dass dies vielleicht ein komplizierteres Thema ist, als man denken könnte.

Es sollte angemerkt werden, dass Anstrengungen unternommen wurden, bessere (zumindest konsistentere) APIs für Standardsachen bereitzustellen. Ein Beispiel ist Plan9, ein Betriebssystem, in dem ALLES eine Datei ist. Insgesamt wurden die Bewertungen gemischt.

    
martin 22.10.2012 17:02
quelle
2

Das ist eine gute Frage. Eine solche Bibliothek ist für jeden Entwickler ein gutes Kapital, aber kann nicht Standard sein , da Standardbibliotheken sehr konservativ sind und es Zeit braucht, bis sich die ideale API stabilisiert hat. Es gibt auch ein Problem mit der Abwärtskompatibilität, dass, sobald der Code in die Standardbibliothek eingegeben wurde, er sich nicht ändern kann. In der Python-Community gibt es einen Witz, dass gute Module in die Standard-Bibliothek gelangen, um zu sterben.

Diese Bibliothek kann nicht als Bibliothek, sondern als Community / Rezeptseite beginnen, die sich auf den Kollaborationsprozess konzentriert, weil es für einen Mann nicht einfach ist, alle anderen davon zu überzeugen, dass er ausgewählt wurde API ist das Beste. Du musst wirklich alle überzeugen .

Ich kann nicht für andere Sprachen sagen, aber in der Python-Gemeinschaft gibt es Bedenken, die stdlib aus dem Kern zu entfernen, damit sie sich schneller entwickeln kann. Es gibt einen Vorschlag mit der Bezeichnung PEP 413 , aber es ist nicht genug. Der Plan könnte sein:

  1. Definieren Sie Namespaces (Module in Python)
  2. Sammeln Sie Statistiken für die tatsächliche Funktionsnutzung (statische Analyse + öffentliche Repository-Spider)
  3. Holen Sie das Beste aus allen Sprachen heraus
  4. Analysieren, debattieren und abstimmen (oder einfach verwenden, was Sie wollen) - dies erfordert eine User Story Datenbank, die gängige Probleme aufgreift, Wege zu deren Lösung und Zusammenfassungen enthält (Python Kochbuch in CHM war einmal ein sehr schönes Beispiel für solche Zusammenfassungen). Es gibt noch eine weitere wichtige Funktion der Datenbank - widersprüchliche Anwendungsfälle erkennen .
  5. Akzeptieren Sie die Lizenz (oder akzeptieren Sie einfach, dass die Public Domain die einzige kopier / kopierfähige Methode ist)

Also, die Antwort ist - es gibt keine solche sprachübergreifende Bibliothek. Weil die Kommunikation zwischen den Parteien nicht ausreicht. Weil es dafür keine intuitive Plattform gibt.

    
anatoly techtonik 08.03.2012 07:41
quelle
1

Ja, es gibt ein paar. Windows, MacOS X, Linux ... :)

Im Ernst: Die .NET- und Java-Laufzeiten unterstützen viele Sprachen. Wenn Sie also innerhalb der von ihnen unterstützten Sprachen bleiben, können Sie Ihre Bibliothekskenntnisse behalten.

    
µBio 04.10.2011 22:45
quelle
1

Folgende Dinge kommen mir in den Sinn:

  • Microsoft .NET - eher eng an das Microsoft-Ökosystem gebunden (aber Mono im Gedächtnis behalten), hat Bindungen zu vielen Sprachen, Design ist etwas Java-inspiriert. Hat die meisten Dinge, die Sie aufgelistet haben.

  • Qt - wurzelt sehr fest in C ++, hat Bindungen zu anderen Sprachen, nicht so schwer wie .NET, fühlt sich aber auf * nix und MacOS nicht so fremd an. Datenbankunterstützung ist sehr primitiv, Kryptounterstützung ist nicht existent.

Seva Alekseyev 04.10.2011 22:46
quelle
1

Ich denke, der offensichtliche Anwendungsfall besteht darin, den Übergang von Entwicklern zu neuen Sprachen und die Portierung von Code zu erleichtern.

OpenGL -Code kann in einigen Sprachen ziemlich ähnlich aussehen, aber nicht in allen Sprachen. Das DOM ist ein hervorragendes Beispiel. Die sehr minimale JSON Analyse / String-Schnittstelle ist möglicherweise die am weitesten verbreitete und unzweideutigste Bibliothek!

Aber was Sie wirklich wollen, eine vollständige standardmäßige sprachübergreifende API, habe ich nicht gesehen.

Wie Martin richtig bemerkt, gibt es Probleme mit dem Umfang eines solchen Unterfangens. Auf den kleinsten gemeinsamen Nenner zu achten bedeutet, Sprachfunktionen zu verlieren, die in all der Sprachen unseres Wunschspektrums nicht verfügbar sind. Das könnte bedeuten

  • keine Funktionen erster Ordnung
  • keine Generika / Template / Polymorphie
  • die Notwendigkeit, () ungenutzten Speicher freizugeben
  • statische Typisierung, erzwungener Weitergabe durch Verweis
  • Bedienbarkeit ohne Verschlüsse
  • verschachtelte Ereignislistener
  • und die Fähigkeit, sowohl in Multi-Threading- als auch in Single-Thread-Umgebungen zu funktionieren (Return vs Callback).

Während es frustrierend sein könnte, genau die Funktionen zu verlieren, für die wir eine Sprache gewählt haben, könnte ein solches Projekt dennoch Vorteile bringen. Ein engerer Bereich wird wahrscheinlich bessere Ergebnisse liefern.

Die Haxe Sprache könnte für jemanden interessant sein, der sich für ein solches Projekt interessiert. Es hat bereits eine minimale Standardbibliothek (und Stax ) und kann in eine Reihe von verschiedenen Sprachen exportieren, einschließlich C ++, Flash, PHP , Neko, Javascript und in jüngerer Zeit C # und Java. (Ich weiß nicht, ob die Endergebnisse in allen Sprachen gleich aussehen.)

Während CommonJS und Narwhal sprachlich sind, Spezifisch (Javascript), können sie als Versuche bemerkenswert sein, eine Standardbibliothekschnittstelle herzustellen.

Die Verarbeitung wurde in einige Sprachen portiert, so dass dort einige nützliche Bibliotheken vorhanden sein können.

Es muss eine große Anzahl spezifischer Beispiele geben, wie JSON. Zum Beispiel ist die Fuse virtuelle Dateisystemschnittstelle von C, Python, Java und vielen zugänglich mehr Sprachen. Und ich wäre überrascht, wenn jemand nicht versucht hätte, eine Implementierung der 2d Canvas API für Sprachen als Javascript zu erstellen.

Apache haben eine Menge gleichartiger Software in verschiedenen Sprachen veröffentlicht und möglicherweise ähnlich aussehende Bibliotheken erstellt.

>     
joeytwiddle 12.11.2012 05:40
quelle
1

Es gibt eine Bibliothek, die genau das tut, was Sie sagen. Es heißt TurboCommons und du findest es auf GitHub:

Ссылка

    
Jaume Mussons Abad 12.10.2016 18:03
quelle