Re[31]: cppcms
От: Ночной Смотрящий Россия  
Дата: 26.09.14 22:43
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Вопрос был про то — как определить что вызываемый метод использует небезопасные фичи.


Я бы не назвал арифметическое переполнение опасной фичей.

НС>>И при чем тут IDisposable?

EP>В случае C# — придётся просмотреть все N мест (и возможно добавить недостающий код).

Понимаешь, у тебя два несвязанных логически куска — проблема с детерминированным завершением и исключения. Ты перескакиваешь постоянно с одного на другой, а я тебя спрашиваю про связь. От того что где то хендл не сразу протухнет из-за того что dispose не позвали безопасность не ухудшится. А если ты инварианты построил на Dispose, который покидает границу метода — ты просто не очень умный человек.

EP> Соответственно есть вероятность что-то пропустить.


Угу, чего то когда то. Если так программы писать тебя никакая защита не спасет. Даже если ты как то защитишься от невызова Dispose, все равно найдется 100500 и еще один способ поломать инварианты. Единственный способ добится гарантий от такой поломки — вообще запретить mutable state, но практическая полезность подобных языков пока под большим вопросом.

EP>Это вполне жизненный пример требующий от операции иметь no-throw guarantee


Ты же понимаешь что даже в Хаскелле ты не защищен от внезапного исключения нигде? А вообще есть CER — http://msdn.microsoft.com/en-us/library/ms228973(v=vs.110).aspx

EP>покажи пример подобного механизма не для исключений.


Выше. Но в контексте данного разговора это бред и уход от темы.
Re[12]: cppcms
От: alex_public  
Дата: 27.09.14 00:21
Оценка:
Здравствуйте, genre, Вы писали:

G>Писать сайты на с++ если очень хочется — да пожалуйста.

G>Писать сайты на с++ потому что хочется написать максимально быстрый код сборки страницы — глупо.

Не верно. Как раз если хочется иметь максимальный быстрый код сборки страницы, то инструмент выбран вполне не плохо. Весь вопрос в уместности пожелания максимального быстрого кода сборки страницы для задачи типа "маленьких корпоративный сайтик". На мой взгляд это весьма сомнительно. Но если всё же как-то можно обосновать критическую необходимость подобного, то писать на C++ вполне нормально.
Re[43]: cppcms
От: alex_public  
Дата: 27.09.14 01:07
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>У тебя условия на ходу появляются. Можно и без структуры:


Ничего у меня на ходу не появляется. С самого начала было одно единственное условие — сделать точную копию указанного C++ кода. И ты пока что так его и не показал. Только какие-то отдельные куски. Ну хорошо, предположим, что ты с ходу не разобрался как он работает. Но теперь я вроде как всё подробно пояснил?

_>>Так почему-то пока ни один любитель LINQ так и не привёл точного аналога этого самого моего тривиального кода.

НС>Скорее всего по той же причине — потому что ты не можешь внятно объяснить что ты хочешь.

Показать точный аналог представленного кода — это невнятно? )

Давай так, чтобы не было больше никаких непониманий в дискуссии, я покажу полный пример (компилируемый), а ты покажешь точно такой же (компилируемый) пример с полностью аналогичной (сейчас мы вроде как разобрались в деталях как работает мой код) функциональностью. Ну и соответственно сравним объём, удобство и защищённость кода...

Значит мой полный пример:
#include <iostream>
#include <exception>
#include <sqlite3/soci-sqlite3.h>
#include "sample_orm.hpp"

session& GetDB() {static session db(sqlite3, "test.db"); return db;}

struct Person{
    int id;
    string name;
    double total;
    int runtime=time(nullptr);//не сохраняем в базу
};

DECLARE_TABLE("Persons", Person, (
    ("int primary key", id),
    ("text", name),
    ("real", total)
))

int main()
{
    try{
        CreateTable<Person>();
        for(int i=0; i<10; i++) Insert(Person{i, "Name"+to_string(i), i/10.0});
        for(auto& p: Select<Person>()) cout<<p.id<<' '<<p.name<<' '<<p.total<<' '<<p.runtime<<endl;
    }catch(const exception& e) {cerr<<"Error: "<<e.what()<<endl;}
    return 0;
}


НС>У нас все реализовано. Я тебе почти 1 в 1 копию твоего кода продемонстрировал. Но при использовании инструмента надо таки включать моск, а не экономить на спичках в коде прощелкивая корову в архитектуре.


Я и не говорю, что так надо вообще всегда делать. Но иногда (когда понимаешь что делаешь), это может быть очень удобно. И вообще не стоит воспринимать различные полезные советы из книжек за догмы.
Re[20]: cppcms
От: alex_public  
Дата: 27.09.14 01:09
Оценка:
Здравствуйте, genre, Вы писали:

G>Более того, я вообще не могу себе представить, что кто-то зафигачит монолитный exe как основу для функционала сайта. А если он не монолитный, то проблем интеграции с другими инструментами нет никаких.


На самом деле это может быть вполне удобно, при условии использования правильных инструментов. Типа таких: http://vibed.org.
Re[43]: cppcms
От: alex_public  
Дата: 27.09.14 02:15
Оценка:
Здравствуйте, artelk, Вы писали:

A>Когда не требуется большое число одновременных задач?


Например при организации фоновых процессов не серверных приложений.

A>Без поддержки языка работать с продолжениями неудобно — будет лапша.


Что подразумевается под поддержкой языком? К пример в boost.thread продолжения давно есть и вполне себе нормально работают...

A>Интересует не "полностью аналогичная реализация", а аналогичная возможность — чтоб лапши небыло, но с масштабируемостью из коробки.


Ээээ, какая ещё масштабируемость в данном разделе? С этим обращаться ко второй части того моего сообщения... )

A>А чем с акторами проще?


Ну это собственно дело вкуса. Т.е. лично мне больше нравится такая архитектура, исключительно по эстетическим признакам. И естественно подобное нельзя пытаться кому-то навязывать. Однако могу просто показать упрощённый пример, демонстрирующий разницу в этих стилях. Весь код на C++.

Значит с сопрограммами мы можем написать так:
void OnClick() async_code
(
    textbox+=await_async([]{return download("http://...");});//download - блокирующая функция, запускается в отдельном потоке
)

А в стиле акторов будет что-то вроде:
void OnClick()
{
    thread([]{PostData(download("http://..."));}).detach();
}
void OnData(string data)
{
    textbox+=data;
}

Оно конечно длиннее, но лично мне больше нравится по ряду причин.

_>>2. Когда требуется небольшое число одновременных задач.

A>Когда требуется большое число одновременных задач?

В основном при реализации высоконагруженных серверов.

A>Еще раз, меня в этой ветке интересует, чтоб масштабируемость по ядрам была и чтоб при этом код в лапшу не превращался. И да, я имею ввиду сервис, не UI.


Если критична производительность, то я пожалуй не стал бы увлекаться всяческими архитектурными изяществами (типа сопрограмм, причём как в сомнительной .net реализации, так и даже C++ реализации), а решил бы проблему в лоб стандартными средствами. Причём в C/C++ их выбор тоже не маленький с разным уровнем продуманности программного интерфейса. Если в C++ стиле, то это Boost.Asio, а если в C стиле, то это libevent, libev, libuv. Все они достаточно вылизанные и заточенные на производительность.

_>>а для просто реализации зелёных потоков поверх пула системных ничего дописывать и не надо — оно просто работает

A>Покажи?

Так я же говорю, если без семафора, то Евгений уже показал что всё работает. Ну т.е. он не показал собственно организацию пула потоков (это отдельное реализуется или берётся готовое из того же boost'a), а продемонстрировал, что boost.coroutine вполне дружат с многопоточностью. Кстати, что самое интересное, boost.asio дружит с многопоточностью по точно такой же модели (http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/overview/core/threads.html), так что все 3 компоненты (пул потоков, сопрограммы, асинхронный ввод/вывод) без всяких напрягов собираются в единую системку.

Но опять же надо понимать, что даже такая крайне эффективная реализации сопрограмм всё равно имеет определённые накладные расходы. Так что если уж производительность уж совсем критична, то лучше забыть про сопрограммы. И кстати не такой уж и страшный код без них выходит. )))

A>Имхо, акторы хороши, когда модель приложения в виде асинхронно общающихся объектов, посылающих друг другу сообщения, является естественной для решаемой задачи. Неясно, нафиг они нужны для вышеупомянутого сервиса и для UI с кнопкой, по которой что-то асинхронно выкачивается. Можешь объяснить?


Для сервиса я их и не предлагаю. Хотя скажем Theron может и не плохо справился бы (http://www.theron-library.com/index.php?t=page&amp;p=performance) в смысле производительности, но не вижу особого смысла тащить его для таких целей.

А вот скажем на асинхронное скачивание по кнопке в UI акторы очень даже не плохо ложатся. Правда для такой задачи не нужна мощная библиотека типа Theron, а достаточно тривиальной реализации (см. пример выше).
Re[10]: cppcms
От: DarthSidius  
Дата: 27.09.14 03:34
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:

BDA>Не конкретно к Шеридану, да. Но и не «вообще», а применительно к его ситуации. То есть, когда экономят даже при низкой нагрузке. От бедности. На всякий случай, еще раз: я не утверждаю, что работодатель Шеридана от бедности экономит на железе. Это Шеридан вкидывает идею: мол, такое вот я вижу применение своим силам. Они меня наймут, я возьму CMS на C++, напишу им модули, они сэкономят на железе. Шеридан такой на всем свете один, но вот другие предприятия могут делать так же. Со своими сколько-нибудь квалифицированными сиплюплюсниками.


Да врядли! Вангую:
Шеридана спросили:
— А можешь сайтец забацать?
— Да без проблем!
А то что существует какой-то С++ работодатель даже не подозревает. Но Шеридан, согласно своей религии, НУ КОНЕЧНО ЖЕ, пишет сайт... на С++... да
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[12]: cppcms
От: DarthSidius  
Дата: 27.09.14 03:39
Оценка:
Здравствуйте, genre, Вы писали:

G>Здравствуйте, Хон Гиль Дон, Вы писали:


G>>>Не знаю читал ли ты все тут понаписанное, но совершенно очевидно, что общее недоумение вызывает не то, что он делает, а то почему он это делает.

ХГД>>Очевидно же — скучно человеку. Что в этом странного или необычного? С тем же успехом мог бы игрушечные мотоциклы из деталей хардов собирать

G>Так. Еще раз. Дело не в том, что он делает, а зачем он это делает.


Чтобы эпичные срачи на компфлэймс создавать!
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[14]: cppcms
От: Sheridan Россия  
Дата: 27.09.14 09:18
Оценка:
Здравствуйте, dr. Acula, Вы писали:

НС>>>HTML в виде строковых констант в коде? В 2014 году? Че, серьезно?

S>>Всё правильно, упор на производительность. Или в 2014 году есть какая то сложность в компиляции кода?
DA>ты профилировал перед или чутьё подсказало, что std::string достаточно быстр?
конечно же чтение шаблона из файла с последующей заменой %подстановок% будет быстрее.
Matrix has you...
Re[16]: cppcms
От: Sheridan Россия  
Дата: 27.09.14 09:24
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Дешевле нежели покупка сервера, расходы на ЗИП, организация и расходы на канал, зарплата тебе, пока ты все это выпрашивал. Потерянные же полгода в некоторых случаях для бизнеса могут быть вообще "бесценны" (хороша ложка к обеду).

ЗИП согласен, сервер есть, зарплата у меня есть, полгода не потеряны — никто и не думал сайт поднимать, пока я сервер не подянл. Бизнес к вебу не относится — потерь нет, хотя после поднятия сайта — на прибыли отразилось.

AB>Конкретно в контексте "WP на коленке" для которого достаточно shared или виртуалки это бы обошлось в ~400 руб/мес, или 2400 за те самые пол года — один раз сходить в кафешку. При этом за эти деньги получаем все прелести профессионального хостинга типа резервного питания, сети, замены оборудования/комплектующих, поддержки 24/7 и т.д.

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


зы. У вас в дефолт ситях другая жизнь, другие ценности и другие приёмы работ, нежели у нас тут в замухосрансках. Чего говорить про сервера, ежели у вас даже для ежедгневной уборки не в штат уборщицу берут, а заключают договора с клининг-фирмами.
Matrix has you...
Re[44]: cppcms
От: Ночной Смотрящий Россия  
Дата: 27.09.14 09:47
Оценка:
Здравствуйте, alex_public, Вы писали:

НС>>У тебя условия на ходу появляются. Можно и без структуры:

_>Ничего у меня на ходу не появляется. С самого начала было одно единственное условие

Мне ты об этом сообщить забыл.

_> — сделать точную копию указанного C++ кода.


О как удобно? А давай ты сделаешь на С++ точную копию того кода, что привел я, а?

_>Показать точный аналог представленного кода — это невнятно? )


Невнятно. Потому что я понятия не имею по тем обрывкам, что ты привел, что конкретно и как этот код делает. Если тебе понятно, это не значит что понятно остальным.

_>Давай так, чтобы не было больше никаких непониманий в дискуссии, я покажу полный пример (компилируемый)


Не надо. У меня нет ни времени, ни желания разбираться с чужим кодом. Объясняй словами. И, это, я ж тебе примеры кода привел. А в ответ — молчание и простыня кода на С++. Я в таком режиме общаться точно не буду.

_>Я и не говорю, что так надо вообще всегда делать. Но иногда (когда понимаешь что делаешь), это может быть очень удобно.


Я тебе привел способ как это сделать.

_> И вообще не стоит воспринимать различные полезные советы из книжек за догмы.


Ты может и по советам из книжек, а я по собственному опыту.
Re[45]: cppcms
От: alex_public  
Дата: 27.09.14 15:17
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>Ничего у меня на ходу не появляется. С самого начала было одно единственное условие

НС>Мне ты об этом сообщить забыл.

Да? ) А тогда это что?

_>>Простейший тестовый пример того, о чём я тут сейчас говорил, можно увидеть здесь http://rsdn.ru/forum/philosophy/5369287


НС>Не увидел там ничего, что не умеет линк. Более того, конкретно для линка вообще проблемы со чего то там с чем то нет — потому что он умеет анонимные типы, т.е. тип кортежа выводится по месту, прямо в запросе.
Естественно реализовать можно. Вопрос в том какими усилиями. Код на C++ ты видел. Теперь интересно глянуть на объём аналогичного кода при использование "правильного доступа к БД"...


НС>Невнятно. Потому что я понятия не имею по тем обрывкам, что ты привел, что конкретно и как этот код делает. Если тебе понятно, это не значит что понятно остальным.


Ну ок, допускаю что тебе было не по силам разглядеть функциональность по этому коду (хотя куда уж проще то?)... Но теперь, когда мы уже подробно обсудили все нюансы его работы, какие проблемы?

НС>Не надо. У меня нет ни времени, ни желания разбираться с чужим кодом. Объясняй словами. И, это, я ж тебе примеры кода привел. А в ответ — молчание и простыня кода на С++. Я в таком режиме общаться точно не буду.


Уже всё объяснил словами. Это всё тот же пример годовой давности из нескольких строчек, который мы тут с тобой подробно разбирали. Просто я добавил обвязку, чтобы он стал компилируемым. Чтобы ты не написал "а с какой стати мне демонстрировать компилируемый пример, если ты не предоставил такого".

НС>Я тебе привел способ как это сделать.


Нет, ты показал какие "невнятные обрывки". Но раз под рукой имеется удобный способ, то в чём проблема добавить обвязку и продемонстрировать компилируемый аналог моего кода? )
Re[46]: cppcms
От: Ночной Смотрящий Россия  
Дата: 27.09.14 15:29
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ну ок, допускаю что тебе было не по силам разглядеть функциональность по этому коду (хотя куда уж проще то?)... Но теперь, когда мы уже подробно обсудили все нюансы его работы, какие проблемы?


Никаких. Я ответил тебе 2 сообщения назад? Или ты сообщения до конца не читаешь?

НС>>Я тебе привел способ как это сделать.

_>Нет, ты показал какие "невнятные обрывки".

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

_> Но раз под рукой имеется удобный способ, то в чём проблема добавить обвязку и продемонстрировать компилируемый аналог моего кода? )


Проблема в том что я не хочу тратить время на написание целикового компилирующегося примера. Того что я привел более чем достаточно для понимания. Если что то все таки непонятно — спроси.
Re[47]: cppcms
От: alex_public  
Дата: 27.09.14 19:19
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Никаких. Я ответил тебе 2 сообщения назад? Или ты сообщения до конца не читаешь?


Да, ты сказал что никаких проблем нет. Но никак это не доказал.

НС>Проблема в том что я не хочу тратить время на написание целикового компилирующегося примера. Того что я привел более чем достаточно для понимания. Если что то все таки непонятно — спроси.


Если те отрывки кода, что ты привёл, действительно полностью решают указанную задачу, то тебе оставалось бы только добавить "main" и using'и (и то если IDE сама не умеет). Нежелание сделать это наводит на определённые мысли.

В общем похоже что итог такой же как и с Ikemefula, только более длинным путём...
Re[26]: cppcms
От: Хон Гиль Дон Россия  
Дата: 27.09.14 20:19
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

ХГД>>А что, можно не ловить? И че тогда будет?


НС>Ты любитель С++, вот и расскажи что будет.


Да откуда мне знать, как ASP реагирует на SEH-исключения, в частности на C++ исключения? Я ее первый и последний раз ASP использовал лет 15 назад, там тогда вообще только бейсик был. Если MS полноценно использованием mixed-mode озаботился, могут и плюсовые исключения ловиться, и диагностика выводиться. А если не озаботился, может что угодно происходить.

НС>>>Перехватывай в C++/CLI, заворачивай в HttpException с нужным кодом. Все равно код перехвата тебе писать руками, хоть в С++, хоть в C++/CLI.

ХГД>>Ну то есть это надо будет делать не в 1 месте, как сейчас, а в 100.

НС>С какой стати? С++ не умеет написать один раз код, перехватывающий исключения и потом его везде использовать?


Ну как минимум придется на этот код сослаться в 100 местах. Странная какая-то экономия получается — писать от нее почему-то больше.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[30]: cppcms
От: Хон Гиль Дон Россия  
Дата: 27.09.14 20:20
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:


ХГД>> Внутри SSL не пофиг ли как пароль гнать — открытым текстом или чего-нибудь с ним мутить?


НС>А если OpenID понадобится поддержать?


Прикручу OpenID, делов-то. Но вообще идея странная — доверять системе конфиденциальные данные, но не доверять пользовательские пароли.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[48]: cppcms
От: Ночной Смотрящий Россия  
Дата: 27.09.14 21:10
Оценка:
Здравствуйте, alex_public, Вы писали:

НС>>Никаких. Я ответил тебе 2 сообщения назад? Или ты сообщения до конца не читаешь?

_>Да

Ну хоть честно

_>, ты сказал что никаких проблем нет. Но никак это не доказал.


Я тебе привел код, удовлетворяющий всем твоим требованиям. Так что иди нафик с такими заявами.

_>Если те отрывки кода, что ты привёл, действительно полностью решают указанную задачу, то тебе оставалось бы только добавить "main" и using'и (и то если IDE сама не умеет).


Ага, и еще БД со схемой. Вобщем, ты легко можешь получить желаемое баксов за 50.
Re[27]: cppcms
От: Ночной Смотрящий Россия  
Дата: 27.09.14 21:10
Оценка:
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>Да откуда мне знать, как ASP реагирует на SEH-исключения, в частности на C++ исключения?


Если исключения стандартные — маршаллер их самостоятельно как нужно завернет.

ХГД> Я ее первый и последний раз ASP использовал лет 15 назад, там тогда вообще только бейсик был.


Междлу ASP и ASP.NET нет ничего общего.

НС>>С какой стати? С++ не умеет написать один раз код, перехватывающий исключения и потом его везде использовать?

ХГД>Ну как минимум придется на этот код сослаться в 100 местах.

А это уже от тебя зависит.

ХГД> Странная какая-то экономия получается — писать от нее почему-то больше.


Во-первых больше писать не надо. Во-вторых это все копейки по сравнению с рукопашным написанием веб-части.
Re[49]: cppcms
От: alex_public  
Дата: 28.09.14 03:53
Оценка: +1
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Я тебе привел код, удовлетворяющий всем твоим требованиям. Так что иди нафик с такими заявами.


Кода целиком я не видел, какие-то отдельные отрывки, которые непонятно как складываются в общую картину.

НС>Ага, и еще БД со схемой. Вобщем, ты легко можешь получить желаемое баксов за 50.


Так у тебя же это было уже вроде ("schema.Entity<Person>()...") — надо было только скопировать. Или же надо ещё что-то?

Если надо, то получается весьма весело... Значит на языке "с удобным доступом к БД" требуется для элементарной вещи куча телодвижений, за которые платят по $50. В то время как на вроде бы "неудобном" языке это всё делается в десяток простейших строчек.
Re[50]: cppcms
От: _Raz_  
Дата: 28.09.14 11:16
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Если надо, то получается весьма весело... Значит на языке "с удобным доступом к БД" требуется для элементарной вещи куча телодвижений, за которые платят по $50. В то время как на вроде бы "неудобном" языке это всё делается в десяток простейших строчек.


о чем вы тут, но есть [NotMapped] атрибут.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 78>>
Re[51]: cppcms
От: alex_public  
Дата: 28.09.14 12:30
Оценка: +1
Здравствуйте, _Raz_, Вы писали:

_R_> о чем вы тут, но есть [NotMapped] атрибут.


Так я то не утверждаю, что есть какие-то проблемы, а просто прошу показать мне реализацию простейшего примера (занимающего на C++ несколько строк). На самом деле я думал, что мне просто его покажут и всё (чтобы потом сравнить удобство, безопасность и т.п.), однако с учётом сплошных сомнительных отмазок в ответ, начинают появляться подозрения, что проблемы имеются...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.