Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Геннадий Васильев, Вы писали: ГВ>>Почти любой сериализатор так работает. S>Что? Сериализатор вызовов методов?
Ты видишь принципиально нерешаемые проблемы?
S>И вот так тоже будет работать? S>
S>Я в это не поверю, пока не увижу работающий пример.
Это не вопрос веры. Это вопрос постановки задачи. Что делает твой фрагмент? В смысле — с колокольни пользователя?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Ты видишь принципиально нерешаемые проблемы?
Да, вижу. Я не понимаю, каким образом компилятор С++ сможет извлечь информацию о вызове метода из вызова метода и вместо выполнения вызова отдать эту информацию в некий фреймворк.
В шарпе для этого использованы Expression Trees. Я не припоминаю никакого аналога этого механизма в C++. ГВ>Это не вопрос веры. Это вопрос постановки задачи. Что делает твой фрагмент? В смысле — с колокольни пользователя?
Он генерирует список ссылок, которые приведут к выполнению вызова соответствующего метода контроллера.
Вот почитай собсно статью: http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx. То место, где про Constructing Outgoing URLs.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
ГВ>>Ты видишь принципиально нерешаемые проблемы? S>Да, вижу. Я не понимаю, каким образом компилятор С++ сможет извлечь информацию о вызове метода из вызова метода и вместо выполнения вызова отдать эту информацию в некий фреймворк.
Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть object->method(parameter); ), а некий аналог boost::bind/boost::function, что-то вроде bind(&Object::method, object, parameter). Такая переформулировка позволит и вызвать метод по месту, и в то же время — сериализовать описание вызова. Естественно, что синтаксически это не то же самое, что использование Expression Trees. Ну и будут, разумеется, свои сложности с поиском нужного экземпляра объекта. В принципе, очень похоже на игрища с ORM, только в профиль.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, AndrewVK, Вы писали:
G>>А вот бывает так, что рекламируют продукт, который прикольный, ну как гарджет, и из-за этого его берут некоторые гики. Реальную потребность он по определению не удовлетворяет, но гикам он нравится. И хрен бы с ним, но некоторые воинствующие гики хотят захватить власть над миром, и весь мир заставить пользоваться их игрушками, заявляя, что это они, гики, лучше всех знают, что всем надо! Слыш, братва, они хотят отобрать у нас наши лопаты! О чем это я? Ну это, на не начинается, на мелре заканчивается .
AVK>А я, грешным делом, подумал, что начинается на ли, а заканчивается на х .
Ну, вообще, много какие гики хотят захватить власть на миром . Вон, по 2х2 идет цельный мультсериал, например, про двух мышей, которые в каждой серии хотят достичь мирового господства.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть object->method(parameter); ), а некий аналог boost::bind/boost::function, что-то вроде bind(&Object::method, object, parameter). Такая переформулировка позволит и вызвать метод по месту, и в то же время — сериализовать описание вызова. Естественно, что синтаксически это не то же самое, что использование Expression Trees. Ну и будут, разумеется, свои сложности с поиском нужного экземпляра объекта. В принципе, очень похоже на игрища с ORM, только в профиль.
Ок, я не знаток буста. Возможно, он и позволит такое изобразить. Но пока что мне непонятно, как именно это будет работать. Пёс с ним, с поиском нужного экземпляра — это будет потом. Сейчас важно соорудить строку.
Давай пример того, как будет записан приведенный мной код на этом гипотетическом фреймворке с использованием boost::bind и boost::function.
Хочется сравнить строгость контроля и синтаксическую целостность.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть object->method(parameter); ), а некий аналог boost::bind/boost::function, что-то вроде bind(&Object::method, object, parameter). Такая переформулировка позволит и вызвать метод по месту, и в то же время — сериализовать описание вызова. Естественно, что синтаксически это не то же самое, что использование Expression Trees. Ну и будут, разумеется, свои сложности с поиском нужного экземпляра объекта. В принципе, очень похоже на игрища с ORM, только в профиль. S>Ок, я не знаток буста. Возможно, он и позволит такое изобразить. Но пока что мне непонятно, как именно это будет работать. Пёс с ним, с поиском нужного экземпляра — это будет потом. Сейчас важно соорудить строку. S>Давай пример того, как будет записан приведенный мной код на этом гипотетическом фреймворке с использованием boost::bind и boost::function. S>Хочется сравнить строгость контроля и синтаксическую целостность.
OK, но это не boost::bind, только подобие. Можно, в общем, добиться примерно такого синтаксиса:
Как ты понимаешь, если сигнатура доступна, то сгенерировать функтор соответствующей структуры уже не трудно.
GeneratedUrl по идее, должен содержать такие методы (возвращать wstring грубо и некультурно, я в курсе ):
class GeneratedUrl
{
public:
virtual std::wstring getSubUrl();
virtual std::wstring getName();
virtual void run(); // Реализуется через operator() того функтора, который генерируется внутри urlbind.
};
Как-то так. Идея, думаю, понятна.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
S>>Хочется сравнить строгость контроля и синтаксическую целостность.
Строгость контроля тут — на уровне обычного C++-ного контроля типов. Каких-то дополнительных описаний в самом используемом классе не требуется. Указатель можно заменить на смартпойнтер.
И ещё поправка. Метод run, скорее всего, будет выглядеть как-то так:
ГВ>
Он должен генерировать какой-то хтмл по идее. Соответственно, у генерируемого функтора будет немного другая сигнатура и, по-видимому, целевой класс придётся наследовать от определённого интерфейса. Но это уже детали, в общем-то.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, FR, Вы писали:
FR>На F# тоже, и они оба C# уж точно заменят и будут намного выразительнее. FR>С Немерле F# по выразительности (исключая макросы) примерно на одном уровне.
В F# есть очень прикольные штуки, вообще-то. Скажем, я читал, что на F# можно изобразить "гражданские монады", имеющие эффект монад но при этом не взрывающие мозг. Плюс, готовится совершенно потрясающий F# web-фреймворк, с автоматической трансляцией F# в клиентский JavaScript и _синхронным_ стилем программирования AJAX-приложений, который эти "монады" задействует.
К слову о драйверах популярности языков программирования и платформ.
Здравствуйте, Геннадий Васильев, Вы писали: S>>Давай пример того, как будет записан приведенный мной код на этом гипотетическом фреймворке с использованием boost::bind и boost::function. S>>Хочется сравнить строгость контроля и синтаксическую целостность.
ГВ>OK, но это не boost::bind, только подобие. Можно, в общем, добиться примерно такого синтаксиса:
ГВ>
Не понял две вещи:
1. Можно ли использовать методы с другими именами?
2. Что такое createObject()?
ГВ>При условии, что метод объекта выглядит, скажем, так:
ГВ>GeneratedUrl по идее, должен содержать такие методы (возвращать wstring грубо и некультурно, я в курсе ):
Дальнейшее, в принципе, неважно. Как только мы получили объект с информацией об использованных значениях параметров, всё становится легко и приятно. Ну, за исключением того, что в C++ как ни пиши, начинаются какие-то противоестественные мучения с некультурностью определенных типов строк и прочей ерундой, которая во взрослых платформах вообще не привлекает внимания.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>>>Давай пример того, как будет записан приведенный мной код на этом гипотетическом фреймворке с использованием boost::bind и boost::function. S>>>Хочется сравнить строгость контроля и синтаксическую целостность.
ГВ>>OK, но это не boost::bind, только подобие. Можно, в общем, добиться примерно такого синтаксиса:
ГВ>>
S>Не понял две вещи: S>1. Можно ли использовать методы с другими именами?
Да, разумеется.
S>2. Что такое createObject()?
В данном случае она создаёт экземпляр Object. Можно делегировать создание объекта фреймворку, тогда нужно передать какой-то ключ и вызов будет иметь несколько иной вид, приблизительно такой:
ГВ>>
ГВ>>При условии, что метод объекта выглядит, скажем, так:
ГВ>>GeneratedUrl по идее, должен содержать такие методы (возвращать wstring грубо и некультурно, я в курсе ): S>Дальнейшее, в принципе, неважно. Как только мы получили объект с информацией об использованных значениях параметров, всё становится легко и приятно. Ну, за исключением того, что в C++ как ни пиши, начинаются какие-то противоестественные мучения с некультурностью определенных типов строк и прочей ерундой, которая во взрослых платформах вообще не привлекает внимания.
Я бы не назвал это мучениями, ничего там протвоестественного нет. Ну да не суть.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>В данном случае она создаёт экземпляр Object. Можно делегировать создание объекта фреймворку, тогда нужно передать какой-то ключ и вызов будет иметь несколько иной вид, приблизительно такой:
ГВ>>>
Здравствуйте, WFrag, Вы писали:
WF>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>В данном случае она создаёт экземпляр Object. Можно делегировать создание объекта фреймворку, тогда нужно передать какой-то ключ и вызов будет иметь несколько иной вид, приблизительно такой:
ГВ>>>>
WF>А зачем тебе создавать объект-обработчик, если тебе надо только лишь создать URL (например, для вписания его в HTML)?
По идее, чтобы потом к этому объекту можно было обратиться по его "собственному" URL. Если я тебя правильно понял.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть object->method(parameter); ), а некий аналог boost::bind/boost::function, что-то вроде bind(&Object::method, object, parameter).
И специфику алгоритма генерации url можно будет менять уже после деплоймента?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть object->method(parameter); ), а некий аналог boost::bind/boost::function, что-то вроде bind(&Object::method, object, parameter).
AVK>И специфику алгоритма генерации url можно будет менять уже после деплоймента?
Смотря, какая специфика. Кстати, а как это можно сделать средствами MVC?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
WF>>А зачем тебе создавать объект-обработчик, если тебе надо только лишь создать URL (например, для вписания его в HTML)?
ГВ>По идее, чтобы потом к этому объекту можно было обратиться по его "собственному" URL. Если я тебя правильно понял.
Нет. Никакого "собственного" URL у объекта нет. Экземпляр объекта-обработчика будет предоставлен фреймворком при разборе запроса. Рассчитывать на то, что объект, ссылку на который я отдаю в рамках некоторого респонса, доживет до следующего реквеста, в вебе нельзя.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Геннадий Васильев, Вы писали: ГВ>Смотря, какая специфика. Кстати, а как это можно сделать средствами MVC?
Очень просто — поменять, к примеру, конфиг роутинга. Фишка именно в том, что для генерации и парсинга применяется один и тот же набор правил.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, AndrewVK, Вы писали:
G>> Плюс, готовится совершенно потрясающий F# web-фреймворк, с автоматической трансляцией F# в клиентский JavaScript
AVK>А что там именно транслироваться будет — исходник на F#, expression tree или IL?