Pull to refresh

Comments 16

Ссылки на отчеты по проблемам Тойоты в вашей презентации не работают. Часть введет на коммерческие источники.
Тут интереснее было бы услышать почему все же разработчики Тойоты используют несмотря ни на что глобальные переменные в таком количестве. Может там аудиторы считали каждый элемент глобальных массивов в ОЗУ?



Дело было давно. К сожалению, ссылки постепенно умирают.

В связи с советом №10 (abort в библиотеках) хочется задать ехидный вопрос: так что, и noexcept в библиотеках использовать нельзя? ;)

"Деление на на ноль это как заниматься сексом. В школе нельзя, а в универе расскажут как это делать правильно"

"Кодекс Различные практики — это всего лишь свод указаний, а не жёстких законов"

если исключение в реальности может вылететь, то noexcept не нужно ставить, вот и всё

В реальности писать код правильно совсем не сложно: просто не нужно делать ошибок.

Это сарказм, да.

for (auto i = 0; i < n; i++) // :-(

Извиняюсь за дурацкий вопрос, а разве в Си нельзя задать разрядность константы явно? Например, вот так:

for (auto i = 0_8; i < n; i++) // :-)

Я настолько привык к этому синтаксису, принятому в древних языках программирования, что он мне кажется простым и удобным. Просто "17" - это стандартный integer, "1913_4" - 32-битный, "42_16" - 128-битный, и т.д.. Если пока нельзя, то почему бы это не сделать? Ведь речь идет только о константах, двусмысленностей вроде не возникает? Всего-то придется пару строчек в компилятор добавить и еще одну - в стандарт языка.... И аналогично для всяких float?

А в мультиязычных программах в нашем заповеднике сейчас можно писать вот так (правда, это не все компиляторы поддерживают):

...
real(8) :: my_real=13. ! Чтобы использовать в моей программе
real(c_float) :: true_real=0. ! Для вызова Си-функций

Длинновато, зато прозрачно

Указывать размер типа в таком виде как вы показали несколько странно. Плюс в C++ в новых стандартах вроде хотят разрешить десятичные разделители и будет совешенно непонятно это число такое или размер: 1000_8 == 10008 // True

Есть литералы, которые автоматом кастят и валидируют числа.

30         /* int */
30u        /* unsigned int */
30l        /* long */
30ul       /* unsigned long */
3.14159       /* Legal */
314159E-5L    /* Legal */
510E          /* Illegal: incomplete exponent */
210f          /* Illegal: no decimal or exponent */
.e55          /* Illegal: missing integer or fraction */

Вощемта, все абстрактные типы могут иметь разный размер, собственно для этого и изобретался Си - чтобы можно было без боли сказать компилятору, сколько бит в его интах и всё бы завелось. Приветы из эры PDP

в новых стандартах вроде хотят разрешить десятичные разделители и будет совершенно непонятно это число такое или размер: 1000_8 == 10008 // True

@domix32, спасибо за ликбез! Другие причины тогда можно уже не перечислять (с) ;-)

Но

если я не уверен в том, что разрядность всяких float и double на разных машинах одинаковая, то написать переносимую программу (которая гарантирует одинаковую точность вычислений) будет заметно сложнее. Я почему-то до сих пор думал, что на уровне базовых математических библиотек фортран и Си идентичны, и что при решении расчетных задач выбор того или иного языка не имеет значения. Получается, что на самом деле это не совсем так?

что разрядность всяких float и double на разных машинах одинаковая

С как в общем-то и С++ написаны в виде абстрактной машины и размеры всех базовых типов по-умолчанию определяются настройками компилятора, а в рамках языка они просто int, long, word, dword и т.д. собственно поэтому дополнительно имеются sized определяния вроде int32_t, uint32_t, uint8_t, int64_t и прочие, которые явным образом определяют финальный размер для текущей архитектуры машины. Но литералов по-умолчанию для таких типов нет (хотя в новых стандартах плюсов можно их определить).

Я слабо представляю как устроена система типов фортрана, но как минимум интероперабельность между си/си++ и фортранам должна иметь те же свойства с отвязкой абстрактных типов от конечного размера. Ну, а библиотеки так и вовсе implementation specific, т.к. каждый компилятор имеет свою собственную имплементацию стандартной библиотеки. Какой-нибудь gcc наверняка использует одни и те же мат. функции как для фортрана, так и для C/C++ т.к. живут в условно единой кодовой базе, а если сравнивать уже с какими-нибудь фронтендами для llvm - почти наверняка найдутся расхождения, т.к. разные фронты для разных языков могут быть не связаны.

Возможность такой записи ничего не решает. Ибо неизвестно, сколько бит нужно выбрать, чтобы оно совпало с размерностью size_t. Т.е. непонятно, сколько бит выбрать, чтобы счётчик мог перебрать все элементы любого массива. Как раз вектор развития, всячески избегать указания конкретной размерности.

Когда коллега отвлечётся, поменяйте в его коде какую-нибудь точку с запятой на этот символ.

Для человека, который уже наступал на грабли с символами с и c, это не проблема.

Sign up to leave a comment.