?

Log in

No account? Create an account

Предыдущий пост поделиться Следующий пост
Кратко про С++ и прочий низкий уровень
lex_kravetski

 

Говорят, что при правильном использовании любого языка всё будет отлично работать. Говорят, что ошибки проистекают от непрофессионализма, а язык и средства разработки тут не при чём.

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

Насколько бы опаснее стали полёты на самолётах, если определённая последовательность нажатий на кнопку включения кондиционирования салона приводила к раскалыванию самолёта пополам. Да, профессиональные пилоты бы отлично знали, что надо внимательно следить и ни в коем случае не допускать этой последовательности. Да, это было бы написано во всех справочниках, даже предупреждения в кабине бы висели. Однако самолёты падали бы в десять раз чаще.



>>> Говорят, что ошибки проистекают от непрофессионализма, а язык и средства разработки тут не при чём.

Заявление о том, что профессионалы не делают ошибок сродни заявлению о том, что принцессы не какают.

Определённая последовательность

нажатий на кнопки в полёте таки приводит к крушению самолёта. К кнопке кондиционера это конечно не относится, ну так и вызов printf() не приведёт к краху программы.

А ещё в любом языке можно написать while(1) - значит все языки дермовые. Кроме брейнфака, конечно, он единственный Ъ.

Re: Определённая последовательность

нет , не в любом.
в строго типизироанных языках нельзя. из распространённых языков , можно , пожалуй только в с(++)

(Удалённый комментарий)

И чуть-чуть о логике.

Первые два предложения поста НИКАК не связаны между собой.

Re: И чуть-чуть о логике.

А никто кроме тебя даже и не заметил.

Но если такой самолёт, летает в 100 раз быстрее обычного, то скорее всего им всё равно бы пользовались.

Re: Reply to your post...

> Но если такой самолёт, летает в 100 раз быстрее обычного, то скорее всего им всё равно
> бы пользовались.

У С++ проблема в том, что самолёт на нём летает быстрее всего процентов на
двадцать-тридцать, но вот изготовление самолёта занимает в двадцать раз больше времени. Ну
и с надёжностью у этих самолётов понятно как.

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

Смотри Чак Паланик - "Колыбельная", где определённая последовательность звуков вызывает смерть людей, её слышащих. Там на эту тему есть отличные рассуждения касательно звуковой полиции, людей, носящих затычки в ушах и прочих изменений в обыденной жзни после подобного жуткого открытия.

(Удалённый комментарий)

Re: Reply to your post...

> Мне, остановившемуся на 386 и асме, странно это.

Тут ничего странного нет. В мире рулит технология. Потенциально опасные алгоритмы, давно
решённые задачи и всё подобное, лучше реализовать один раз и потом дать для использования
всем. Во-первых, чтобы повысить безопасность (ибо один объект, проверенный миллионом
человек, безопаснее миллиона объектов, проверенных одним человеком), во-вторых, чтобы не
изобретать велосипед перед каждой поездкой.

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

И да. В электроприборы, способные вызвать пожар, таки начали встраивать системы
автоотключения.

(Удалённый комментарий)
нет, пример с раскалыванием, концом света итд не катит.
Вот тебе другой пример. Со времен моей армейской службы. После прихода с постов в караулку положено разрядить автомат. И для этого есть специальное место и специальная процедура. Описанная в уставе, задуманная, направленная и заточенная под то чтобы обеспечить безопсность как самого караульного так и окружающих. Ничего в ней сложного нет. Поставил автомат стволом вверх, отстегнул рожок, передернул затвор, спустил курок. За два года службу в нашей роте два солдата себе что то прострелили. Из за невыполнени первого пункта - стволом вверх, в пулеприемник... Как она статистика, на 80 человек, за 2 года два случая - не дофига?

Re: Reply to your post...

Хороший, кстати, пример.

Когда жабер не может забороть тормоза, он начинает философствовать :)

Re: Reply to your post...

> Когда жабер не может забороть тормоза, он начинает философствовать

Наверно имеется в виду "тормозов".

(Удалённый комментарий)
хы, работать хорошо и правильно будет когда квалифицированный специалист пишет на том языке который лучше всего знает.

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

возьмем как пример программу qmail, написанную одним профессором на C. и еще кучу всякого полурабочего говна, написанного на высокоуровневых языках разным студенческим ламерьем. и сравним как оно работает, сколько ресурсов хочет, насколько безопасно.

Re: Reply to your post...

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

И это тоже не правильно. Даже если гонщик отлично знает модель автомобиля тридцатилетней
давности, это не значит, что на нём он будет лучше всего ездить.

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

Я говорил уже: профессионалам ровно так же на некоторых языках удобнее работать, чем на
других. С некоторыми библиотеками проще, чем с другими и так далее. С++ потребляет слишком
много внимания. Из-за этого на нём пишут медленнее и хуже, что ламеры, что профессионалы.

> возьмем как пример программу qmail, написанную одним профессором на C.

Это плохой способ - сравнивать результаты работы ламеров в одной области с результатами
работы мастеров в другой. Надо сравнить ламеров на С++ и ламеров на Java, и профессионалов
на С++ с профессионалами на Java. После этого уже делать вывод.

Низкий vs. высокий

Надо просто выбирать адекватные задачам средства. И выбирать людей, которые этими средствами умеют пользоваться.

По большому счету, дихотомия C++ vs. Java мне представляется ложной. Это не взаимоисключающие, а взаимодополняющие средства. K примеру, юзеру amesh понадобилось явно управлять кэшами - что мешает написать нативный метод ? Я не спец по Java, но уверен, что такая возможность там есть. Тем более Java-то на C++ написана (сановская по крайней мере).

А вообще "every large C/C++ program contains a bad implementation of at least 50% of Common Lisp" (C). Это означает, что писать _действительно_ _большую_ программу на C++ - нонсенс. На С/C++ пишется язык, удобный для данной предметной области, а уже на этом языке собственно то, что нужно. Наиболее известный пример - GNU Emacs, где 10-20 человек занимаются собственно интерпретатором Лиспа, а user-visible features пишут сотни на eslip, которые o GC имеют представление самое приблизительное.

"В мире очень мало гениев, и не следует предполагать, что доля их среди программистов выше, чем в среднем" (С) Г. Буч. Плюс требования по срокам, бюджетам и проч. - короче, для огромной части индустрии разработки ПО Java/C# действительно спасение.

Но утверждение "низкий уровень хорош для ОС и драйверов" неверно, точнее, верно с точки зрения программиста, для которого компьютер = PC desktop. А ведь кроме этого, есть навигационные системы GPS, системы впрыска топлива ДВС, бортовые системы самолетов, сложное медицинское оборудование, космические аппараты и прочее, где требования к ПО могут быть очень специфические. А чем сложнее требования, тем сложнее им соответствовать, тем больше деталей надо держать в головах программистам, тем ниже уровнем надо опускаться, чтобы посмотреть - а нельзя ли вот тут килобайт или миллисекунду выиграть...

Re: Низкий vs. высокий

> Надо просто выбирать адекватные задачам средства. И выбирать людей, которые этими
> средствами умеют пользоваться.

В том-то и дело, что для огромного множества задач С++ подходит хуже, однако его
используют.

> По большому счету, дихотомия C++ vs. Java мне представляется ложной.

Дополняющими скорее являются Java и С.

> K примеру, юзеру amesh понадобилось явно управлять кэшами - что мешает написать нативный
> метод ?

Как таковые нативные методы там не предусмотрены. Там предусмотрен вызов С-кода.

> "В мире очень мало гениев, и не следует предполагать, что доля их среди программистов
> выше, чем в среднем" (С) Г. Буч.

Что интересно, от гениев тоже С++ пытается получить куда больше интеллектуальных ресурсов,
чем требуется для решения задачи.

> А ведь кроме этого, есть навигационные системы GPS, системы впрыска топлива ДВС,
> бортовые системы самолетов, сложное медицинское оборудование, космические аппараты и
> прочее, где требования к ПО могут быть очень специфические.

Поскольку такие системы подразумевают специфический компилятор под них, вполне можно
писать хоть даже и на Java. Джава-машина при этом будет заточена под данное устройство или
же вообще будет включаться в скомпилированный код.

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

(Удалённый комментарий)

Re: Читайте эссе

Это может показаться странным, но языков без недостатков нет. Есть языки, в которых их
больше, а есть - в которых их меньше.

Про глаголы там, кстати, неправильно написано. Если метод статический, то класс для него
является нэймспейсом. И таким образом гарантируется, что рефлекшн может быть вызыван для
любого метода. Разницы же в вызове с С++ нет.

myNamespace.doThing()

myNamespace.doThing()

Найдите десять отличий.

какая-то незаконченность

чувствуется в этом вашем посте.
Хочется спросить: "И что?"
и все-равно пишут, и будут писать на с++


Гы.
Не баитесь, и ассемблер закапывать ещё рано. Каждому валенку свой фасон. Каждый язык годится под свои задачи (ну, не каждый, но каждого уровня). Так что цпп ещё поживёт. Как и басик визуальный.

Re: Reply to your post...

Ну так едрёнть! Иногда надо и в работающий реактор лезть. Однако лучше делать такое только
когда другого выхода нет.