Re[2]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 05.10.18 23:12
Оценка: -3 :))
Здравствуйте, 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 для бэкенда и консольных программ/демонов.
Re[4]: Покритикуйте C++ код
От: aik Австралия  
Дата: 05.10.18 05:48
Оценка: :)))
Здравствуйте, ned, Вы писали:

ned>А вообще вот: https://herbsutter.com/gotw/_102/


Дочитал до:
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}

и мои глаза закровоточили. Извините, не удержался
Re[4]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 06.10.18 11:56
Оценка: :)))
Здравствуйте, so5team, Вы писали:

Тё>>Остальные в духе «using namespace это плохо, так как я не using namespace» и «visitor это плохо, я читала». Оба перечисленных высказывания — деградация развития на пару ступенек вниз.


S>Да вы просто ходячее подтверждение эффекта Даннинга-Крюгера.

Вы ниасилили больше 1 языка и предложили заменить visitor кучкой говнокода (т.е. ниасилили и visitor тоже). А я подтверждение. Ну ок, не буду спорить

Тё>>и при этом не в HFT и не в играх, где действительно плюсы- language of choice.


S>Вы, как минимум, забываете еще про такие области, как телеком, HPC, системное программирование и embedded.

S>Вот, отличный пример для ознакомления и расширения кругозора: Обработка потока данных на примере deep packet inspection: внутренняя архитектура и решения.
Можно вкратце- засунули логику в ядро или проделали дырку в юзермод? Если первое, то плюсам в ядре не место, если второе- то с указанным справится жава.
Re[5]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 05.10.18 07:08
Оценка: 4 (1) :)
Здравствуйте, Тёмчик, Вы писали:

S>>"Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"


Тё>Очень просто.


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

Еще более странно, что как раз Visitor относится к числу тех немногих полезных на практике паттернов в языках типа C++. Т.к. там из-за отсутствия алгебраических типов данных и паттерн-матчинга Visitor дает надежный и расширяемый способ сопоставить M способов обработки для N структур данных. Если вы об этом способе узнали только в 2016-ом на собеседовании, то...

Хотя, может это Сидней такая дыра.
Re[7]: Покритикуйте C++ код
От: migun Великобритания https://magnumbytes.com/
Дата: 04.10.18 12:58
Оценка: 3 (1) +1
Здравствуйте, Тёмчик, Вы писали:

Тё>Здравствуйте, 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() и возможной реаллокации в контейнере.
Re[3]: Покритикуйте C++ код
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.10.18 06:03
Оценка: +2
Здравствуйте, Тёмчик, Вы писали:

S>>Еще using namespace прямо в заголовочном файле.

Тё>уменьшил число букв. Это правда так плохо?

По мне так это было самым плохим что было в коде. Не надо потому, что рано или подно приводит к адище с именами: https://stackoverflow.com/questions/8394393/c-stl-remove-error
Re[7]: Покритикуйте C++ код
От: PM  
Дата: 05.10.18 19:56
Оценка: -1 :)
Здравствуйте, 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++ без единственно верного решения на все случаи жизни. В нем даже про модули еще никак не договорятся, не говоря уже о единой системе сборки или управления зависимостями.
Re[3]: и что теперь делать
От: so5team https://stiffstream.com
Дата: 06.10.18 06:19
Оценка: +2
Здравствуйте, Тёмчик, Вы писали:

Тё>Остальные в духе «using namespace это плохо, так как я не using namespace» и «visitor это плохо, я читала». Оба перечисленных высказывания — деградация развития на пару ступенек вниз.


Да вы просто ходячее подтверждение эффекта Даннинга-Крюгера.

Тё>и при этом не в HFT и не в играх, где действительно плюсы- language of choice.


Вы, как минимум, забываете еще про такие области, как телеком, HPC, системное программирование и embedded.
Вот, отличный пример для ознакомления и расширения кругозора: Обработка потока данных на примере deep packet inspection: внутренняя архитектура и решения.
Re[11]: и что теперь делать
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 10.10.18 03:46
Оценка: -1 :)
Здравствуйте, Тёмчик, Вы писали:

Тё>Я вижу, какой адский треш происходит прямо сейчас в т.н. "микро" сервисе на жаве и мне кажется, что использование ts и нода там позволило бы сократить число буков в 20 раз. Если go такой же типизипованный и краткий, да ещё и компилируемый- хочется его туда применить вместо жавы.


Go — говно. Но во многих случаях я сам буду настаивать на его использовании. Уж больно низкий порог входа и хорошая степень контроля за жопоруками.
Re[4]: и что теперь делать
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 08.10.18 02:29
Оценка: 8 (1)
Здравствуйте, sergey2b, Вы писали:

S>а какие книги сейчас относяться к нетленкам


— Effective Modern C++
— The C++ programming language

S>могли бы вы посоветовать open src проекты где есть примеры хорошего C++


тут уж только от твоего видения прекрасного всё зависит
Re: Покритикуйте C++ код
От: ned Австралия  
Дата: 04.10.18 03:05
Оценка: 6 (1)
Здравствуйте, Тёмчик, Вы писали:

Тё>здесь


Ну вот сделал-таки работающий CMake. А где там C++ 14?

Point vertices[3];
...
Triangle::Triangle( Point offset, Point v1, Point v2, Point v3 )
        : offset(offset), vertices( { v1, v2, v3 } ) {


Вот это безобразие какой компилятор понимает?

class Point {
public:
    int x;
    int y;


public:
    Point(int x, int y);

    Point(Point const &other);
};


Нафига POD структуре баян? https://en.cppreference.com/w/cpp/language/rule_of_three

private:
    void accept( ShapeVisitor & visitor ) const;


override? visitor можно убрать, типа достаточно.

shapes.emplace_back( new Circle( offset, 2 ) );


make_unique<Circle>(offset, 2)

for( auto i = shapes.begin(); i != shapes.end(); ++i, ++lineNum ) {


for( auto& shape : shapes)

Ну и так далее. Некогда ревьювить сейчас
Re[6]: и что теперь делать
От: IID Россия  
Дата: 08.10.18 14:55
Оценка: 6 (1)
Здравствуйте, sergey2b, Вы писали:

S>скажите пожалуйста, а вы знаетте какие нибудь дешовые микроконтролеры, что бы у них было 128k RAM и больше и частота 24 Мгц и выше


Дешёвых — не знаю.
Обычно много памяти идёт со старшими моделями, вместе с кучей периферии и в многоногих корпусах.
Хотя подключать внешнюю будет ещё дороже, да и 128кб не тот объём, для которого это было бы разумно делать.

У STM32 начиная с линейки F2 есть столько RAM.
F215 стоит $11-12 поштучно и ~$7 от 1000 штук. Это достаточно дёшево ? 120мгц.

Есть PIC32MX775F512H 32-bit MIPS MCU с 128кб RAM, оптовая цена ~$6.

Опять же, я не знаю предметную область. Можно ещё на решения от Texas Instruments посмотреть. Или на эти.
kalsarikännit
Отредактировано 08.10.2018 15:22 IID . Предыдущая версия . Еще …
Отредактировано 08.10.2018 15:05 IID . Предыдущая версия .
Отредактировано 08.10.2018 15:03 IID . Предыдущая версия .
Re[11]: и что теперь делать
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 09.10.18 23:49
Оценка: 5 (1)
Здравствуйте, ned, Вы писали:

ned>Интеграционные (system) тесты на нём писать ещё удобно.


Мы так и делаем, но наметилась занятная проблема. Интеграционных тестов очень много, так как мы вообще отказались от ручных тстов и всё автоматизировали. В итоге интеграционные тесты настойчиво просят юнит-тесты на самих себя, в основном по причине динамической типизации. Время от времени в рантайм бабахает
Re[6]: и что теперь делать
От: DTB Россия  
Дата: 10.10.18 14:42
Оценка: 4 (1)
Здравствуйте, sergey2b, Вы писали:

S>Здравствуйте, IID, Вы писали:


S>я сейчас пишу на Си но на easyelectronics есть люди которые еще пишут на Pascal


S>скажите пожалуйста, а вы знаетте какие нибудь дешовые микроконтролеры, что бы у них было 128k RAM и больше и частота 24 Мгц и выше


ESP32 конечно, девборда стоит ~ 6$ (сам чип еще дешевле), полмегабайта памяти и много флеш памяти, 160-240 МГц, питон есть
Have fun...
Re[4]: и что теперь делать
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 08.10.18 11:54
Оценка: 3 (1)
Здравствуйте, sergey2b, Вы писали:

S>а какие книги сейчас относяться к нетленкам

Про книги сказали. Конечно же не забывать про всякие конфернеции по С++ с тяжеловесами на которые ссылки проскакивают.
S>могли бы вы посоветовать open src проекты где есть примеры хорошего C++
Внезапно, никсмановский YAS довольно неплохо сделан, но там больше про метапрограммирование.
Мне понравилось ещё вот это.
Честно говоря, многое в OS — г-но.
Sic luceat lux!
Re[4]: и что теперь делать
От: RedUser Россия  
Дата: 09.10.18 21:48
Оценка: 3 (1)
S>а какие книги сейчас относяться к нетленкам

Не книга, но тоже может быть полезным:
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
Re[3]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 04.10.18 07:02
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

Тё>уменьшил число букв. Это правда так плохо?


Да. Очень плохо.

S>>* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&.

Тё>Напишите код, чтоб пояснить. Ибо я ещё раз перечитал- ничего там ни отнять, ни прибавить.
class MultiPowerPoint {
  ...
  void forEachApply(ext::ApplienceVisitor & v) {
    for( auto & s : slaves )
      s->accept(v);
  }
  ...
public:
  void turnOn() { forEachApply(onVisitor); }
  void turnOff() { forEachApply(offVisitor); }
  ...
};

Тут еще напрашивается вопрос о том, имеет ли смысл вообще создавать onVisitor и offVisitor атрибутами в MultiPowerPoint. Возможно, их можно было бы создавать по-месту:
void turnOn() {
  ext::TurnOnVisitor on;
  forEachApply(on);
}

Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах.
Re: Покритикуйте C++ код
От: Lexey Россия  
Дата: 04.10.18 22:41
Оценка: :)
Здравствуйте, Тёмчик, Вы писали:

Тё>здесь


Visitor?! OMG. Судя по коду, он там нафиг не упал. Интересно было бы условие задач увидеть, конечно, но если я прав, то уже только за него я бы отказал. Всякая "мелочь" типа публичных членов класса и т.п. меркнет на фоне визитора.
"Будь достоин победы" (c) 8th Wizard's rule.
Отредактировано 04.10.2018 22:46 Lexey . Предыдущая версия .
Re[3]: Покритикуйте C++ код
От: Lexey Россия  
Дата: 04.10.18 23:42
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

Тё>А как надо?


Судя по коду, для MultiPowerPoint там хватило бы просто интерфейса IPowerSink с методами On/Off, от которого отнаследовать потребителей.
Для фигурок хватило бы IShape с методами ToString() и GetArea().

Тё>Ну и в защиту visitor- я про него узнал как раз из-за этого теста этой конторы.


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

Тё>Потом успешно применял для преобразования 2+ версий сообщений от брокера, и для печати их в консоль вообще замечательно зашёл.


Понятно, что его можно успешно применять. Вопрос в том, нужно ли.
"Будь достоин победы" (c) 8th Wizard's rule.
Отредактировано 05.10.2018 10:26 Lexey . Предыдущая версия .
Re[3]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 05.10.18 05:02
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

Тё>Ну и в защиту visitor- я про него узнал как раз из-за этого теста этой конторы.


Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"
Re[5]: Покритикуйте C++ код
От: PM  
Дата: 05.10.18 12:34
Оценка: +1
Здравствуйте, aik, Вы писали:

ned>>А вообще вот: https://herbsutter.com/gotw/_102/


aik>Дочитал до:

aik>
aik>template<typename T, typename ...Args>
aik>std::unique_ptr<T> make_unique( Args&& ...args )
aik>{
aik>    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
aik>}
aik>

aik>и мои глаза закровоточили. Извините, не удержался

Ну там же выше в пунктах перечислено почему так: вызываем new для произвольного типа T, передавая конструктору perfect forwarding parameter pack, всё очевидно же для любого человека с реальным опытом в С++, знакомого с развитом язык в последние лет 10.

Для меня, например, закорючки Rust тоже выглядели пару лет назад птичьим языком. Но я про Rust только парочку рекламных статей почитал и какое-то введение типа Rust for C++ programmers.
Re[2]: и что теперь делать
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 05.10.18 13:25
Оценка: +1
Здравствуйте, sergey2b, Вы писали:

S>есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень

Внезапно, писать больше кода читая в это время разные нетленки по С++ и публиковать этот код.
Sic luceat lux!
Re[6]: Покритикуйте C++ код
От: aik Австралия  
Дата: 05.10.18 15:51
Оценка: +1
Здравствуйте, 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 сожрал молча.
Re[4]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 06.10.18 07:26
Оценка: -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 не берут
Re[9]: и что теперь делать
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 09.10.18 10:34
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

Тё>Для распберри вроде модно использовать питон? Да и node должен завестись, не говоря за go. Скорость разработки многократно быстрее, чем на C++.


Python для прототипов разве хорош, потом ты просто задолбоаешься с его динамической типизацией. Go лучше C++ только если команда так себе, с сильной командой он откровенно сливает
Re[10]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 09.10.18 11:26
Оценка: :)
Здравствуйте, kaa.python, Вы писали:

KP>Python для прототипов разве хорош, потом ты просто задолбоаешься с его динамической типизацией. Go лучше C++ только если команда так себе, с сильной командой он откровенно сливает


Пишу на typescript- вообще прикольный язык. Статическая типизация на этапе компиляции, потом оно транслируется в js и там никаких проверок рантаймовых- в духе C++. На go не писал, но с учётом противоречивости и винегретности плюсов- вряд ли плюсы могут что-то противопоставить go, и плюсы с го легко линкуются, можно пользовать готовые библиотеки.
Re[4]: и что теперь делать
От: mmu  
Дата: 09.10.18 22:15
Оценка: +1
Здравствуйте, student__, Вы писали:

__>Т.е. разраб, которому нравится индустрия игродела вдруг взял, и уволился, только потому что где-то пилят энтерпрайз на Джаве? Плевать, что предметная область скучна чуть более, чем полностью, главное — на Джаве покодерить, да?


Важно, что есть определенные обязательные расходы в жизни программиста, которые растут и накапливаются со временем. Рынок плюсов в несколько раз мал по объему работы и медианной оплаты труда, новых проектов нет. Новая какая-то разработка сосредоточена в ограниченном числе больших корпораций. В остальных местах в основном работа состоит в поддержке существующего "уникального велосипеда", которого бизнес хотел бы переписать или отправить в бангалор или вост европы
Re[5]: и что теперь делать
От: ned Австралия  
Дата: 09.10.18 23:19
Оценка: :)
Здравствуйте, mmu, Вы писали:

mmu>Рынок плюсов в несколько раз мал по объему работы и медианной оплаты труда, новых проектов нет. Новая какая-то разработка сосредоточена в ограниченном числе больших корпораций. В остальных местах в основном работа состоит в поддержке существующего "уникального велосипеда", которого бизнес хотел бы переписать или отправить в бангалор или вост европы


Почти всё мимо (кромe объёма рынка). Последние 20 лет я работал в компаниях где было от 3 разработчиков до 3000 (CAD, gamedev, telco, trading). Почти везде на новых C++ проектах. Попытки перейти на C# и нежно любимый многими Go происходили, но с треском проваливались. С++ c Python (если нужно) в связке рулит, как ни крути. Может только для вышеперечисленных областей. Про другие
Отредактировано 09.10.2018 23:24 ned . Предыдущая версия .
Re[9]: и что теперь делать
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 10.10.18 02:11
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

ned>>Прототипы и прочий R&D, моки на нём пишутся быстро. Go не пошёл. Может разработчики был не очень Или, скорее всего,

Тё>Resume Driven Development.
Тё>Ну да, если отбирать кандидатов по признаку религиозного фанатизма на c++ со знанием питона- весь стек будет из c++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.

Ну вообще ned прав. Обычно Go – это либо Resume Driven Development, либо слабая команда, которая что-то более выразительное осилить не может, либо и то и другое разом.

Тебе, кстати, Go тоже из-за резюме хочется
Re[7]: и что теперь делать
От: student__  
Дата: 11.10.18 09:15
Оценка: :)
Здравствуйте, mmu, Вы писали:
mmu>Вот примеры:
А Джава или Сисярп магическим образом находят все зависимости, угадывая мысль программиста?

mmu>(CAD, gamedev, telco, trading) — это на любителя

Еще автомотив и аероспейс в этом списке. Но, видимо, тоже копейки и на любителя. Но вот ынтырпрайз и веб любят все, да?
Re[13]: и что теперь делать
От: Lexey Россия  
Дата: 11.10.18 18:25
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

Тё>Тем более, зачем они плюснутый класс экспортировали в API? Не от большого ума. Типа «мы крутые плюсныки, круче нас только яйца всмятку».


Тема, ты дурак или прикидываешься? string и vector — это стандартные типы C++, примерно как String и List в твоей любимой яве. Или ты их тоже в API не будешь использовать?

Тё>Для меня плюсник, завязанный на форточку (WINAPI, пончик)- хреновый плюсник. Говнокодер. Код должен собираться и работать на 3 основных платформах как минимум (а возможно ещё и на консоли).


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

Тё>Ты почему-то нападаешь на меня что я «плохо знаю C++».


Так ты это явно тут демонстрируешь.

Тё>И тут же камин аут что make_unique затащили в стандарт только в 2014г. Это не показатель непоследовательности и непротиворечивости?


make_unique — это сахар. Без него спокойно можно жить.

Тё>И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?


Или он не захотел обсуждать очевидные вещи.

Тё>Единственным инструментом, который они типа знают. Зашоренные с отсутствием кругозора.


Ты много видел хороших программистов, которые знают единственный инструмент?
"Будь достоин победы" (c) 8th Wizard's rule.
Re[16]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 12.10.18 01:59
Оценка: :)
Здравствуйте, ned, Вы писали:

ned>Здравствуйте, Тёмчик, Вы писали:


Тё>> API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору. Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать


ned>А как ты строчку передашь? А массив? Указателями в стиле голого C? А вернёшь как?


object= api->createMegaObject()
object.setLabel("Hello Alexey!!!")
object->dispose()
cout << api->getVersion()

Прикинь- такой API будет работать не только между прилагой и плагином, скомпиленными с той же версией C dll, и обязательно dynamically-linked оно и с static, и с go, и с питоном полетит. Даже с жаваскриптом

ned>Фабрики любят городить бывшие джависты там где они совершенно не нужны.

Я задолго до жава открыл для себя GoF

Тё>>У меня нет проблем. Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.


ned>Мне знакомый клавиатуру подарил вчера с русскими буковками. Дочке в русской школе задания делать. Так вот там все Windows клавиши вырваны с корнем. Ты тоже из таких ненавистников?

Форточка недружелюбна к программисту. Все через задницу, к сожалению.

Тё>>>>И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?


ned>Не нужно обходиться. Копируешь и вставляешь проект если твой компилятор его не поддерживает. Ссылку я приводил. Там всё разжёвано.

Но там и emplace_back не нужен. Знаешь DRY principle?

Тё>>Или не знает. Как многие слились на развороте строки.


ned>Ну это смешно. Это настолько заезженная задачка что стыдно не знать. Даже если туп (или rusty как модно у нас оправдываться) и решить за пару минут не можешь. Первая задачка в любой книжке по подготовке к собеседованиям. Могу подарить пару если хочешь

Т.е. без книжки ты б не придумал?
Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 03.10.18 23:37
Оценка:
Оффтоп из ветки
Автор: so5team
Дата: 03.10.18


здесь
Re[2]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 03:44
Оценка:
Здравствуйте, 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>Нафига POD структуре баян? https://en.cppreference.com/w/cpp/language/rule_of_three

Ага, слажал.

ned>
ned>private:
ned>    void accept( ShapeVisitor & visitor ) const;
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>Ну и так далее. Некогда ревьювить сейчас

И за это спасибо
Re: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 04.10.18 05:36
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Оффтоп из ветки
Автор: so5team
Дата: 03.10.18


Тё>здесь


Уровень выпускника-отличника, который не сильно разбирается в языке. Часть проблем, видимых невооруженным взглядом, уже указал ned.
Еще using namespace прямо в заголовочном файле.
Класс MultiPowerPoint сделан "на отвали":

* публичный атрибут slaves;
* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&.
Re[3]: Покритикуйте C++ код
От: ned Австралия  
Дата: 04.10.18 05:46
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Ээээ C++ 14? Оно как-то собиралось и крутилось под отладчиком


А, gcc extension (parenthesized member array initialization). Лучше просто vertices{ v1, v2, v3 }.

Тё>ок. Это критично убирать, или вкусовщина?


Не, некритично. Масло масляное.

Тё>так меньше копирования, чем с implicit конструктором unique_ptr? Просто в твоем каноничном варианте больше букв.


Там move будет без копирования. В данном случае разницы никакой, но лучше new/delete в коде избегать.
А вообще вот: https://herbsutter.com/gotw/_102/
Re[2]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 05:57
Оценка:
Здравствуйте, so5team, Вы писали:

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

Эээ только я уже очень стар и никогда не был отличником


S>Еще using namespace прямо в заголовочном файле.

уменьшил число букв. Это правда так плохо?

S>Класс MultiPowerPoint сделан "на отвали":


S>* публичный атрибут slaves;

ок

S>* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&.

Напишите код, чтоб пояснить. Ибо я ещё раз перечитал- ничего там ни отнять, ни прибавить.
Re[4]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 06:34
Оценка:
Здравствуйте, 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 аллокацию. Т.о. в моём коде проблемы утечки нет- остальное это соглашения.
Re[4]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 07:25
Оценка:
Здравствуйте, so5team, Вы писали:

Тё>>уменьшил число букв. Это правда так плохо?


S>Да. Очень плохо.

Ну хз. Очень плохо, значит очень плохо .

S>>>* методы turnOn/turnOff в своей реализации -- типичная копи-паста, легко устраняемая за счет вспомогательного закрытого метода, принимающего ext::ApplienceVisitor&.

Тё>>Напишите код, чтоб пояснить. Ибо я ещё раз перечитал- ничего там ни отнять, ни прибавить.
S>
class MultiPowerPoint {
S>  ...
S>  void forEachApply(ext::ApplienceVisitor & v) {
S>    for( auto & s : slaves )
      s->>accept(v);
S>  }
S>  ...
S>public:
S>  void turnOn() { forEachApply(onVisitor); }
S>  void turnOff() { forEachApply(offVisitor); }
S>  ...
S>};


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

S>Тут еще напрашивается вопрос о том, имеет ли смысл вообще создавать onVisitor и offVisitor атрибутами в MultiPowerPoint. Возможно, их можно было бы создавать по-месту:

S>
void turnOn() {
S>  ext::TurnOnVisitor on;
S>  forEachApply(on);
S>}

да, согласен, упустил этот момент.

S>Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах.

Double dispatch на шаблонах? Оно не переусложнение задачи?
Re[5]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 04.10.18 07:35
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>А метод-то зачем?- плодить сущности без нужды нехорошо.


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

S>>Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах.

Тё>Double dispatch на шаблонах? Оно не переусложнение задачи?

Зависит от задачи. Это в Java или в каком-нибудь Go у вас нет выбора. А в C++ он есть, и в зависимости от условий, приходится выбирать между динамическим полиморфизмом и статическим. У каждого есть свои преимущества и недостатки. А "переусложнение" -- это цена, которую придется заплатить, например, если мы хотим избежать использования виртуальных функций в рантайме.
Re[5]: Покритикуйте C++ код
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 04.10.18 07:39
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>У Саттера проблема нескольких аллокаций: первый обьект создан успешно, второй бросил- успешно созданный обьект утек. Переписать можно как явно инициировать первый unique_ptr, потом на другом шаге второй, потом позвать функцию.

Для этого и используют make_*, unique_ptr и try-catch. На эту тему тут Джаззер 100 лет назад целый объёмный пост делал к тогдашнему С++х03.
Sic luceat lux!
Re[6]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 07:57
Оценка:
Здравствуйте, Kernan, Вы писали:

Тё>>У Саттера проблема нескольких аллокаций: первый обьект создан успешно, второй бросил- успешно созданный обьект утек. Переписать можно как явно инициировать первый unique_ptr, потом на другом шаге второй, потом позвать функцию.

K>Для этого и используют make_*, unique_ptr и try-catch. На эту тему тут Джаззер 100 лет назад целый объёмный пост делал к тогдашнему С++х03.

Проблема известная. К моему случаю не относится.
Re[6]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 08:02
Оценка:
Здравствуйте, so5team, Вы писали:

S>Затем, что у вас концептуально есть такая задача: обойти все содержимое slave и применить к каждому элементу некий визитор. Вы кодируете решение этой задачи два раза в разных местах, что есть копипаста.

Но Вы скопипастили код от std::for_each и более того, породили ненужную сущность в классе. Вынесли бы тогда в utility-класс.

S>>>Ну и развивая мысль далее, имело ли вообще смысл связываться здесь с динамическими полиморфизмом. Или выгоднее сделать статический полиморфизм на шаблонах.

Тё>>Double dispatch на шаблонах? Оно не переусложнение задачи?

S>Зависит от задачи. Это в Java или в каком-нибудь Go у вас нет выбора. А в C++ он есть, и в зависимости от условий, приходится выбирать между динамическим полиморфизмом и статическим. У каждого есть свои преимущества и недостатки. А "переусложнение" -- это цена, которую придется заплатить, например, если мы хотим избежать использования виртуальных функций в рантайме.

Вы уходите от ответа на простой вопрос- нужно ли переусложнение с имплементацией double dispatch на шаблонах. Более того, паттерн visitor как раз придумали из за отсутствия встроенного в средства языка C++ и Java double dispatch.
Re[7]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 04.10.18 08:08
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Но Вы скопипастили код от 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.

Мозги включите, если они есть. Все ответы были даны.
Re[8]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 08:25
Оценка:
Здравствуйте, 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 не прощают (общался с ними на митапе).
Re[9]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 04.10.18 08:42
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Скопипастили по факту из utility класса (ну хорошо, из юнита) . Т.е. добавили несколько строчек говнокода.


И это говорит человек, который наговнокодил тоже самое дважды.

S>>Это нужная сущность, и нужна она именно внутри класса, т.к. ей нужен доступ к slaves.

Тё>Ей вообще-то не надо ничего знать про slaves. Ее задача- перебрать элементы коллекции и к каждому применить некое действие.

Ее задача перебрать элементы не какой-то коллекции, а конкретно slaves.

S>>Нужна она потому, что кроме устранения копипасты метод forEachApply позволит вам более дешево поменять представление slaves. Если, скажем, вместо vector-а вы будете использовать vector<vector<...>>.

Тё>Не фантазируйте.

Вы просто не знаете, чем опасна копипаста.

S>>Мозги включите, если они есть. Все ответы были даны.

Тё>Если Вы не можете ответить на мой вопрос- не отвечайте.

Ответ был дан. Если вы не можете понять то, что вам пишут, то это ваши проблемы.
Re[8]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 20:41
Оценка:
Здравствуйте, 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.
Re[2]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 04.10.18 22:57
Оценка:
Здравствуйте, Lexey, Вы писали:

Тё>>здесь


L>Visitor?! OMG. Судя по коду, он там нафиг не упал.


А как надо?

Ну и в защиту visitor- я про него узнал как раз из-за этого теста этой конторы. Потом успешно применял для преобразования 2+ версий сообщений от брокера, и для печати их в консоль вообще замечательно зашёл.
Хотя, если по уму, для преобразования сообщений лучше иметь описание по типу протобуфера, и динамически/прегенерить обертки, в полностью универсальном коде. Но до такого(как имплементировать) я тогда не созрел, плюс давление сроков, плюс давление "люди не поймут код" от тимлида (болото) и т.д.
Re[4]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 05.10.18 00:08
Оценка:
Здравствуйте, 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, аннотации и рефлекшен и копипаста в каждом месте десерилизации, серилизации, печати.
Re[2]: Покритикуйте C++ код
От: LaptevVV Россия  
Дата: 05.10.18 04:03
Оценка:
S>Уровень выпускника-отличника, который не сильно разбирается в языке. Часть проблем, видимых невооруженным взглядом, уже указал ned.
S>Еще using namespace прямо в заголовочном файле.
Вы считаете это способен написать ВЫПУСКНИК-отличник?
У меня на 2 курсе на лабах это нещадно вычищается из кода.
На лекцию приношу книгу Саттера-Александреску и зачитываю.
ВТОРОЙ курс, Карл!
Прямо сейчас, в начале 3 семестра!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Покритикуйте C++ код
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 05.10.18 04:55
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>У меня на 2 курсе на лабах это нещадно вычищается из кода.

LVV>На лекцию приношу книгу Саттера-Александреску и зачитываю.
LVV>ВТОРОЙ курс, Карл!
LVV>Прямо сейчас, в начале 3 семестра!

Это очень здорово! У нас периодически студиозы 5-ого курса проходят практику и, обычно, они имеют хорошую алгоритмическую подготовку, знают теорию и даже быстро пишут код. Но у меня есть ощущению, что ВУЗ-ы упускают такую штуку как дизайн кода, зачем, когда и почему нужен рефакторинг, что такое "Code Smells" (как по-русски это сказать? ). В итоге, там где надо быстро что-то нехреначить всё прекрасно, а вот если нужно сделать то, что проживет много лет... Учим, понятное дело, но хорошо бы чтобы и ВУЗ про это рассказывал
Re[3]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 05.10.18 05:00
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Вы считаете это способен написать ВЫПУСКНИК-отличник?


Да. Дайте отличнику незнакомую ему тему и всего пару часов, результат будет похожим. Вот как здесь: человек не разбирается, ни в C++, ни в патернах проектирования, но что-то удобоваримое написал.
Re[8]: Покритикуйте C++ код
От: PM  
Дата: 05.10.18 05:00
Оценка:
Здравствуйте, 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>())`

https://stackoverflow.com/a/15784813/1355844
Re[4]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 05.10.18 06:48
Оценка:
Здравствуйте, so5team, Вы писали:

S>Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"


Очень просто. Ты и сейчас его не знаешь
Re[6]: Покритикуйте C++ код
От: Тёмчик Австралия жж
Дата: 05.10.18 07:43
Оценка:
Здравствуйте, so5team, Вы писали:

S>Не просто. С момента перевода книги банды четырех на русский язык вопросы по паттернам на собеседованиях в странах СНГ по популярности могли поспорить с вопросами про гномиков и виртуальный деструктор.


Одно дело перечислить названия паттернов, другое- уметь их применять.
Re[5]: Покритикуйте C++ код
От: Lexey Россия  
Дата: 05.10.18 10:33
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Ну хорошо, сделал ты toString() в текст. А потом тебе понадобилось в html, или latex или вообще rtf. И добавить ещё web api. Добавишь ещё методов в shape? А за каким shape должен знать про html?


А если не понадобилось? Нафига тогда весь этот "тюнинг в зоопарке"?

Тё>Так что, судя по твоим заявлениям, с паттернами проектирования и вообще дизайном классов есть room for improvement (tm).


"Будь достоин победы" (c) 8th Wizard's rule.
Re: Покритикуйте C++ код
От: student__  
Дата: 05.10.18 11:36
Оценка:
А зачем там нужен <iosfwd>?
Re: и что теперь делать
От: sergey2b ЮАР  
Дата: 05.10.18 13:03
Оценка:
Здравствуйте, Тёмчик, Вы писали:

практически все отметившиеся критикуют Тёмчик
есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень
Re[4]: Покритикуйте C++ код
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 05.10.18 13:27
Оценка:
Здравствуйте, so5team, Вы писали:

S>Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"

Визитор в большинстве случаев не нужен.
Sic luceat lux!
Re[3]: и что теперь делать
От: sergey2b ЮАР  
Дата: 05.10.18 13:42
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, sergey2b, Вы писали:


S>>есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень

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

а какие книги сейчас относяться к нетленкам
могли бы вы посоветовать open src проекты где есть примеры хорошего C++
Re[5]: Покритикуйте C++ код
От: so5team https://stiffstream.com
Дата: 05.10.18 14:42
Оценка:
Здравствуйте, Kernan, Вы писали:

S>>Это многое объясняет, но ставит другой, более важный и сложный вопрос: "Как? Как можно много лет программировать на C++ и Java и узнать про Visitor только в 2016-ом?"

K>Визитор в большинстве случаев не нужен.

Как и, например, placement new или operator,(). Тем не менее, иметь представление о таких вещах нужно.
Re[3]: и что теперь делать
От: sergey2b ЮАР  
Дата: 06.10.18 00:15
Оценка:
Здравствуйте, Тёмчик, Вы писали:

я например пишу для микроконтролеров там выбор не велик — асм Си и Pascal
shareware выгдней делать на C++
я немного пигу непосредственно для PC железа, там С и С++
на работе приложение обрабатывает такой объем данных что мне кажеться Java поплохеет (у меня был опыт писать немного на Java были проблеммы по скорости работать с 4gb xml файлом а на C++ работало достаточно бодро)
Re[3]: и что теперь делать
От: PM  
Дата: 06.10.18 05:22
Оценка:
Здравствуйте, Тёмчик, Вы писали:

S>>практически все отметившиеся критикуют Тёмчик

S>>есть и другая сторона вопроса, что ему надо сделать что бы улучшить свой уровень

Тё>Хорошо отревьювил ned- сжато, только по делу.


Мне кажется остальные молча присоединились согласились с заключительным высказыванием:
ned>Ну и так далее. Некогда ревьювить сейчас

Что надо сделать чтобы улучшить свой уровень — активно интересоваться новшествами в С++ — быть в теме, что там в С++20 будут принимать; иметь мнение, почему `enum class byte : uint8_t` это хорошо (или плохо), нужны корутины или нет; позапускать примеры Саттера с `-Wlifetime`. Ну и, само собой, читать код других. Чтобы не вариться много лет в одном и тоже корпоративном копролите, открывая для себя visitor в 2016 году.

Это ведь всего лишь один из один из способов. Смотри, Тёмчик, в каком-то случае можно просто обойтись парой if-else внутри функции: https://github.com/foonathan/cppast/blob/master/tool/main.cpp#L30

Рекомендую почитать код этого автора, в частности type_safe, как пример современного C++
Re[4]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 06.10.18 06:47
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>на работе приложение обрабатывает такой объем данных что мне кажеться Java поплохеет (у меня был опыт писать немного на Java были проблеммы по скорости работать с 4gb xml файлом а на C++ работало достаточно бодро)


Зависит от типа используемого парсера XML (DOM, SAX, STAX) и количества выделений памяти, а также особенностей реализации ввода. Такая простая задача упирается в скорость чтения с носителя.
Отредактировано 06.10.2018 8:35 Артём . Предыдущая версия .
Re: Покритикуйте C++ код
От: fk0 Россия https://fk0.name
Дата: 06.10.18 10:50
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Оффтоп из ветки
Автор: so5team
Дата: 03.10.18


Тё>здесь


Для этого существует https://codereview.stackexchange.com.
Re: Покритикуйте C++ код
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 06.10.18 11:05
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Оффтоп из ветки
Автор: so5team
Дата: 03.10.18


Тё>здесь


-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[5]: и что теперь делать
От: so5team https://stiffstream.com
Дата: 06.10.18 12:03
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Вы ниасилили больше 1 языка и предложили заменить visitor кучкой говнокода (т.е. ниасилили и visitor тоже).




Тё>А я подтверждение.


Да. Наглядное.

Тё>Можно вкратце


Нельзя.
Re[4]: и что теперь делать
От: IID Россия  
Дата: 08.10.18 01:34
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>я например пишу для микроконтролеров там выбор не велик — асм Си и Pascal


ЩИТО?! Паскаль ?

И что за микроконтроллеры такие, для которых нет С++ ? Хотя бы на уровне "си-с-классами"
Даже для убогих PIC-ов есть IAR C++.
kalsarikännit
Re[5]: и что теперь делать
От: sergey2b ЮАР  
Дата: 08.10.18 14:28
Оценка:
Здравствуйте, IID, Вы писали:

я сейчас пишу на Си но на easyelectronics есть люди которые еще пишут на Pascal

скажите пожалуйста, а вы знаетте какие нибудь дешовые микроконтролеры, что бы у них было 128k RAM и больше и частота 24 Мгц и выше
Re[7]: и что теперь делать
От: sergey2b ЮАР  
Дата: 08.10.18 15:55
Оценка:
Здравствуйте, IID, Вы писали:

спасибо за ваш ответ

устройство будет работатать в комнате те в тепличных условииях
у нас Raspberry Pi Zero стоит 10-17$ при этом частота 1Ghz и памяти 512Mb, получаеться дешевле использовать ее чем самому делать плату
Re[8]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 09.10.18 05:50
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>у нас Raspberry Pi Zero стоит 10-17$ при этом частота 1Ghz и памяти 512Mb, получаеться дешевле использовать ее чем самому делать плату


Для распберри вроде модно использовать питон? Да и node должен завестись, не говоря за go. Скорость разработки многократно быстрее, чем на C++.
Re[3]: и что теперь делать
От: student__  
Дата: 09.10.18 07:58
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Те C++ки, у которых есть кругозор и способность изучать новое, просекли всё и сбежали на Java. Но я и за Java не агитирую, сейчас это такая легаси, как был C++ в начале 2000-х. Ну а C++ сейчас это такой кобол для поколения X.


Т.е. разраб, которому нравится индустрия игродела вдруг взял, и уволился, только потому что где-то пилят энтерпрайз на Джаве? Плевать, что предметная область скучна чуть более, чем полностью, главное — на Джаве покодерить, да?
Отредактировано 09.10.2018 8:01 student__ . Предыдущая версия .
Re[4]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 09.10.18 11:19
Оценка:
Здравствуйте, student__, Вы писали:

__>Т.е. разраб, которому нравится индустрия игродела вдруг взял, и уволился, только потому что где-то пилят энтерпрайз на Джаве? Плевать, что предметная область скучна чуть более, чем полностью, главное — на Джаве покодерить, да?


Игры это отдельная тема, я в игроделах не работал. А так- что на плюсах, что на жаве бывают интересные задачи а бывают не очень или совсем туши свет.
Re[9]: и что теперь делать
От: sergey2b ЮАР  
Дата: 09.10.18 15:28
Оценка:
Здравствуйте, Тёмчик, Вы писали:


Тё>Для распберри вроде модно использовать питон? Да и node должен завестись, не говоря за go. Скорость разработки многократно быстрее, чем на C++.


в текущей реализации, на асме возять байт из памяти и положить в порт всеравно медленно получаеться, чем мне надо
поэтому я и спросил про МК с достаточной памятью и скоростью

следующую буду делать на более можном МК и писать на асме или Си, ОС скорей всего не будет или будет freertos
Re[5]: и что теперь делать
От: ned Австралия  
Дата: 09.10.18 23:21
Оценка:
Здравствуйте, RedUser, Вы писали:

RU>Не книга, но тоже может быть полезным:

RU>https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

Тогда и это туда же:
https://isocpp.org/wiki/faq
Re[10]: и что теперь делать
От: ned Австралия  
Дата: 09.10.18 23:23
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Python для прототипов разве хорош, потом ты просто задолбоаешься с его динамической типизацией. Go лучше C++ только если команда так себе, с сильной командой он откровенно сливает


Интеграционные (system) тесты на нём писать ещё удобно.
Re[6]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 09.10.18 23:55
Оценка:
Здравствуйте, 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.
Re[12]: и что теперь делать
От: ned Австралия  
Дата: 10.10.18 00:52
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Мы так и делаем, но наметилась занятная проблема. Интеграционных тестов очень много, так как мы вообще отказались от ручных тстов и всё автоматизировали. В итоге интеграционные тесты настойчиво просят юнит-тесты на самих себя, в основном по причине динамической типизации. Время от времени в рантайм бабахает


Да, у нас есть юнит-тесты на интеграционные тесты. Ручного тестирование почти нет.
Проблема осталась одна: полный прогон занимает полчаса и больше. Тестов много т.к. обычно фича/багфикс = новый тест. На каждый тест поднимается вся система. Пока терпимо, но скоро придётся распараллеливать.
Re[7]: и что теперь делать
От: ned Австралия  
Дата: 10.10.18 01:05
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Давай разберём по полочкам. Игродев это новый проект? Мне так не показалось из собеседования.


Сам проект старый. Компоненты новые. Сейчас совсем новое (и секретное ) что-то пишут.

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


Да, там всё консервативно. Потому-что API и много пользователей. Вот свежее подтверждение из последнего CppCon:
https://www.youtube.com/watch?v=2YXwg0n9e7E

Но, тем не менее, C++ там без альтернативы.

Тё>Питон + C++ — и что удивительного? Питон так и работает- scipy на C подцепил и всё летает. К сожалению, Global Lock и несовместимость 2-3 версии его доконают. Go указанных недостатков лишён.


Питон проще. Скорость разработки выше. Прототипы и прочий R&D, моки на нём пишутся быстро. Go не пошёл. Может разработчики был не очень Или, скорее всего, Resume Driven Development.
Re[8]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 10.10.18 02:01
Оценка:
Здравствуйте, 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++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.
Re[9]: и что теперь делать
От: ned Австралия  
Дата: 10.10.18 02:26
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>API не нужно менять, чтобы поменять внутренности


Иногда нужно. Вот он приводил пример когда они самописный (до STL ещё!) вектор на std::vector меняли. Или это строка была? Не суть.

ned>>Но, тем не менее, C++ там без альтернативы.

Тё>что???

Ага. Мелкие вещи типа плагинов ещё можно на C# писать. Что-то серьёзное вряд ли.

Тё>Питон не проще. Это лаконичный язык, который делает то, что от него просят. А не выносит мозг странными извращениями как плюсы, или портянками графомании как жава.


Вот поэтому и проще. На нём могут писать "ненастоящие" программисты вроде QA или рисёчеров.

Тё>Ну да, если отбирать кандидатов по признаку религиозного фанатизма на c++ со знанием питона- весь стек будет из c++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.


Не, ты не понял. Это уже отобранные разработчики по своим личным причинам пытаются внедрить совершенно неуместную модную технологию. Чтобы попрактиковаться и прыгнуть дальше. А там хоть трава не расти.
Re[10]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 10.10.18 03:23
Оценка:
Здравствуйте, ned, Вы писали:

Тё>>API не нужно менять, чтобы поменять внутренности


ned>Иногда нужно. Вот он приводил пример когда они самописный (до STL ещё!) вектор на std::vector меняли. Или это строка была? Не суть.

Т.е. у них слабые программисты сделали API на уровне школьное сочинение "как я провёл лето". А ты почему-то априори записал всех плюсников в "сильные" а неплюсников в "слабые".

ned>>>Но, тем не менее, C++ там без альтернативы.

Тё>>что???

ned>Ага. Мелкие вещи типа плагинов ещё можно на C# писать. Что-то серьёзное вряд ли.

Какой C#? Это типа серьёзные программисты завязаны на форточку?

Тё>>Питон не проще. Это лаконичный язык, который делает то, что от него просят. А не выносит мозг странными извращениями как плюсы, или портянками графомании как жава.


ned>Вот поэтому и проще. На нём могут писать "ненастоящие" программисты вроде QA или рисёчеров.

Ты путаешь навык обходить грабли укуренного языка с умением дизайнить архитектуру и применять алгоритмы. Всё это вот с граблями- от непоследовательности и противоречивости C++, а не признак "настоящейности" программиста.

Тё>>Ну да, если отбирать кандидатов по признаку религиозного фанатизма на c++ со знанием питона- весь стек будет из c++ с питоном. Ведь никто не допустит еретической мысли, что есть что-то другое.


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

Я правильно всё понял- отобранные программисты забивают гвозди микроскопом. Дальше уже непринципиально, какой именно марки микроскоп.
Re[10]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 10.10.18 03:39
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Тебе, кстати, Go тоже из-за резюме хочется


Я вижу, какой адский треш происходит прямо сейчас в т.н. "микро" сервисе на жаве и мне кажется, что использование ts и нода там позволило бы сократить число буков в 20 раз. Если go такой же типизипованный и краткий, да ещё и компилируемый- хочется его туда применить вместо жавы.
Re[6]: и что теперь делать
От: mmu  
Дата: 10.10.18 10:12
Оценка:
Здравствуйте, 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-х. геймдев не платит. трейдинг — это "уникальные велосипеды" с единичным спросом и некоторыми особенностями. Единичный спрос влечет за собой выше среднего зависимость от работодателя, а значит и от конкретных людей. А у людей могут начаться какие-то глюки неожиданно. Зачем идти на такой риск. Но сейчас большой спрос на интернет. Почему бы и не посмотреть что там есть.
Re[11]: и что теперь делать
От: ned Австралия  
Дата: 10.10.18 11:16
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Т.е. у них слабые программисты сделали API на уровне школьное сочинение "как я провёл лето". А ты почему-то априори записал всех плюсников в "сильные" а неплюсников в "слабые".


Когда писали STL не было. Или был, но "сырой", например. А в чём проблема с изменениями в API. Ты его на века гвоздями приколачиваешь?

Тё>Какой C#? Это типа серьёзные программисты завязаны на форточку?


CADы и игры чаще да, чем нет. Но я C# для примера привёл.

Тё>Ты путаешь навык обходить грабли укуренного языка с умением дизайнить архитектуру и применять алгоритмы. Всё это вот с граблями- от непоследовательности и противоречивости C++, а не признак "настоящейности" программиста.


Вот для меня Python непоследовательный и противоречивый. Потому что я его плохо знаю. Для тебя C++. Архитектура и алгоритмы идут параллельно языкам. Тут ты прав.

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


Отобранные программисты решают поставленные задачи наиболее подходящим инструментом. А не строят резюме или экспериментируют с новыми модными фреймворками.
Re[12]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 10.10.18 20:47
Оценка:
Здравствуйте, ned, Вы писали:

Тё>>Т.е. у них слабые программисты сделали API на уровне школьное сочинение "как я провёл лето". А ты почему-то априори записал всех плюсников в "сильные" а неплюсников в "слабые".


ned>Когда писали STL не было. Или был, но "сырой", например. А в чём проблема с изменениями в API. Ты его на века гвоздями приколачиваешь?

Тем более, зачем они плюснутый класс экспортировали в API? Не от большого ума. Типа «мы крутые плюсныки, круче нас только яйца всмятку».

Тё>>Какой C#? Это типа серьёзные программисты завязаны на форточку?


ned>CADы и игры чаще да, чем нет. Но я C# для примера привёл.

Для меня плюсник, завязанный на форточку (WINAPI, пончик)- хреновый плюсник. Говнокодер. Код должен собираться и работать на 3 основных платформах как минимум (а возможно ещё и на консоли).

Тё>>Ты путаешь навык обходить грабли укуренного языка с умением дизайнить архитектуру и применять алгоритмы. Всё это вот с граблями- от непоследовательности и противоречивости C++, а не признак "настоящейности" программиста.


ned>Вот для меня Python непоследовательный и противоречивый. Потому что я его плохо знаю. Для тебя C++. Архитектура и алгоритмы идут параллельно языкам. Тут ты прав.

Ты почему-то нападаешь на меня что я «плохо знаю C++». И тут же камин аут что make_unique затащили в стандарт только в 2014г. Это не показатель непоследовательности и непротиворечивости? И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?

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


ned>Отобранные программисты решают поставленные задачи наиболее подходящим инструментом. А не строят резюме или экспериментируют с новыми модными фреймворками.

Единственным инструментом, который они типа знают. Зашоренные с отсутствием кругозора.
Re[14]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 11.10.18 22:07
Оценка:
Здравствуйте, 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> Ты много видел хороших программистов, которые знают единственный инструмент?

Ни одного. Ты к ним не относишься.
Re[15]: и что теперь делать
От: Lexey Россия  
Дата: 11.10.18 23:06
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору.


Ты, похоже, наглухо укушен бандой GoF и явой. Какие в пень фабрики? Их может вообще не быть. А аллокаторы (не, я подозреваю, что ты что-то свое имеешь в виду, а не то, что в плюсах под этим понимают) наружу выставляют крайне редко.

Тё>Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать


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

Тё>У меня нет проблем.


А мне видится, что есть.

Тё>Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.


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

Тё>Ок. Надо будет- подтяну.


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

Тё>Ты либо трусы надень, либо крестик сними. Меня за неиспользование Make_unique тут грвзью поливают, а оно вон как оказывается.


Тебя грязью полили не за неиспользование make_unique, а за то, что ты передавал голый владеющий указатель в метод emplace_back, который может память перевыделять, и, соответственно, кидать исключения. make_unique — это всего лишь один из способов решения проблемы.
С тем же успехом можно было явно завернуть указатель в unique_ptr: unique_ptr<T>(new T) или push_back использовать вместо emplace_back.

Тё>Или не знает. Как многие слились на развороте строки.

Кто, многие? Большинство там просто в остроумии решило поупражняться, придумывая возможные каверзные варианты.

Тё>Ни одного. Ты к ним не относишься.


Разумеется. Тебе не светит меня увидеть из Австралии.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[15]: и что теперь делать
От: ned Австралия  
Дата: 11.10.18 23:38
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё> API предоставляет фабрику для его обьектов и максимум что- интерфейс к аллокатору/деаллокатору. Ну почему я должен, как школьнику, обьяснять очевидные вещи? Таким как ты только из кубиков лего собирать


А как ты строчку передашь? А массив? Указателями в стиле голого C? А вернёшь как?
Фабрики любят городить бывшие джависты там где они совершенно не нужны.

Тё>У меня нет проблем. Иногда сталкиваюсь с поделиями рукожопых что только под форточкой работают- приходится брезгливо потерпеть 5 минут.


Мне знакомый клавиатуру подарил вчера с русскими буковками. Дочке в русской школе задания делать. Так вот там все Windows клавиши вырваны с корнем. Ты тоже из таких ненавистников?

Тё>>>И ты не указал, как можно было обойтись без make_unique- значит ты не понял его смысл?


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

Тё>Или не знает. Как многие слились на развороте строки.


Ну это смешно. Это настолько заезженная задачка что стыдно не знать. Даже если туп (или rusty как модно у нас оправдываться) и решить за пару минут не можешь. Первая задачка в любой книжке по подготовке к собеседованиям. Могу подарить пару если хочешь
Re[16]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 12.10.18 00:07
Оценка:
Здравствуйте, 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 рубля пучок.
Re[16]: и что теперь делать
От: aik Австралия  
Дата: 12.10.18 00:33
Оценка:
Здравствуйте, ned, Вы писали:

ned>Ну это смешно. Это настолько заезженная задачка что стыдно не знать. Даже если туп (или rusty как модно у нас оправдываться) и решить за пару минут не можешь. Первая задачка в любой книжке по подготовке к собеседованиям. Могу подарить пару если хочешь


Со строкой задачка то простая, но если годами не работать с нуль-терминированными строками (что норма для питона, явы, c++), то такой вопрос может поставить в тупик и нужно будет дополнительное время переключить контекст. Строка, которая не хранит длину, это ж цирк с конями, если разобраться, кому нафиг такое надо? Любой язык программирования после си начинает с того а как мы со строками работать то будем и у всех другой ответ, чем у си.

Ну ладно, я то с такими строками всё ещё работаю (у меня ж си), так что для меня пример такой заезженной задачки — это breadth-first search в графе. Оно, вроде, примитивно, когда знаешь, а когда внезапно первый раз надо придумать самому — наступает ступор. И таких задачек куча, к повседневной жизни отношения не имеют, решения в голове не задерживаются дольше недели, надо спецом учить к собеседованиям.
Re[17]: и что теперь делать
От: ned Австралия  
Дата: 12.10.18 00:53
Оценка:
Здравствуйте, aik, Вы писали:

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


Согласен со всем.
Если на собеседование идёшь с целью пройти, а не развлечься, то нужно готовиться. А эту задачку сложно пропустить. Она везде, на всех ресурсах. Вместе с бинарным поиском, обходом графа, отзеркаливанием дерева и т.п.
Можно включить cowboy mode и завалиться на собеседование в Гугль/ФБ/Амазон прямо с работы, не повторив теорию и не порешав задачки, но результат будет предсказуем. Таковы уж правила игры
Re[17]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 12.10.18 02:34
Оценка:
Здравствуйте, aik, Вы писали:

aik>Со строкой задачка то простая, но если годами не работать с нуль-терминированными строками (что норма для питона, явы, c++), то такой вопрос может поставить в тупик


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

aik>Ну ладно, я то с такими строками всё ещё работаю (у меня ж си), так что для меня пример такой заезженной задачки — это breadth-first search в графе. Оно, вроде, примитивно, когда знаешь, а когда внезапно первый раз надо придумать самому — наступает ступор.

Там нужно использовать стек (структуру данных). Боюсь, для отметившихся тут переворачивальщиков это гарантированный meltdown.

aik> И таких задачек куча, к повседневной жизни отношения не имеют

Имеют- везде, где работа с данными (бэкенд). Ну и у игроделов тоже.
Re[18]: и что теперь делать
От: aik Австралия  
Дата: 12.10.18 02:45
Оценка:
Здравствуйте, Тёмчик, Вы писали:

aik>> breadth-first search в графе. Оно, вроде, примитивно, когда знаешь, а когда внезапно первый раз надо придумать самому — наступает ступор.

Тё>Там нужно использовать стек (структуру данных). Боюсь, для отметившихся тут переворачивальщиков это гарантированный meltdown.

Нет, не стек.
Re[18]: и что теперь делать
От: aik Австралия  
Дата: 12.10.18 02:51
Оценка:
Здравствуйте, ned, Вы писали:

ned>Можно включить cowboy mode и завалиться на собеседование в Гугль/ФБ/Амазон прямо с работы, не повторив теорию и не порешав задачки, но результат будет предсказуем. Таковы уж правила игры


Ну чего сразу ковбой. Эти правила — они ж не везде такие, часто обходятся без графов. Я просто спрашиваю заранее компанию напрямую или знакомых кто туда собеседовался, и уже от этого пляшу, а не так что пока не вызубрю теорию графов — к снаряду и не подходи.
Re[19]: и что теперь делать
От: ned Австралия  
Дата: 12.10.18 02:58
Оценка:
Здравствуйте, aik, Вы писали:

aik>Ну чего сразу ковбой. Эти правила — они ж не везде такие, часто обходятся без графов. Я просто спрашиваю заранее компанию напрямую или знакомых кто туда собеседовался, и уже от этого пляшу, а не так что пока не вызубрю теорию графов — к снаряду и не подходи.


Вот в эти три без "графов" никак. В компаниях поменьше задачки годами не меняются. Знакомый — лучший вариант. У него интерес обычно свой На худой конец и glassdoor поможет.
Re[19]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 12.10.18 03:25
Оценка:
Здравствуйте, aik, Вы писали:

aik>Нет, не стек.


Ага, ошибся. FIFO. Ведь имплементил его для чего-то в прошлом проекте- и уже забыл.
Re[17]: и что теперь делать
От: ned Австралия  
Дата: 12.10.18 04:00
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>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
Отредактировано 12.10.2018 4:05 ned . Предыдущая версия .
Re[18]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 12.10.18 04:21
Оценка:
Здравствуйте, 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-классника.
Re[19]: и что теперь делать
От: ned Австралия  
Дата: 12.10.18 04:43
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>grep в форточке как сделаешь? А эти её api с пончиками.


https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/
Я ещё Agent Ransack пользуюсь.

Тё>Ну и чего докопались? Песец какая страшная ошибка.


Просил же покритиковать код.

Тё>Она на олимпиадную не тянет. Разве для 3-классника.


Тогда тянула. Большинство задачек математические были. Программирование сбоку для окончательного расчёта.
Re[20]: и что теперь делать
От: Тёмчик Австралия жж
Дата: 12.10.18 05:24
Оценка:
Здравствуйте, 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 тест на отсутствие мозга. Очень уж лёгкая для любого человека.
Re[19]: и что теперь делать
От: student__  
Дата: 12.10.18 06:17
Оценка:
Здравствуйте, Тёмчик, Вы писали:
Тё>grep в форточке как сделаешь?
powershell и Select-String? А ещё можно cygwin поставить.
Re[17]: и что теперь делать
От: Lexey Россия  
Дата: 12.10.18 17:18
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Разные 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 рубля пучок.


"Будь достоин победы" (c) 8th Wizard's rule.
Re[8]: и что теперь делать
От: mmu  
Дата: 18.10.18 11:33
Оценка:
Здравствуйте, student__, Вы писали:

__>Здравствуйте, mmu, Вы писали:

mmu>>Вот примеры:
__>А Джава или Сисярп магическим образом находят все зависимости, угадывая мысль программиста?

Там с этим намного проще. Вот свежий риддл:
x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
как так можно то портить настроение, моя задача сугубо связана с бизнес логикой, а тут такие сюрпризы...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.