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) и произодительность на уровне чистого Си/Фортрана.

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

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

Кто там кукарекал про С++? (комментарий)

А про виртуальную память в ваших краях доводилось слышать?

В случае GHC - все намного печальнее. Уж больно много он за собой тащит либ.
Недавно проводил эксперименты под виндой. Статический бинарник ~2 мегабайта, и динамический бинарник в ~180 килобайт + ~48 мегабайт различных либ.

смешно да, сразу видно - обсуждалось использование libstdc++, кстати hello world под винду на плюсах будет занимать совсем копейки, раз уж на то пошло

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

От Си++ в этой программе - только имя заголовочного файла cstdio

в топик продолжают прибывать идиоты, пора сваливать

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

сразу видно

Сразу видно, что обсуждалось использование стандартных библиотек. Или по твоему libstdc++ уже не стандартна для крестов? :-D

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

в топик продолжают прибывать идиоты, пора сваливать

Слиться молча анон не может %)

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

отчего же

Оттого, что, за исключением cstdio, код компилируется Си-компилятором.

Страуструп планировал С++ как Си с классами

Этот план отменен лет 20 назад.

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

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

сразу видно, что хаскель + программа ТС __потребовали__ тянуть с собой такое кол-во библиотек, не больше не меньше, из этого можно сделать разные выводы, но уж точно не такие, что программа на С++ должна тянуть за собой libstdc++, или не должна тянуть что-либо еще

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

код компилируется Си-компилятором

И С++ тоже. И что это значит?

Это значит 1) код написан на общем подмножестве Си и Си++, которое примерно совпадает с Си; 2) ты зачем-то прикидываешься шлангом.

tailgunner ★★★★★
()

А можно посмотреть полные исходники клиента и сервера на C++ и Haskel?

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

Ладно, ладно, libstdc++ явно ниоткуда не следовала, я изначально невнимательно прочитал ветку треда, ты прав. Задолбал.

geekless ★★
()

Мощно. Меня как мейнтейнера пакетов в C++ раздражает только тяжеловесность зависимостей (тот же Boost) и несовместимость версий этих библиотек. Теперь я понимаю, почему так ценится код на чистом Си.

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

код написан на общем подмножестве Си и Си++, которое примерно совпадает с Си

ты только что сказал, что «От Си++ в этой программе - только имя заголовочного файла cstdio». Ты определись - это всё-таки общее подмножество, или нет.

ты зачем-то прикидываешься шлангом.

это я называю валидную С++ программу кодом на Си? Или ты?

alex_custov ★★★★★
()

Я ПОЕХАЛ В АВТОБУСЕ В ЛЕС ЗА ГРИБАМИ ЗАСТРЯЛ ТОЛКАЛ ГРИБОВ НЕТ ВЕЛОСИПЕД РУЛИТ!!11

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

это я называю валидную С++ программу кодом на Си? Или ты?

Это ты видишь в том, что я действительно сказал, что-то свое, глубоко личное. Специально для тебя переформулирую: 'Программа, которая не использует ни одной языковой возможности Си++, не может называться «хелловорлд на Си++», поэтому geekless прав, слившийся анон - нет'.

А насчет валидного Си++-кода лучше не начинай, а то получится как в первой редакции СТрауструпа - «все примеры в K&R являются Си++-кодом».

tailgunner ★★★★★
()

Кто там кукарекал про С++? Как вы с ним вообще работаете?

А вы видели как течет C++? Как феерично текут написанные на этом гэ программы? вот буквально полчаса назад оказалось что у меня SpyderSolitaire.exe выжрал 4800Мб памяти из 6000 и продолжал течь. А уж казалось бы, отлаженная веками разработки прога написанная уважаемой фирмой!!

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

Программа, которая не использует ни одной языковой возможности Си++, не может называться «хелловорлд на Си++»

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

«все примеры в K&R являются Си++-кодом».

Если они соответствуют стандарту С++ - почему бы и нет?

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

Программа, которая не использует ни одной языковой возможности Си++, не может называться «хелловорлд на Си++-specific»

fixed

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

Давай откроем стандарт С++ и проверим, является ли эта программа валидным кодом на С++?

А давай откроем стандарт и проверим, является ли валидным кодом на Си++ «write(1, „Hello, world!\n“, 14);».

«все примеры в K&R являются Си++-кодом».

Если они соответствуют стандарту С++ - почему бы и нет?

Потому что они могут быть откомпилированы и запущены без компилятора Си++

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

'Программа, которая не использует ни одной языковой возможности Си++, не может называться «хелловорлд на Си++»,

int main() является конструкцией С++. И по стандарту, и с точки зрения любого плюсового компилятора эта программа написана на языке С++. Другое дело, что она похожа на программу С, но с кем не бывает, у многих языков есть общие черты.

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

Специально для тебя переформулирую: 'Программа, которая не использует ни одной языковой возможности Си++, не может называться «хелловорлд на Си++»

специально для тебя, программа:

main() 
{
    printf("hello world");
}  

это программа на B, продолжай шумно сливаться как ты умеешь

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

ну или придумай специальный hello world для С, тоже забавно будет посмотреть

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

эта программа написана на языке С++.

Другое дело, что она похожа на программу С

Прочти весь разговор, если умеешь читать.

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

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

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

'Программа, которая не использует ни одной языковой возможности Си++, не может называться «хелловорлд на Си++», поэтому geekless прав, слившийся анон - нет'.

Мы спорили не за код, а за использование библиотек. Впрочем, что там пытался доказать анон и кому, меня мало волнует.

а то получится как в первой редакции СТрауструпа - «все примеры в K&R являются Си++-кодом».

Время показало, что он сделал правильный пиар.

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

ты обещал сделать одну вещь - свалить из треда

у тебя мозги сохнут, видимо от старости, ничего я не обещал

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

вменяемую IDE для Хаскелля

EclipseFP уже вполне можно использовать. хотя на практике emacs хватает за глаза

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

Прочти весь разговор, если умеешь читать.

Я читал тред с самого начала. Данный срач развился из заявления, что статически скомпилированная программа на С++ занимает овер9000 места, потом начался треп по узнаванию языка.

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

Собсна, раз уж ты специализируешься на узнавании языков по фотографии

Мде. Таки читать ты не умеешь, только писать.

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

Как обычно, соврал %)

ЛОЛ, забавное заявление в адрес анонимуса, ты уже hello world для С написал? ну хоть отмазку придумай

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

А давай откроем стандарт и проверим, является ли валидным кодом на Си++ «write(1, „Hello, world!\n“, 14);».

Является, т.к. write корректно определён извне как того требует стандарт. Тут возникает вопрос о переносимости, но это другой вопрос. Единственное, что я не помню как определён дескриптор stdout - всегда ди он равен 1.

Потому что они могут быть откомпилированы и запущены без компилятора Си++

:D Ну и на здоровье. Если программа на С++ откомпилируется ещё каким-то компилятором - разве это не замечательно?

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

Как обычно, соврал %)

ЛОЛ, забавное заявление в адрес анонимуса

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

ты уже hello world для С написал?

Ага, давно уже.

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

Ага, давно уже.

ну так не стесняйся, покажи, только именно на С, а то непорядок будет, что код, практически на B получится ;)

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

Открой 60000 соединений и пускай просто висят, ничего не отправляй. Хороший тест.

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

hello world для С написал

Там есть типы данных, отсутствующие в крестах. Также есть кейворд restrict. Слова class и template воспринимаются как идентификаторы. Ну и т.п. Так что извращенный хелловорлд замутить можно.

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

Единственное, что я не помню как определён дескриптор stdout - всегда ди он равен 1.

Да.

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

«Почему я не люблю молотки: потому что бьет по пальцам»

Как вы мягко намекаете на источнег проблем :) Где-то в прошлых тредах было про почесать яйтса бензопилой опасные для нуба инструменты и вредные привычки.

slackwarrior ★★★★★
()

Кто^WЧто если не Пу^WC++?

fero ★★★★
()

ЧТД, хотя не люблю оба монструозных комбайна.

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

libpng видели? Кривые руки не зависят от языка :)

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

Единственной интересной реализацией был YHC, который успешно умер.

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

В каком количестве проектов используется ghc и в каком другие версии haskell? Не смешно сравнивать доли процента?

delete83 ★★
()

молодец, умеешь применять функциональные языки там, где нужно. Если код на них проще читать, снимаю шляпу и жму руку...

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