В принципе, мне интересно, если существует язык, где этот код будет недействителен, потому что даже если counter
и distance
являются как int
под капотом, они представляют собой несоответствующий тип в реальном мире:Язык с поддержкой приложений венгерской поддержки?
#include <stdio.h>
typedef int counter;
typedef int distance;
int main() {
counter pies = 1;
distance lengthOfBiscuit = 4;
printf("total pies: %d\n", pies + lengthOfBiscuit);
return 0;
}
Это компилируется никаких предупреждений с «gcc -pedantic -Wall» и всех других языков, где я это пробовал. Похоже, было бы неплохо отказаться от случайного добавления счетчика и расстояния, так где же поддержка языка?
(Кстати, реальный пример, который вызвал этот вопрос, заключался в том, что веб-разработчик работал в PHP и Python - я пытался создать «скрытую HTML-строку», «SQL-экранированную строку» и «необработанный опасный пользовательский ввод» «несовместимо, но лучшее, что я могу представить, - это приложения, венгерские нотации, как это предлагается здесь, -> < - и это все еще зависит от проверки человека (« неправильный код выглядит неправильно »), а не поддержки компилятора (« неправильный код is wrong "))
Как насчет ... любого статически типизированного языка, разрешающего пользовательские типы? Конечно, упаковка класса, например. целое число, просто чтобы добавить информацию «это расстояние», довольно определенно для определения и использования PITA. Но это, кажется, все. – delnan
Это * может быть сделано полностью с пользовательскими и реализованными базовыми типами, проверенными во время выполнения; но, как вы говорите, это очень длинный способ сделать это. C typedef, как в примере, является довольно совершенным синтаксисом, я просто хочу, чтобы он не автоматически молчал между типами, но вместо этого выполнял ошибку времени компиляции ... – Shish