Ich versuche mir selbst KI mit neuronalen Netzen beizubringen. Kurz gesagt, ich wollte eine einfache Grafik erstellen, die anzeigt, was in meinem Programm mit ncurses passiert. Das Tutorial, das ich verwende, ist hier .
Ich hatte den Eindruck, dass D mit C kompatibel ist und ich theoretisch C-Funktionen relativ leicht nennen könnte.
Ich finde das nicht der Fall. Ich bin ein relativ unerfahrener Programmierer, also sind selbst die vereinfachenden Erklärungen ein wenig über meinem Kopf. Ich fand diese hier .
D ist so konzipiert, dass es bequem mit einem C-Compiler für das Zielsystem zusammenpasst. D sorgt dafür, dass es keine eigene VM gibt, indem es sich auf die C-Laufzeitbibliothek der Zielumgebung verlässt. Es wäre sinnlos zu versuchen, nach D zu portieren oder D-Wrapper für die große Anzahl verfügbarer C-APIs zu schreiben. Wie viel einfacher ist es, sie einfach direkt anzurufen.
Dies geschieht, indem die Datentypen, Layouts und Funktionsaufruf- / Rückkehrsequenzen des C-Compilers abgeglichen werden.
Das klingt wunderbar. Ein bisschen über meinem Kopf. Ich habe getestet und ein einfaches C-Programm funktioniert:
%Vor%schamlos kopiert und eingefügt von einer anderen Frage auf SO. Zumindest habe ich meine Hausaufgaben gemacht.
Ich habe im Grunde dasselbe aus einem einfachen D-Programm versucht. Ich habe diesen Fehler:
%Vor%Ich bin absolut überzeugt, dass ich etwas wirklich Dummes versuche.
Gibt es eine einfache Möglichkeit, ncurses in einem D-Programm zu verwenden?
Ich laufe auf Null Schlaf und Koffein, also sei bitte sanft! Selbst ein Link zu einer Website wäre sehr willkommen!
Ich habe wahrscheinlich nicht alles enthalten, was ich haben sollte, also AMA.
Und fühlen Sie sich frei, meine Intelligenz zu beleidigen.
Ok, ich habe das Gefühl, dass ich ein wenig spammte, aber ich hoffe, dass alle Informationen in Zukunft nützlich sein werden.
Ich habe einen Projektnamen namens ycurses gefunden. Ich entdeckte das Problem mit TLS ist spezifisch für D2. Ich habe die Dateien geändert, um mit D2 zu arbeiten. dmd, gdc, alles funktioniert. Ich habe endlich meine Ncurses mit D! Es dauerte nur ein langes Wochenende von Marathon-Codierung und Forschung.
Da der Code, den ich gefunden habe, alt ist und verlassen zu sein scheint, bin ich es hostet es jetzt auf github
Obwohl der Code angibt, dass es mit Tango funktionieren wird, wird es nicht funktionieren. Das werde ich wahrscheinlich diese Woche beheben.
Der Code enthält ein nettes kleines Tutorial sowie eine Anleitung zum Verknüpfen. Ihre Begrüßung. Ich fühle mich plötzlich sehr gut.
Ok, nach ungefähr acht Stunden, in denen ich durch diesen Mist gegraben bin, habe ich festgestellt, dass es tatsächlich möglich ist, C-Funktionen nativ aufzurufen.
Es wird jedoch auch gesagt: "Es wäre sinnlos zu versuchen, nach D zu portieren oder D-Wrapper für die Vielzahl der verfügbaren C-APIs zu schreiben. Wie viel einfacher ist es, sie einfach direkt aufzurufen."
Ja, ich werde BS auf dieser Seite anrufen. Sie müssen nach D portieren. Wird dies nicht als Portierung betrachtet, wenn Sie von einer Makro-fähigen Vorverarbeitungs-.h-Datei in eine .d-Datei wechseln? Es ist definitiv nicht trivial. Meiner Meinung nach lassen sie den harten Teil absichtlich aus und versuchen, ihn viel besser aussehen zu lassen, als er tatsächlich ist.
Falls jemand sich fragt: Wenn Sie ein CAPI haben, dass Sie Ihren D-Code anrufen möchten: Greifen Sie die Header-Datei und versuchen Sie, sie in etwas zu konvertieren, das D lesen kann. Dann kompilieren Sie einfach Ihren Code, importieren Sie Ihre neue .d-Datei und verknüpfen Sie sie mit dem, mit dem Sie interagieren. Wenn Sie es richtig gemacht haben, wird es funktionieren und Sie werden jetzt viele Speicherlecks haben.
Meiner Meinung nach, sparen Sie sich Kopfschmerzen, wenn Sie nicht die gesamte Bibliothek benötigen, und verbinden Sie einfach einen kleinen C-Wrapper mit Ihrem D-Code. Du greifst nur das, was du brauchst, und du hast den zusätzlichen Vorteil, dass du Sachen umbenennen kannst, wie du willst.
Es gibt ein paar Projekte, um den Übersetzungsprozess von Header-Dateien zu automatisieren. dtoh nur für Windows und bcd, das auf dsource gefunden wird. bcd enthält auch Bindungen für Flüche! Sie werden nur als Alpha aufgelistet, aber sie scheinen zu funktionieren. Ich versuche, ihre Datei curses.d aus meiner Datei main.d aufzurufen, und ich bekomme:
%Vor%Also liegt mein Problem in der Art und Weise, wie C Strings behandelt, und in der Art wie D Strings behandelt. Sie passen nicht zusammen und mein extrem begrenztes C-Wissen sagt mir nicht, wie ich es beheben soll. Glücklicherweise gibt es für die Anti-Dokumentation zum Aufruf von C-Funktionen ziemlich viele Informationen darüber, wie D-Typen in C-Typen übersetzt werden.
Ich hoffe aufrichtig, dass jemand das irgendwo auf der ganzen Linie hilfreich findet.
Ok, gibt es einen curses.d Port? Ich weiß nicht, wie ich es nennen soll. Es befindet sich hier .
Es erfordert immer noch, dass Sie mit der ncurses-Bibliothek verknüpfen, aber es funktioniert einwandfrei, wenn Sie mit dem d1-dmd-Compiler kompilieren. das scheint in meinem aktuellen Projekt irgendwie nutzlos zu sein, also muss ich entweder die Dateien nach d2 portieren (keine schlechte Idee, dieses Projekt wurde schon lange aufgegeben) oder sehen, ob es eine Möglichkeit gibt, d1 kompilierte Dateien zu verknüpfen , d2 kompilierte Dateien und C. Das scheint mir geradlinig zu sein, aber ich dachte auch, dass die Verbindung zu C einfach wäre.
Nach ein paar Tagen und größtenteils Trial-and-Error-Tests mit Dateien, die vor 7 Jahren aus dem Internet gezogen wurden, habe ich schließlich eine einfache Hölle mit der Curses-Bibliothek kompiliert.
Ich überlege sehr, die dcurses-Dateien auf D2 zu portieren und sie selbst zu hosten ... Ich wünschte nur, ich hätte mehr Erfahrung mit dieser Art von Dingen ...
Darf ich vorschlagen, sich Python anzuschauen? Ich weiß, dass es nicht D ist und eine völlig andere Sprache ist, aber wenn es dein Ziel ist, KI zu lernen und nicht auf D zu bestehen, dann ist Python sehr gut. Es wird Ihnen erlauben, das zu tun, was Sie normalerweise in 1/10 der Zeit in D tun. Ncurses in Python ist eine Leichtigkeit. Ich denke, es gab einen Typ, der ein Tetris-Spiel in etwa 55 Zeilen geschrieben hat (was Standard ist).