Как стать автором
Обновить

Комментарии 35

Вобще-то это порнография — вставлять в программу fgetc() для того, чтобы программа не завершалась, пока юзер не нажмет кнопку.
Это «Hello World!», в котором планировалось продемонстрировать асинхронность операций. Что Вы там хотели увидеть? Sleep? Бесконечный цикл?
Блокирующий listen. Ну и что с того, что это пример? Давайте еще goto вставим.
При чём тут блокирующий listen? Если Вы о том listen, который чего-то из сокета ждет — то это тут вообще не при чём. Суть примера — как раз отвечать на запросы, пока программа не будет завершена пользовательским вводом.
Разумеется, я про метод http_listener::listen() из вашего примера.

У вас пример получился в стиле «у нас есть новая крутая фича — лямбда выражения — давайте теперь использовать их везде». Никто и никогда не использует нажатие кнопок на клавиатуре как механизм остановки сервера. В *NIX мире (включая MacOS) для этого используются сигналы, а на винде — SCM.

В обоих случаях сигналом к остановке служит некоторая асинхронная нотификация. В лямбде, которая передавалась в метод listen, ждать асинхронную нотификацию нельзя (в силу ограничений имеющихся API а также из соображений хорошего дизайна). Таким образом, текущий дизайн метода http_listener::listen() совершенно неверен.

Единственный use case для этого метода — ваш пример с завершением по нажатию кнопки на клавиатуре. Что само по себе ересь.
Ну, во-первых, лямбды — это не часть Касабланки, это часть стандарта С++11, обсуждение их плюсов и минусов выходит за рамки данной статьи, тут они просто используются. Можно было бы написать полноценный функтор — но ради чего? А текста было бы больше.

Во-вторых, да, сигналы и SCM. Но зачем это в «Hello world»?

В третьих — кто сказал, что в лямбде нельзя ждать асинхронную нотификацию? Напишите там WaitForSingleObject и ждите себе.
Я же не к самому факту использования лямбд докопался — мне например очень нравится как сделано программирование ответа на запрос в этом примере.

Конкретно вопросы вызывает метод listen(). Тут можно было бы сделать далеко идущие выводы о непродуманных API и о качестве всей библиотеки в целом, но я воздержусь :) Пихать сигналы или SCM в пример явно лишнее — тут я с вами согласен. С другой стороны, если в Касабланке были бы реализованы необходимые абстракции «поверх» SCM — почему бы и нет?

Ну и на счет вашего предложения с WaitForSingleObject — можно конечно, но куда проще было бы сказать listener->stop() непосредственно из обработчика асинхронной нотификации остановки сервера, разве нет?

Вобще с этим listen много непонятного. Например когда метод завершается, сервер уже не слушает входящие соединения?
Идея хорошая, но исходников нет, реализация заточена под Windows и нет поддержки XML (видимо и не будет).
Поддержка XML будет (они говорят, что внутри у них есть парсер XML для собственных нужд, просто они еще не добрались вывести концы наружу), исходники они планируют открыть (черт его знает, что это значит), а на счет реализации — ну так а что Вы хотели от Microsoft? Они предлагают всем желающим реализовать под их API библеотеку на других платформах.
Они бы лучше предложили всем желающим разработать стандарт, а не реализовывать уже разработанное и зафиксированное ими API.
У желающих было почти три десятка лет, чтобы разработать стандарт
Ага, стандарт С++11 разрабатывали дофига времени. Microsoft за это время успела сделать 4 версии С#, С++/CLI, C++/X (или как там будет называться эта штука в Win8). На стандарт расширения библиотеки уйдёт опять десяток лет. Бизнес столько ждать не может.
Майкрософт не любит срамиться. :) Доведут библиотеку до кондиции — сорцы откроют.
Вспомнил про их драйвера для паравиртуализации…
Актеры выглядят не очень дружелюбно, но если актеры, хоть в каком-то виде, появятся в стандарте, то я буду очень рад.
Неужели наконец и в Boost'е фатальный недостаток нашли?
Я думаю, им он был известен изначально. Но вот, наконец-то, руки дошли его исправить.
Библиотека конечно забавная, но непонятно какое отношение она имеет к созданию стандартизированных библиотек. По моему она ближе к упрощению создания облочных сервисов чем к стандартам с++.
>какое отношение она имеет к созданию стандартизированных библиотек
Я 2 раза в тексте подчеркнул, что пока никакого не имеет. Просто в видео-презентации Касабланки авторы говорили о том же, о чём Херб Саттер на Going Native: стандартная библиотека С++ бедна, из-за этого люди выбирают другие языки, пишут велосипеды и с этим надо что-то делать. Вот Касабланка — это попытка «что-то сделать» от Microsoft.
Дело в том, что любой создатель велосипеда сегодня может быть так анонсирован.
Также отмечу — это «Майкрософт» в принятии «Касабланки» как стандарта — шансов нет, «Линукс» сообщество не примет да и сомневаюсь, что будет код совместимый с другими ОС.
Хотя идея унификации сетевых классов мне нравится. Но это просто пиар.
Код конечно не будет совместим с другими ОС. Архитекрута и API — вполне (а почему бы и нет?). Что касается «Линукс-сообщества», то такого нету, есть opensource-сообщество, и если Касабланка выйдет в открытых кодах — её вполне могут принять.
Только если лицензия дружелюбная — BSD, MIT, Apache. Зная Microsoft, это маловероятно.
НЛО прилетело и опубликовало эту надпись здесь
Смотря на Visual C++ проект и на Qt проект как-то хочется плакать что именно Microsoft занялась этим. Как по мне Qt больше подходит на расширение стандартной библиотеки, хотя, справедливости ради, Qt в текущем своем виде тоже нельзя запилить в стандарт.
Кроме того, Microsoft пропагандирует Casablanca как средство создания производительных сервисов для платформы Azure.

«Кроме того» или всё-таки форточки в ажуре — это основной фокус? Чёрным по белому в первом абзаце описания проекта:

Casablanca is a Microsoft incubation effort to support cloud-based client-server communication in native code using a modern asynchronous C++ API design. Casablanca is a project to start exploring how to best support C++ developers who want to take advantage of the radical shift in software architecture that cloud computing represents.

Ни слова про озвученную в топике идею «вы сможете заменить весь зоопарк библиотек».
Мне кажется, всё-таки «кроме того». Во-первых, под Azure и сейчас можно писать на чём-угодно (и управляемый код, и неуправляемый). Во-вторых, писать можно не только под Azure, а и просто обычные программы (которых больше и которые необязательно привязывать к Azure). А что касается указанной Вами цитаты — то «cloud-based client-server communication» — это не только Azure, сюда подойдет, например, и десктопный клиент твиттера.
Херб Саттер высказал мысль, что основное, на чём следует сосредоточиться — это расширение стандартной библиотеки


Никто пока не говорит о стандартизации Casablanca как расширения стандартной библиотеки С++, но уже сейчас его можно скачать в виде отдельной библиотеки


Что-то уж PPL tasks сильно напоминают std::future из нового стандарта.
Полагаю, что отличия заключаются как раз в методе then и ему подобных. Было бы лучше именно на них и сделать упор в статье, а не показывать аналогию с std::future. Хотя раз это всего лишь краткое описание…
В видеопрезентации на сайте проекта есть подробное объяснение, почему им не подошли futures. Вкратце — из-за меньшей степени контроля.
Опять попытка объять необъятное только ради себя мелких и мягких. .Net пытался сделать хорошо… теперь Casablanca?
Есть же GNU libc для максимальной производительности и Python для всего остального.

У MS же есть Managed C++, есть C++/CLI, чего им не хватает?
Ага, в проблемах упоминаются «лицензии библиотек» и в случае с касабланкой это мягко замалчивается… (а ведь c++ не на Windows одной)

Вообще, пока MS страдает только от одного, она навязывает зачастую кривейшие решения своим разработчикам. И им приходится «изобретать велосипеды или смотреть в сторону других библиотек»
Да пусть навязывает. Пока эти решения навязываются внешними библиотеками с крайне разношорстыми интерфейсами, зачастую только Си.
угу, буст это «Си» библиотека. А меж тем там к примеру есть спирит, эсио, mp
Зарегистрируйтесь на Хабре, чтобы оставить комментарий