LINUX.ORG.RU

Опасный код на C

 , ,


0

0

Опубликован перевод на русский язык цикла статьей David Chisnall «Writing Insecure C», в которых подробно рассматриваются различные аспекты написания безопасного кода на языке программирования C.

>>> Подробности



Проверено: Shaman007 ()
Последнее исправление: cetjs2 (всего исправлений: 2)

Опасный код на C опасный.

Neko
()

Прочитал. Есть кой-чё полезное.

Bohtvaroh ★★★★
()

поэтому и надо писать на безопасных языках, если есть возможность. и не извращяться с "объектами" в C:D вм, паррот.

anonymous
()
Ответ на: комментарий от Bohtvaroh

и узнать, что на дворе 21-й век, где уже можно делать кодоблоки без извратов с do {…} while (0);

anonymous
()

Чем переводил? Потому как перевод - просто ужасный... к сожалению :(

Без обид, плиз, просто констатация факта (после беглого прочтения нескольких абзацев).

Led ★★★☆☆
()

Маловато полезной информации. ИМХО, большинство ошибок, которые там описаны, разработчики делают на начальных этапах изучения языка, набивают шишки и обычно уже не попадаются на это.

hexenlord
()
Ответ на: комментарий от hexenlord

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

"На это" - в смысле на этот язык? Если не просто "набивают шишки", но и делают выводы - тогда, действительно, стараются не попадаться на "это":)

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

Pascal - как англ. язык, I Love You - слова местами не переставишь, всё прямо и понятно. С++ - как русский язык, Я люблю тебя, тебя люблю я, люблю я тебя - уйма вариантов с кучей интонаций. Asm - как китайский язык - одна черточка не в том месте и ты уже не признался в любви, а послал кого-то на йух

Bod ★★★★
()

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

Такой подход называется defensive programming и является спорным.

zenith ★★★
()

> David Chisnall «Writing Insecure C», в которых подробно рассматриваются различные аспекты написания безопасного кода на языке программирования C

Так опасного кода или безопасного кода? Книга названа чётко, почему содержание не соответствует?

Gharik
()
Ответ на: комментарий от Bod

> Pascal - как англ. язык, I Love You - слова местами не переставишь, всё прямо и понятно. С++ - как русский язык, Я люблю тебя, тебя люблю я, люблю я тебя - уйма вариантов с кучей интонаций. Asm - как китайский язык

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

> - одна черточка не в том месте и ты уже не признался в любви, а послал кого-то на йух

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

Gharik
()
Ответ на: комментарий от anonymous

> поэтому и надо писать на безопасных языках

"Безопасных" языков не бывает так же как и безопасного секса ;)

anonymous
()
Ответ на: комментарий от Bod

> Pascal - как англ. язык, I Love You - слова местами не переставишь, всё прямо и понятно. С++ - как русский язык, Я люблю тебя, тебя люблю я, люблю я тебя - уйма вариантов с кучей интонаций.

По-моему, как раз наоборот. Английский язык - компактный и многозначный как С. Короткой фразой можно выразить смысл, который в русском выражается громоздко и многословно как в Паскале :)

anonymous
()

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

anonymous
()
Ответ на: комментарий от anonymous

>поэтому и надо писать на безопасных языках, если есть возможность. и не извращяться с "объектами" в C:D вм, паррот.

Ага. Вот только "безопасные" языки почему-то не демонстрируют необходимой производительности, а вдобавок к этому еще и стремятся к монструозности.

stellar
()

Код на Си, сцуко, опасный...

anonymous
()
Ответ на: комментарий от stellar

> Ага. Вот только "безопасные" языки почему-то не демонстрируют необходимой производительности, а вдобавок к этому еще и стремятся к монструозности.

Монструозность - это как раз удел C.

zenith ★★★
()

С, страшно, ппц!

anonymous
()

Лихая статья с лихим переводом! Автор и переводчик — вы все молодцы!

ikm ★★
()
Ответ на: комментарий от zenith

>Монструозность - это как раз удел C.

Как интересно. Приведите пример немонструозного ЯП. Объясните, почему же на этом ЯП не написано до сих пор ни одного ядра ОС, используемого в production.

stellar
()

Переводчик поленился переводить сам и легкомысленно доверил это дело компьютеру. Легкомысленно - потому что компьютер у него тоже не промах, он передоверил задание микроволновке...

const86 ★★★★★
()
Ответ на: комментарий от stellar

>Вот только "безопасные" языки почему-то не демонстрируют необходимой производительности, а вдобавок к этому еще и стремятся к монструозности.

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

Led ★★★☆☆
()

Перевод не очень - "Если вы используете char, всегда явным образом объявляйте их как знаковые или нет, так как в противном случае, вы можете быть удивлены позднее."

Но в целом - зачёт.

LinuxUser ★★★
()
Ответ на: комментарий от Bod

> Pascal - как англ. язык, I Love You - слова местами не переставишь, всё прямо и понятно.
> С++ - как русский язык, Я люблю тебя, тебя люблю я, люблю я тебя - уйма вариантов с кучей интонаций.

> Asm - как китайский язык - одна черточка не в том месте и ты уже не признался в любви, а послал кого-то на йух


А мне понравилось. :-)

AS ★★★★★
()
Ответ на: комментарий от Led

>Те полтора примера, о которых ты слышал - не аргумент.

О! Телепаты на ЛОРе. Все-то они знают. Ну так и о каких же я примерах по-Вашему слышал?

>Это лишь аргумент, подтверждающий твою необразованность.

Ну просвети меня, о великий!

Ну же, это так просто -- ответить на вопрос http://www.linux.org.ru/jump-message.jsp?msgid=3226872&cid=3228184

stellar
()
Ответ на: комментарий от Gharik

2 Если ты не в курсе, то cpp - это сишный препроцессор. А теперь иди обратно в школу.
Gharik

anonymous
()
Ответ на: комментарий от Led

2 Led
 но то что на языке пишут ядра операционных систем - причина считать  его хорошим? или нет?
 приведи критерии которым должен удоволетворять хороший язык

anonymous
()
Ответ на: комментарий от AS

> А мне понравилось. :-)

тебе наверное и баш нравится. А про языки программирования - древний боян.

anonymous
()
Ответ на: комментарий от anonymous

>но то что на языке пишут ядра операционных систем - причина считать его хорошим?

Нет.

>приведи критерии которым должен удоволетворять хороший язык

Соответствие задаче. Программист не должен заморачиваться такими тупыми вещами, как, например "сколько байт в типе int у меня сейчас, а сколько будет на архитектуре X? а сколько в OS Y? а сколько в компиляторе Z?"

Led ★★★☆☆
()
Ответ на: комментарий от Led

>>Нет. Просто так "Нет." и все? может быть есть какие-нибудь причины кроме имхо(сорри, имхо это не причина)?

>>Соответствие задаче. собственно производительность(контроль за производительностью конечно) и кроссплатформенность тому очень способствуют.

>>Программист не должен заморачиваться такими тупыми вещами, как, например "сколько байт в типе int у меня сейчас, а сколько будет на архитектуре X? а сколько в OS Y? а сколько в компиляторе Z?

собственно никто и не заставляет. открой для себя stdint.h. такие вещи как контроль памяти и ресурсов часто можно обеспечить специальным кодом (велосипеды, зато не сборка мусора)

Итак - приведи пример хорошего языка

anonymous
()
Ответ на: комментарий от anonymous

>Просто так "Нет." и все? может быть есть какие-нибудь причины кроме имхо(сорри, имхо это не причина)?

Потому что как раз это и не является причиной назвать язык хорошим. по крайней мере, не является достаточной причиной.

>Итак - приведи пример хорошего языка

Задача?

Led ★★★☆☆
()

"С" достаточно давно морально устарел. Не спорю, иногда вынуждены его использовать: нет других средств разработки, куча кода уже написана на "С".

Но в прочих случаях, в топку этого динозавра!

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

Выбеите С++, не говоря о других языках, и для вас эта статья сильно утратит в актуальности.

Иногда от хлама всётаки нужно избавляться!

anonymous
()
Ответ на: комментарий от Led

>Детский лепет о том, что "язык плохой, если на нём не написано ни одного ядра ОС" - это не вопрос.

Не боле детский чем заявка о том, что C моструозен и что он устарел.

anonymous
()
Ответ на: комментарий от anonymous

>Не боле детский чем заявка о том, что C моструозен и что он устарел.

Это не повод, чтобы говорить другую хрень, которая "не хуже" чем другая хрень. Т.е. то, что кто-то что-то прогнал, не оправдяывает твой прогон. Хотя, в детсаду это, наверное, типа "контр-аргумент":)

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

> тебе наверное и баш нравится.

А на основании чего такой вывод ? :-) На самом деле, я о языках программирования могу попытаться рассуждать только на основе воспоминаний почти 20-летней давности...

> А про языки программирования - древний боян.


Ну вот как-то так не слышал.

AS ★★★★★
()
Ответ на: комментарий от Led

>Это не повод, чтобы говорить другую хрень, которая "не хуже" чем другая хрень. Т.е. то, что кто-то что-то прогнал, не оправдяывает твой прогон.

Видишь ли... Есть красивые технологии и *работающие*. Увы, но наш говенный мир таков, что красивая технология, от которой тащатся новообращенные адепты и реклама которой полна буллшитом чуть более чем полностью, обычно нормально не работает.

И наоборот, нелюбимая восторженными идиотами, но работающая технология; как пример - язык C, который любители синтаксичеких карамелек поливают г-ом и заявляют про его неудобность. Зато код, написанный на этом самом языке, "just works".

>Хотя, в детсаду это, наверное, типа "контр-аргумент":)

В детсадЕ. Учи албанский.

stellar
()
Ответ на: комментарий от Led

> Программист не должен заморачиваться такими тупыми вещами, как, например "сколько байт в типе int у меня сейчас, а сколько будет на архитектуре X? а сколько в OS Y? а сколько в компиляторе Z?"

У меня есть один знакомый, который не заморачивается даже тем, какими буквами обозначается 16-ричное число. И правильно! Быдлокодерам это не нужно...

anonymous
()
Ответ на: комментарий от stellar

> нелюбимая восторженными идиотами, но работающая технология; как пример - язык C, который любители синтаксичеких карамелек поливают г-ом и заявляют про его неудобность. Зато код, написанный на этом самом языке, "just works".

В том-то и дело, что не всегда "just works":) Много раз попадались мне серъёзные проэкты, обломавшиеся на "Мы ща на C как сделаем, как заоптимизируем!" - месяцы и годы работы - на смарку:) при том, что не ламеры, нормальные системные программисты. И всё вроде правильно сделали, но через месяц работы готового проекты - упираются в потолок по масштабируемости.

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

> Выбеите С++, не говоря о других языках, и для вас эта статья сильно утратит в актуальности.

В том-то и дело, что не сильно, потому что C++ - это просто костыль к С.

anonymous
()
Ответ на: комментарий от Led

> В том-то и дело, что не всегда "just works":) Много раз попадались мне серъёзные проэкты, обломавшиеся на "Мы ща на C как сделаем, как заоптимизируем!" - месяцы и годы работы - на смарку:) при том, что не ламеры, нормальные системные программисты. И всё вроде правильно сделали, но через месяц работы готового проекты - упираются в потолок по масштабируемости.

И поэтому С - плохой, да? Написали бы на православном языке, все было бы нормально? :)

anonymous
()
Ответ на: комментарий от anonymous

>В том-то и дело, что не сильно, потому что C++ - это просто костыль к С.

А что, если программа на С++, это автоматически означает что просто необходимо пользоваться *абсолютно*всеми* возможностями С++?

Расскажите, в чем костыльность, например, STL (про boost не будем, вы его не осилите никогда). Как расскажете, приведите пример аналогов из C.

Вот только что-то мне подсказывает, что повторится известная история с Альфексом Каанокеном, который тоже брызгал слюной про костыли, а как дошло до дела, тихо слил тему.

stellar
()
Ответ на: комментарий от Led

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

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

- кривая архитектура

- невыполнимое техзадание

- слишком слабое хардваре

- разработка в режиме цейтнота с соответствующим снижением качества кода

- ошибка в выборе среды разработки

- плохое финансирование / интриги в коллективе / отсутствие мотивации / непоставленность рабочего процесса

Вариантов - море, и "выбор не того языка" вполне может и не быть основной причиной неуспеха.

stellar
()
Ответ на: комментарий от stellar

> А что, если программа на С++, это автоматически означает что просто необходимо пользоваться *абсолютно*всеми* возможностями С++?

Хотя бы какими-нибудь. А то обычно пишут cout << "Hello world"; вместо printf("Hello world"); и считают, что используют "возможности С++".

>Расскажите, в чем костыльность, например, STL

В том, что сами шаблоны С++ - это костыль. Но, я понимаю, вам это трудно осилить.

> Как расскажете, приведите пример аналогов из C.

Порассуждаем на тему "Что было бы, если бы у бабушки были яйца"? :)

anonymous
()
Ответ на: комментарий от anonymous

>И поэтому С - плохой, да?

В данных случаях - да.

>Написали бы на православном языке, все было бы нормально? :)

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

Led ★★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.