Комментарии 35
Вобще-то это порнография — вставлять в программу fgetc() для того, чтобы программа не завершалась, пока юзер не нажмет кнопку.
-9
Это «Hello World!», в котором планировалось продемонстрировать асинхронность операций. Что Вы там хотели увидеть? Sleep? Бесконечный цикл?
+6
Блокирующий listen. Ну и что с того, что это пример? Давайте еще goto вставим.
-9
Разумеется, я про метод http_listener::listen() из вашего примера.
У вас пример получился в стиле «у нас есть новая крутая фича — лямбда выражения — давайте теперь использовать их везде». Никто и никогда не использует нажатие кнопок на клавиатуре как механизм остановки сервера. В *NIX мире (включая MacOS) для этого используются сигналы, а на винде — SCM.
В обоих случаях сигналом к остановке служит некоторая асинхронная нотификация. В лямбде, которая передавалась в метод listen, ждать асинхронную нотификацию нельзя (в силу ограничений имеющихся API а также из соображений хорошего дизайна). Таким образом, текущий дизайн метода http_listener::listen() совершенно неверен.
Единственный use case для этого метода — ваш пример с завершением по нажатию кнопки на клавиатуре. Что само по себе ересь.
У вас пример получился в стиле «у нас есть новая крутая фича — лямбда выражения — давайте теперь использовать их везде». Никто и никогда не использует нажатие кнопок на клавиатуре как механизм остановки сервера. В *NIX мире (включая MacOS) для этого используются сигналы, а на винде — SCM.
В обоих случаях сигналом к остановке служит некоторая асинхронная нотификация. В лямбде, которая передавалась в метод listen, ждать асинхронную нотификацию нельзя (в силу ограничений имеющихся API а также из соображений хорошего дизайна). Таким образом, текущий дизайн метода http_listener::listen() совершенно неверен.
Единственный use case для этого метода — ваш пример с завершением по нажатию кнопки на клавиатуре. Что само по себе ересь.
+1
Ну, во-первых, лямбды — это не часть Касабланки, это часть стандарта С++11, обсуждение их плюсов и минусов выходит за рамки данной статьи, тут они просто используются. Можно было бы написать полноценный функтор — но ради чего? А текста было бы больше.
Во-вторых, да, сигналы и SCM. Но зачем это в «Hello world»?
В третьих — кто сказал, что в лямбде нельзя ждать асинхронную нотификацию? Напишите там WaitForSingleObject и ждите себе.
Во-вторых, да, сигналы и SCM. Но зачем это в «Hello world»?
В третьих — кто сказал, что в лямбде нельзя ждать асинхронную нотификацию? Напишите там WaitForSingleObject и ждите себе.
+2
Я же не к самому факту использования лямбд докопался — мне например очень нравится как сделано программирование ответа на запрос в этом примере.
Конкретно вопросы вызывает метод listen(). Тут можно было бы сделать далеко идущие выводы о непродуманных API и о качестве всей библиотеки в целом, но я воздержусь :) Пихать сигналы или SCM в пример явно лишнее — тут я с вами согласен. С другой стороны, если в Касабланке были бы реализованы необходимые абстракции «поверх» SCM — почему бы и нет?
Ну и на счет вашего предложения с WaitForSingleObject — можно конечно, но куда проще было бы сказать
Вобще с этим listen много непонятного. Например когда метод завершается, сервер уже не слушает входящие соединения?
Конкретно вопросы вызывает метод listen(). Тут можно было бы сделать далеко идущие выводы о непродуманных API и о качестве всей библиотеки в целом, но я воздержусь :) Пихать сигналы или SCM в пример явно лишнее — тут я с вами согласен. С другой стороны, если в Касабланке были бы реализованы необходимые абстракции «поверх» SCM — почему бы и нет?
Ну и на счет вашего предложения с WaitForSingleObject — можно конечно, но куда проще было бы сказать
listener->stop()
непосредственно из обработчика асинхронной нотификации остановки сервера, разве нет?Вобще с этим listen много непонятного. Например когда метод завершается, сервер уже не слушает входящие соединения?
+3
Идея хорошая, но исходников нет, реализация заточена под Windows и нет поддержки XML (видимо и не будет).
+12
Поддержка XML будет (они говорят, что внутри у них есть парсер XML для собственных нужд, просто они еще не добрались вывести концы наружу), исходники они планируют открыть (черт его знает, что это значит), а на счет реализации — ну так а что Вы хотели от Microsoft? Они предлагают всем желающим реализовать под их API библеотеку на других платформах.
+2
Они бы лучше предложили всем желающим разработать стандарт, а не реализовывать уже разработанное и зафиксированное ими API.
0
У желающих было почти три десятка лет, чтобы разработать стандарт
+6
Ага, стандарт С++11 разрабатывали дофига времени. Microsoft за это время успела сделать 4 версии С#, С++/CLI, C++/X (или как там будет называться эта штука в Win8). На стандарт расширения библиотеки уйдёт опять десяток лет. Бизнес столько ждать не может.
+1
Майкрософт не любит срамиться. :) Доведут библиотеку до кондиции — сорцы откроют.
0
Актеры выглядят не очень дружелюбно, но если актеры, хоть в каком-то виде, появятся в стандарте, то я буду очень рад.
+1
Неужели наконец и в Boost'е фатальный недостаток нашли?
+11
Библиотека конечно забавная, но непонятно какое отношение она имеет к созданию стандартизированных библиотек. По моему она ближе к упрощению создания облочных сервисов чем к стандартам с++.
0
>какое отношение она имеет к созданию стандартизированных библиотек
Я 2 раза в тексте подчеркнул, что пока никакого не имеет. Просто в видео-презентации Касабланки авторы говорили о том же, о чём Херб Саттер на Going Native: стандартная библиотека С++ бедна, из-за этого люди выбирают другие языки, пишут велосипеды и с этим надо что-то делать. Вот Касабланка — это попытка «что-то сделать» от Microsoft.
Я 2 раза в тексте подчеркнул, что пока никакого не имеет. Просто в видео-презентации Касабланки авторы говорили о том же, о чём Херб Саттер на Going Native: стандартная библиотека С++ бедна, из-за этого люди выбирают другие языки, пишут велосипеды и с этим надо что-то делать. Вот Касабланка — это попытка «что-то сделать» от Microsoft.
+1
Дело в том, что любой создатель велосипеда сегодня может быть так анонсирован.
Также отмечу — это «Майкрософт» в принятии «Касабланки» как стандарта — шансов нет, «Линукс» сообщество не примет да и сомневаюсь, что будет код совместимый с другими ОС.
Хотя идея унификации сетевых классов мне нравится. Но это просто пиар.
Также отмечу — это «Майкрософт» в принятии «Касабланки» как стандарта — шансов нет, «Линукс» сообщество не примет да и сомневаюсь, что будет код совместимый с другими ОС.
Хотя идея унификации сетевых классов мне нравится. Но это просто пиар.
-1
Код конечно не будет совместим с другими ОС. Архитекрута и API — вполне (а почему бы и нет?). Что касается «Линукс-сообщества», то такого нету, есть opensource-сообщество, и если Касабланка выйдет в открытых кодах — её вполне могут принять.
0
НЛО прилетело и опубликовало эту надпись здесь
Смотря на Visual C++ проект и на Qt проект как-то хочется плакать что именно Microsoft занялась этим. Как по мне Qt больше подходит на расширение стандартной библиотеки, хотя, справедливости ради, Qt в текущем своем виде тоже нельзя запилить в стандарт.
+5
Кроме того, 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.
Ни слова про озвученную в топике идею «вы сможете заменить весь зоопарк библиотек».
+2
Мне кажется, всё-таки «кроме того». Во-первых, под Azure и сейчас можно писать на чём-угодно (и управляемый код, и неуправляемый). Во-вторых, писать можно не только под Azure, а и просто обычные программы (которых больше и которые необязательно привязывать к Azure). А что касается указанной Вами цитаты — то «cloud-based client-server communication» — это не только Azure, сюда подойдет, например, и десктопный клиент твиттера.
-2
Херб Саттер высказал мысль, что основное, на чём следует сосредоточиться — это расширение стандартной библиотеки
…
Никто пока не говорит о стандартизации Casablanca как расширения стандартной библиотеки С++, но уже сейчас его можно скачать в виде отдельной библиотеки
+7
Что-то уж PPL tasks сильно напоминают std::future из нового стандарта.
0
Полагаю, что отличия заключаются как раз в методе then и ему подобных. Было бы лучше именно на них и сделать упор в статье, а не показывать аналогию с std::future. Хотя раз это всего лишь краткое описание…
+1
В видеопрезентации на сайте проекта есть подробное объяснение, почему им не подошли futures. Вкратце — из-за меньшей степени контроля.
0
Опять попытка объять необъятное только ради себя мелких и мягких. .Net пытался сделать хорошо… теперь Casablanca?
0
Есть же GNU libc для максимальной производительности и Python для всего остального.
У MS же есть Managed C++, есть C++/CLI, чего им не хватает?
У MS же есть Managed C++, есть C++/CLI, чего им не хватает?
-2
Ага, в проблемах упоминаются «лицензии библиотек» и в случае с касабланкой это мягко замалчивается… (а ведь c++ не на Windows одной)
Вообще, пока MS страдает только от одного, она навязывает зачастую кривейшие решения своим разработчикам. И им приходится «изобретать велосипеды или смотреть в сторону других библиотек»
Вообще, пока MS страдает только от одного, она навязывает зачастую кривейшие решения своим разработчикам. И им приходится «изобретать велосипеды или смотреть в сторону других библиотек»
-2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Please come back to me in Casablanca