Re[12]: Почему C# не Немерле
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.08 08:49
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

ГВ>>Почти любой сериализатор так работает.
S>Что? Сериализатор вызовов методов?

Ты видишь принципиально нерешаемые проблемы?

S>И вот так тоже будет работать?

S>
S>foreach(int page in pages)
S>{
S>  yield return Url.Action<SearchController>(s => s.Results("Beverages", page);
S>}
S>

S>Я в это не поверю, пока не увижу работающий пример.

Это не вопрос веры. Это вопрос постановки задачи. Что делает твой фрагмент? В смысле — с колокольни пользователя?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: Почему C# не Немерле
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.11.08 09:36
Оценка: 3 (2)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ты видишь принципиально нерешаемые проблемы?

Да, вижу. Я не понимаю, каким образом компилятор С++ сможет извлечь информацию о вызове метода из вызова метода и вместо выполнения вызова отдать эту информацию в некий фреймворк.
В шарпе для этого использованы 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>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Почему C# не Немерле
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.08 10:53
Оценка:
Здравствуйте, Sinclair, Вы писали:

ГВ>>Ты видишь принципиально нерешаемые проблемы?

S>Да, вижу. Я не понимаю, каким образом компилятор С++ сможет извлечь информацию о вызове метода из вызова метода и вместо выполнения вызова отдать эту информацию в некий фреймворк.

Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть object->method(parameter); ), а некий аналог boost::bind/boost::function, что-то вроде bind(&Object::method, object, parameter). Такая переформулировка позволит и вызвать метод по месту, и в то же время — сериализовать описание вызова. Естественно, что синтаксически это не то же самое, что использование Expression Trees. Ну и будут, разумеется, свои сложности с поиском нужного экземпляра объекта. В принципе, очень похоже на игрища с ORM, только в профиль.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[5]: О маркетинге и гиках
От: Gaperton http://gaperton.livejournal.com
Дата: 17.11.08 11:06
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

G>>А вот бывает так, что рекламируют продукт, который прикольный, ну как гарджет, и из-за этого его берут некоторые гики. Реальную потребность он по определению не удовлетворяет, но гикам он нравится. И хрен бы с ним, но некоторые воинствующие гики хотят захватить власть над миром, и весь мир заставить пользоваться их игрушками, заявляя, что это они, гики, лучше всех знают, что всем надо! Слыш, братва, они хотят отобрать у нас наши лопаты! О чем это я? Ну это, на не начинается, на мелре заканчивается .


AVK>А я, грешным делом, подумал, что начинается на ли, а заканчивается на х .


Ну, вообще, много какие гики хотят захватить власть на миром . Вон, по 2х2 идет цельный мультсериал, например, про двух мышей, которые в каждой серии хотят достичь мирового господства.

http://rutube.ru/tracks/96353.html?v=b79cd6a8eded09d970f05c7f9db77387

— Чем мы будем заниматься сегодня вечером, Брэйн?
— Тем же, чем и всегда, Пинки. Попробуем завоевать мир!

Re[15]: Почему C# не Немерле
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.11.08 11:19
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть 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>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[16]: Почему C# не Немерле
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.08 11:57
Оценка:
Здравствуйте, 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, только подобие. Можно, в общем, добиться примерно такого синтаксиса:

<%=CreateUrl("BeveragesList", urlbind(&Object::method, createObject(), 25));%>


При условии, что метод объекта выглядит, скажем, так:

class Object
{
  public:
    void method(int);
}; // Object


urlbind — семейство шаблонных функций приблизительно такого вида:
template<typename T, typename R, typename P>
  GeneratedUrl urlbind(R (T::*method)(P), Object *pobj, P param){...}
template<typename T, typename R, typename P1, typename P2>
  GeneratedUrl urlbind(R (T::*method)(P), Object *pobj, P1 p1, P2 p2){...}


Как ты понимаешь, если сигнатура доступна, то сгенерировать функтор соответствующей структуры уже не трудно.

GeneratedUrl по идее, должен содержать такие методы (возвращать wstring грубо и некультурно, я в курсе ):

class GeneratedUrl
{
  public:
    virtual std::wstring getSubUrl();
    virtual std::wstring getName();
    virtual void run(); // Реализуется через operator() того функтора, который генерируется внутри urlbind.
};


Как-то так. Идея, думаю, понятна.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: 2VladD2
От: Gaperton http://gaperton.livejournal.com
Дата: 17.11.08 12:10
Оценка:
Кстати, Влад, глянь мультик. Тебе понравится .
Re[17]: Дополню
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.08 12:14
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

S>>Хочется сравнить строгость контроля и синтаксическую целостность.


Строгость контроля тут — на уровне обычного C++-ного контроля типов. Каких-то дополнительных описаний в самом используемом классе не требуется. Указатель можно заменить на смартпойнтер.

И ещё поправка. Метод run, скорее всего, будет выглядеть как-то так:

ГВ>
ГВ>class GeneratedUrl
ГВ>{
ГВ>  public:
ГВ>    ...
ГВ>    virtual void run(HttpOutput*);
ГВ>};
ГВ>


Он должен генерировать какой-то хтмл по идее. Соответственно, у генерируемого функтора будет немного другая сигнатура и, по-видимому, целевой класс придётся наследовать от определённого интерфейса. Но это уже детали, в общем-то.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Почему C# не Немерле
От: Gaperton http://gaperton.livejournal.com
Дата: 17.11.08 12:31
Оценка: 2 (2)
Здравствуйте, FR, Вы писали:

FR>На F# тоже, и они оба C# уж точно заменят и будут намного выразительнее.

FR>С Немерле F# по выразительности (исключая макросы) примерно на одном уровне.

В F# есть очень прикольные штуки, вообще-то. Скажем, я читал, что на F# можно изобразить "гражданские монады", имеющие эффект монад но при этом не взрывающие мозг. Плюс, готовится совершенно потрясающий F# web-фреймворк, с автоматической трансляцией F# в клиентский JavaScript и _синхронным_ стилем программирования AJAX-приложений, который эти "монады" задействует.

К слову о драйверах популярности языков программирования и платформ.
Re[17]: Почему C# не Немерле
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.11.08 12:45
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
S>>Давай пример того, как будет записан приведенный мной код на этом гипотетическом фреймворке с использованием boost::bind и boost::function.
S>>Хочется сравнить строгость контроля и синтаксическую целостность.

ГВ>OK, но это не boost::bind, только подобие. Можно, в общем, добиться примерно такого синтаксиса:


ГВ>
ГВ><%=CreateUrl("BeveragesList", urlbind(&Object::method, createObject(), 25));%>
ГВ>

Не понял две вещи:
1. Можно ли использовать методы с другими именами?
2. Что такое createObject()?

ГВ>При условии, что метод объекта выглядит, скажем, так:


ГВ>GeneratedUrl по идее, должен содержать такие методы (возвращать wstring грубо и некультурно, я в курсе ):

Дальнейшее, в принципе, неважно. Как только мы получили объект с информацией об использованных значениях параметров, всё становится легко и приятно. Ну, за исключением того, что в C++ как ни пиши, начинаются какие-то противоестественные мучения с некультурностью определенных типов строк и прочей ерундой, которая во взрослых платформах вообще не привлекает внимания.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[18]: Почему C# не Немерле
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.08 12:55
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>>Давай пример того, как будет записан приведенный мной код на этом гипотетическом фреймворке с использованием boost::bind и boost::function.

S>>>Хочется сравнить строгость контроля и синтаксическую целостность.

ГВ>>OK, но это не boost::bind, только подобие. Можно, в общем, добиться примерно такого синтаксиса:


ГВ>>
ГВ>><%=CreateUrl("BeveragesList", urlbind(&Object::method, createObject(), 25));%>
ГВ>>

S>Не понял две вещи:
S>1. Можно ли использовать методы с другими именами?

Да, разумеется.

S>2. Что такое createObject()?


В данном случае она создаёт экземпляр Object. Можно делегировать создание объекта фреймворку, тогда нужно передать какой-то ключ и вызов будет иметь несколько иной вид, приблизительно такой:

ГВ>>
ГВ>><%=CreateUrl("BeveragesList", urlbind(&Object::method, "InstanceKey", _1, 25));%>
ГВ>>


ГВ>>При условии, что метод объекта выглядит, скажем, так:


ГВ>>GeneratedUrl по идее, должен содержать такие методы (возвращать wstring грубо и некультурно, я в курсе ):

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

Я бы не назвал это мучениями, ничего там протвоестественного нет. Ну да не суть.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[19]: Почему C# не Немерле
От: WFrag США  
Дата: 17.11.08 14:50
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>В данном случае она создаёт экземпляр Object. Можно делегировать создание объекта фреймворку, тогда нужно передать какой-то ключ и вызов будет иметь несколько иной вид, приблизительно такой:


ГВ>>>
ГВ>>><%=CreateUrl("BeveragesList", urlbind(&Object::method, "InstanceKey", _1, 25));%>
ГВ>>>


А зачем тебе создавать объект-обработчик, если тебе надо только лишь создать URL (например, для вписания его в HTML)?
Re[20]: Почему C# не Немерле
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.08 15:17
Оценка:
Здравствуйте, WFrag, Вы писали:

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


ГВ>>В данном случае она создаёт экземпляр Object. Можно делегировать создание объекта фреймворку, тогда нужно передать какой-то ключ и вызов будет иметь несколько иной вид, приблизительно такой:


ГВ>>>>
ГВ>>>><%=CreateUrl("BeveragesList", urlbind(&Object::method, "InstanceKey", _1, 25));%>
ГВ>>>>


WF>А зачем тебе создавать объект-обработчик, если тебе надо только лишь создать URL (например, для вписания его в HTML)?


По идее, чтобы потом к этому объекту можно было обратиться по его "собственному" URL. Если я тебя правильно понял.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[9]: Почему C# не Немерле
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.11.08 15:39
Оценка:
Здравствуйте, Gaperton, Вы писали:

G> Плюс, готовится совершенно потрясающий F# web-фреймворк, с автоматической трансляцией F# в клиентский JavaScript


А что там именно транслироваться будет — исходник на F#, expression tree или IL?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[15]: Почему C# не Немерле
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.11.08 15:39
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть 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>>
AVK Blog
Re[16]: Почему C# не Немерле
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.11.08 15:43
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


ГВ>>Разумеется, я имею в виду не вызов в прямом смысле этого слова (то есть object->method(parameter); ), а некий аналог boost::bind/boost::function, что-то вроде bind(&Object::method, object, parameter).


AVK>И специфику алгоритма генерации url можно будет менять уже после деплоймента?


Смотря, какая специфика. Кстати, а как это можно сделать средствами MVC?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[17]: Почему C# не Немерле
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.11.08 16:15
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Смотря, какая специфика. Кстати, а как это можно сделать средствами MVC?


Поскольку трансляция реально происходит в рантайме, то проблем там никаких.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[21]: Почему C# не Немерле
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.11.08 16:19
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

WF>>А зачем тебе создавать объект-обработчик, если тебе надо только лишь создать URL (например, для вписания его в HTML)?


ГВ>По идее, чтобы потом к этому объекту можно было обратиться по его "собственному" URL. Если я тебя правильно понял.

Нет. Никакого "собственного" URL у объекта нет. Экземпляр объекта-обработчика будет предоставлен фреймворком при разборе запроса. Рассчитывать на то, что объект, ссылку на который я отдаю в рамках некоторого респонса, доживет до следующего реквеста, в вебе нельзя.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: Почему C# не Немерле
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.11.08 16:21
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Смотря, какая специфика. Кстати, а как это можно сделать средствами MVC?
Очень просто — поменять, к примеру, конфиг роутинга. Фишка именно в том, что для генерации и парсинга применяется один и тот же набор правил.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Почему C# не Немерле
От: Gaperton http://gaperton.livejournal.com
Дата: 17.11.08 21:53
Оценка:
Здравствуйте, AndrewVK, Вы писали:

G>> Плюс, готовится совершенно потрясающий F# web-фреймворк, с автоматической трансляцией F# в клиентский JavaScript


AVK>А что там именно транслироваться будет — исходник на F#, expression tree или IL?


Точно не знаю. Очевидно, не IL. Посмотри.

http://tomasp.net/projects/fswebtools.aspx
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.