Ich entwerfe eine hohe Ebene, objektorientierte, Garbage Collection Programmiersprache, und ich habe ein Problem mit Vorlagen. Ich plane, ein VM-System zu erstellen, ähnlich wie .NET oder JVM (aber LLVM wird unter der Haube verwendet). Das Problem ist, dass ich leistungsfähige, C++ - ähnliche Templates haben möchte, aber mit dynamischem Linking (damit ich die Template-Bibliothek ersetzen kann, ohne alles neu zu kompilieren, das es benutzt). Ich möchte in der Lage sein, eine Quelldatei zu kompilieren, ohne die Definition der Vorlagen zu haben. Die Codegenerierung zur JIT-Zeit sollte minimiert werden.Was ist der beste Weg, um Templates in einer Programmiersprache zu implementieren?
Hier sind die Optionen Ich denke an:
- haben das Konzept einer Template-Bibliothek, die statisch in jede Übersetzungseinheit verbunden ist. Eine Vorlagenbibliothek wäre im Wesentlichen wie eine AST mit Leerzeichen, die ausgefüllt werden müssen, wenn die Vorlage instanziiert wird. Das Problem dabei ist, dass wenn zwei Dateien mit verschiedenen Versionen der Vorlagenbibliothek kompiliert werden, diese möglicherweise inkompatibel sind oder wenn die Vorlagenbibliothek fehlerhaft ist, muss alles neu kompiliert werden. So macht es C++.
- Haben Sie Template-Bibliotheken, die zur JIT-Zeit verknüpft sind. Dies löst die meisten Probleme, erfordert jedoch, dass das IR im Wesentlichen ein AST ist. Ich möchte, dass die IR viel niedriger ist. Dies erfordert viel mehr Arbeit für JIT-in.
- Haben Sie wimpy C# -ähnliche Generika mit nur Typen als Argumente. Dies ist ziemlich einschränkend, erlaubt jedoch eine einfache Codegenerierung und dynamische Verknüpfung.
Gibt es noch andere gute Möglichkeiten, an die ich nicht denke? Ich stehe auf die erste Option, aber ich mag keine der Optionen. Was denkst du ist die beste Option?