Ich denke, versuchen ML-Inferenz auf fast alles in C++ zu beziehen ist eher zu Verwirrung führen als Verständnis. C++ hat einfach nichts, was ähnlich wie Typinferenz ist.
Der einzige Teil von C++, der die Typisierung nicht explizit macht, sind Templates, aber (meistens) unterstützen sie generische Programmierung. Eine C++ - Funktionsvorlage, wie Sie sie angegeben haben, könnte gleichermaßen für eine unbegrenzte Menge von Typen gelten - zum Beispiel für den Code, den Sie als Template-Parameter NumType
verwenden, aber mit Strings arbeiten würde. Ein einzelnes Programm könnte Ihre add
instanziieren, um zwei Zeichenfolgen an einer Stelle und zwei Zahlen an einer anderen Stelle hinzuzufügen.
ML-Inferenz ist nicht für generische Programmierung.In C oder C++ definieren Sie explizit den Typ eines Parameters, und der Compiler prüft dann, ob alles, was Sie mit diesem Parameter versuchen, von diesem Typ zugelassen wird. ML kehrt das um: es schaut sich die Dinge an, die Sie mit dem Parameter machen, und ermittelt, was der Typ für Sie haben muss, um diese Dinge tun zu können. Wenn Sie versucht haben, Dinge zu tun, die sich widersprechen, wird es Ihnen sagen, dass es keinen Typ gibt, der die Einschränkungen erfüllen kann.
Dies wäre in C oder C++ ziemlich unmöglich, vor allem wegen der impliziten Typkonvertierungen, die erlaubt sind. Nur zum Beispiel, wenn ich etwas wie a + b
in ML habe, kann es sofort schließen, dass a
und b
ints sein müssen - aber in C oder C++ könnten sie fast jede Kombination von Ganzzahl oder Zeiger oder Fließkommatypen sein (mit der Einschränkung dass sie nicht sowohl Zeiger sein können) oder definierte Typen verwenden, die operator+
überlasten (zB std::string
). In ML kann das Finden von Typen im schlimmsten Fall exponentiell sein, ist aber fast immer ziemlich schnell. In C++ würde ich schätzen, dass es viel häufiger exponentiell ist, und in vielen Fällen würde es wahrscheinlich unterbestimmt sein, so dass eine gegebene Funktion irgendeine von verschiedenen Signaturen haben könnte.
Fragen Sie nach Typ-Inferenz oder Typprüfung? – sepp2k
Inferenz. Welche Arten von Typen werden aus der ML-Funktionsdefinition in meinem Beispiel abgeleitet? –