Ich habe gehört, dass C nicht so sicher ist, und ich denke, dass ich das als Vorteil für mein aktuelles Projekt nutzen könnte.
Ich entwerfe einen Interpreter mit dem Ziel, dass die VM extrem schnell ist, viel schneller als zum Beispiel Ruby und Python.
Jetzt weiß ich, dass vorzeitige Optimierung "die Wurzel allen Übels" ist, aber das ist eher ein konzeptionelles Problem.
Wäre Folgendes möglich?
%Vor%Ich würde die tatsächlichen Werte an anderer Stelle speichern, z. B. ein separates Array für Strings und Ganzzahlen, Wert * würde dann auf ein Element in dieser Tabelle zeigen.
Ich würde immer den Typ des Werts über die Typvariable kennen, so dass es keine Probleme mit Typfehlern geben würde.
Jetzt:
Ist das überhaupt möglich in Bezug auf Syntax und Typisierung?
Wenn Sie den Bereich der Typen kennen, die Sie unterstützen möchten, könnte dies leicht mit union
durchgeführt werden, um Umwandlungen überall zu vermeiden:
Sicher ist es. Sie benötigen nur einen großen Schalter auf type
, um den Typ eines bestimmten Werts zu unterscheiden. Der beste Typ, der für Ihr Feld type
verwendet wird, ist wahrscheinlich eine Enum mit einer Konstante für jeden Typ Ihrer Sprache, zB:
Denken Sie auch daran, dass Sie den void*
Zeiger auf einen bestimmten Typ anwenden müssen, bevor Sie ihn verwenden.
Es gibt verschiedene Grade der Typsicherheit, aber da C eine stark typisierte Sprache ist, ist es tatsächlich am sichereren Ende des Spektrums. Das wird dich nicht davon abhalten, das zu tun, was du vorschlägst. Das von Ihnen angegebene Beispiel ist syntaktisch gültig und könnte zur Implementierung des von Ihnen beschriebenen Systems verwendet werden. Denken Sie jedoch daran, dass es sehr unwahrscheinlich ist, dass Sie die Leistung bestehender Sprachen wie Ruby und Java übertreffen, wenn Sie das Rad neu erfinden, indem Sie eine eigene VM erstellen.
Es ist okay, diesen Code zu schreiben, aber vielleicht müssen Sie Ihre "Sprache" (ok, Interpreter :)) vor anderen Dingen entwerfen.
Übrigens, ich empfehle Ihnen, die objektorientierte Programmierung im C-Buch zu lesen. Wenn Sie die wichtigsten Konzepte verstanden haben, können Sie sich die Implementierung von Python-Objekten ansehen , damit Sie darüber nachdenken können, wie Methoden mit Objekten interagieren und wie sie gespeichert werden und so weiter.
Tschüss!
Sehen Sie sich sichere Rückrufe vom Typ CCAN für Makros an, mit denen Sie schlechte Casts vermeiden können. Ich weiß, dass Sie nicht einen Rückruf schreiben, aber viele Rückrufe sehen wie folgt aus:
%Vor% Und mehrere Typen können in (void *)
umgewandelt und an context
übergeben werden. Casting innerhalb dieser Funktion wird schwierig, besonders wenn der Callback einen Thread startet, der ein einzelnes (void *)
Argument benötigt.
Wie auch immer, Sie könnten einige nützliche Bits finden, wenn Sie dem Link folgen.
Tags und Links c