MyWackoSite: СпецкурсCxx/Осень2006/КомментарииКЛекциям ...

Home Page | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация | Вход:  Пароль:  
Это старая версия СпецкурсCxx/Осень2006/КомментарииКЛекциям за 2006-10-14 21:36:39..
Я постараюсь оставлять на этой странице заметки к лекциям (неотвеченные вопросы, спорные моменты, просто замечания и пр.) пока их не забыл.

Оглавление документа

10 Окт 2006

О качестве программ

Было несколько вопросов и реплик относительно безопасности программ, безопасности языков программирования и т.п. Я бы хотел высказать свое мнение на свежую голову, при этом никоим образом не пытаюсь навязать его как авторитетное.

Итак,
  1. Качественное ПО – это то ПО, которое удовлетворяет поставленным требованиям. И в конечном итоге удовлетворяет пользователя.
  2. Надежное ПО – это программы, которые мало подвержены к отказам. Т.е. программа ведет себя предсказуемо и валидно (согласно требованиям) даже в случаях, когда переданы неверные данные на вход, нехватает ресурсов и т.п.
  3. Есть также понятие времени наработки на отказ, у надежного ПО оно должно быть достаточно (или очень) велико.
  4. Под безопасным кодом я подразумеваю прежде всего код, продуктом которого является надежное ПО.

Все это я написал не заглядывая в словари, спец литературу и т.п., поэтому прошу меня исправить, если что.

Теперь о безопасности языков программирования. Далее приводится цитата из книги <<Дизайн и эволюция языка C + +>> (раздел 14.2.4), которая мне кажется кое что может прояснить:
Хорошие программы – это продукт хорошего образования, удачного проектирования, адекватного тестирования и т.д., а не наличие в языке средств, которые предположительно должны использоваться только «правильно». Употребить во вред можно любое средство, поэтому вопрос не в том, можно ли чем-то воспользоваться неправильно (можно!) или будут ли этим неправильно пользоваться (будут!). Вопрос в том, необходимо ли данное средство при условии его правильного употребления настолько, чтобы оправдать затраты на его реализацию, удастся ли смоделировать его с помощью других средств языка и реально ли с помощью обучения обратить во благо неправильное использование.

3 Окт 2006

Вопрос про строковый литерал

Вопрос: Что является константным в выражении const char str[] = “String literal”; массив или char?
Ответ: Конечно char.

Вот текст из Страуструпа:
The type of a string literal is “array of the appropriate number of cons characters,” so “Bohr” is of type const char [5].

A string literal can be assigned to a char*. This is allowed because in previous definitions of C and C + +, the type of a string literal was char*. Allowing the assignment of a string literal to a char* ensures that millions of lines of C and C++ remain valid.

Вопрос про ошибку компиляции (личный)

Сев в автобус, я вдруг понял, что совершенно зря пообещал побить костылем одного господина. Дело в том, что вопрос был совершенно законным. Дело в порядке поиска имен. Компилятор ищет функцию, которую следует вызвать в каждом конкретном случае, среди доступных областей видимости в определенном порядке. Область видимости имен класса является одним из первых кандидатов для поиска. Когда компилятор находит функцию (или несколько) с соответствующим именем (независимо от параметров), поиск прекращается.

В конкретном случае, класс, по всей видимости, содержал функцию f(int*) с искомым именем, но другими параметрами. Не найдя других кандидатов внутри класса, компилятор остановил поиск и сообщил об ошибке.
 
Файлов нет. [Показать файлы/форму]
Много комментариев (4). [Показать комментарии/форму]