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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.