Re[8]: Никогда не недооценивайте силу по умолчанию
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 16.09.22 06:02
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Можно делить на ошибки и предупреждения, но в релизном коде не должно быть ни тех, ни других. Хотя я бы вообще предложил кардинальный подход — не делить на ошибки и предупреждения, а генерировать в отладочном режиме бинарник, даже если встречаются ошибки, которые можно локализовать. Я давным давно писал на жава в эклипсе, вот там такая фича была. И это было очень удобно. Не дописал функцию, и ладно. Если туда управление придёт, то вместо недокомпилированного кода вылетит ошибка.


Прикольно. Для этого требовался особый JDK, или Eclipse внутри себя это делал?

vsb>Что касается автоматической генерации кода, на мой взгляд правильно требовать от генератора генерировать нормальный код, а не подстраивать язык под него.


Вот в том, что такое "нормальный" код, тут и есть засада. Go не пропускает, например, код с неприменённым импортом. Генератор должен следить за тем, вызвал он что-то по этому импорту или нет? Я думаю, что не должен. Даже если по умолчанию это полезно (Go рассчитывался на написание кода низкоуровневыми ширнармассами, и жёсткий контроль имеет смысл), опция компиляции для убирания этого (вписанная в исходник) была бы очень полезна.

N>>Надо смотреть на практику Питона, где эта диверсия по умолчанию.


vsb>Вот, кстати, да. Я на питоне не то, чтобы много писал, но немного писал. И конкретно эта фича мне проблем кажется не доставляла.


А мне доставляла — и нетипизированностью, и тем, что сложно понимать, определена переменная в принципе или нет.

vsb>>>Автовывод типа это уже давно стандарт де-факто почти во всех языках и подразумевается сам собой.


N>>Да вот не совсем. Ты смешиваешь два автовывода — автовывод по инициализации и автовывод по всему использованию.

N>>Первый — удел процедурных языков. Второй — группы *ML/Haskell/etc.

vsb>Я про первый. Автовывод типов для функций — вопрос сложный.


Не обязательно для функций.

r = 0;
... какие-то действия в цикле... {
++r;
}

Если оно умеет подсчитать, что r достигает 2000, и 1 байта мало, нужно два — это и есть второй вариант.

vsb>>>Все типы локальных переменных выводятся и это не опционально.


N>>Ну да, ещё скажи, что ты не можешь сказать "int x" для локальной переменной, только "var x"

N>>Непонятно, что ты имел в виду на самом деле, но сказано безнадёжно коряво. Перефразируй.

vsb>Не очень понял, что не понятно. У нас ведь в гипотетическом языке нет ни var ни int. У нас есть только x = 1 или x = get_int_value(). Иными словами типы всех локальных переменных выводятся автоматически и отказаться от этого нельзя. Максимум — добавить каст в инициализирующее выражение, чтобы привести его к нужному типу.


Значит, таки типы есть, раз касты есть. Но зачем тогда запрещать тип для переменной?
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.