Чтобы вывести типы полиморфных функций, потребуются значительные расширения системы типов C.Пример
length(p) {
if (p == NULL) return 0;
else return 1 + length(p->next);
}
Этот код должен работать с любым указателем на структуру (или объединение) с полем next
.Вы можете проверить полиморфизм строк, но, по крайней мере, ваша новая система типов должна быть гораздо более выразительной, чем система типов C.
Другая насущная проблема - перегруженная операция +
.Какой тип по умолчанию?Вы хотите, чтобы он был перегружен любым числовым типом, например, Haskell или C ++?Если так, то более крупные расширения системы типов.
Чем больше урок , тем лучше .Преимущества C (как языка, помимо множества прекрасных API, доступных в C):
- Вы имеете полный контроль над представлением ваших данных.
- Любое лицо, проверяющееИсходный код может легко предсказать затраты времени и пространства.
Эта повестка дня не совсем совместима с полиморфизмом, и полиморфизм является основным преимуществом вывода типов.Если вам нужен вывод типов, выберите один из множества хороших языков (F #, Haskell, ML), которые поддерживают его изначально.