LINUX.ORG.RU

[C++?] Серьезный вопрос.


3

2
Просьба ответит серьезно, желательно с аргументами за или против.

Предистория:
Когда то давным давно (я тогда еще только закончил 9-ый класс) я увидел в газете объявление о наборе в летнюю группу по изучению классического программирования. В тот момент я был с компьютером на ты и "очень" хорошо в них разбирался (переустанавливал Windows каждый месяц, хаял Microsoft просто потому, что после моих настроек W приходилось постоянно переустанавливать). Группа по классическому программированию так и не набралась, но набралось 1 человек на Visual Basik for Applications. Я соглсился быть вторым и начались занятия.
Все, что мне там объясняли я схватывал быстро. Меня пригласили продолжить обучение в сентябре на курсе "моделирование".
Там уже был Pascal, который я тогда совсем не знал. Сам курс был очень разношорстный: мы изучали и использование мыши через прерывание, готовились к различным олимпиадам. Параллельно я изучил Pascal.
Потом был Delphi. К концу 10-го класса я уже неплохо владел приемами программирования и вовсю клепал бесполезные программулины. Потом поступил в универ на программиста. Там тоже был Delphi, и я особо не напрягаясь писал все лабы (к моменту поступления я уже был знаком с логикой указателей, самописные стеки и графы, etc).
На 2-ом курсе в гостях у знакомого я разобщался с человеком, который уже насколько лет работал в нерезиновой программистом. Он мне и открыл глаза на мир: "Delphi здох. Его уже похоронили и забыли. Сейчас необходимо знание C++, C#. Необходимо занание паттернов проектирование". Вобщем много чего он мне наговорил. Книжек умных насоветовал, подкинул MSVS 2008, кучу электронных книжек. Я изучил C# по книжке Шилдта. Читал "Идеальный кол" (автора уже не помню). Потом купил(!) себе книжку Шилдта про С++. Мне понравился язык. Тем более что мне казалось, что именно он и есть общепринятый стандарт. Наиболее удобный язык для программиста.

А недавно в соседней теме за упоминание это С++ меня чуть было не съели со всем чем можно. Так-то.

Собственно вопрос: Так стоит ли изучать дальше С++ (а я уже достаточно углубился в книжку Страуструпа, подробно изучая все подводные течения)? Какой язык стоит изучать? Какие из них более востребованны?

Спасибо всем, кто осилил это многобукаф.
★★★★★
Ответ на: комментарий от Alesh
> Я в шоке, это сколько же народу не осилило Це++

Ты думаешь, тут кто-то из недовольных С++ его не знает? :)

Это скорее довольные ничего другого не осилили.

pitekantrop ★★★
()
Ответ на: комментарий от pitekantrop
>Ты думаешь, тут кто-то из недовольных С++ его не знает? :)

Судя по аргументации в стиле: "А там надо память вручную освобождать" --, местные "ниасиляторы" не продвинулись дальше cout << "Hello, world" << endl.

linuxfan ★
()
Ответ на: комментарий от kemm
>Вот как раз в числодробилках давно уже скоростные характеристики лежат достаточно близко к С

"Близко" -- это проигрывают "всего" в шесть раз вместо отставания на порядки? Ты все еще веришь в сказочки, что хацкили/петуны/окамли будут рядом с icc на вычислительных задачах с плавающей точкой?

linuxfan ★
()
Ответ на: комментарий от linuxfan
Ты не отвлекайся, придумывай, чем С -- менее скриптовый быдлоязыг по сравнению с хаскеллем или окамлом.
kemm ★
()
Ответ на: комментарий от kemm
1. тем, что не быдлоязык

2. приведи-ка мне примеры популярного софта на своих хаскелях и окамлях. Ыксмонад чтоли, которым никто кроме конъюктивитных фанатиков не пользуется?

linuxfan ★
()
Ответ на: комментарий от linuxfan
>Судя по аргументации в стиле: "А там надо память вручную освобождать" --, местные "ниасиляторы" не продвинулись дальше cout << "Hello, world" << endl.

Отсутствие сборщика мусора и вправду много чего затрудняет.

>Хаскель... Окамл... А эт, простите, чё??? o_O Вот лично мне оно как бы совершенно пох.

"Давайте спорить о вкусе устриц с теми, кто их ел". Я серьезно, как можно рассуждать о достоинствах/недостатках С++, не зная ничего другого.

Waterlaz ★★★★★
()
Ответ на: комментарий от kemm
> Сейчас он скажет, что не пользуется ни тем, ни другим. 8))

Да какая разница, софт весьма популярный, это нельзя отрицать.

anonymous
()
Ответ на: комментарий от the_Shadow
>Как ни странно, но очень просто. Есть "компиляторы" и есть "интерпретаторы".

И как это относится к языку? "Компиляторы" и "интерпретаторы" суть реализации языка.

>Однако, в силу ограничений интерпретаторов, пригоден для решения малого числа задач.

Значит так... представь себе, что K&R решили, что компилятор для Си нах не нужен и сделали только интерпретатор (понимаю абсурдность, но предположим). Стал ли Си интерпретируемым языком при условии, что сам язык не поменялся? Почему?

Waterlaz ★★★★★
()
Ответ на: комментарий от the_Shadow
> Как ни странно, но очень просто. Есть "компиляторы" и есть "интерпретаторы". Шелл, php, java, c# это, по своей суть либо явно интерпретируемые языки (тот же "шелл" -- bash, tch, tcl/tk,... lua) либо языки с псевдо-компиляцией. Скоростные характеристики в числодробилках даже близко не лежали к С.

Доброе утро, с каким пор компилируемость/интерпретируемость стали свойством языка, а не реализации?

anonymous
()
Ответ на: комментарий от linuxfan
>Судя по аргументации в стиле: "А там надо память вручную освобождать" --, местные "ниасиляторы" не продвинулись дальше cout << "Hello, world" << endl.

Вранье. Аргументация примерно такая:

а) В С++ единственная доступная стратегия отслеживания времени жизни совместно используемого объекта - подсчет ссылок. б) В любой нетривиальной системе счетчики ссылок неизменно текут.

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

Absurd ★★★
()
Ответ на: комментарий от kemm
>2. Мусье пользуется вендой? Что мусье тут забыл?

Понятно. То есть ты и сам не в курсе, чего на них такого клевого написали, но где-то слышал, что "функциональное программирование" -- это такая клевая технология, которая заруливает все и вся. И сразу побежал ссать кипятком на лор о великих и могучих функциональных языках с блекджеком и манд^W монадами.

linuxfan ★
()
Ответ на: комментарий от anonymous
>популярный софт

>darcs

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

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

linuxfan ★
()
Ответ на: комментарий от linuxfan
> Программисты на окамле хреново знают C++, что еще можно сказать, глядя на это?

Ну предоставь нам исправленный и более производительный вариант - а мы уж посмотрим, кто там хреново знает c++.

> Кстати, три волшебных буковки "icc" ты видимо не заметил, зелененький?

Он дает прирост производительности в 6 раз?

anonymous
()
Ответ на: комментарий от Absurd
>В любой нетривиальной системе счетчики ссылок неизменно текут.

А не приходило в голову, что проблема совсем не в счетчике ссылок?

И ведь знаешь, что самое странное: есть куча софта, которая написана не то что на C++, а на голом C, где все делается ручками и нет даже перегрузки операторов, и этот софт исправно работает, не течет и практически не сбоит. Чтобы ты не перенапрягся, я тебе приведу конкретные примеры: а) linux kernel (последний раз видел kernel panic, когда своп находился на битом винте) б) XOrg (не припоминаю падений) в) bash.

>в принципе может доказан математически

Мелок тебе в руки и к доске. Доказывай!

linuxfan ★
()
Ответ на: комментарий от Waterlaz
>Отсутствие сборщика мусора и вправду много чего затрудняет.

Нет. А вот отсутствие нормальных деструкторов в некоторых якобы труЪ-ООП языках - затрудняет.

legolegs ★★★★★
()
Ответ на: комментарий от linuxfan
>а) linux kernel (последний раз видел kernel panic, когда своп находился на битом винте)

Динамическая память в ядре применяется, но все объекты там долгоживущие. Все в среднем аллоцируется один раз и до завершения сеанса. В прикладных приложениях ситуация диаметрально противоположная - до 80% объектов молодые и живут недолго.

>б) XOrg (не припоминаю падений)

В svga режиме он железобетонный, да.

>в) bash.

У каждого отфоркованного процесса память своя. Для парсинга командной строки достаточно выделить один буфер и реюзать каждый раз. Таблицы комплишенов и прочая фигня такого же рода тоже долгоживцщая.

Absurd ★★★
()
Ответ на: комментарий от linuxfan
> Судя по аргументации в стиле: "А там надо память вручную освобождать"

Может ты оргазм испытываешь каждый раз когда delete пишешь?

И напомню аргументацию: http://www.linux.org.ru/jump-message.jsp?msgid=4088836&cid=4097761

pitekantrop ★★★
()
Ответ на: комментарий от anonymous
>Он дает прирост производительности в 6 раз?

На вычислениях с плавающей точкой -- легко.

>Ну предоставь нам исправленный и более производительный вариант - а мы уж посмотрим, кто там хреново знает c++.

using namespace std и еще ряд признаков выдают дилетанта. Возможно, когда-нибудь и ты научишься детектировать говнокод.

linuxfan ★
()
Ответ на: комментарий от linuxfan
Фуй, какой толстый...

>А не приходило в голову, что проблема совсем не в счетчике ссылок?


Ага, а ещё можно и в машкодах кодить....

>И ведь знаешь, что самое странное: есть куча софта, которая написана не то что на C++, а на голом C, где все делается ручками и нет даже перегрузки операторов...


Несистемный софт писать на "голом С"? Тот-же 1С? Или ещё каких "мностров"? Месье знает толк в извращениях. Только не надо говорить, что тебе эти продукты не нужны. Или ты готов оплачивать долбаный "офис-софт" из расчёта "кернеловских" человеко-лет?
yyk ★★★★★
()
Ответ на: комментарий от legolegs
>А вот отсутствие нормальных деструкторов в некоторых якобы труЪ-ООП языках - затрудняет.

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

Absurd ★★★
()
Ответ на: комментарий от Absurd
Ну давай продолжим список, если тебе так хочется: г) python д) openssh е) nginx
linuxfan ★
()
Ответ на: комментарий от Absurd
>В реальном мире никто не будет сидеть и добиваться ортогональности деструкторов, чтобы порядок их вызова был неважен.

"Датышто!" :) А представь как кого-то распирает гордость, что он смог-таки в нескольких конкретных "примерах" таки добиться этой ортогональности... ВСЁ! Весь мир у его ног! =]
yyk ★★★★★
()
Ответ на: комментарий от linuxfan
>using namespace std и еще ряд признаков выдают дилетанта

Плюсовый фан вокруг маленьких плюсовых быдлоидиомочек выдает дилетанта. Тупое пихание const везде, непонятное табу на using namespace std в .cxx файле итп.

Absurd ★★★
()
Ответ на: комментарий от yyk
>Или ты готов оплачивать долбаный "офис-софт" из расчёта "кернеловских" человеко-лет?

И на чем же написан "офис-софт". На петуне? На хацкиле? На окамле?

Ой, стоп, ты же вроде как новенький, давай заслушаем тебя. Итак, C++ -- говно, рулит... Что там рулит по твоему мнению?

linuxfan ★
()
Ответ на: комментарий от Absurd
>Вся RAII - ересь. В реальном мире никто не будет сидеть и добиваться ортогональности деструкторов, чтобы порядок их вызова был неважен. Поэтому плюсовые приложения так обожают сегфолтиться при выходе.

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

linuxfan ★
()
Ответ на: комментарий от linuxfan
> Итак, C++ -- говно, рулит... Что там рулит по твоему мнению?

Бинарная логика в действии. Чёрное-белое, говно-рулит, C++-somthing else... Это неизлечимо.

kemm ★
()
Ответ на: комментарий от linuxfan
> которая написана не то что на C++, а на голом C

Практика показывает, что сишный код, как правило, быстрее сиПиПишного. Хотя вроде бы Си является почти подмножеством с некоторыми оговорками. Есть о чем подумать. Не так ли? ;)

dave ★★★★★
()
Ответ на: комментарий от linuxfan
>>Вся RAII - ересь. В реальном мире никто не будет сидеть и добиваться ортогональности деструкторов, чтобы порядок их вызова был неважен. Поэтому плюсовые приложения так обожают сегфолтиться при выходе.

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

RAII хорошо работает только в одном конкретном случае - когда вся программа представляет из себя дерево каких-то вызовов растущее из main(). Скажем, консольная программа которая что-то сосет из stdin, пережевывает и плюет на stdout. Тут сразу виден кругозор Строуструпа. Циклические конструкции типа обсерверов, так востребованные в гуях например, ломают эту схему сразу.

Absurd ★★★
()
Ответ на: комментарий от linuxfan
>Ой, стоп, ты же вроде как новенький, давай заслушаем тебя.

"а на голом C" тоже я сказал?

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

А разный "для внутреннего использования" софт пишется для "здесь и сейчас", и потому и в том числе и на питоне и прочем.
yyk ★★★★★
()
Ответ на: комментарий от Absurd
>Тут сразу виден кругозор Строуструпа.

Что-то я запамятовал, в каком году дядька зачал C++? Где тогда были твои гуи на питонах, жрущие десятки и сотни мегабайт памяти?

>Циклические конструкции типа обсерверов, так востребованные в гуях например, ломают эту схему сразу.

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

linuxfan ★
()
Ответ на: комментарий от AX
> Причём здесь браузер? Что ты жмёшь кнопки, отрисованные тулкитом, что ты жмёшь кнопки в браузере - разницы никакой. От необходимости изучать (к примеру) как и по каким правилам оформлять текст это не всё-равно не освобождает

Не согласен. Порог вхождения в использование браузера и нового ПО разнится. Более того, в случае с браузером он уже благополучно преодолён. Единственная разница -- в случае с использованием ПО на базе браузера, пользователь должен использовать установленные расширения оного. Не более.

> Ну если у всех работников стоит восьмиядерный проц и 16Гб памяти, то да, дело десятое. :)

Нууу... Не всё так плохо. Достаточно примерно такого сервера. И нормального десктопа, не жрущего такты и память на ровном месте.

the_Shadow
()
Ответ на: комментарий от linuxfan
> "Близко" -- это проигрывают "всего" в шесть раз вместо отставания на порядки?

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

ugoday ★★★★★
()
Ответ на: комментарий от linuxfan
>>Тут сразу виден кругозор Строуструпа.

>Что-то я запамятовал, в каком году дядька зачал C++? Где тогда были твои гуи на питонах, жрущие десятки и сотни мегабайт памяти?

Стандартный С++ требует как минимум 32-битной ОС или DPMI. C сегментированной памятью и himem.sys стандартный С++ не совместим.

>Стало быть, для тебя язык с ручным управлением памятью недостаточно гибок?

Это похоже на ручную коробку передач с одной-единственной передачей.

Absurd ★★★
()
Ответ на: комментарий от anonymous
> Доброе утро, с каким пор компилируемость/интерпретируемость стали свойством языка, а не реализации?

Вообще-то, мы тут пытались пообсуждать один из интерпретаторов С... Был задан конкретный вопрос. Пришлось разъяснять разницу... На пальц... эээ... "интуитивно-понятном уровне".

the_Shadow
()
Ответ на: комментарий от linuxfan
> Чтобы ты не перенапрягся, я тебе приведу конкретные примеры:
> а) linux kernel

kernel (в этом смысле) довольно простой проект. и то утечки
бывают, и частенько.
idle ★★★★★
()
Ответ на: комментарий от the_Shadow
> Порог вхождения в использование браузера и нового ПО разнится.

Ну, в браузере, положим пользователь разберётся, а вот с чего это ему будет проще разобраться с программой, исполняемой и отрисовываемой в браузере не ясно.

ugoday ★★★★★
()
Ответ на: комментарий от Absurd
>Стандартный С++ требует как минимум 32-битной ОС или DPMI. C сегментированной памятью и himem.sys стандартный С++ не совместим.

Боже мой! Поколение-2.0 плюнулось какими-то историческими фразами.

Дорогой зеленый друх, прими к сведению тот факт, что "стандартный C++" замечательно совместим со всем. Видимо, у тебя есть какие-то сомнения насчет нулевого указателя при памяти, разделенные на перекрывающиеся сегменты размером 64kb? Чтобы у тебя не было никаких сомнений, напомню, что указатель мог быть не 16-битным, а 32-битным (far pointer -- segment + offset) и с NULL нет абсолютно никаких проблем.

>Это похоже на ручную коробку передач с одной-единственной передачей.

Сдается мне, ты понятия не имеешь о замечательных языках C и C++.

linuxfan ★
()
Ответ на: комментарий от Waterlaz
> Значит так... представь себе, что K&R решили, что компилятор для Си нах не нужен и сделали только интерпретатор (понимаю абсурдность, но предположим). Стал ли Си интерпретируемым языком при условии, что сам язык не поменялся? Почему?

Waterlaz, мы тут "скриптовый быдлоязык С" с одним товарисчем обсуждали. Сделайте милость -- не вырывайте фразы из контекста. Мне _пришлось_ тратить время на идиота. Не более того.

the_Shadow
()
Ответ на: комментарий от linuxfan
> Что-то я запамятовал, в каком году дядька зачал C++?

в 85. Гуй к тому времени существовал уже 12 лет.

ugoday ★★★★★
()
Ответ на: комментарий от the_Shadow
> Мне _пришлось_ тратить время на идиота.

Ржу. Почему идиотам везде идиоты мерещатся? Сам несёт про "интерпретируемые" и "компилируемые" _языки_, сам выдирает какие-то фразы из середины треда, сам обижается, что кто-то (как посмел!!!) выдрал его фразу из контекста. Контекста, там, правда, никакого не было, который мог бы извинить идиотизм пассажа, но это не важно.

Благодарю за цирк. 8))

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