Re[6]: Не пора ли нам перейти на D или что-нибудь вроде этог
От: OCTAGRAM Россия http://octagram.name/
Дата: 04.03.07 13:38
Оценка: 11 (2)
Здравствуйте, Alxndr, Вы писали:

A>Если на C++ получается писать только хлам — что ж, это выход


Основную проблему C++ я вижу в том, что он не безопасен by design. Это как запорожец ( C ), затюненный (++) под мерседес. (Но ведь это всё равно запорожец) Почему бы, спрашивается, сразу не выбрать мерседес? Очевидно, гораздо дешевле писать на привычном C++, а потом сказать, что это самый безопасный продукт за всю историю человечества. Java и .NET, конечно, хорошо, но какая-то часть кода всё равно должна быть нативной. Особенно, если это системный код. И вот тут-то, в самых критических местах до сих пор используется Це-баг-баг! (Если не сам Це, что не лучше)

Я слышал такие аргументы в сторону C++, что продвинутый человек может обходить все грабли, зная о них. В качестве контраргумента приведу начало из Cyclone: A Type-Safe Dialect of C :

If any bug has achieved celebrity status, it is the
buffer overflow. It made front-page news as early
as 1987, as the enabler of the Morris worm, the first
worm to spread through the Internet. In recent years,
attacks exploiting buffer overflows have become more
frequent, and more virulent. This year, for exam-
ple, the Witty worm was released to the wild less
than 48 hours after a buffer overflow vulnerability
was publicly announced; in 45 minutes, it infected
the entire world-wide population of 12,000 machines
running the vulnerable programs.
Notably, buffer overflows are a problem only for the
C and C++ languages—Java and other “safe” lan-
guages have built-in protection against them. More-
over, buffer overflows appear in C programs written
by expert programmers who are security concious—
programs such as OpenSSH, Kerberos, and the com-
mercial intrusion detection programs that were the
target of Witty.
This is bad news for C. If security experts have
trouble producing overflow-free C programs, then
there is not much hope for ordinary C program-
mers. On the other hand, programming in Java is
no panacea; for certain applications, C has no com-
petition. From a programmer’s point of view, all the
safe languages are about the same, while C is a very
different beast.


Ну и, например, такой комментарий :

Firefox security holes

There’s a new version of Firefox out (1.5.0.2), with fixes for 22 security issues, according to Secunia. My favorite is this one:

2) An error in the garbage collection in the JavaScript engine can be exploited to cause a memory corruption.

Successful exploitation may allow execution of arbitrary code.

Apparently garbage collectors are not perfect! Who knew.

Among the 22 issues there are a bunch that would clearly be prevented by a safe language like Cyclone:

3) A boundary error in the CSS border rendering implementation may be exploited to write past the end of an array.

4) An integer overflow in the handling of overly long regular expressions in JavaScript may be exploited to execute arbitrary JavaScript bytecode.

6) An error in the “InstallTrigger.install()” method can be exploited to cause a memory corruption.

13) An error in the processing of a certain sequence of HTML tags can be exploited to cause a memory corruption.

Successful exploitation allows execution of arbitrary code.

15) Some errors in the DHTML implementation can be exploited to cause a memory corruption.

Successful exploitation may allow execution of arbitrary code.

16) An integer overflow error in the processing of the CSS letter-spacing property can be exploited to cause a heap-based buffer overflow.

Successful exploitation allows execution of arbitrary code.

Some of the others might be safety issues as well, but it takes quite a bit of digging to figure these things out.

14 April 2006 by trevor



В ваших словах есть доля правды. Действительно, почему бы не признать наконец, что горы используемого ныне софтваря — хлам. Операционка, в которой я сижу, — хлам. Браузер, в котором я пишу, — хлам. Сегодня он работает, а завтра для него найдут сплойт. И так, много про что, можно сказать. Только язык не поворачивается, правда? Надо же как-то и дальше с этим работать.

Панацеи не существует. Если какой программист и умеет писать всё без единой ошибки, то ему положено носить красный плащ и синюю футболку с буквой "S". Но, тем не менее, опасность значительно снижается, если использован язык повышенной целостности.

Программа на языке повышенной целостности может отказаться обработать запрос, но никаким образом не выполнить любую ересь, что заслана хакером. Это значит, поведение программы не может стать непредсказуемым.

Я считаю, целостность — минимальное требование. Поэтому C/C++ я считаю хламом. Историческую функцию они исполнили (когда нужно лишь бы работало). Я считаю, нужно давно что-то менять. Вы можете признавать это, можете нет, это ваше дело.

Взять в качестве только D, я считаю, сильное ограничение. Почему D? Почему не Eiffel или Ada? Потому что на C похож (первое, что в глаза бросается)? Думаю, список должен быть шире. Вроде есть соседний топик "альтернативные" языки, но там альтернативность больше по ориентированности (ФП, ЛП) просвечивает, здесь же явно выраженная императивность.

Небольшие проги ещё на Cyclone можно писать.

Трудность в том, что непонятно, с какой стороны делать переход. Когда требования спускаются сверху, и требуется просто зарабатывать деньги (трое детей в семье, не считая собаки) на C/C++, тут трудно что-то изменить. А те, кто спускают требования, преследуют другие цели. Покупателю (в своей массе) не важно, как сделано, главное, как работает. Порочный круг.

Потенциальный выход я вижу в школьниках и студентах. Чему их сейчас учат? Вот на том они и пишут. В массе, опять же, в массе.

Приход Эйфеля в Россию я пока не наблюдаю. А вот у Ады есть шансы!

Ада — идеальный базовый язык образования в области информационных технологий

По настоящему важными, однако, являются следующие соображения: насколько данный
язык облегчает профессиональное изложение учебного материала и насколько он облегчает
усвоение студентами совокупности учебных дисциплин. Среди этих причин – привычки и
квалификация преподавателей, доступность литературы, изданной на бумажных носителях и
на русском языке, личные предпочтения тех, кто разрабатывает (или утверждает!) учебно-
квалификационные программы специальностей и рабочие программы конретных курсов, пред-
ставления о том, что в данный момент наиболее востребовано рынком труда. Сплошь и рядом
мы имеем совершенно ненормальные ситуации, когда основной (и нередко математизирова-
ный) курс по алгоритмам и структурам данных поддерживается ... языком Си, курс по парал-
лельному программированию и системам реального времени основывается на Джаве (которая
не для этих областей проектировалась и создавалась), а курс по методам разработки и сопро-
вождения больших программных систем использует в качестве языка сопровождающего прак-
тикума, извините, Паскаль-Дельфи. В результате существенная часть времени и сил тратится
на попытки разглядеть алгоритм (а еще того сложнее – структуру данных!) через криптогра-
фический синтаксис Си или, скажем, на то, чтобы отделить проблемы адресной арифметики от
логических и математических проблем организации сортировки и поиска. Или (в курсах по
параллельному программированию) возиться с тем, чтобы правильно переключать семафоры
и вовремя посылать сигналы (от чего всеми силами стремится уйти реальная программная ин-
дустрия!) вместо того, чтобы выделять процессы и разрабатывать модели их взаимодействия
высокоуровневыми средствами, допускающими эффективный статический и динамический
контроль. Еще конфузливей «освоение методов» проектирования и разработки больших про-
ектов и систем средствами Дельфи, предназначенной только (и в этом качестве действительно
широко и эффективно используемой) для быстрого прототипирования и создания графических
интерфейсов конкретно под Виндоуз. При этом такими реальностями больших проектов, как
полиплатформенные стандарты, Юникс-ориентированные инструменты, лицензионная чисто-
та, разумеется, даже не пахнет.


Я из приведённых мной языков (добавьте свои варианты по вкусу, например, Erlang) наивысший приоритет отдаю Аде, потому что это язык универсальный и при этом сравнительно разработанный. Из всех перечисленных языков только Ада входит в main GCC distribution. gcc и так для меня важный инструмент, а тут ещё Ада в основной поставке. Это удобно.

К тому же, GNAT осваивает .NET.

Это значит, переносимый код для нативных и управляемых сред. Удобно, не правда ли?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.