LINUX.ORG.RU

Кто там кукарекал про С++?


1

8

Задача: разработать кроссплатформенное клиент-серверное приложение под Windows/Linux на С++ (boost, ace, etc.), клиент построчно считывает с консольки введёные числа, отправляет на сервер, сервер в ответ плюёт разложением чисел на простые множители. Стандартное тестовое задание, ничего интересного.

Ну что же, собрался духом, за вечер родил чуть около пол тысячи строк, чтоб всё как положено: асинхронность, многопоточность, все дела. Такое ощущение, коллеги, будто накормили грязью, кресты не умеют ни в замыкания, ни в нормальную асинхронность, ни в управление памятью, они вообще ничего не умеют. Вроде бы, написано 5 строк, а на деле почти не фига не делают, код раздут, абсолютно невыразителен, я уж не представляю что с ним будет, если его ещё раскидать на десяток классов, как это обожают делать отдельные особо одарённые личности.

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

class server
{
public:
  server(boost::asio::io_service& io_service, short port)
    : io_service_(io_service),
      acceptor_(io_service, tcp::endpoint(tcp::v4(), port))
  {
    session* new_session = new session(io_service_);
    acceptor_.async_accept(new_session->socket(),
        boost::bind(&server::handle_accept, this, new_session,
          boost::asio::placeholders::error));
  }
  .......

Смеха ради, да и чтоб не вырвало от такого кода, накидал за полчаса решение на Haskell.
Что получилось:

  • Разбор параметров командной строки
  • Клиент-серверная архитектура
  • Полностью асинхронный многопоточный tcp-сервер
  • Поддержка unicode, IPv6 и BigInteger из коробки
  • Мемоизация (благодаря ленивости) из коробки
  • Полная кроссплатформенность (*nix, Mac OS, Windows etc.)
  • Правильность тривиально доказывается мат. индукцией по коду
  • Исходник чуть больше 60 строк (в 8 раз меньше, чем на крестах)

Если поднатужиться (я не стал) и заменить алгоритм нахождения простых чисел/простых множителей на более оптимальный, то ко всему прочему получаем автоматическую распараллелизацию алгоритмов из коробки (см. Data Parallel Haskell) и произодительность на уровне чистого Си/Фортрана.

Кто там пищал, что хаскель сугубо академический язык, что ничего реальго на нём написать невозможно? Кто там кукарекал про С++? Как вы с ним вообще работаете? Это же мазохизм в чистом виде (см. мыши и кактус)

★★★★★

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

А использовать С++ там, где он нафиг не нужен это не ЦПП головного мозга?

Так кто вас заставил использовать C++ для этой задачи?
И вообще, C++ не значит ООП, впрочем как и C не значит отсутствие ООП.

А если серьёзно, то что использовать? Qt? Так это как мёртвому припарки.

То boost, то qt. Че вас на монстров тянет?

andreyu ★★★★★ ()

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

Далее, насчёт миллионов способов реализации string. Вы не задумывались что чем больше программистов пользуется языком тем больше велосипедов. То есть вы тут, любезные, всеми силами доказываете что C++ хоть и мёртв но до сих пор используется везде где можно придумать, а ваши silver-bullet-ы так и популярны среди ваших мам. Я скажу больше. Геморрой написания работы со строками в хаскелях видимо так пугает ввашего брата что даже мысли гаписать свой велосипед не возникает - писаемся в штанишки. С другой стороны, проходит время, год - другой и эти «лёгкие и перспективные» язычки превращаются в мастодонтов по сравнению с которыми C++ - бабочка, и умирают. И приходят новые ваятели. Просто 10 лет вышел новый стандарт C++. Сколько там ваших поколений сменилось и сколько несовместимостей вы устранили в своих программах? Не скромничайте! Ваш езыг ещё жив?

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

Круг задач в студию!

100500 раз тут уже обсуждалось. Вот Вам ссылка про задачи www.linux.org.ru/wiki/en/User:AIv/LRnLA

Визги ТС-а про непригодность С++ основываются на решении им какой то одной частной задачи. У него не получилось, и из этого он сделал вывод о непригодности С++ для всего вообще. Это называется индукция, и это в корне неверно - достаточно одного примера, что бы его утверждение опровергнуть. Вот я этот пример и привожу.

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

Так кто вас заставил использовать C++ для этой задачи?

Работодатель же.

То boost, то qt. Че вас на монстров тянет?

Я не знаю с какой целью сто постов назад кукарекали про Qt, а про работу с тонной разных библиотек (каждая из которых очередной велосипед) уже написали.

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

У студента подслеповатый дедушка-преподаватель программирования не принял лабораторную на хаскеле

Ваше больное воображение Вас же и погубит, по делу-то есть что сказать?

всеми силами доказываете что C++ хоть и мёртв но до сих пор используется везде где можно придумать

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

Ваш езыг ещё жив?

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

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

Про ваши пристрастия к копрофилии и её обсуждению уже говорят в соседних ветках. По существу ничего сказать не можете?

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

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

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

Я вообще хотел бы узнать ваше видение ниши крестов (ну кроме legacy), по какой причине их до сих пор ещё пихают в новые проекты? Дешевизна рабочей силы? Возможно.

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

Про ваши пристрастия к копрофилии и её обсуждению уже говорят в соседних ветках. По существу ничего сказать не можете?

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

Про ваши пристрастия к копрофилии и её обсуждению уже говорят в соседних ветках. По существу ничего сказать не можете?

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

Про ваши пристрастия к копрофилии и её обсуждению уже говорят в соседних ветках.

Всё понятно, очередной дИмагог, говорить по существу с вами не о чем.

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

Но от кода хочется блевать.

уже не раз спрашивали - где посмотреть твой код на С++? глядишь бы и показали как сделать красивее

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

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

По ссылке внизу написано почему.

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

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

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

Я вообще хотел бы узнать ваше видение ниши крестов (ну кроме legacy), по какой причине их до сих пор ещё пихают в новые проекты? Дешевизна рабочей силы? Возможно.

Понятия не имею, я не программист. Я работаю в очень узкой области, и в этой области С++ более чем востребован - у нас скорость разработки уж не ниже, чем у коллег пишущих на фортране например;-)

А что бы от кода на С++ блевать не хотелось, пользуйте правильные библиотеки.

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

В каком количестве проектов используется ghc

во всех промышленных и в подавляющем большинстве игрушечных. одних Barclays Capital и Tsuru Capital было бы достаточно

в каком другие версии haskell

в единичных случаях

Не смешно

не смешно

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

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

Люто поддерживаю!

В проекте...
Задача 1 - беру нужную библиотеку...
Задача 2 - беру нужную библиотеку...
Задача 3 - беру нужную библиотеку...
Задача 4 - беру нужную библиотеку...
...

И на выходе у меня:
- ASText(Acrobat)
- std::string(STL)
- std::wstring(STL)
- GString(GLib)
- QString(Qt)
- CString(MFC)
- ну и, ессно, char*/wchar_t*

Да, брать нужную библиотеку - это верное решение! :)

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

Я вообще хотел бы узнать ваше видение ниши крестов (ну кроме legacy), по какой причине их до сих пор ещё пихают в новые проекты?

Минимальный и предсказуемый рантайм (единственный соперник здесь - Си) при выразительной мощности большей, чем у Си.

Дешевизна рабочей силы? Возможно.

Интересно, откуда пошло мнение о дешевизне Си++-кодеров и поддержано ли оно цифрами?

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

Созданные в настоящий момент на основе LRnLA алгоритмов коды (семейство кодов SUR) объективно являются самыми быстрыми в мире. С моей точки зрения это прекрасный контрпример для тех, кто утверждает что С++ априори медленный и неэффективный ЯП (на самом деле, на С++ очень просто писать медленные и неэффективные программы, отсюда и взялось это заблуждение). С другой стороны я не могу доказать, что LRnLA алгоритмы могут быть реализованы лишь на C++ и Python (Ruby, Java, Perl и тд). Тем не менее, для их реализации необходим эффективный оптимизирующий компилятор и возможность ручного управления памятью. В настоящий момент существенно используются шаблоны C++ (рекурсивно) и перегрузка функций, отказ от этого приведет к кардинальному и скорее всего неприемлемому усложнению кодогенератора. Я допускаю, что эта задача может быть эффективно решена на Лиспе, но у нас нет нужного уровня специалиста по Лиспу, знакомого с предметной областью

Этот абзац? Не вижу доказательств. Тем более «эффективный оптимизирующий компилятор» для С++ - что-то из области фантастики. Эффективно оптимизировать кресты в принципе нельзя.

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

Эффективно оптимизировать кресты в принципе нельзя.

А в принципе и не нужно. Достаточно практически значимого набора частных случаев.

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

Минимальный

это ты загнул, конечно - даже про какой-нибудь Forth такое сказать сложно. относительно небольшой подходит больше

предсказуемый

опять же, относительно предсказуемый

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

Не вижу доказательств.

Есть некая задача, которая эффективней всего решается на С++. Если для Вас это не доказательство...

эффективный оптимизирующий компилятор" для С++ - что-то из области фантастики. Эффективно оптимизировать кресты в принципе нельзя.

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

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

По ссылке внизу написано почему.

Объясни, что ты понимаешь под термином «локально-рекурсивный обход».

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

это ты загнул, конечно - даже про какой-нибудь Forth

Forth? Не, не слышал.

относительно небольшой подходит больше

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

опять же, относительно предсказуемый

Опять же, всё в мире относительно.

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

Объясни, что ты понимаешь под термином «локально-рекурсивный обход».

По той же ссылке написано что. Например четверичные и восьмеричные деревья.

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

У меня есть предположение, но пока я оставлю его при себе :)

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

назови язык общего назначения, у которого рантайм меньше

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

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

Например четверичные и восьмеричные деревья.

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

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

почти любой ассемблер подойдёт

Мы за рантаймом гоняемся очень активно... и уже лет 7 как мин ассемблерные вставки не используем. Для наших задач g++ -O3 делает не хуже.

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

Про ваши пристрастия к копрофилии и её обсуждению уже говорят в соседних ветках. По существу ничего сказать не можете?

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

Да ну, ты же не на экзамене

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

у Red.System пока что очень маленький рантайм, чем он мне весьма нравится. к сожалению, качество этого рантайма оставляет пока желать лучшего

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

Отчего же? Это же практически компилируемый цшорп.

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

чувак, сходи к логопеду. ещё четырёх раз я не вынесу

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

Не «эффективнее всего», а «эффективно».

1) задача на С++ решается эффективно

2) решений на других ЯП пока нет.

Когда будут - тогда поговорим.

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

g++ собирает код с кучей навороченных шаблонов с производительностью близкой к теоретическому пределу

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

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

Возможно. пока кто нить не запилит перл 6 на шарпах;-)

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

www.linux.org.ru/wiki/en/User:AIv/LRnLA

Прочитал. Полезной информации не нашел. Сходил по предполагаемым ссылкам. Авторская статья — слишком сложно. У остальных — сплошные понты, и никакой конкретики.

http://www.google.ru/#sclient=psy-ab&hl=ru&newwindow=1&source=hp&...

Выдает информационный шум. По крайней мере лично мне.

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

Я вот думаю, что у Vala рантайм поменьше.

Мы, видимо, как-то поразному понимаем, что такое рантайм.

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

Для крестов нужен рантайм с поддержкой исключений.

А Vala тянет всю glibc в качестве рантайма.

geekless ★★ ()

Посмотри на Poco - там сокеты более удобно для использования сделаны, чем в boost::asio (хотя asio более гибкий, даже слишком).

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

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

Прочитал. Полезной информации не нашел. Сходил по предполагаемым ссылкам. Авторская статья — слишком сложно. У остальных — сплошные понты, и никакой конкретики.

Если Вам это действительно надо - обращайтесь, мы открыты к диалогу/сотрудничеству.

Выдает информационный шум. По крайней мере лично мне.

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

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

И чем тебе второй вариант не угодил?

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