LINUX.ORG.RU

Продуктивность разработки на C++.

 , ,


5

12

Уважаемые программисты!

Предлагаю порассуждать о продуктивности разработки на C++ по сравнению с так называемыми скриптовыми языками. Вот, принято считать, что языки на вроде Python позволяют работать программисту более продуктивно по сравнению с C++. И что, дескать, на C++ надо писать только узкие места и всё такое.

Мне же хочется четкого понимания. Может быть это миф? А может быть это просто инерция, потому что так вот принято считать и все тут. Вот сегодня в C++ уже не надо думать об освобождении памяти, так как есть умные указатели. Сегодня есть уже более-менее нормальные IDE для C++. Так? Так.

Так что же тогда мешает писать на C++ столь же продуктивно, как на том же Python? Какие будут рассуждения? Может быть есть какие-то реальные обоснования на этот счёт, кроме как «в конторе Y так делают, значит смысл есть, они умные, им виднее». А может быть есть какие-то рецепты по продуктивности работы на C++?

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

Нет, на крестах не реализуется.

Реализуется.

Но внутри у него будет генерация запроса в рантайме.

Вот ты мне объясни. Тебе реально такой альтернативное одарённый, либо притворяешься? Ты понимаешь, что компилтайм генерация - это оптимизация.

Начнём с того, что у тебя НЕТ ДОКАЗАТЕЛЬСТВ ТОГО, ЧТО ОНА У ТЕБЯ КОМПИЛТАЙМ. Это твои бла-бла.

А продолжим тем, что никакая оптимизация не имеет смысла в ситуации той, где ты обделаешься по производительности по умолчанию. Понимаешь? Это тебе уже сказали, но ты продолжаешь игнорировать. Зачем?

Будет. В рантайме у него не аргументы, а значения аргументов.

Аргументы это и есть значения.

Значения аргументов функции в любой СУБД передаются отдельно (man prepared statement).

Неверно. Эта параша нужна для передачи сигнатуры отдельно от значений. Аргументы передаются в таких же параша-строках как и до этого.

Поэтому, уже на стадии компиляции можно сгенерить запрос вида SELECT foo($1, $2), и уже потом в рантайме передавать значения аргументов отдельно - этим займётся драйвер к СУБД. Ты не в теме, походу.

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

И после всего этого НИКАКОГО смысла говорить о ПРОИЗВОДИТЕЛЬНОСТИ попросту НЕТ.

Нет. Судя по тому, что пишешь сейчас ты, как раз ты не понимаешь что говоришь.

Поподробнее об этом.

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

Сишке и цепепешке ты научился. Что-то там умеешь. А вот разговаривать нормально - нет. Так что всего доброго. Лимит времени на тебя исчерпан.

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

Сишке и цепепешке ты научился

Я бы спросил, на чем основан этот вывод, но лимит исчерпан %)

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

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

Расскажешь подробнее об этих внутренних структурах?

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

Я бы спросил, на чем основан этот вывод, но лимит исчерпан %)

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

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

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

У вас тут у всех какая-то мода на подобное. Ты им пишешь, ты спрашиваешь его 10раз - нахерена там компилтайм. Ты спрашиваешь его десять раз - нахрена компилтайм там, где итак нет производительности, когда как компилтайм - есть оптимизация. Балаболы не могут ответить на эти вопросы - потому что они балаболы.

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

Особенно обожаю россказни мне о том, что можно запилить, а что нет.

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

У меня нет никаких причин считать, что он знает Си или Си++ на уровне «умею решать практические задачи». То, что он демонстрировал - просто трюки примерно одинаковой степени бесполезности; единственное свое более-менее четкое обещание он не выполнил.

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

Расскажешь подробнее об этих внутренних структурах?

О чём именно? Ты чувствуешь руку? Ты же не проверяешь каждый раз - есть ли она реально, либо нет. Я не знаю что именно тут можно рассказать. Задавай какой-то более конкретный вопрос.

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

У меня нет никаких причин считать, что он знает Си или Си++ на уровне «умею решать практические задачи»

Так а я и не говорил про умение решать практические задачи. Я говорил про «что там умеешь». Возможно, трюками и тоннами по сути одного и того же текста в разных интерпретациях, но с одинаковым стилем наката на собеседника всё и ограничивается.

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

Ты сказал «сишке и цэпепешке ты научился», кто-то другой сказал, что царь в 98% случаев прав. Я считаю, что оба утверждения - чушь, но вдруг я что-то упускаю, а другие видят?

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

Ты сказал «сишке и цэпепешке ты научился»

Да, сказал. Научиться можно по-разному. Он продемонстрировал лично мне пример конкатенации строк в компайл-тайме, из чего я могу сделать вывод, что он таки научился программировать на цепепе. Может ли он мейнтейнить или разработать с нуля средний или крупный практически полезный проект в одиночку или в команде - это уже другой вопрос.

кто-то другой сказал, что царь в 98% случаев прав

Лол. Прав - это значит, что не виноват? Ну так я тоже в 98% случаев прав. :-)

вдруг я что-то упускаю, а другие видят?

Вдруг ты упускаешь внушаемость, присущую определённому кругу персонажей, которым довелось читать эксцентричные выпады, приправленные пацанскими фразами для пущей убедительности? :-)

azelipupenko ()

Эволюция Царя

1. Буду все песать на асме, будет быстра пребыстра.

2. Ой, чото нулева на асме воще, лучши нопишу свой езык, убийцу сишки.

3. Да ну свой езык ваще днище, лучши буду царем сишки.

4. Ну а чо, си++ не токой уже и плахой, там есть сишка плюс еще много чиго. <--- Царь находится здесь

5. Указатили все мне абасали и питухи, а у джавы сборка мусара, попацаночке ваще.

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

7. Байлерплейт лалка и питух, нука чо там за этот ваш лисп.

8. А я всигда знал, что лисп лудший, я проста вас тралил, азазазазза!

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

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

Он все свои троюки из гугла копипастит. Его уже несколько раз не этом ловили.

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

Хорошо: как перестать бояться nullptr в коде своём и чужом?

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

единственное свое более-менее четкое обещание он не выполнил.

А что это было за обещание?

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

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

Нашла новую методику. Да какую новую - старую. Эти крысы в надежде, что невтемный человек не пойдёт и не проверит, в надежде, что с этой крысы никто ничего не спорить - врёт.

И вот ты спроси эту крысу про «копипаст из гугла» - оно так же обделается. Почему? Потому что трепло никчёмное.

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

Я и твои потуги так же множил на ноль. Ну ничего, авось кто-то негуглит и не почитает.

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

Раскрой сердце своё всей благости nullptr

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

чужом

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

как перестать бояться nullptr в коде своём

Очень просто - их просто не должно быть. За примера далеко ходить не надо - их и сейчас в крестах быть не должно. Это прямое отображение той концепции, что описывал я. У тебя есть некий источник( той же памяти), который проверяется и после у тебя есть гарантия на то, что никакого nullptr у тебя в try не будет.

Тебе нужно гарантировать валидность данных/ресурсов приходящих из вне. Делать ты это можешь как угодно. Ты можешь использовать те же свойства всех этих внешних источников. Если этих источников много - их круг можно сузить.

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

Допустим то, что никакой malloc() и обёртки над ним не могут вернуть nullptr при аллокации блоков до 4к НИКОГДА. Да и много чего ещё.

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

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

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

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

Ты понимаешь, что компилтайм генерация - это оптимизация.

Бред сивой кобылы :-) Лол :-) Компайл-тайм генерация - это генерация во время компиляции :-) А оптимизация - это процесс поиска оптимума чего-либо :-) Так что не неси туфту, сходи в школу :-)

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

Что ты там пиликаешь ахинею? :-) Лол :-) Ты хоть слышишь себя? :-)

Уважаемый балабол

Лол :-) А кто лучше, уважаемый балабол или неуважаемый балабол? :-) Ты себя к какому типу причисляешь? :-)

И после всего этого НИКАКОГО смысла говорить о ПРОИЗВОДИТЕЛЬНОСТИ попросту НЕТ.

С тобой - да :-) Смысла мало :-) Лол :-)

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

Бред сивой кобылы :-) Лол :-) Компайл-тайм генерация - это генерация во время компиляции :-) А оптимизация - это процесс поиска оптимума чего-либо :-) Так что не неси туфту, сходи в школу :-)

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

Давай я тебе покажу как просто и незатейливо ты множишься на ноль.

Компайл-тайм генерация - это генерация во время компиляции

Зачем? В чём заключается смысл компилтайм-генерации в сравнении с рантайм-генерацией?

Ну для публики я объясню. Что пытается сделать эта амёба. Амёба пытается съехать на подмене понятий.

Компайл-тайм генерация - это генерация во время компиляции

Т.е. тут амёба написала «компилтайм-генерация - это компилтай генерация». Мало того, что эта потуга просто не имеет смысла, но суть не в этом.

Это отвечает на вопрос что. Что такое компилтайм-генерация. А теперь смотрим сюда:

А оптимизация - это процесс поиска оптимума чего-либо :-)

И тут ламерок так же пытается ответить на вопрос «что?». Я тут даже не буду разбирать то - почему определения дерьмо. Это неважно.

Дак вот. А процитировал ламерок мне это:

Ты понимаешь, что компилтайм генерация - это оптимизация.

И это отвечает не на вопрос «что?», а на вопрос «зачем?». Это совершенно другое что. Т.е. не что такое компилтайм, а «что это нам даёт?».

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

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

И в этом вся суть этого бездарного мусора. Эта пустоголовая амёба либо держит всех за совсем идиотов, либо надеется на то, что сможет кого-то обмануть и запутать. Но как всегда, как я уже многократно говорил - место подобных клоунов - в цирке. И никогда подобная малоразвитая балаболка никого не сможет обмануть.

rustonelove ()

ну как сказать. про питонолибы на первой странице уже писали.

на С++ либы особенно под виндой это просто разрыв жопы. причем у меня есть проект с Qt, shared libs и плагинами в отдельном каталоге, где еще и в процессе сборки под виндой надо все библиотеки складывать в один каталог иначе не линкуется при запуске.

еще проблема с либами это то, что часто разные либы используют сильно разное API. даже идеологически разное. разные типы string это вообще атас.

с другой, вот я делаю софтину на С++. на питоне её не сделать, просто вообще не сделать. ну или можно но она будет работать меееедленно и жрать как не в себя. как тут сравнить продуктивность?

есть вещи которые можно сделать только на С++, например тот же Qt. это сложные вещи. очень очень сложные. но если оченьсложности нет, то питон продуктивнее. если есть, то продуктивность питона строго равна нулю.

ckotinko ★★☆ ()
Ответ на: Эволюция Царя от anonymous

Кстати, особенно интересно то, что чуть-ли не первая моя тема на лоре про кресты и она почищена, но не выпилена. Вот ведь незадача. Как ты это объяснишь? Мне даже интересно.

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

Давай я тебе покажу как просто и незатейливо ты множишься на ноль.

Нет, не покажешь :-) Скорее надорвёшься :-)

Зачем? В чём заключается смысл компилтайм-генерации в сравнении с рантайм-генерацией?

Смысл генерации заключается в возникновении результата :-) Бывает, он возникает в ходе компиляции, а бывает - в ходе выполнения :-) Не ищи смысла там, где его нет :-) Лол :-)

Дак вот, компилайм генерация значений - есть оптимизация генерации значений

Нет, это бред и ахинея :-) Выбирай из двух что тебе больше нравится :-) Просто компайл-тайм генерация предоставляет результат вычисления ещё до запуска программы :-) Рантайм генерация предоставляет результат уже в ходе работы программы :-) Компайл-тайм генерация отрабатывает ровно один раз в ходе компиляции :-) Но и рантайм генерацию тоже можно выполнить ровно один раз, но это уже на плечах программиста (вот это и будет твоя любимая оптимизация) :-) Но откуда тебе это знать? :-) Лол :-)

И самый оптимальный способ получения строки в рантайме - это не генерация её в рантайме, а генерация в компилтайме.

Не бывает «самого оптимального», как не бывает «чуть менее оптимального» или «чуть более оптимального» :-) Бывает просто «оптимальное» или «неоптимальное» :-) Ты чего-нибудь про экстремумы слышал? :-)

Но как всегда, как я уже многократно говорил - место подобных клоунов - в цирке.

Лол :-) Место подобных неучей в школе :-)

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

Ну что я могу сказать - в очередной раз втоптано в дерьмо. Клоун так и не ответил на вопрос - зачем нужна компилтайм-генерация. И поточему7 потому что клоун знает, что как только на это он ответит - он нассыт себе на рожу.

Далее пошли убоги потуги опять уезжать с темы на «что такое компилтай-генерация».

Нет, это бред и ахинея :-) Выбирай из двух что тебе больше нравится :-) Просто компайл-тайм генерация предоставляет результат вычисления ещё до запуска программы :-) Рантайм генерация предоставляет результат уже в ходе работы программы :-) Компайл-тайм генерация отрабатывает ровно один раз в ходе компиляции :-) Но и рантайм генерацию тоже можно выполнить ровно один раз, но это уже на плечах программиста (вот это и будет твоя любимая оптимизация) :-) Но откуда тебе это знать? :-) Лол :-)

Т.е. что из этой ахинеи следует? Ничего. Этого идиота кто-то спрашивал о том, что такое компилтайм-генрация? Нет. Зачем он это пишет? просто так.

Не бывает «самого оптимального», как не бывает «чуть менее оптимального» или «чуть более оптимального» :-) Бывает просто «оптимальное» или «неоптимальное» :-) Ты чего-нибудь про экстремумы слышал? :-)

О, а тут школотёнок решил блеснуть, но опять же - ему это не удастся. А почему? Потому что идиоту с уровнем развития в районе табуретки просто невозможно не обосраться.

«Самый оптимальный» бывает по причине того, что оптимальность определяют условия и критерии. В разных условиях оптимальность - она разная. Поэтому бывает сколько угодно много оптимальных решений.

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

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

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

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

Лол :-) Место подобных неучей в школе :-)

Это типичное поведение мусора. Оно пытается съехать с темы, пытается подменить понятия, рассказывает про школу из которой ещё не вылезла. Амёбка пытается всех загнать в рамки своей убогости, в рамки своего примитивного понимания, в рамки тех, убогих определений, что ей давали за партой.

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

Пусть верят.

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

Тоесть, по твоему, «ручная» проверка всего и вся — лучше системы типов, предоставляющей гарантии по умолчанию?
Или лучше описать все возможности в документации, вместо вернуть Result/Optional?
Делая так, я стану лучше доверять внутренним структурам?
edit: И если не проверкой, то каким ещё образом можно изучить поведение платформы?

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

Тоесть, по твоему, «ручная» проверка всего и вся — лучше системы типов, предоставляющей гарантии по умолчанию?

Где я такое писал? Я как раз писал о том, что если ты можешь эти гарантии взять где-то - то ты их оттуда и берёшь. Там было и про типы и про всё остальное.

Но опять же, есть нюансы. Надо отличать кастыли и гарантии.

Или лучше описать все возможности в документации, вместо вернуть Result/Optional?

Я уже писал о том, что в рядовом коде nullptr ещё используется как флаг отсутствия результата, а не только как какая-то ошибка из вне. Это поведение нужно отличать.

Result/Optional - это именно про это, а так же про возврат ошибок.

Вот ты написал get() -> nullptr - он к тебе пришел. Как ты отличишь ситуацию «нету объекта» и от ситуации «нету памяти». Это решается через в крестах теми же исключениями. А nullptr остался с сишных 70 годов.

Т.е. я не обсуждаю тут nullptr как флаг - он для этого не нужен.

Делая так, я стану лучше доверять внутренним структурам?

nullptr-флаг это твоя внутренняя логика, нету результата - это внутренняя логика. Это мало соотносится с тем, о чём говорил я. Я говорил именно о том, что привноситься в твою программу из вне и что ты внутри неё обрабатываешь.

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

edit: И если не проверкой, то каким ещё образом можно изучить поведение платформы?

Изучить можно изучением платформы. Если нету возможности это сделать, либо нет какого-то общего, подходящего для всех платформ и приемлемого тебе правила - решение одно. Отлавливать всё это не внутри, а снаружи.

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

Что такое платформа? Это железо под которым работает программа, это ОС под которой работает программа. Вот их устройство и надо изучать, если тебе это надо, конечно же. Выше я описал нюансы.

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

«Самый оптимальный» бывает по причине того, что оптимальность определяют условия и критерии. В разных условиях оптимальность - она разная. Поэтому бывает сколько угодно много оптимальных решений.

Ламер ты и есть ламер :-) Выбирать «самый оптимальный» среди множества оптимальных по разным критериями - это так же сильно, как сравнивать вафли с табуретками :-) Если ты даже в такой элементарщине застрял, то какой там тебе цепепе с его отмороженным аппаратом типов :-) Сходи в школу для начала :-) Лол :-)

На вот, почитай что такое критерии оптимальности и расскажи нам всем как ты собрался искать «самый оптимальный» среди оптимальных по разным критериям :-) Ох и бред :-) Бгг :-)

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

Вот смотрим. Как действует данная малоразвитая амёба. Амёба ни на что не отвечает - всё игнорирует. Она выкатила какой-то несвязный бред про школу, ты ламер потому что ламер. «Это как вафли с табуретками». Естественно, что данный мусор никогда ничего конкретного не напишет. Он никогда не ответит в своих потугах на вопрос «почему?». Потому что это балаболка, она понимает, что она никчёмна, что она уже слилась. Поэтому она и пытается нести несвязный, неконкретный бред.

На вот, почитай что такое критерии оптимальности и расскажи нам всем как ты собрался искать «самый оптимальный» среди оптимальных по разным критериям :-) Ох и бред :-) Бгг :-)

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

Почему это табуретка это написало? Потому что она понимает, что напиши она что-то конкретно - тут же обделается, как и до этого.

Поэтому она пастит левую ссылку. Ничего не объясняя, не делая ни единого вывода, никак не опровергая ни одного моего утверждения.

Она просто пастит дерьмо, в надежде на то, что какой-то мимокрокодил увидит эту ссылку и подумает «ба, да эта табуретка смогла ссылку спастить - она сто процентов понимает что она постит и зачем». Человек просто подумать не может о том, что эта просто идиот.

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

Да нет, именно это и будет делать эта табуретка. Т.к. ничего иного она не может. В этом и суть её методики.

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

ни единого вывода

Вывод один - ты ламер и балабол :-) Сначала ты напердел лажу про «самый оптимальный» :-) Потом тебе дали понять, что оптимальным может быть только одно решение :-) Ок, ты приплёл критерии оптимальности, сопроводив это пердежом что «самый оптимальный» таки существует :-) Но ты не смог показать как ты собрался выбирать «самый оптимальный» из множества оптимальных по разным критериям :-) Слив засчитан :-) Лол :-)

anonymous ()

Так что же тогда мешает писать на C++ столь же продуктивно, как на том же Python?

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

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

Да что там, в плюсах нет модулей, а механизм инклюдов такой кривой, что есть зависимость от того, в каком файле сырца и в какой последовательности эти инклюды включены. И она неоднозначна. Это реально жесть.

Ну и упоротый синтаксис плюсов с контекстной зависимостью переводит программистов на этом языке в разряд илитных снобов. И если у тебя не знакомых, кто бы разбирался в плюсах, вменяемой помощи ты нигде не получишь. Либо сам потратишь годы или даже десятилетия на понимание _части_ языка (если сможешь себе такое позволить). Это же адовый пипец.

Если хочешь начать учить плюсы, прочти сначала вот эту новость: Члены комитета по стандартизации ISO/IEC C++ выступили с критикой нового стандарта языка C++17. С такой терминологией тебе придется иметь дело. Астановись пока не поздно!

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

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

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

В том то и дело, что промышленные проекты на С++ могут собираться несколько часов при первом билде
За это время на скриптовом языке ты уже успеешь

Давай порассуждаем. Вот ты вменяешь в вину C++ медленную компиляцию. Это факт. Но назови хоть один такой проект, пожалуйста, который компилируется «несколько часов» И который можно было бы переписать на скриптовом языке? Ну вот давай представим себе, что GCC, (который, к слову, компилируется на моей машине где-то полчаса), переходит на Python. Сколько потребуется времени на компиляцию ядра Linux таким компилятором?

Или давай попробуем себе представить миграцию Chromium на всё тот же Python. Или нет, давай возьмём Ruby - выразительный такой весь из себя язык. На этом же языке запилим виртуальную машину JavaScript. Ты себе представляешь эффект?

Я это к тому, что те проекты, которые на C++ собираются часами, немыслимы на скриптовых языках и подавно. Кто-нибудь мыслит себе такое?

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

За это время на скриптовом языке

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

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

холодный расчёт сегодняшних опытных кодеров, знающих C++ и Python, когда они предпочитают второй первому.

Никогда. Крестокодер все пишет на крестах, даже если задача решается одной строкой в баше. Дело в том, что после постижения цепепе уже места в голове не остается. Вот если человек не практикующий кодер, а какой-нибудь научник, то другое дело. Там цепепе крайнее средство.

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

Тут признаюсь, что переложил опыт моих коллег, которые сопоставимый по объему код на С# собирают намного быстрее кода на С++. Имеется код на С++, который разрабатывается уже очень давно, примерно 20 лет, состоит из кучи модулей (более 100) и ядра. У кого-то он собирается 1.5 часа, у кого-то 2. Бывало, что при линковке я вечером в конце рабочего дня, когда дело доходило уже до линковки некоторых проектов, уходил домой, и она заканчивалась в середине ночи. Разработчики, которые переписывают сейчас проект на С# этой хуйней не страдают

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

20 лет проекту, а он до сих пор собирается. Вот это и есть один из плюсов c++. Можешь представить себе код на шарпе 20-летней давности? Нет, не можешь, потому что дотнету 15 лет всего. Ну и шарп не скриптовый всё же.

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

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

sotlef ()

python отлично подходит как и любой скрипт для «вызова библиотек». например одной строкой загрузить данные, второй строкой почистить их и третей строкой обучить лес деревьев. Это если правильно на нем писать. Если на пайтоне писать как на С++, а если в вашем коде есть цикл, то скорее всего вы пишете неправильно, то пайтон хуже с++.

Таким образом кита со слоном сравнивать не стоит.

i3draven ()

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

Они не слышали, например, о Qt где уже давно можно писать в 2 строки разные штуковины. И не видели нормальных IDE, коих для плюсов наплодилось огромное множество.

Например, никто видимо в глаза не видел тот же QtCreator где минимализм, где можно в два клика быстро создать проект и комбинацией клавиш «Ctrl+B» собрать его. В том же QtCreator из коробки поддерживаются qmake, Qbs, CMake. Особенно первый. QtCreator это еще министудия.

Извините господа, но судя по вашим комментариям вы дальше книги «С++ за 21 день» и изучения STL(которая никогда не отличалась функционалом) не дошли. У вас до сих пор все собирается ручками через вызов gcc в командной строке. Интересно! Люди вообще слышали о VisualStudio, например. Об Xcode.

У меня такие впечатления что тут одни сисадмины, которые ничего кроме make & make install

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

Сравнивать интерпретируемый прикладной скриптовый язык с динамичской типизацией, с компилируемым системным языком где типы известны в момент сборки. Это тоже самое что ругать трактор что он не ездит как феррари.

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

А в Си и плюсах реализована семантика O(1). Если ты можешь за констатное время получить доступ к элементу массива, значит такие массивы будут присутствовать в языке. Все что O(1) уже засунуто в язык давным давно.

Системы модулей никогда не будет в Си, по той простой причине, что смысл в том, что компилятор обрабатывает каждый исходник как самостоятельный модуль, который можно либо слинковать, либо превратить в отдельную разделяемую библиоткеу или во что-то другое. Потому что здесь четкое абстрагирование от других частей программы. Т.е. можно скомпилировать 1% проекта и оно будет работать. В инклудах просто записывается декларация для функций. Идея изначальна была такой.

baist ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)