The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Реализация FastCGI на современном C++, opennews (??), 17-Май-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


16. "Реализация FastCGI на современном C++"  –1 +/
Сообщение от Аноним (16), 17-Май-19, 13:52 
Автор, начни с чтения вот этого https://stackoverflow.com/questions/213907/c-stdendl-vs-n что ли (это я мягко так намекаю про "нужность" дефайнов с crlf).
Да и вообще код действительно выглядит как поделка, а использование С++17 в описании - лишь как маркетинговая уловка.
Ответить | Правка | Наверх | Cообщить модератору

25. "Реализация FastCGI на современном C++"  –3 +/
Сообщение от пох (?), 17-Май-19, 14:15 
просто обезьяныш не умеет не обмазываться свеженьким, и c++17 в описании означает не какие-то там достоинства кода, а просто то, что ничем кроме пре-альфа-версии gcc99 это не собирается.

Ответить | Правка | Наверх | Cообщить модератору

40. "Реализация FastCGI на современном C++"  +4 +/
Сообщение от петькаваська (?), 17-Май-19, 15:48 
> Автор, начни с чтения вот этого https://stackoverflow.com/questions/213907/c-stdendl-vs-n
> что ли (это я мягко так намекаю про "нужность" дефайнов с
> crlf).
> Да и вообще код действительно выглядит как поделка, а использование С++17 в
> описании - лишь как маркетинговая уловка.

Этими дефайнами автор хочет, вероятно, привести код в соответствии протоколу HTTP, в котором перевод строки строго определён как "\r\n". Так что мат. часть, вероятно, надо учить как раз Вам.

Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

60. "Реализация FastCGI на современном C++"  +1 +/
Сообщение от Аноним (49), 17-Май-19, 17:14 
Что подвигло Тима Бернерса-Ли выбрать для перевода строки \r\n, он же ползовался NIX-like ОС?
Ответить | Правка | Наверх | Cообщить модератору

67. "Реализация FastCGI на современном C++"  +1 +/
Сообщение от Ordu (ok), 17-Май-19, 17:30 
Я могу предположить. Использование "\r\n" в качестве разделителя строк протокола позволяет в одну строку протокола впихнуть многострочный файл со "\n" в качестве разделителя строк. Но это лишь предположение, реально я не знаю как дело было, просто ты задал вопрос, я задумался над этим, и мне пришёл в голову такой вот возможный ответ.
Ответить | Правка | Наверх | Cообщить модератору

70. "Реализация FastCGI на современном C++"  +2 +/
Сообщение от Аноним (50), 17-Май-19, 17:34 
> Что подвигло Тима Бернерса-Ли выбрать для перевода строки \r\n, он же ползовался NIX-like ОС?

А он и не выбирал. Он просто передрал RFC822.

Ответить | Правка | К родителю #60 | Наверх | Cообщить модератору

77. "Реализация FastCGI на современном C++"  +2 +/
Сообщение от Аноним (50), 17-Май-19, 18:04 
Ну то есть не передрал, а сослался, конечно.
https://tools.ietf.org/html/rfc2068#section-4.1
Ответить | Правка | Наверх | Cообщить модератору

88. "Реализация FastCGI на современном C++"  +1 +/
Сообщение от dmitigr (ok), 17-Май-19, 18:26 
Совершенно верно. operator<< - это оператор форматированного вывода. Вызов ostream << "\n" записывает в поток "\r\n" в Windows и "\n" в Unix. Протокол HTTP предписывает использование "\r\n" в качестве разделительной последовательности.
Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

113. "Реализация FastCGI на современном C++"  +4 +/
Сообщение от Аноним (16), 17-Май-19, 21:52 
> автор хочет, вероятно, привести код в соответствии протоколу HTTP, в котором перевод строки строго определён как "\r\n". Так что мат. часть, вероятно, надо учить как раз Вам.

Матчасть учить нужно тому, кто не знает про существование std::ios_base::openmode binary, когда ему нужно выводить данные в поток без преобразования символов под конкретную ОС.

Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

63. "Реализация FastCGI на современном C++"  +2 +/
Сообщение от Ordu (ok), 17-Май-19, 17:27 
> начни с чтения вот этого https://stackoverflow.com/questions/213907/c-stdendl-vs-n

И что он там должен увидеть? Может быть это:

> There's another function call implied in there if you're going to use std::endl
> a) std::cout << "Hello\n";
> b) std::cout << "Hello" << std::endl;
> a) calls operator << once.
> b) calls operator << twice.

?

endl -- это принудительный flush и зависимость перевода строки от платформы под которую собирался код. Зачем это нужно? Сетевые протоколы чётко фиксируют, что используется для терминации строки, и если там написано "\r\n", то тебе даже в unix'е придётся использовать "\r\n".

Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

68. "Реализация FastCGI на современном C++"  –2 +/
Сообщение от udro (?), 17-Май-19, 17:33 
> зависимость перевода строки от платформы

нет.

Ответить | Правка | Наверх | Cообщить модератору

73. "Реализация FastCGI на современном C++"  +/
Сообщение от Ordu (ok), 17-Май-19, 17:45 
В смысле? Он не выводит "\r\n" в венде? А зачем тогда он нужен такой? Ну вот вообще зачем было заморачиваться добавлять в библиотеку endl, если "\n" нагляднее?
Ответить | Правка | Наверх | Cообщить модератору

74. "Реализация FastCGI на современном C++"  –2 +/
Сообщение от udro (?), 17-Май-19, 18:00 
В одном клике от твоей ссылки: https://en.cppreference.com/w/cpp/io/manip/endl
> Inserts a newline character into the output sequence os and flushes it as if by calling os.put(os.widen('\n')) followed by os.flush().
Ответить | Правка | Наверх | Cообщить модератору

93. "Реализация FastCGI на современном C++"  +/
Сообщение от Ordu (ok), 17-Май-19, 19:14 
> В одном клике от твоей ссылки: https://en.cppreference.com/w/cpp/io/manip/endl
>> Inserts a newline character into the output sequence os and flushes it as if by calling os.put(os.widen('\n')) followed by os.flush().

Что такое os.widen? Что он там расширяет? Не расширяет ли он заодно '\n' до \r\n, когда нужно?

Но даже если ты прав, то это не ответ на вопрос: зачем было вообще добавлять в C++ endl? Какой смысл им пользоваться, если он не даёт ровным счётом ничего? Ради flush? Не проще ли как в C всунуть flush в поток, чтобы он триггерился выводом перевода строки? Или добавить манипулятор потока, который выводит ничего, но выполняет flush -- таким образом не придётся отдельно вызывать метод, что может делать код менее функциональным (в смысле functional programming). О чём думали дизайнеры iostream когда запиливали endl в библиотеку?

Ответить | Правка | Наверх | Cообщить модератору

143. "Реализация FastCGI на современном C++"  +/
Сообщение от udro (?), 18-Май-19, 11:24 
> Что такое os.widen? Что он там расширяет? Не расширяет ли он заодно '\n' до \r\n, когда нужно?

Он — нет. Он только кодировки преобразует, если надо (в UTF-16LE, например, мало ли). А возврат каретки и без него добавляется в ostream. Я хз, чё они курили, но просто вывести \n на винде ещё постараться надо.

Ответить | Правка | Наверх | Cообщить модератору

76. "Реализация FastCGI на современном C++"  +1 +/
Сообщение от dmitigr (ok), 17-Май-19, 18:04 
> Автор, начни с чтения вот этого https://stackoverflow.com/questions/213907/c-stdendl-vs-n что ли

Здесь автор. Мне не нужно это читать.

> (это я мягко так намекаю про "нужность" дефайнов с crlf).

Эти дефайны обеспечивают кроссплатформенность кода.

> Да и вообще код действительно выглядит как поделка, а использование С++17 в описании - лишь как маркетинговая уловка.

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

Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

98. "Реализация FastCGI на современном C++"  +/
Сообщение от Sw00p aka Jerom (?), 17-Май-19, 19:35 
О круть, сам автор тут)

Хотелось бы одно замечание сделать

"namespace dmitigr"

простите, но что за "неймдроппинг" такой? как то не серьезно.

Ответить | Правка | Наверх | Cообщить модератору

107. "Реализация FastCGI на современном C++"  +2 +/
Сообщение от dmitigr (ok), 17-Май-19, 20:42 
Спасибо за комментарий. Странные у Вас вопросы. Резервирование пространства имён для проектов одного автора или компании - обычная практика. Я зарезервировал пространство имён dmitigr для своих проектов. А, например, Niels Lohmann, выбрал пространство имён nlohmann для своих проектов, например namespace nlohmann::json.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру