vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Тут сегодня в debian-russian кто-то высказался, что де у C++ есть плюсы и минусы. Минусов больше.
Не могу не согласиться. Я знаю целых два плюса C++. Оба - в названии.

Date: 2012-10-18 10:50 am (UTC)
From: [identity profile] mithraen.livejournal.com
1. Структуры данных. Я вот наблюдаю как в Digium реализуют различную логику для хранения данных, начиная со связанных списков. На препроцессоре C. Феерический бардак получается.

2. Паттерн RAII. Очень удобно, например, чтобы не забывать освобождать локи (если код сильно ветвистый, ошибки с локами очень частые). Существеный процент багов в астериске как раз решают легко этим паттерном.

3. Более жесткая типизация. Конечно, до haskell'а какого-нибудь как до луны пешком, но все же.

4. Перегрузка функций. То, для чего в C чаще всего используют макросы. Например реализация банальных min/max.

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

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

Date: 2012-10-18 11:09 am (UTC)
From: [identity profile] max630.net
> типизация ПЕРЕМЕННЫХ в отличие от типизации ЗНАЧЕНИЙ
А это что, кстати, означает? Я это видел уже где-то, но в чём смысл не понял.

Если надо сделать перемемую не переменной - есть const, тоже кстати неплохая штука, хотя оно как раз есть в C.

Date: 2012-10-18 11:16 am (UTC)
From: [identity profile] max630.net
Это называется динамическая типизация. Конфетка на любителя, мягко говоря.

Date: 2012-10-18 01:48 pm (UTC)
mc6312: (Default)
From: [personal profile] mc6312
> А это означает, что переменные - не типизированные

Угу. Функция ждет, что в параметре строка, а ей прилетает словарь, например.

Date: 2012-10-18 10:13 pm (UTC)
slobin: (Default)
From: [personal profile] slobin
На практике почему-то эта страшилка случается очень редко. Есть одно комичное исключение -- когда функция ждёт последовательность строк, а ей прилетает строка, которая, о боги!, в питоне является последовательностью односимвольных строк. Но это Гвидо довыпендривался, в более других случаях почему-то не прилетает. Не тот вид ошибки, который кодеры реально делают. Не знаю уж почему, но не делают. Вот страшилка времён фортрана, про опечатку в имени переменной, изжила себя потому, что кто ж их сегодня руками целиком набирает? А почему не реализуется страшилка про словарь вместо строки -- не знаю, но вот не реализуется почему-то.

... Identical to supernatural ...

Date: 2012-10-19 04:19 am (UTC)
From: [identity profile] max630.net
Да ладно, куча пхпшных эксплойтов основана на приведении типов.

Date: 2012-10-19 04:23 am (UTC)
mc6312: (Default)
From: [personal profile] mc6312
В питоньих библиотеках как раз попадались функции, которые могли один и тот же параметр разного типа жрать. Внутри, естественно, проверка типа вручную через isinstance и т.п.
Еще сей длинный и чешуйчатый язык одноэлементные кортежи без спросу разворачивает при передаче их как параметра, если после элемента запятую не влепить.

Date: 2012-10-19 04:37 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Это не кортежи.

Date: 2012-10-19 04:26 am (UTC)
From: [identity profile] max630.net
http://www.google.com/search?q=%22object+has+no+attribute%22 , опять же

Date: 2012-10-18 11:11 am (UTC)
From: [identity profile] mithraen.livejournal.com
1. Я думал мы сравниваем C и C++. C++, если не использовать большинство его дурных фич где не надо -- лучше.

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

2. К счастью да. Правда вот даже в Java их -- нет. И вообще в языках со сборкой мусора с этим бывают проблемы. В perl AFAIR хотя бы сборщик мусора инкрементальный, поэтому в нем такая радость работает.

3. Более жесткая чем в C, разумеется.

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

5. Если не использовать iostream и прочую чисто C++ мерзость, можно обойтись без его жуткого рантайма. Но когда мы говорим о сравнении со скриптовыми языками, то тут уже слова про рантайм, мне кажется, не к месту -- у перла он все равно больше.

$ ls -l /usr/lib64/libperl-5.16.so
-rw-r--r-- 1 root root 1615416 Sep 26 04:39 /usr/lib64/libperl-5.16.so

У C еще есть важная ниша -- библиотеки. Т.е. код, который может использоваться из разных приложений на разных языках программирования. Код на Perl использовать из какого-нибудь Haskell будет проблематично.

И вот по-настоящему хорошего языка для их написания сейчас нет. C++ просто меньшее из зол.

Date: 2012-10-18 11:17 am (UTC)
From: [identity profile] mithraen.livejournal.com
export "C" никто не отменял.
но -- да, это требует доп усилий.

Date: 2012-10-18 11:14 am (UTC)
From: [identity profile] mithraen.livejournal.com
Добавлю, еще есть приложения где существенная часть кода должна быть оптимизирована. Те же web-сервера, или вот тот же Asterisk. Их надо писать на компилируемом (хоть бы и JIT) языке программирования. Причем существенная часть кода там это перетасовка байтиков, и организация более эффективных структур хранения данных.

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

Date: 2012-10-18 11:24 am (UTC)
From: [identity profile] mithraen.livejournal.com
Erlang хорош тем, что в отличии от большинства ныне принятых подходов к разработке IP-сервисов не делает тред на каждый сокет (вернее использутся собственные легковесные треды). Благодаря этому если переписать просто втупую какой-нибудь apache на erlang он, в итоге, под большой нагрузкой будет работать быстрее.

Но вот nginx уже так переписать не получится.

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

Date: 2012-10-18 01:10 pm (UTC)
From: [identity profile] mithraen.livejournal.com
1. По поводу тредов согласен целиком и полностью. Я, кстати, не знаю ситуаий где они были бы необходимо (и нельзя было бы обойтись shared memory).

2. Если в апач не встраивать языки программирования то он не нужен, ибо есть nginx, который легче и шустрее. Или какой-нибудь lighttpd, если нужен cgi а не fastcgi.

3. Себестоимость массового софта существенно меньше себестоимости железа. Оптимизировать какой-нибудь апач есть смысл, например.

4. Про Erlang согласен полностью.

5. Про использование пары C + скриптовый язык также согласен.

C++, как я уже сказал, пригоден как замена C во многих случаях. Именно благодаря тому, что на C++ можно писать столь же низкоуровневые вещи как и на C. А вот высокоуровневые нельзя ни на одном из них. И тот же Perl использовать целесообразнее во многих случаях, в которых сейчас используют C/C++.

P.S. Собственно о чем мы спорим? Мы по всем позициям согласны, кроме одной -- я считаю, что "C++ можно, и часто даже нужно использовать вместо C в качестве 'C с плюсами', если не использовать большую часть его дебильных псевдофич"

Date: 2012-10-18 01:32 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
1. У cgi 2 проблемы:
  • интертрепатор долго инициализируется;
  • коннект к некоторым БД (на букву О) ну оооочень долго открывается.
Т.е. все-таки лучше держать интерпретатор в памяти, и пул постоянно открытых коннектов.

(no subject)

From: [personal profile] phd_ru - Date: 2012-10-18 02:02 pm (UTC) - Expand

(no subject)

From: [identity profile] edo-rus.livejournal.com - Date: 2012-10-18 11:21 pm (UTC) - Expand

(no subject)

From: [personal profile] slobin - Date: 2012-10-18 09:52 pm (UTC) - Expand

(no subject)

From: [personal profile] taris_marh - Date: 2012-10-23 05:28 pm (UTC) - Expand

(no subject)

From: [personal profile] eldhenn - Date: 2012-10-19 02:20 am (UTC) - Expand

Date: 2012-10-18 01:49 pm (UTC)
From: [identity profile] mithraen.livejournal.com
Ну, это почти разногласия, ибо частично я с вами согласен:

По CGI vs FastCGI

1. Противопоставление CGI и FastCGI не совсем корректно, ибо это совершенно разные протоколы для разных целей:
- cgi предназначен для запуска отдельных скриптов
- fastcgi это протокол взаимодействия http-сервера с application server'ом (который, в свою очередь, например запускает скрипты)

2. Самое частое применение fastcgi сейчас -- для замены mod_php. В этом случае php5-fpm играет роль application server'а, который запускает много разных PHP скриптов.

3. Применение такого application server'а оправдано при использовании PHP (да, я в курсе, что использование PHP само по себе обычно неоправдано), так как он в состоянии кэшировать, например, результат парсинга скрипта (у которого может быть стотыщ include).

4. Подход, когда приложение запускающее какой-либо код, и приложение контактирующее со внешним миром соединены друг с другом исключительно через tcp или unix sockets я считаю более правильным, нежели комбайны.

По поводу C/C++:

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

(no subject)

From: [identity profile] mithraen.livejournal.com - Date: 2012-10-18 05:23 pm (UTC) - Expand

(no subject)

From: [identity profile] mithraen.livejournal.com - Date: 2012-10-18 05:33 pm (UTC) - Expand

Date: 2012-10-18 10:21 pm (UTC)
slobin: (Default)
From: [personal profile] slobin
Сдвиг влево в качестве оператора вывода чисто визуально режет глаз. Я понимаю, что Страуструп имел в виду (типа стрелочка такая, "засунь вот это вот туда"), но выглядит ужасно. Зато мне, опять же чисто визуально, весьма нравится вот такое:

#OUT + "x = " + x + "\n";

Казалось бы, сложение здесь ещё менее логично, но дело-то не в логике, а во внешнем виде. Так, стоп, торможу! Это даже лучше, чем я думал! Конкатенация строк ассоциативна, поэтому нет разницы между "сконкатенировать и один раз вывести" и "вывести несколько раз". Данная запись эту эквивалентность отражает, логика на месте (в отличие от сдвига влево). Жаль, язык умер, красивый был. :-(

... Каждая концепция порождает свою фигню ...

Date: 2012-10-19 02:23 am (UTC)
eldhenn: (Default)
From: [personal profile] eldhenn
>Сдвиг влево в качестве оператора вывода чисто визуально режет глаз.

А в перле импликация, использующаяся в качестве запятой и двоеточия одновременно, не режет глаз?

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 23 4 56 7
89 1011 12 13 14
1516 17 18 192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 21st, 2025 03:22 pm
Powered by Dreamwidth Studios