LINUX.ORG.RU

Зачем используют C++?

 ,


2

7

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

Сравнение Erlang и C++ по производительности

Хотя опытные Erlang-программисты давно заметили, что их программы для тех же задач получаются более краткими по сравнению с другими широко используемыми в промышленности языками программирования, эмпирическое исследование показало, что для изученных телекоммуникационных приложений код на Erlang был на 70-85 % короче, чем на С++, а производительность системы при переписывании кода с С++ на Erlang возросла почти на 100 %[137][138]. Для одного из использованных в исследовании проектов разница была объяснена написанием дополнительного С++-кода в рамках защитного программирования, управления памятью и кода для высокоуровневой коммуникации, то есть возможностями, которые являются частью языка Erlang и библиотек OTP[138].

Как такое возможно? Почему заточенный на производительность ЯП слил высокоуровневому 100%(!)? Может тут ошибка? Может наоборот?



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

Ответ на: комментарий от Pavval

которая делает эрланг по скорости

ну так тут его любой компилируемый язык сделает (рассматриваем однопоточные сферические тесты в вакууме).

ymn ★★★★★
()

Как такое возможно?

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

Или вот ещё пёрл. Сам Страусструп говорит, мол, не используете штуки, которые вам не нужны. Но вот один из ораторов в данном топике пишет, про существование быстрых библиотек на все случаи жизни. Но ведь ты не можешь запретить разработчикам библиотек использовать Qt например. Или даже stl. А есть же проекты, в которых stl’и и бусты запрещены. Что будешь делать? Да и вообще, наличие подобных запретов само по себе выглядит странным. Что же не так с stl и boost если их запрещают в космонавтике?

Да и вообще, о каких библиотеках идёт речь? Ни одна вменяемая не станет экспортировать классы без пимпл. Т.е. по ситу сишные структуры с указателем на указатель, на указатель, на указатель, на указатель на структуру с указателями. Или делать всё на чумовых темплейтах, с подсчётом факториалов во время компиляции и логами ошибок замером в 65к.

Можно ещё много чего писать, и про скорость разработки, и про засилье ub в сплюснутых программках, а про стабильность решений даже упоминать не хочеться, но это всё не имеет смысла. Те, кто понимаю о чём я и так понимают. А те, кто не понимают - заблудшие души.

Декларация противодействия обману

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

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

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

В нашей фирме так вообще решили даже на собственных изделиях (работающих на ARM) использовать Erlang

Та же история. Сделал п/о на эрланге. Теперь чувак, который обвязку паял, сидит с паяльником чего-то там переделывает. П/о работает стабильнее железа.

пишется на нем просто, быстро,

приплюсовываю.

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

Erlang - это своего рода DSL, тот кто пишет на нем числодробилки либо идиот, либо наркоман, а то и то вместе взятое.Подтюнить производительность при работе с бинарными данными поможет HiPe, если без числодробильни не обойтись, то NIF, drivers в помощь и ничего с этим не поделаешь.

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

Я что-либо говорил о C++?

Он выбирается исключением

Яркий пример лаконичности и простоты кода на Erlang'e в моем посте выше.

У всех своя ниша. ОП слил тред, сравнивая типичные для эрланга задачи с С++, потому имеем права сравнивать эти 2 языка в общем случае. В общем сравнении эрланг сливает, как в плане возможностей, так в плане и области применения. И хватит относиться к этому, как будто я написал что эрланг это гавно. У эрланга своя область применения, у плюсов своя.

comp00 ★★★★
()

C++ используют потому, что это простой язык, и любой на нём может писать, в отличие от эрланга и прочей функциональщины.

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

Можешь мне это не рассказывать)

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

И это на самом деле не шутка, типичный С++ программист такое пишет постоянно

Ну да, конечно: определение класса с main-функцией и описанием в определении.... Верх профессионализма!
//И да, я понял что это было сделано(лапшой в одном файле), дабы показать общее кол-во строк. Но вопрос, зачем зачем создавать свой стринг, если ты хочешь просто вывести строку, при живых char**, std::string, boost::string, QString...

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

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

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

Scala забыл, чтобы нельзя было придраться к неынтырпрайзности prolog'a, ruby и common lisp'a. :)

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

При чем тут вообще фп? Что, структуры данных есть только в фп, а императивщина и массивами обойдется? Посмотри на говнокод в instcombine pass в LLVM, например. Да и на TableGen там же. Был бы язык чуть менее невыразительным и многословным убожеством, такого говна бы не было.

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

Знать как что-то работает != суметь реализовать это. Городить такой огород на С++ - ССЗБ.

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

Ruby

Самый что ни есть ООП.

Python

да

C#

Не трогал, но он вроде идет в категории с java, а ее я уже комментировал

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

Ты дебил. Не хватает switch, получаются дебильные лестницы if-ов. Причем в куче разных задач, от уже помянутых компиляторов, до разбора бинарных протоколов и тупо бизнес-логики. Pattern matching нужен всегда и везде, а то, что жалкий плебс типа тебя им пользоваться не умеет, так на то оно и быдло.

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

Ну ведь убожество же, а не pattern matching. С таким говнокод в llvm менее говняным не станет.

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

Во всех этих языках столько же функциональщины, сколько в CL, а в CL, в свою очередь, не уступающая по мощности объектная система; почему же ты их не называешь ФП языками?

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от comp00

зачем создавать свой стринг [...] при живых char**, std::string, boost::string, QString

...wxString, CString и т.п.

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

А решать практические задачи очевидно нужно на других ЯП

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

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

Любую логику можно реализовать на любом языке.

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

C++ — это ЯП, на нём можно делать много чего, в отличие от игрушечных языков.

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

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

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

По секрету, рельсы это фреймворк. Там дохрена понапихано. В других фреймворках как-то иначе всё происходит?

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

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

Почитай ещё Ruby Best Practices

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

С++ многословен? Это один из тех языков, где нет ничего лишнего.

особенно касты там ну вообще не многословны, буквально имплиситны

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

ты их не называешь ФП языками?

С чего мне называть, к примеру, джаву фп? Там даже функций нет. Лямбды, замыкания это лишь элементы, тот самый сахар, те самые полезные фичи. Тоже самое и С++.
Почему не называю питон ООП? А там уже есть нормальный полиморфизм, а не то __parodie на него? ООП это не классы, это абстрагирование.

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

Но вопрос, зачем зачем создавать свой стринг

Пример о любви плюсовиков к велосипедам и монстроузности, и

char**, std::string, boost::string, QString

тому подтверждение.

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

Там даже функций нет.

И не нужно. Есть методы.

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

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

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

Мужик, еба! Смотри токо, кофе предлагать станут - отказывайся. Туда уже наплевали.

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