Здравствуйте, sergey2b, Вы писали:
S>практически все отметившиеся критикуют Тёмчик S>есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень
Хорошо отревьювил ned- сжато, только по делу. Остальные в духе «using namespace это плохо, так как я не using namespace» и «visitor это плохо, я читала». Оба перечисленных высказывания — деградация развития на пару ступенек вниз. Как я и писал раньше, очень многие C++-ки, в силу объективных причин, остановились в развитии 20 лет назад. Это те, которые держатся за C++ зубами и при этом не в HFT и не в играх, где действительно плюсы- language of choice. Те C++ки, у которых есть кругозор и способность изучать новое, просекли всё и сбежали на Java. Но я и за Java не агитирую, сейчас это такая легаси, как был C++ в начале 2000-х. Ну а C++ сейчас это такой кобол для поколения X. Я за Node и Go для бэкенда и консольных программ/демонов.
Здравствуйте, so5team, Вы писали:
Тё>>Остальные в духе «using namespace это плохо, так как я не using namespace» и «visitor это плохо, я читала». Оба перечисленных высказывания — деградация развития на пару ступенек вниз.
S>Да вы просто ходячее подтверждение эффекта Даннинга-Крюгера.
Вы ниасилили больше 1 языка и предложили заменить visitor кучкой говнокода (т.е. ниасилили и visitor тоже). А я подтверждение. Ну ок, не буду спорить
Тё>>и при этом не в HFT и не в играх, где действительно плюсы- language of choice.
S>Вы, как минимум, забываете еще про такие области, как телеком, HPC, системное программирование и embedded. S>Вот, отличный пример для ознакомления и расширения кругозора: Обработка потока данных на примере deep packet inspection: внутренняя архитектура и решения.
Можно вкратце- засунули логику в ядро или проделали дырку в юзермод? Если первое, то плюсам в ядре не место, если второе- то с указанным справится жава.
Здравствуйте, Тёмчик, Вы писали:
S>>"Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"
Тё>Очень просто.
Не просто. С момента перевода книги банды четырех на русский язык вопросы по паттернам на собеседованиях в странах СНГ по популярности могли поспорить с вопросами про гномиков и виртуальный деструктор.
Еще более странно, что как раз Visitor относится к числу тех немногих полезных на практике паттернов в языках типа C++. Т.к. там из-за отсутствия алгебраических типов данных и паттерн-матчинга Visitor дает надежный и расширяемый способ сопоставить M способов обработки для N структур данных. Если вы об этом способе узнали только в 2016-ом на собеседовании, то...
Здравствуйте, Тёмчик, Вы писали:
Тё>Здравствуйте, Kernan, Вы писали:
Тё>>>У Саттера проблема нескольких аллокаций: первый обьект создан успешно, второй бросил- успешно созданный обьект утек. Переписать можно как явно инициировать первый unique_ptr, потом на другом шаге второй, потом позвать функцию. K>>Для этого и используют make_*, unique_ptr и try-catch. На эту тему тут Джаззер 100 лет назад целый объёмный пост делал к тогдашнему С++х03.
Тё>Проблема известная. К моему случаю не относится.
Извиняюсь, что встреваю — вопрос показался интересным.
Не может ли вот этот код
[...]
mpp.slaves.emplace_back( new Oven() );
[...]
Превратиться в следующую последовательность?
— создали Oven в куче, держим сырой указатель;
— mpp.slaves.emplace_back вызывает grow до того как создан unique_ptr;
— получаем исключение от allocator;
— указатель на Oven потерян.
При ипользовании push_back() в данном случае проблемы не было бы — unique_ptr был бы создан до вызова самого push_back() и возможной реаллокации в контейнере.
Здравствуйте, aik, Вы писали:
PM>>Ну там же выше в пунктах перечислено почему так: вызываем new для произвольного типа T, передавая конструктору perfect forwarding parameter pack, всё очевидно же для любого человека с реальным опытом в С++, знакомого с развитом язык в последние лет 10. PM>>Для меня, например, закорючки Rust тоже выглядели пару лет назад птичьим языком. Но я про Rust только парочку рекламных статей почитал и какое-то введение типа Rust for C++ programmers.
aik>Хороший язык, вроде, и мощный, но мне на результат смотреть больно. Я не чтоб спорить пишу, а так, пояснить.
aik>Закорючки то ладно с ними, они то как раз понятные, в стиле "о, теперь и так можно". Тут больше другое глаз режет — вот есть проблема что всё подряд может кинуть исключение, это прибито гвоздями к языку ключевым словом throw. Но при этом не прибито гвоздями автоматом откатиться и подчистить за собой если что то пошло не так, как в какой нибудь яве или питоне.
Эээ а разве в питоне нет with (или using в C#) для совобождения ресурсов? Файл или сокет закрыть, транзакцию откатить, например. В яве это вроде бы делается тоже вручную с try/finally который надо не забыть написать в каждом месте использования ресурса.
Управление ресурсами при ошибке или выкидывании исключении в любом случаю потребуется.
aik>"Следуем духу си" говорят они (правда, дух си — это навороченный макроассемблер, а тут совсем другая история). А чтоб реализовать такой откат — нужно делать как в процитированном куске, т.е. шаблонная функция, тянущая за собой ещё 2 шаблона с синтаксическим шумом типа "std::" ("using namespace" уже забраковали) и "std::unique_ptr<T>" (он там дважды, хотя одного раза в принципе достаточно, но не в c++).
Они говорят вообще-то "Don't pay for what you don't use" и то это не всегда. Функця make_unique() уже есть в стандартной библиотеке С++14, ее просто нужно использовать. Если вы призваны к С++11 то да, придется одни раз написать включить в проект. Жизнь несовершенна — веб разработчиков вот не смущают polyfill, приходится с таким существовать.
Синтаксический шум это субъективно из разряда "синтаксический оверхед".
"using namespace" забраковали только в заголовочных файлах, это просто элементарная гигиена имен для человека пару лет писавшего на С++. Внутри единицы трансляции или функции, пожалуйста пользуйтесь на здоровье
aik>При этом (поправьте меня, если я не прав) компилятор не напомнит что мы по ошибке влепили неподходящий умный указатель (да и откуда ему знать то).
aik>Т.е. прострелить себе ногу нельзя (наверное), но можно оторвать взрывом. Развитие какое то странное, типа язык был недостаточно сложный, надо навернуть сверху.
Можно и прострелить, и оторвать, и пересадить — свобода же. Направление развития С++ всегда диктуют соображения обратной совместимости. Популярность языка D (или многолетний дрейф Python 2 -> 3) показывает, что обратная совместимость для многих проектов важна.
aik>Кстати, а на "f( new T1, new T2 )" хоть какой нибудь компилятор ругается что "а где же смартпоинтеры"? g++ 8.1 сожрал молча.
Зачем ругаться, это же абсолютно допустимый код, один из допустимых стилей. В T1 или T2 может быть перегружен оператор new и никакой смартпоинтер для этого типа не нужен.
Хотите использовать единый стиль в команде, запускайте clang-tidy с нужным набором правил (или создайте свой уникальный) где-нибудь в precommit-hook. Это же C++ без единственно верного решения на все случаи жизни. В нем даже про модули еще никак не договорятся, не говоря уже о единой системе сборки или управления зависимостями.
Здравствуйте, Тёмчик, Вы писали:
Тё>Остальные в духе «using namespace это плохо, так как я не using namespace» и «visitor это плохо, я читала». Оба перечисленных высказывания — деградация развития на пару ступенек вниз.
Да вы просто ходячее подтверждение эффекта Даннинга-Крюгера.
Тё>и при этом не в HFT и не в играх, где действительно плюсы- language of choice.
Здравствуйте, Тёмчик, Вы писали:
Тё>Я вижу, какой адский треш происходит прямо сейчас в т.н. "микро" сервисе на жаве и мне кажется, что использование ts и нода там позволило бы сократить число буков в 20 раз. Если go такой же типизипованный и краткий, да ещё и компилируемый- хочется его туда применить вместо жавы.
Go — говно. Но во многих случаях я сам буду настаивать на его использовании. Уж больно низкий порог входа и хорошая степень контроля за жопоруками.
Здравствуйте, sergey2b, Вы писали:
S>скажите пожалуйста, а вы знаетте какие нибудь дешовые микроконтролеры, что бы у них было 128k RAM и больше и частота 24 Мгц и выше
Дешёвых — не знаю.
Обычно много памяти идёт со старшими моделями, вместе с кучей периферии и в многоногих корпусах.
Хотя подключать внешнюю будет ещё дороже, да и 128кб не тот объём, для которого это было бы разумно делать.
У STM32 начиная с линейки F2 есть столько RAM.
F215 стоит $11-12 поштучно и ~$7 от 1000 штук. Это достаточно дёшево ? 120мгц.
Здравствуйте, ned, Вы писали:
ned>Интеграционные (system) тесты на нём писать ещё удобно.
Мы так и делаем, но наметилась занятная проблема. Интеграционных тестов очень много, так как мы вообще отказались от ручных тстов и всё автоматизировали. В итоге интеграционные тесты настойчиво просят юнит-тесты на самих себя, в основном по причине динамической типизации. Время от времени в рантайм бабахает
Здравствуйте, sergey2b, Вы писали:
S>Здравствуйте, IID, Вы писали:
S>я сейчас пишу на Си но на easyelectronics есть люди которые еще пишут на Pascal
S>скажите пожалуйста, а вы знаетте какие нибудь дешовые микроконтролеры, что бы у них было 128k RAM и больше и частота 24 Мгц и выше
ESP32 конечно, девборда стоит ~ 6$ (сам чип еще дешевле), полмегабайта памяти и много флеш памяти, 160-240 МГц, питон есть
Здравствуйте, sergey2b, Вы писали:
S>а какие книги сейчас относяться к нетленкам
Про книги сказали. Конечно же не забывать про всякие конфернеции по С++ с тяжеловесами на которые ссылки проскакивают. S>могли бы вы посоветовать open src проекты где есть примеры хорошего C++
Внезапно, никсмановский YAS довольно неплохо сделан, но там больше про метапрограммирование.
Мне понравилось ещё вот это.
Честно говоря, многое в OS — г-но.
Здравствуйте, Тёмчик, Вы писали:
Тё>уменьшил число букв. Это правда так плохо?
Да. Очень плохо.
S>>* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&. Тё>Напишите код, чтоб пояснить. Ибо я ещё раз перечитал- ничего там ни отнять, ни прибавить.
Тут еще напрашивается вопрос о том, имеет ли смысл вообще создавать onVisitor и offVisitor атрибутами в MultiPowerPoint. Возможно, их можно было бы создавать по-месту:
Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах.
Visitor?! OMG. Судя по коду, он там нафиг не упал. Интересно было бы условие задач увидеть, конечно, но если я прав, то уже только за него я бы отказал. Всякая "мелочь" типа публичных членов класса и т.п. меркнет на фоне визитора.
Судя по коду, для MultiPowerPoint там хватило бы просто интерфейса IPowerSink с методами On/Off, от которого отнаследовать потребителей.
Для фигурок хватило бы IShape с методами ToString() и GetArea().
Тё>Ну и в защиту visitor- я про него узнал как раз из-за этого теста этой конторы.
Счастливчик. Я про него узнал году в 2002-м, когда мне пришлось копаться в говнокоде, который наворотили новоиспеченные любители паттернов.
С тех пор он для меня является одним из явных признаков, указывающих на потенциальный оверинжиниринг.
Тё>Потом успешно применял для преобразования 2+ версий сообщений от брокера, и для печати их в консоль вообще замечательно зашёл.
Понятно, что его можно успешно применять. Вопрос в том, нужно ли.
Здравствуйте, Тёмчик, Вы писали:
Тё>Ну и в защиту visitor- я про него узнал как раз из-за этого теста этой конторы.
Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"
aik>и мои глаза закровоточили. Извините, не удержался
Ну там же выше в пунктах перечислено почему так: вызываем new для произвольного типа T, передавая конструктору perfect forwarding parameter pack, всё очевидно же для любого человека с реальным опытом в С++, знакомого с развитом язык в последние лет 10.
Для меня, например, закорючки Rust тоже выглядели пару лет назад птичьим языком. Но я про Rust только парочку рекламных статей почитал и какое-то введение типа Rust for C++ programmers.
Здравствуйте, sergey2b, Вы писали:
S>есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень
Внезапно, писать больше кода читая в это время разные нетленки по С++ и публиковать этот код.
Здравствуйте, PM, Вы писали:
PM>Ну там же выше в пунктах перечислено почему так: вызываем new для произвольного типа T, передавая конструктору perfect forwarding parameter pack, всё очевидно же для любого человека с реальным опытом в С++, знакомого с развитом язык в последние лет 10. PM>Для меня, например, закорючки Rust тоже выглядели пару лет назад птичьим языком. Но я про Rust только парочку рекламных статей почитал и какое-то введение типа Rust for C++ programmers.
Хороший язык, вроде, и мощный, но мне на результат смотреть больно. Я не чтоб спорить пишу, а так, пояснить.
Закорючки то ладно с ними, они то как раз понятные, в стиле "о, теперь и так можно". Тут больше другое глаз режет — вот есть проблема что всё подряд может кинуть исключение, это прибито гвоздями к языку ключевым словом throw. Но при этом не прибито гвоздями автоматом откатиться и подчистить за собой если что то пошло не так, как в какой нибудь яве или питоне. "Следуем духу си" говорят они (правда, дух си — это навороченный макроассемблер, а тут совсем другая история). А чтоб реализовать такой откат — нужно делать как в процитированном куске, т.е. шаблонная функция, тянущая за собой ещё 2 шаблона с синтаксическим шумом типа "std::" ("using namespace" уже забраковали) и "std::unique_ptr<T>" (он там дважды, хотя одного раза в принципе достаточно, но не в c++). При этом (поправьте меня, если я не прав) компилятор не напомнит что мы по ошибке влепили неподходящий умный указатель (да и откуда ему знать то).
Т.е. прострелить себе ногу нельзя (наверное), но можно оторвать взрывом. Развитие какое то странное, типа язык был недостаточно сложный, надо навернуть сверху.
Кстати, а на "f( new T1, new T2 )" хоть какой нибудь компилятор ругается что "а где же смартпоинтеры"? g++ 8.1 сожрал молча.
Здравствуйте, PM, Вы писали:
PM>. Чтобы не вариться много лет в одном и тоже корпоративном копролите, открывая для себя visitor в 2016 году.
Я побывал в нескольких конторах т.н. "системное программирования" на C++. Везде знание паттерна visitor заканчивалось на "перечислите паттерны gof".
PM>Это ведь всего лишь один из один из способов. Смотри, Тёмчик, в каком-то случае можно просто обойтись парой if-else внутри функции: https://github.com/foonathan/cppast/blob/master/tool/main.cpp#L30
PM>Рекомендую почитать код этого автора, в частности type_safe, как пример современного C++
Какой смысл читать "современный C++", если он применяется для HFT и для копролита? Идти в аутсорс в РФ или в Индию, куда это всё утекло, я не планирую. А в HFT не берут
Здравствуйте, Тёмчик, Вы писали:
Тё>Для распберри вроде модно использовать питон? Да и node должен завестись, не говоря за go. Скорость разработки многократно быстрее, чем на C++.
Python для прототипов разве хорош, потом ты просто задолбоаешься с его динамической типизацией. Go лучше C++ только если команда так себе, с сильной командой он откровенно сливает
Здравствуйте, kaa.python, Вы писали:
KP>Python для прототипов разве хорош, потом ты просто задолбоаешься с его динамической типизацией. Go лучше C++ только если команда так себе, с сильной командой он откровенно сливает
Пишу на typescript- вообще прикольный язык. Статическая типизация на этапе компиляции, потом оно транслируется в js и там никаких проверок рантаймовых- в духе C++. На go не писал, но с учётом противоречивости и винегретности плюсов- вряд ли плюсы могут что-то противопоставить go, и плюсы с го легко линкуются, можно пользовать готовые библиотеки.
Здравствуйте, student__, Вы писали:
__>Т.е. разраб, которому нравится индустрия игродела вдруг взял, и уволился, только потому что где-то пилят энтерпрайз на Джаве? Плевать, что предметная область скучна чуть более, чем полностью, главное — на Джаве покодерить, да?
Важно, что есть определенные обязательные расходы в жизни программиста, которые растут и накапливаются со временем. Рынок плюсов в несколько раз мал по объему работы и медианной оплаты труда, новых проектов нет. Новая какая-то разработка сосредоточена в ограниченном числе больших корпораций. В остальных местах в основном работа состоит в поддержке существующего "уникального велосипеда", которого бизнес хотел бы переписать или отправить в бангалор или вост европы
Здравствуйте, mmu, Вы писали:
mmu>Рынок плюсов в несколько раз мал по объему работы и медианной оплаты труда, новых проектов нет. Новая какая-то разработка сосредоточена в ограниченном числе больших корпораций. В остальных местах в основном работа состоит в поддержке существующего "уникального велосипеда", которого бизнес хотел бы переписать или отправить в бангалор или вост европы
Почти всё мимо (кромe объёма рынка). Последние 20 лет я работал в компаниях где было от 3 разработчиков до 3000 (CAD, gamedev, telco, trading). Почти везде на новых C++ проектах. Попытки перейти на C# и нежно любимый многими Go происходили, но с треском проваливались. С++ c Python (если нужно) в связке рулит, как ни крути. Может только для вышеперечисленных областей. Про другие
Здравствуйте, Тёмчик, Вы писали:
ned>>Прототипы и прочий R&D, моки на нём пишутся быстро. Go не пошёл. Может разработчики был не очень Или, скорее всего, Тё>Resume Driven Development. Тё>Ну да, если отбирать кандидатов по признаку религиозного фанатизма на c++ со знанием питона- весь стек будет из c++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.
Ну вообще ned прав. Обычно Go – это либо Resume Driven Development, либо слабая команда, которая что-то более выразительное осилить не может, либо и то и другое разом.
Здравствуйте, mmu, Вы писали: mmu>Вот примеры:
А Джава или Сисярп магическим образом находят все зависимости, угадывая мысль программиста?
mmu>(CAD, gamedev, telco, trading) — это на любителя
Еще автомотив и аероспейс в этом списке. Но, видимо, тоже копейки и на любителя. Но вот ынтырпрайз и веб любят все, да?
Здравствуйте, Тёмчик, Вы писали:
Тё>Тем более, зачем они плюснутый класс экспортировали в API? Не от большого ума. Типа «мы крутые плюсныки, круче нас только яйца всмятку».
Тема, ты дурак или прикидываешься? string и vector — это стандартные типы C++, примерно как String и List в твоей любимой яве. Или ты их тоже в API не будешь использовать?
Тё>Для меня плюсник, завязанный на форточку (WINAPI, пончик)- хреновый плюсник. Говнокодер. Код должен собираться и работать на 3 основных платформах как минимум (а возможно ещё и на консоли).
Это твои личные проблемы. Код должен решать реальные задачи, а не удовлетворять твоим вкусам.
Тё>Ты почему-то нападаешь на меня что я «плохо знаю C++».
Так ты это явно тут демонстрируешь.
Тё>И тут же камин аут что make_unique затащили в стандарт только в 2014г. Это не показатель непоследовательности и непротиворечивости?
make_unique — это сахар. Без него спокойно можно жить.
Тё>И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?
Или он не захотел обсуждать очевидные вещи.
Тё>Единственным инструментом, который они типа знают. Зашоренные с отсутствием кругозора.
Ты много видел хороших программистов, которые знают единственный инструмент?
Здравствуйте, ned, Вы писали:
ned>Здравствуйте, Тёмчик, Вы писали:
Тё>> API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору. Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать
ned>А как ты строчку передашь? А массив? Указателями в стиле голого C? А вернёшь как?
Прикинь- такой API будет работать не только между прилагой и плагином, скомпиленными с той же версией C dll, и обязательно dynamically-linked оно и с static, и с go, и с питоном полетит. Даже с жаваскриптом
ned>Фабрики любят городить бывшие джависты там где они совершенно не нужны.
Я задолго до жава открыл для себя GoF
Тё>>У меня нет проблем. Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.
ned>Мне знакомый клавиатуру подарил вчера с русскими буковками. Дочке в русской школе задания делать. Так вот там все Windows клавиши вырваны с корнем. Ты тоже из таких ненавистников?
Форточка недружелюбна к программисту. Все через задницу, к сожалению.
Тё>>>>И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?
ned>Не нужно обходиться. Копируешь и вставляешь проект если твой компилятор его не поддерживает. Ссылку я приводил. Там всё разжёвано.
Но там и emplace_back не нужен. Знаешь DRY principle?
Тё>>Или не знает. Как многие слились на развороте строки.
ned>Ну это смешно. Это настолько заезженная задачка что стыдно не знать. Даже если туп (или rusty как модно у нас оправдываться) и решить за пару минут не можешь. Первая задачка в любой книжке по подготовке к собеседованиям. Могу подарить пару если хочешь
Т.е. без книжки ты б не придумал?
Здравствуйте, ned, Вы писали:
ned>Здравствуйте, Тёмчик, Вы писали:
Тё>>здесь
ned>Ну вот сделал-таки работающий CMake. А где там C++ 14?
Ничего я не делал. Откопал в почте и перепаковал пару заданий. C++14 было в опциях проекта в CLion.
ned>
ned>Point vertices[3];
ned>...
ned>Triangle::Triangle( Point offset, Point v1, Point v2, Point v3 )
ned> : offset(offset), vertices( { v1, v2, v3 } ) {
ned>
ned>Вот это безобразие какой компилятор понимает?
Ээээ C++ 14? Оно как-то собиралось и крутилось под отладчиком
ned>
ned>class Point {
ned>public:
ned> int x;
ned> int y;
ned>public:
ned> Point(int x, int y);
ned> Point(Point const &other);
ned>};
ned>
ned>override? visitor можно убрать, типа достаточно.
ок. Это критично убирать, или вкусовщина?
ned>
ned>shapes.emplace_back( new Circle( offset, 2 ) );
ned>
ned>make_unique<Circle>(offset, 2)
так меньше копирования, чем с implicit конструктором unique_ptr? Просто в твоем каноничном варианте больше букв.
ned>
ned>for( auto i = shapes.begin(); i != shapes.end(); ++i, ++lineNum ) {
ned>
ned>for( auto& shape : shapes)
не знал, что так теперь можно.
ned>Ну и так далее. Некогда ревьювить сейчас
И за это спасибо
Уровень выпускника-отличника, который не сильно разбирается в языке. Часть проблем, видимых невооруженным взглядом, уже указал ned.
Еще using namespace прямо в заголовочном файле.
Класс MultiPowerPoint сделан "на отвали":
* публичный атрибут slaves;
* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&.
Здравствуйте, so5team, Вы писали:
S>Уровень выпускника-отличника, который не сильно разбирается в языке. Часть проблем, видимых невооруженным взглядом, уже указал ned.
Эээ только я уже очень стар и никогда не был отличником
S>Еще using namespace прямо в заголовочном файле.
уменьшил число букв. Это правда так плохо?
S>Класс MultiPowerPoint сделан "на отвали":
S>* публичный атрибут slaves;
ок
S>* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&.
Напишите код, чтоб пояснить. Ибо я ещё раз перечитал- ничего там ни отнять, ни прибавить.
Здравствуйте, ned, Вы писали:
ned>А, gcc extension (parenthesized member array initialization). Лучше просто vertices{ v1, v2, v3 }.
ок
ned>Не, некритично. Масло масляное.
Вообще я отвык от C++- потому так написал. Ещё и скобки странные т.к. в то время в команде было такое соглашение.
Тё>>так меньше копирования, чем с implicit конструктором unique_ptr? Просто в твоем каноничном варианте больше букв.
ned>Там move будет без копирования. В данном случае разницы никакой, но лучше new/delete в коде избегать. ned>А вообще вот: https://herbsutter.com/gotw/_102/
// At some call site:
f( std::unique_ptr<T1>{ new T1 }, std::unique_ptr<T2>{ new T2 } );
У Саттера проблема нескольких аллокаций: первый обьект создан успешно, второй бросил- успешно созданный обьект утек. Переписать можно как явно инициировать первый unique_ptr, потом на другом шаге второй, потом позвать функцию. Либо использовать helper как ты предложил, который внутри сделает 1 аллокацию. Т.о. в моём коде проблемы утечки нет- остальное это соглашения.
Здравствуйте, so5team, Вы писали:
Тё>>уменьшил число букв. Это правда так плохо?
S>Да. Очень плохо.
Ну хз. Очень плохо, значит очень плохо .
S>>>* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&. Тё>>Напишите код, чтоб пояснить. Ибо я ещё раз перечитал- ничего там ни отнять, ни прибавить. S>
А метод-то зачем?- плодить сущности без нужды нехорошо. Насчёт перебора ned написал, я с ним согласен- не знал, что так можно в плюсах.
S>Тут еще напрашивается вопрос о том, имеет ли смысл вообще создавать onVisitor и offVisitor атрибутами в MultiPowerPoint. Возможно, их можно было бы создавать по-месту: S>
да, согласен, упустил этот момент.
S>Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах.
Double dispatch на шаблонах? Оно не переусложнение задачи?
Здравствуйте, Тёмчик, Вы писали:
Тё>А метод-то зачем?- плодить сущности без нужды нехорошо.
Затем, что у вас концептуально есть такая задача: обойти все содержимое slave и применить к каждому элементу некий визитор. Вы кодируете решение этой задачи два раза в разных местах, что есть копипаста.
S>>Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах. Тё>Double dispatch на шаблонах? Оно не переусложнение задачи?
Зависит от задачи. Это в Java или в каком-нибудь Go у вас нет выбора. А в C++ он есть, и в зависимости от условий, приходится выбирать между динамическим полиморфизмом и статическим. У каждого есть свои преимущества и недостатки. А "переусложнение" -- это цена, которую придется заплатить, например, если мы хотим избежать использования виртуальных функций в рантайме.
Здравствуйте, Тёмчик, Вы писали:
Тё>У Саттера проблема нескольких аллокаций: первый обьект создан успешно, второй бросил- успешно созданный обьект утек. Переписать можно как явно инициировать первый unique_ptr, потом на другом шаге второй, потом позвать функцию.
Для этого и используют make_*, unique_ptr и try-catch. На эту тему тут Джаззер 100 лет назад целый объёмный пост делал к тогдашнему С++х03.
Здравствуйте, Kernan, Вы писали:
Тё>>У Саттера проблема нескольких аллокаций: первый обьект создан успешно, второй бросил- успешно созданный обьект утек. Переписать можно как явно инициировать первый unique_ptr, потом на другом шаге второй, потом позвать функцию. K>Для этого и используют make_*, unique_ptr и try-catch. На эту тему тут Джаззер 100 лет назад целый объёмный пост делал к тогдашнему С++х03.
Здравствуйте, so5team, Вы писали:
S>Затем, что у вас концептуально есть такая задача: обойти все содержимое slave и применить к каждому элементу некий визитор. Вы кодируете решение этой задачи два раза в разных местах, что есть копипаста.
Но Вы скопипастили код от std::for_each и более того, породили ненужную сущность в классе. Вынесли бы тогда в utility-класс.
S>>>Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах. Тё>>Double dispatch на шаблонах? Оно не переусложнение задачи?
S>Зависит от задачи. Это в Java или в каком-нибудь Go у вас нет выбора. А в C++ он есть, и в зависимости от условий, приходится выбирать между динамическим полиморфизмом и статическим. У каждого есть свои преимущества и недостатки. А "переусложнение" -- это цена, которую придется заплатить, например, если мы хотим избежать использования виртуальных функций в рантайме.
Вы уходите от ответа на простой вопрос- нужно ли переусложнение с имплементацией double dispatch на шаблонах. Более того, паттерн visitor как раз придумали из за отсутствия встроенного в средства языка C++ и Java double dispatch.
Здравствуйте, Тёмчик, Вы писали:
Тё>Но Вы скопипастили код от std::for_each
Это только потому, что в отсутствии в C++ Ranges использование std::for_each потребовало бы больше кода.
Тё>и более того, породили ненужную сущность в классе. Вынесли бы тогда в utility-класс.
Это нужная сущность, и нужна она именно внутри класса, т.к. ей нужен доступ к slaves.
Нужна она потому, что кроме устранения копипасты метод forEachApply позволит вам более дешево поменять представление slaves. Если, скажем, вместо vector-а вы будете использовать vector<vector<...>>.
Utility-классы -- это Java головного мозга, сразу за дверь.
S>>Зависит от задачи. Это в Java или в каком-нибудь Go у вас нет выбора. А в C++ он есть, и в зависимости от условий, приходится выбирать между динамическим полиморфизмом и статическим. У каждого есть свои преимущества и недостатки. А "переусложнение" -- это цена, которую придется заплатить, например, если мы хотим избежать использования виртуальных функций в рантайме. Тё>Вы уходите от ответа на простой вопрос- нужно ли переусложнение с имплементацией double dispatch на шаблонах. Более того, паттерн visitor как раз придумали из за отсутствия встроенного в средства языка C++ и Java double dispatch.
Мозги включите, если они есть. Все ответы были даны.
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, Тёмчик, Вы писали:
Тё>>Но Вы скопипастили код от std::for_each
S>Это только потому, что в отсутствии в C++ Ranges использование std::for_each потребовало бы больше кода.
Скопипастили по факту из utility класса (ну хорошо, из юнита) . Т.е. добавили несколько строчек говнокода.
Тё>>и более того, породили ненужную сущность в классе. Вынесли бы тогда в utility-класс.
S>Это нужная сущность, и нужна она именно внутри класса, т.к. ей нужен доступ к slaves.
Ей вообще-то не надо ничего знать про slaves. Ее задача- перебрать элементы коллекции и к каждому применить некое действие.
S>Нужна она потому, что кроме устранения копипасты метод forEachApply позволит вам более дешево поменять представление slaves. Если, скажем, вместо vector-а вы будете использовать vector<vector<...>>.
Не фантазируйте.
S>Utility-классы -- это Java головного мозга, сразу за дверь.
Вы прямо фундаментальный фанатик C++.
S>>>Зависит от задачи. Это в Java или в каком-нибудь Go у вас нет выбора. А в C++ он есть, и в зависимости от условий, приходится выбирать между динамическим полиморфизмом и статическим. У каждого есть свои преимущества и недостатки. А "переусложнение" -- это цена, которую придется заплатить, например, если мы хотим избежать использования виртуальных функций в рантайме. Тё>>Вы уходите от ответа на простой вопрос- нужно ли переусложнение с имплементацией double dispatch на шаблонах. Более того, паттерн visitor как раз придумали из за отсутствия встроенного в средства языка C++ и Java double dispatch.
S>Мозги включите, если они есть. Все ответы были даны.
Если Вы не можете ответить на мой вопрос- не отвечайте. Почитайте литературу по Visitor. Не то чтобы я на него надрачивал- но в той конторе, для которой делал тест- незнание Visitor не прощают (общался с ними на митапе).
Здравствуйте, Тёмчик, Вы писали:
Тё>Скопипастили по факту из utility класса (ну хорошо, из юнита) . Т.е. добавили несколько строчек говнокода.
И это говорит человек, который наговнокодил тоже самое дважды.
S>>Это нужная сущность, и нужна она именно внутри класса, т.к. ей нужен доступ к slaves. Тё>Ей вообще-то не надо ничего знать про slaves. Ее задача- перебрать элементы коллекции и к каждому применить некое действие.
Ее задача перебрать элементы не какой-то коллекции, а конкретно slaves.
S>>Нужна она потому, что кроме устранения копипасты метод forEachApply позволит вам более дешево поменять представление slaves. Если, скажем, вместо vector-а вы будете использовать vector<vector<...>>. Тё>Не фантазируйте.
Вы просто не знаете, чем опасна копипаста.
S>>Мозги включите, если они есть. Все ответы были даны. Тё>Если Вы не можете ответить на мой вопрос- не отвечайте.
Ответ был дан. Если вы не можете понять то, что вам пишут, то это ваши проблемы.
Здравствуйте, migun, Вы писали:
M>Извиняюсь, что встреваю — вопрос показался интересным. M>Не может ли вот этот код M>
M>[...]
M>mpp.slaves.emplace_back( new Oven() );
M>[...]
M>
M>Превратиться в следующую последовательность? M>- создали Oven в куче, держим сырой указатель; M>- mpp.slaves.emplace_back вызывает grow до того как создан unique_ptr; M>- получаем исключение от allocator; M>- указатель на Oven потерян.
M>При ипользовании push_back() в данном случае проблемы не было бы — unique_ptr был бы создан до вызова самого push_back() и возможной реаллокации в контейнере.
Интересно. Получается, вот так выстрелил себе в ногу путём использования новой (для меня) фичи emplace_back, но неиспользования make_unique.
Здравствуйте, Lexey, Вы писали:
Тё>>здесь
L>Visitor?! OMG. Судя по коду, он там нафиг не упал.
А как надо?
Ну и в защиту visitor- я про него узнал как раз из-за этого теста этой конторы. Потом успешно применял для преобразования 2+ версий сообщений от брокера, и для печати их в консоль вообще замечательно зашёл.
Хотя, если по уму, для преобразования сообщений лучше иметь описание по типу протобуфера, и динамически/прегенерить обертки, в полностью универсальном коде. Но до такого(как имплементировать) я тогда не созрел, плюс давление сроков, плюс давление "люди не поймут код" от тимлида (болото) и т.д.
Здравствуйте, Lexey, Вы писали:
L>Судя по коду, для MultiPowerPoint, там хватило бы просто интерфейса IPowerSink с методами On/Off, от которого отнаследовать потребителей. L>Для фигурок хватило бы IShape с методами ToString() и GetArea().
Ну хорошо, сделал ты toString() в текст. А потом тебе понадобилось в html, или latex или вообще rtf. И добавить ещё web api. Добавишь ещё методов в shape? А за каким shape должен знать про html?
Так что, судя по твоим заявлениям, с паттернами проектирования и вообще дизайном классов есть room for improvement (tm).
Тё>>Ну и в защиту visitor- я про него узнал как раз из-за этого теста этой конторы.
L>Счастливчик. Я про него узнал году в 2002-м, когда мне пришлось копаться в говнокоде, который наворотили новоиспеченные любители паттернов. L>С тех пор он для меня является одним из явных признаков, указывающих на потенциальный оверинжиниринг.
Сдуру можно и .... сломать.
Тё>>Потом успешно применял для преобразования 2+ версий сообщений от брокера, и для печати их в консоль вообще замечательно зашёл.
L>Понятно, что его можно успешно применять. Вопрос в том, нужно ли.
В том случае это позволило улучшить (и до того хороший на фоне окружающего кала) код и сделать настройку формата динамической. После моих изменений что-то около 2 версий контейнера x 3 версии содержимого сделал, generic интерфейс для десерилизации, серилизации, печати. До того было прибито гвоздями контейнер1-содержимое1 + контейнер2-содержимое2, аннотации и рефлекшен и копипаста в каждом месте десерилизации, серилизации, печати.
S>Уровень выпускника-отличника, который не сильно разбирается в языке. Часть проблем, видимых невооруженным взглядом, уже указал ned. S>Еще using namespace прямо в заголовочном файле.
Вы считаете это способен написать ВЫПУСКНИК-отличник?
У меня на 2 курсе на лабах это нещадно вычищается из кода.
На лекцию приношу книгу Саттера-Александреску и зачитываю.
ВТОРОЙ курс, Карл!
Прямо сейчас, в начале 3 семестра!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>У меня на 2 курсе на лабах это нещадно вычищается из кода. LVV>На лекцию приношу книгу Саттера-Александреску и зачитываю. LVV>ВТОРОЙ курс, Карл! LVV>Прямо сейчас, в начале 3 семестра!
Это очень здорово! У нас периодически студиозы 5-ого курса проходят практику и, обычно, они имеют хорошую алгоритмическую подготовку, знают теорию и даже быстро пишут код. Но у меня есть ощущению, что ВУЗ-ы упускают такую штуку как дизайн кода, зачем, когда и почему нужен рефакторинг, что такое "Code Smells" (как по-русски это сказать? ). В итоге, там где надо быстро что-то нехреначить всё прекрасно, а вот если нужно сделать то, что проживет много лет... Учим, понятное дело, но хорошо бы чтобы и ВУЗ про это рассказывал
Здравствуйте, LaptevVV, Вы писали:
LVV>Вы считаете это способен написать ВЫПУСКНИК-отличник?
Да. Дайте отличнику незнакомую ему тему и всего пару часов, результат будет похожим. Вот как здесь: человек не разбирается, ни в C++, ни в патернах проектирования, но что-то удобоваримое написал.
Здравствуйте, migun, Вы писали:
M>Извиняюсь, что встреваю — вопрос показался интересным. M>Не может ли вот этот код M>
M>[...]
M>mpp.slaves.emplace_back( new Oven() );
M>[...]
M>
M>Превратиться в следующую последовательность? M>- создали Oven в куче, держим сырой указатель; M>- mpp.slaves.emplace_back вызывает grow до того как создан unique_ptr; M>- получаем исключение от allocator; M>- указатель на Oven потерян.
Да, такое теоретически может случиться.
M>При ипользовании push_back() в данном случае проблемы не было бы — unique_ptr был бы создан до вызова самого push_back() и возможной реаллокации в контейнере.
В случае с emplace поможет make_unique(): `slaves.emplace_back(make_unique<Oven>())`
Здравствуйте, so5team, Вы писали:
S>Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"
Здравствуйте, so5team, Вы писали:
S>Не просто. С момента перевода книги банды четырех на русский язык вопросы по паттернам на собеседованиях в странах СНГ по популярности могли поспорить с вопросами про гномиков и виртуальный деструктор.
Одно дело перечислить названия паттернов, другое- уметь их применять.
Здравствуйте, Тёмчик, Вы писали:
Тё>Ну хорошо, сделал ты toString() в текст. А потом тебе понадобилось в html, или latex или вообще rtf. И добавить ещё web api. Добавишь ещё методов в shape? А за каким shape должен знать про html?
А если не понадобилось? Нафига тогда весь этот "тюнинг в зоопарке"?
Тё>Так что, судя по твоим заявлениям, с паттернами проектирования и вообще дизайном классов есть room for improvement (tm).
Здравствуйте, so5team, Вы писали:
S>Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"
Визитор в большинстве случаев не нужен.
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, sergey2b, Вы писали:
S>>есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень K>Внезапно, писать больше кода читая в это время разные нетленки по С++ и публиковать этот код.
а какие книги сейчас относяться к нетленкам
могли бы вы посоветовать open src проекты где есть примеры хорошего C++
Здравствуйте, Kernan, Вы писали:
S>>Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?" K>Визитор в большинстве случаев не нужен.
Как и, например, placement new или operator,(). Тем не менее, иметь представление о таких вещах нужно.
я например пишу для микроконтролеров там выбор не велик — асм Си и Pascal
shareware выгдней делать на C++
я немного пигу непосредственно для PC железа, там С и С++
на работе приложение обрабатывает такой объем данных что мне кажеться Java поплохеет (у меня был опыт писать немного на Java были проблеммы по скорости работать с 4gb xml файлом а на C++ работало достаточно бодро)
Здравствуйте, Тёмчик, Вы писали:
S>>практически все отметившиеся критикуют Тёмчик S>>есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень
Тё>Хорошо отревьювил ned- сжато, только по делу.
Мне кажется остальные молча присоединились согласились с заключительным высказыванием: ned>Ну и так далее. Некогда ревьювить сейчас
Что надо сделать чтобы улучшить свой уровень — активно интересоваться новшествами в С++ — быть в теме, что там в С++20 будут принимать; иметь мнение, почему `enum class byte : uint8_t` это хорошо (или плохо), нужны корутины или нет; позапускать примеры Саттера с `-Wlifetime`. Ну и, само собой, читать код других. Чтобы не вариться много лет в одном и тоже корпоративном копролите, открывая для себя visitor в 2016 году.
Здравствуйте, sergey2b, Вы писали:
S>на работе приложение обрабатывает такой объем данных что мне кажеться Java поплохеет (у меня был опыт писать немного на Java были проблеммы по скорости работать с 4gb xml файлом а на C++ работало достаточно бодро)
Зависит от типа используемого парсера XML (DOM, SAX, STAX) и количества выделений памяти, а также особенностей реализации ввода. Такая простая задача упирается в скорость чтения с носителя.
устройство будет работатать в комнате те в тепличных условииях
у нас Raspberry Pi Zero стоит 10-17$ при этом частота 1Ghz и памяти 512Mb, получаеться дешевле использовать ее чем самому делать плату
Здравствуйте, sergey2b, Вы писали:
S>у нас Raspberry Pi Zero стоит 10-17$ при этом частота 1Ghz и памяти 512Mb, получаеться дешевле использовать ее чем самому делать плату
Для распберри вроде модно использовать питон? Да и node должен завестись, не говоря за go. Скорость разработки многократно быстрее, чем на C++.
Здравствуйте, Тёмчик, Вы писали:
Тё>Те C++ки, у которых есть кругозор и способность изучать новое, просекли всё и сбежали на Java. Но я и за Java не агитирую, сейчас это такая легаси, как был C++ в начале 2000-х. Ну а C++ сейчас это такой кобол для поколения X.
Т.е. разраб, которому нравится индустрия игродела вдруг взял, и уволился, только потому что где-то пилят энтерпрайз на Джаве? Плевать, что предметная область скучна чуть более, чем полностью, главное — на Джаве покодерить, да?
Здравствуйте, student__, Вы писали:
__>Т.е. разраб, которому нравится индустрия игродела вдруг взял, и уволился, только потому что где-то пилят энтерпрайз на Джаве? Плевать, что предметная область скучна чуть более, чем полностью, главное — на Джаве покодерить, да?
Игры это отдельная тема, я в игроделах не работал. А так- что на плюсах, что на жаве бывают интересные задачи а бывают не очень или совсем туши свет.
Тё>Для распберри вроде модно использовать питон? Да и node должен завестись, не говоря за go. Скорость разработки многократно быстрее, чем на C++.
в текущей реализации, на асме возять байт из памяти и положить в порт всеравно медленно получаеться, чем мне надо
поэтому я и спросил про МК с достаточной памятью и скоростью
следующую буду делать на более можном МК и писать на асме или Си, ОС скорей всего не будет или будет freertos
Здравствуйте, kaa.python, Вы писали:
KP>Python для прототипов разве хорош, потом ты просто задолбоаешься с его динамической типизацией. Go лучше C++ только если команда так себе, с сильной командой он откровенно сливает
Интеграционные (system) тесты на нём писать ещё удобно.
Здравствуйте, ned, Вы писали:
ned>Почти всё мимо (кромe объёма рынка). Последние 20 лет я работал в компаниях где было от 3 разработчиков до 3000 (CAD, gamedev, telco, trading). Почти везде на новых C++ проектах. е перейти на C# и нежно любимый многими Go происходили, но с треском проваливались. С++ c Python (если нужно) в связке рулит, как ни крути. Может только для вышеперечисленных областей. Про другие
Давай разберём по полочкам. Игродев это новый проект? Мне так не показалось из собеседования. CAD новый проект? Тут я хз, могу только припомнить отзывы от CAD-в про какой у них древний C++ встречается и как буст может не работать. Питон + C++ — и что удивительного? Питон так и работает- scipy на C подцепил и всё летает. К сожалению, Global Lock и несовместимость 2-3 версии его доконают. Go указанных недостатков лишён.
Ну а в HFT ты молодец что прошёл- рокет саенс и вообще . Чуть ли сложнее, чем в гугл пройти. Советовать обычному челу с C# "возвращаться в C++" с рассчетом что его сразу возьмут в HFT- жестоко imho.
Здравствуйте, kaa.python, Вы писали:
KP>Мы так и делаем, но наметилась занятная проблема. Интеграционных тестов очень много, так как мы вообще отказались от ручных тстов и всё автоматизировали. В итоге интеграционные тесты настойчиво просят юнит-тесты на самих себя, в основном по причине динамической типизации. Время от времени в рантайм бабахает
Да, у нас есть юнит-тесты на интеграционные тесты. Ручного тестирование почти нет.
Проблема осталась одна: полный прогон занимает полчаса и больше. Тестов много т.к. обычно фича/багфикс = новый тест. На каждый тест поднимается вся система. Пока терпимо, но скоро придётся распараллеливать.
Здравствуйте, Тёмчик, Вы писали:
Тё>Давай разберём по полочкам. Игродев это новый проект? Мне так не показалось из собеседования.
Сам проект старый. Компоненты новые. Сейчас совсем новое (и секретное ) что-то пишут.
Тё>CAD новый проект? Тут я хз, могу только припомнить отзывы от CAD-в про какой у них древний C++ встречается и как буст может не работать.
Но, тем не менее, C++ там без альтернативы.
Тё>Питон + C++ — и что удивительного? Питон так и работает- scipy на C подцепил и всё летает. К сожалению, Global Lock и несовместимость 2-3 версии его доконают. Go указанных недостатков лишён.
Питон проще. Скорость разработки выше. Прототипы и прочий R&D, моки на нём пишутся быстро. Go не пошёл. Может разработчики был не очень Или, скорее всего, Resume Driven Development.
Здравствуйте, ned, Вы писали:
ned>Сам проект старый. Компоненты новые.
Вот. Я о том. ned>Сейчас совсем новое (и секретное ) что-то пишут.
Молодцы. Но это сейчас, а раньше- было старое.
Тё>>CAD новый проект? Тут я хз, могу только припомнить отзывы от CAD-в про какой у них древний C++ встречается и как буст может не работать.
ned>Да, там всё консервативно. Потому-что API и много пользователей. Вот свежее подтверждение из последнего CppCon: ned>https://www.youtube.com/watch?v=2YXwg0n9e7E
API не нужно менять, чтобы поменять внутренности
ned>Но, тем не менее, C++ там без альтернативы.
что???
Тё>>Питон + C++ — и что удивительного? Питон так и работает- scipy на C подцепил и всё летает. К сожалению, Global Lock и несовместимость 2-3 версии его доконают. Go указанных недостатков лишён.
ned>Питон проще. Скорость разработки выше.
Питон не проще. Это лаконичный язык, который делает то, что от него просят. А не выносит мозг странными извращениями как плюсы, или портянками графомании как жава.
ned>Прототипы и прочий R&D, моки на нём пишутся быстро. Go не пошёл. Может разработчики был не очень Или, скорее всего, Resume Driven Development.
Ну да, если отбирать кандидатов по признаку религиозного фанатизма на c++ со знанием питона- весь стек будет из c++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.
Здравствуйте, Тёмчик, Вы писали:
Тё>API не нужно менять, чтобы поменять внутренности
Иногда нужно. Вот он приводил пример когда они самописный (до STL ещё!) вектор на std::vector меняли. Или это строка была? Не суть.
ned>>Но, тем не менее, C++ там без альтернативы. Тё>что???
Ага. Мелкие вещи типа плагинов ещё можно на C# писать. Что-то серьёзное вряд ли.
Тё>Питон не проще. Это лаконичный язык, который делает то, что от него просят. А не выносит мозг странными извращениями как плюсы, или портянками графомании как жава.
Вот поэтому и проще. На нём могут писать "ненастоящие" программисты вроде QA или рисёчеров.
Тё>Ну да, если отбирать кандидатов по признаку религиозного фанатизма на c++ со знанием питона- весь стек будет из c++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.
Не, ты не понял. Это уже отобранные разработчики по своим личным причинам пытаются внедрить совершенно неуместную модную технологию. Чтобы попрактиковаться и прыгнуть дальше. А там хоть трава не расти.
Здравствуйте, ned, Вы писали:
Тё>>API не нужно менять, чтобы поменять внутренности
ned>Иногда нужно. Вот он приводил пример когда они самописный (до STL ещё!) вектор на std::vector меняли. Или это строка была? Не суть.
Т.е. у них слабые программисты сделали API на уровне школьное сочинение "как я провёл лето". А ты почему-то априори записал всех плюсников в "сильные" а неплюсников в "слабые".
ned>>>Но, тем не менее, C++ там без альтернативы. Тё>>что???
ned>Ага. Мелкие вещи типа плагинов ещё можно на C# писать. Что-то серьёзное вряд ли.
Какой C#? Это типа серьёзные программисты завязаны на форточку?
Тё>>Питон не проще. Это лаконичный язык, который делает то, что от него просят. А не выносит мозг странными извращениями как плюсы, или портянками графомании как жава.
ned>Вот поэтому и проще. На нём могут писать "ненастоящие" программисты вроде QA или рисёчеров.
Ты путаешь навык обходить грабли укуренного языка с умением дизайнить архитектуру и применять алгоритмы. Всё это вот с граблями- от непоследовательности и противоречивости C++, а не признак "настоящейности" программиста.
Тё>>Ну да, если отбирать кандидатов по признаку религиозного фанатизма на c++ со знанием питона- весь стек будет из c++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.
ned>Не, ты не понял. Это уже отобранные разработчики по своим личным причинам пытаются внедрить совершенно неуместную модную технологию. Чтобы попрактиковаться и прыгнуть дальше. А там хоть трава не расти.
Я правильно всё понял- отобранные программисты забивают гвозди микроскопом. Дальше уже непринципиально, какой именно марки микроскоп.
Здравствуйте, kaa.python, Вы писали:
KP>Тебе, кстати, Go тоже из-за резюме хочется
Я вижу, какой адский треш происходит прямо сейчас в т.н. "микро" сервисе на жаве и мне кажется, что использование ts и нода там позволило бы сократить число буков в 20 раз. Если go такой же типизипованный и краткий, да ещё и компилируемый- хочется его туда применить вместо жавы.
Здравствуйте, ned, Вы писали:
ned>Здравствуйте, mmu, Вы писали:
ned>Почти всё мимо (кромe объёма рынка). Последние 20 лет я работал в компаниях где было от 3 разработчиков до 3000 (CAD, gamedev, telco, trading). Почти везде на новых C++ проектах. Попытки перейти на C# и нежно любимый многими Go происходили, но с треском проваливались. С++ c Python (если нужно) в связке рулит, как ни крути. Может только для вышеперечисленных областей. Про другие
Вот примеры:
/usr/bin/cc CMakeFiles/cmTC_0c1e0.dir/CheckSymbolExists.c.o -o cmTC_0c1e0
CMakeFiles/cmTC_0c1e0.dir/CheckSymbolExists.c.o: In function `main':
CheckSymbolExists.c.text+0x1b): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
CMakeFiles/cmTC_0c1e0.dir/build.make:86: recipe for target 'cmTC_0c1e0' failed
make[1]: *** [cmTC_0c1e0] Error 1
...
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create CMakeFiles/cmTC_a843b.dir/CheckFunctionExists.c.o -o cmTC_a843b -lpthreads
/usr/bin/x86_64-linux-gnu-ld: cannot find -lpthreads
collect2: error: ld returned 1 exit status
Определенный процент времени работы программиста с++ состоит в исследований таких проблем. Технология с++ уже с большим опытом, а базовые грабли не решены. После какого-то периода хочется не сталкиваться с такими рутинными проблеми. Это также определенный риск для бизнеса.
(CAD, gamedev, telco, trading) — это на любителя. КАД, телко — это мамонты из 90-х. геймдев не платит. трейдинг — это "уникальные велосипеды" с единичным спросом и некоторыми особенностями. Единичный спрос влечет за собой выше среднего зависимость от работодателя, а значит и от конкретных людей. А у людей могут начаться какие-то глюки неожиданно. Зачем идти на такой риск. Но сейчас большой спрос на интернет. Почему бы и не посмотреть что там есть.
Здравствуйте, Тёмчик, Вы писали:
Тё>Т.е. у них слабые программисты сделали API на уровне школьное сочинение "как я провёл лето". А ты почему-то априори записал всех плюсников в "сильные" а неплюсников в "слабые".
Когда писали STL не было. Или был, но "сырой", например. А в чём проблема с изменениями в API. Ты его на века гвоздями приколачиваешь?
Тё>Какой C#? Это типа серьёзные программисты завязаны на форточку?
CADы и игры чаще да, чем нет. Но я C# для примера привёл.
Тё>Ты путаешь навык обходить грабли укуренного языка с умением дизайнить архитектуру и применять алгоритмы. Всё это вот с граблями- от непоследовательности и противоречивости C++, а не признак "настоящейности" программиста.
Вот для меня Python непоследовательный и противоречивый. Потому что я его плохо знаю. Для тебя C++. Архитектура и алгоритмы идут параллельно языкам. Тут ты прав.
Тё>Я правильно всё понял- отобранные программисты забивают гвозди микроскопом. Дальше уже непринципиально, какой именно марки микроскоп.
Отобранные программисты решают поставленные задачи наиболее подходящим инструментом. А не строят резюме или экспериментируют с новыми модными фреймворками.
Здравствуйте, ned, Вы писали:
Тё>>Т.е. у них слабые программисты сделали API на уровне школьное сочинение "как я провёл лето". А ты почему-то априори записал всех плюсников в "сильные" а неплюсников в "слабые".
ned>Когда писали STL не было. Или был, но "сырой", например. А в чём проблема с изменениями в API. Ты его на века гвоздями приколачиваешь?
Тем более, зачем они плюснутый класс экспортировали в API? Не от большого ума. Типа «мы крутые плюсныки, круче нас только яйца всмятку».
Тё>>Какой C#? Это типа серьёзные программисты завязаны на форточку?
ned>CADы и игры чаще да, чем нет. Но я C# для примера привёл.
Для меня плюсник, завязанный на форточку (WINAPI, пончик)- хреновый плюсник. Говнокодер. Код должен собираться и работать на 3 основных платформах как минимум (а возможно ещё и на консоли).
Тё>>Ты путаешь навык обходить грабли укуренного языка с умением дизайнить архитектуру и применять алгоритмы. Всё это вот с граблями- от непоследовательности и противоречивости C++, а не признак "настоящейности" программиста.
ned>Вот для меня Python непоследовательный и противоречивый. Потому что я его плохо знаю. Для тебя C++. Архитектура и алгоритмы идут параллельно языкам. Тут ты прав.
Ты почему-то нападаешь на меня что я «плохо знаю C++». И тут же камин аут что make_unique затащили в стандарт только в 2014г. Это не показатель непоследовательности и непротиворечивости? И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?
Тё>>Я правильно всё понял- отобранные программисты забивают гвозди микроскопом. Дальше уже непринципиально, какой именно марки микроскоп.
ned>Отобранные программисты решают поставленные задачи наиболее подходящим инструментом. А не строят резюме или экспериментируют с новыми модными фреймворками.
Единственным инструментом, который они типа знают. Зашоренные с отсутствием кругозора.
Здравствуйте, Lexey, Вы писали:
L> Тема, ты дурак или прикидываешься? string и vector — это стандартные типы C++, примерно как String и List в твоей любимой яве. Или ты их тоже в API не будешь использовать?
API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору. Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать
Тё>>Для меня плюсник, завязанный на форточку (WINAPI, пончик)- хреновый плюсник. Говнокодер. Код должен собираться и работать на 3 основных платформах как минимум (а возможно ещё и на консоли).
L>Это твои личные проблемы. Код должен решать реальные задачи, а не удовлетворять твоим вкусам.
У меня нет проблем. Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.
Тё>>Ты почему-то нападаешь на меня что я «плохо знаю C++».
L>Так ты это явно тут демонстрируешь.
Ок. Надо будет- подтяну.
Тё>>И тут же камин аут что make_unique затащили в стандарт только в 2014г. Это не показатель непоследовательности и непротиворечивости?
L>make_unique — это сахар. Без него спокойно можно жить.
Ты либо трусы надень, либо крестик сними. Меня за неиспользование Make_unique тут грвзью поливают, а оно вон как оказывается.
Тё>>И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?
L>Или он не захотел обсуждать очевидные вещи.
Или не знает. Как многие слились на развороте строки.
Тё>>Единственным инструментом, который они типа знают. Зашоренные с отсутствием кругозора.
L> Ты много видел хороших программистов, которые знают единственный инструмент?
Ни одного. Ты к ним не относишься.
Здравствуйте, Тёмчик, Вы писали:
Тё>API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору.
Ты, похоже, наглухо укушен бандой GoF и явой. Какие в пень фабрики? Их может вообще не быть. А аллокаторы (не, я подозреваю, что ты что-то свое имеешь в виду, а не то, что в плюсах под этим понимают) наружу выставляют крайне редко.
Тё>Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать
Я не знаю, кому и чего ты там должен, но, судя по уровню твоих высказываний, только доверчивым школьникам тебе и можно пытаться что-то объяснять. Ибо, более-менее взрослый тебя просто пошлет нафиг с твоими "объяснениями".
Тё>У меня нет проблем.
А мне видится, что есть.
Тё>Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.
Ну, с одним твоим поделием мы тут уже познакомились. У меня стажеры лучше на плюсах пишут.
Тё>Ок. Надо будет- подтяну.
Вот, когда подтянешь, тогда и рассуждай на темы правильности выставления стандартных типов через плюсовые API.
Тё>Ты либо трусы надень, либо крестик сними. Меня за неиспользование Make_unique тут грвзью поливают, а оно вон как оказывается.
Тебя грязью полили не за неиспользование make_unique, а за то, что ты передавал голый владеющий указатель в метод emplace_back, который может память перевыделять, и, соответственно, кидать исключения. make_unique — это всего лишь один из способов решения проблемы.
С тем же успехом можно было явно завернуть указатель в unique_ptr: unique_ptr<T>(new T) или push_back использовать вместо emplace_back.
Тё>Или не знает. Как многие слились на развороте строки.
Кто, многие? Большинство там просто в остроумии решило поупражняться, придумывая возможные каверзные варианты.
Тё>Ни одного. Ты к ним не относишься.
Разумеется. Тебе не светит меня увидеть из Австралии.
Здравствуйте, Тёмчик, Вы писали:
Тё> API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору. Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать
А как ты строчку передашь? А массив? Указателями в стиле голого C? А вернёшь как?
Фабрики любят городить бывшие джависты там где они совершенно не нужны.
Тё>У меня нет проблем. Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.
Мне знакомый клавиатуру подарил вчера с русскими буковками. Дочке в русской школе задания делать. Так вот там все Windows клавиши вырваны с корнем. Ты тоже из таких ненавистников?
Тё>>>И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?
Не нужно обходиться. Копируешь и вставляешь проект если твой компилятор его не поддерживает. Ссылку я приводил. Там всё разжёвано.
Тё>Или не знает. Как многие слились на развороте строки.
Ну это смешно. Это настолько заезженная задачка что стыдно не знать. Даже если туп (или rusty как модно у нас оправдываться) и решить за пару минут не можешь. Первая задачка в любой книжке по подготовке к собеседованиям. Могу подарить пару если хочешь
Здравствуйте, Lexey, Вы писали:
Тё>>API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору.
L> Ты, похоже, наглухо укушен бандой GoF и явой. Какие в пень фабрики? Их может вообще не быть. А аллокаторы (не, я подозреваю, что ты что-то свое имеешь в виду, а не то, что в плюсах под этим понимают) наружу выставляют крайне редко.
Разные dll могут линковаться к разным версиям С dll и C++ dll. Это если там и там C++. Это если там и там C++ — уже привет грабли с выделением в одном аллокаторе, а попыткой удаления в другом. Но API как бы подразумевает максимальную открытость. Ты похоже с C++ толком и не работал, не знаю чем ты вообще занимаешься на работе
Тё>>Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать
L>Я не знаю, кому и чего ты там должен, но, судя по уровню твоих высказываний, только доверчивым школьникам тебе и можно пытаться что-то объяснять. Ибо, более-менее взрослый тебя просто пошлет нафиг с твоими "объяснениями".
Я и не обьясняюсь перед баранами Только лишнее подтверждение моим наблюдениям- процент программистов не зависит от языка, но в некоторых нишах накапливается отстойничек тех, кого в более модные проекты не берут.
Тё>>У меня нет проблем.
L>А мне видится, что есть.
Тё>>Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.
L>Ну, с одним твоим поделием мы тут уже познакомились. У меня стажеры лучше на плюсах пишут.
Наверное, умные стажеры. Умнее тебя например
Тё>>Ок. Надо будет- подтяну.
L>Вот, когда подтянешь, тогда и рассуждай на темы правильности выставления стандартных типов через плюсовые API.
Заставь дурака богу молиться- лоб расшибет. Это про авторов "плюсовые API"
Тё>>Ты либо трусы надень, либо крестик сними. Меня за неиспользование Make_unique тут грвзью поливают, а оно вон как оказывается.
L>Тебя грязью полили не за неиспользование make_unique, а за то, что ты передавал голый владеющий указатель в метод emplace_back, который может память перевыделять, и, соответственно, кидать исключения. make_unique — это всего лишь один из способов решения проблемы.
L>С тем же успехом можно было явно завернуть указатель в unique_ptr: unique_ptr<T>(new T) или push_back использовать вместо emplace_back.
Т.е. я зря бездумно использовал новый для меня метод emplace_back вместо привычного push_back. Если "emplace_back+ make_unique" это то, чем "улучшили" C++, то это же ппц. Что там за травокуров набрали в комитет?
Тё>>Или не знает. Как многие слились на развороте строки. L>Кто, многие? Большинство там просто в остроумии решило поупражняться, придумывая возможные каверзные варианты.
У тебя грамматическая ошибка в слове "остроумии".
Тё>>Ни одного. Ты к ним не относишься.
L>Разумеется. Тебе не светит меня увидеть из Австралии.
По твоим заявлениям- типичный говнокодер на аутсорсе за 3 рубля пучок.
Здравствуйте, ned, Вы писали:
ned>Ну это смешно. Это настолько заезженная задачка что стыдно не знать. Даже если туп (или rusty как модно у нас оправдываться) и решить за пару минут не можешь. Первая задачка в любой книжке по подготовке к собеседованиям. Могу подарить пару если хочешь
Со строкой задачка то простая, но если годами не работать с нуль-терминированными строками (что норма для питона, явы, c++), то такой вопрос может поставить в тупик и нужно будет дополнительное время переключить контекст. Строка, которая не хранит длину, это ж цирк с конями, если разобраться, кому нафиг такое надо? Любой язык программирования после си начинает с того а как мы со строками работать то будем и у всех другой ответ, чем у си.
Ну ладно, я то с такими строками всё ещё работаю (у меня ж си), так что для меня пример такой заезженной задачки — это breadth-first search в графе. Оно, вроде, примитивно, когда знаешь, а когда внезапно первый раз надо придумать самому — наступает ступор. И таких задачек куча, к повседневной жизни отношения не имеют, решения в голове не задерживаются дольше недели, надо спецом учить к собеседованиям.
Здравствуйте, aik, Вы писали:
aik>И таких задачек куча, к повседневной жизни отношения не имеют, решения в голове не задерживаются дольше недели, надо спецом учить к собеседованиям.
Согласен со всем.
Если на собеседование идёшь с целью пройти, а не развлечься, то нужно готовиться. А эту задачку сложно пропустить. Она везде, на всех ресурсах. Вместе с бинарным поиском, обходом графа, отзеркаливанием дерева и т.п.
Можно включить cowboy mode и завалиться на собеседование в Гугль/ФБ/Амазон прямо с работы, не повторив теорию и не порешав задачки, но результат будет предсказуем. Таковы уж правила игры
Здравствуйте, aik, Вы писали:
aik>Со строкой задачка то простая, но если годами не работать с нуль-терминированными строками (что норма для питона, явы, c++), то такой вопрос может поставить в тупик
Может быть, добавить задачку на нахождение индекса элемента в массиве? Я то думаю, оно слишком просто, а вдруг кого срежет? Я тут после парочки опытных с отличным резюме уже не знаю, чему удивляться.
aik>Ну ладно, я то с такими строками всё ещё работаю (у меня ж си), так что для меня пример такой заезженной задачки — это breadth-first search в графе. Оно, вроде, примитивно, когда знаешь, а когда внезапно первый раз надо придумать самому — наступает ступор.
Там нужно использовать стек (структуру данных). Боюсь, для отметившихся тут переворачивальщиков это гарантированный meltdown.
aik> И таких задачек куча, к повседневной жизни отношения не имеют
Имеют- везде, где работа с данными (бэкенд). Ну и у игроделов тоже.
Здравствуйте, Тёмчик, Вы писали:
aik>> breadth-first search в графе. Оно, вроде, примитивно, когда знаешь, а когда внезапно первый раз надо придумать самому — наступает ступор. Тё>Там нужно использовать стек (структуру данных). Боюсь, для отметившихся тут переворачивальщиков это гарантированный meltdown.
Здравствуйте, ned, Вы писали:
ned>Можно включить cowboy mode и завалиться на собеседование в Гугль/ФБ/Амазон прямо с работы, не повторив теорию и не порешав задачки, но результат будет предсказуем. Таковы уж правила игры
Ну чего сразу ковбой. Эти правила — они ж не везде такие, часто обходятся без графов. Я просто спрашиваю заранее компанию напрямую или знакомых кто туда собеседовался, и уже от этого пляшу, а не так что пока не вызубрю теорию графов — к снаряду и не подходи.
Здравствуйте, aik, Вы писали:
aik>Ну чего сразу ковбой. Эти правила — они ж не везде такие, часто обходятся без графов. Я просто спрашиваю заранее компанию напрямую или знакомых кто туда собеседовался, и уже от этого пляшу, а не так что пока не вызубрю теорию графов — к снаряду и не подходи.
Вот в эти три без "графов" никак. В компаниях поменьше задачки годами не меняются. Знакомый — лучший вариант. У него интерес обычно свой На худой конец и glassdoor поможет.
Здравствуйте, Тёмчик, Вы писали:
Тё>cout << api->getVersion()
Хорошо тут константная строка. А если нет? Как передать временную строку? Городить xxx(char* str, size_t maxSize)?
Тё>Прикинь- такой API будет работать не только между прилагой и плагином, скомпиленными с той же версией C dll, и обязательно dynamically-linked оно и с static, и с go, и с питоном полетит. Даже с жаваскриптом
Во-первых, с питоном не полетит без пинка. Обёртку всё равно писать (или автогенерить). Во-вторых, обычно попытки сделать что-то универсальное подходящее любому сферическому коню в вакууме заканчиваются плохо. Premature pessimization в чистом виде.
Тё>Я задолго до жава открыл для себя GoF
А я открыл Alexandrescu задолго до GoF. Но фанатом шаблонов в ненужных местах не стал.
Тё>Форточка недружелюбна к программисту. Все через задницу, к сожалению.
Мне все равно. Что Windows, что Linux. Везде свои особенности.
Тё>Но там и emplace_back не нужен. Знаешь DRY principle?
Там не к месту. Вот если бы ты вместо указателя сам объект конструировал на месте был бы нужен.
Тё>Т.е. без книжки ты б не придумал?
Вот точно не вспомню, но я эту или очень похожую задачу решил ещё на олимпиаде в школе на Turbo C
Здравствуйте, ned, Вы писали:
Тё>>cout << api->getVersion()
ned>Хорошо тут константная строка. А если нет? Как передать временную строку? Городить xxx(char* str, size_t maxSize)?
Паттерн Visitor. Это не только название из банды четырех, а ещё и полезная вещь.
Тё>>Прикинь- такой API будет работать не только между прилагой и плагином, скомпиленными с той же версией C dll, и обязательно dynamically-linked оно и с static, и с go, и с питоном полетит. Даже с жаваскриптом
ned>Во-первых, с питоном не полетит без пинка. Обёртку всё равно писать (или автогенерить). Во-вторых, обычно попытки сделать что-то универсальное подходящее любому сферическому коню в вакууме заканчиваются плохо. Premature pessimization в чистом виде.
Обертку к чистому C писать всяко легче, чем трахаться с конфликтующими C dll в процессе.
Тё>>Я задолго до жава открыл для себя GoF
ned>А я открыл Alexandrescu задолго до GoF. Но фанатом шаблонов в ненужных местах не стал.
При чём тут "ненужных местах"? Вот обьекты C++ в ненужных местах- признак говнодизайна. И потом чувак ещё на митапе хвастается наивностью.
Тё>>Форточка недружелюбна к программисту. Все через задницу, к сожалению.
ned> Мне все равно. Что Windows, что Linux. Везде свои особенности.
grep в форточке как сделаешь? А эти её api с пончиками.
Тё>>Но там и emplace_back не нужен. Знаешь DRY principle?
ned>Там не к месту. Вот если бы ты вместо указателя сам объект конструировал на месте был бы нужен.
Ну и чего докопались? Песец какая страшная ошибка.
Тё>>Т.е. без книжки ты б не придумал?
ned>Вот точно не вспомню, но я эту или очень похожую задачу решил ещё на олимпиаде в школе на Turbo C
Она на олимпиадную не тянет. Разве для 3-классника.
Здравствуйте, ned, Вы писали:
ned>https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/ ned>Я ещё Agent Ransack пользуюсь.
ну тот шелл от убунты страшно кастрированный и бестолковый. Я просто поставил в виртуалку федору и работаю.
Тё>>Ну и чего докопались? Песец какая страшная ошибка.
ned>Просил же покритиковать код.
Ты написал всё по делу. Просто потом набижали обиженные и принялись отчитывать за тот make_unique.
Тё>>Она на олимпиадную не тянет. Разве для 3-классника.
ned>Тогда тянула. Большинство задачек математические были. Программирование сбоку для окончательного расчёта.
Разворот строки imho тест на отсутствие мозга. Очень уж лёгкая для любого человека.
Здравствуйте, Тёмчик, Вы писали:
Тё>Разные dll могут линковаться к разным версиям С dll и C++ dll.
Что тебя заставляет так линковаться?
Тё>Это если там и там C++. Это если там и там C++ — уже привет грабли с выделением в одном аллокаторе, а попыткой удаления в другом. Но API как бы подразумевает максимальную открытость. Ты похоже с C++ толком и не работал, не знаю чем ты вообще занимаешься на работе
Работаю, прикинь, а не занимаюсь мазохизмом с динамической линковкой. Почти все проекты у нас собираются статически. В редких исключениях API фактически стандартизован и не является плюсовым.
Тё>Я и не обьясняюсь перед баранами Только лишнее подтверждение моим наблюдениям- процент программистов не зависит от языка, но в некоторых нишах накапливается отстойничек тех, кого в более модные проекты не берут.
Не вижу логической связи с предыдущими высказываниями.
Тё>Наверное, умные стажеры. Умнее тебя например
Может и умнее. Но опыта у них пока мало, поэтому я ими руковожу и их обучаю, а не наоборот.
Тё>Заставь дурака богу молиться- лоб расшибет. Это про авторов "плюсовые API"
"В чужой монастырь со своим уставом не ходят". Кто такие "авторы "плюсовые API""?
Тё>Т.е. я зря бездумно использовал новый для меня метод emplace_back вместо привычного push_back. Если "emplace_back+ make_unique" это то, чем "улучшили" C++, то это же ппц. Что там за травокуров набрали в комитет?
Нет, причина не в новом методе, а в непонимании таких вещей как RAII и exception safety, без которых в современном C++ делать нечего.
И улучшений в языке в последнее лет 10 сделано много. Хотя, некоторых полезных вещей в нем до сих пор не хватает.
Тё>У тебя грамматическая ошибка в слове "остроумии".
Серьезно?
Тё>По твоим заявлениям- типичный говнокодер на аутсорсе за 3 рубля пучок.
Здравствуйте, student__, Вы писали:
__>Здравствуйте, mmu, Вы писали: mmu>>Вот примеры: __>А Джава или Сисярп магическим образом находят все зависимости, угадывая мысль программиста?
Там с этим намного проще. Вот свежий риддл:
x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
как так можно то портить настроение, моя задача сугубо связана с бизнес логикой, а тут такие сюрпризы...