Как думаете что мне больше всего нехватает в C# из Nemerle?
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.03.06 22:29
Оценка: :))) :))) :))
В очередной раз чертыхнувшись решил поделиться причиной этого чертыхания с народом.

А чертыхнулся я по банальной причине...
Выдался свободный день и я сел за реструктуризатор БД для Януса. Код там в общем-то довольно простой, но объемный. Ну, то что нехватает метапрограммирования — это как бы само собой . Но вот то что, мне будет нехватать таких банальных вещей как кортежи (tuples), я даже подумать не мог!!!

А тем не мнее я раз двадцать уже чертыхнулся выбирая другие, и смею заметить, куда более не удобные и громоздкие решения вместо того, чтобы возвратить из функции кортеж! Причем иногда я плевал и создавал временные классы-пары. Думал сделать дженерик-класс Tuple<T1, T2>, но поглядев на читаемость, а вернее не читаемость, награмождений из:
Tuple<Column, Column> aaaa = new Tuple<Column, Column>(xxxx, yyyy);
aaaa.Val1 ...;
aaaa.Val2 ...;

плюнул и создал специализированную пару... На четверки уже не решился.

Причем самое противное, что анонимные типы из превью C# 3.0 меня не выручили бы. Мне нужно возвращать кортежи из функций, а этого то создатели C# 3.0 и не предусмотрели. И это при том, что драли идею они конечно же с функциональных языков.

В общем, понять это нельзя. Такое ощущение, что все кто претендует на криативность ходят "своими" путями просто из приципе.

ЗЫ

Кто бы мог подумать год назад, что я буду задумываться над тем, что неплохо было бы, чтобы МС выгнал к чертям Хейгельбергов и Саттеров и набрал поляков-студентов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Как думаете что мне больше всего нехватает в C# из Nemer
От: Павел Кузнецов  
Дата: 12.03.06 01:27
Оценка:
VladD2,

> нехватать таких банальных вещей как кортежи (tuples), я даже подумать не мог!!!

>
> <...>
>
> Кто бы мог подумать год назад, что я буду задумываться над тем, что неплохо было бы, чтобы МС выгнал к чертям Хейгельбергов и Саттеров и набрал поляков-студентов.

А Саттер-то тут причем? Да и в C++ tuples вполне реализуются на уровне библиотек...
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Как думаете что мне больше всего нехватает в C# из Nemer
От: McSeem2 США http://www.antigrain.com
Дата: 12.03.06 01:40
Оценка: 1 (1) -1 :))) :))) :))) :))
Здравствуйте, VladD2, Вы писали:

VD>Кто бы мог подумать год назад, что я буду задумываться над тем, что неплохо было бы, чтобы МС выгнал к чертям Хейгельбергов и Саттеров и набрал поляков-студентов.


Спорим на ящик пива, через год-два ты будешь точно так же бухтеть на "поляков-студентов". Стоит не так, висит кривовато... Да ты, брат, эстэт, едрён-батон.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Как думаете что мне больше всего нехватает в C# из Nemer
От: Igor Trofimov  
Дата: 12.03.06 09:50
Оценка: +5 :))
VD>Кто бы мог подумать год назад, что я буду задумываться над тем, что неплохо было бы, чтобы МС выгнал к чертям Хейгельбергов и Саттеров и набрал поляков-студентов.

Кто бы мог подумать? Думали многие читатели твоих фанатичных дифирамбов C#
Не со зла говорю, просто так оно и есть.
Re: Как думаете что мне больше всего нехватает в C# из Nemer
От: FR  
Дата: 12.03.06 13:53
Оценка: :))
Здравствуйте, VladD2, Вы писали:

Все коготок увяз
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.06 17:40
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>А Саттер-то тут причем?


Инструкция для тех у кого плохо с юмором. Если сзади высказывания стоит смайлик, то это шутка.
Саттер попался под руку просто потому-что мужик с именем. Проблема в том, что даже ворох именитых людей не способны оградить МС от хождения по весьма странным путям.

ПК> Да и в C++ tuples вполне реализуются на уровне библиотек...




tuple<int>
tuple<double&, const double&, const double, double*, const double*>
tuple<A, int(*)(char, int), B(A::*)(C&), C>
tuple<std::string, std::pair<A, B> >
tuple<A*, tuple<const A*, const B&, C>, bool, void*>


Паш, ты издевашся? Такую грязь я и на C# напишу за 5 минут!

Но поглядев на такое я лучше выбиру другие пути. А имей я в своем распоряжении кортежи как в Нэмерле я выбрал бы их. И код получился чистым, простым и удобным в поддержке.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.06 17:40
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Спорим на ящик пива, через год-два ты будешь точно так же бухтеть на "поляков-студентов". Стоит не так, висит кривовато... Да ты, брат, эстэт, едрён-батон.


С удовольствием бы бухтел на поляков.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.03.06 17:48
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>А Саттер-то тут причем? Да и в C++ tuples вполне реализуются на уровне библиотек...


t.get<0> ничем не лучше t.Val1.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.03.06 17:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>
VD>tuple<int>
VD>tuple<double&, const double&, const double, double*, const double*>
VD>tuple<A, int(*)(char, int), B(A::*)(C&), C>
VD>tuple<std::string, std::pair<A, B> >
VD>tuple<A*, tuple<const A*, const B&, C>, bool, void*>
VD>


VD>Паш, ты издевашся? Такую грязь я и на C# напишу за 5 минут!


Это как раз ерунда. Можно пережить. А вот это уже с трудом:
int i = get<0>(t); i = t.get<0>();        // ok
int j = get<0>(ct);                       // ok
get<0>(t) = 5;                            // ok 
get<0>(ct) = 5;                           // error, can't assign to const 
  ...
double e = get<1>(t); // ok   
get<1>(t) = 3.14;     // ok 
get<2>(t) = A();      // error, can't assign to const 
A aa = get<3>(t);     // error: index out of bounds
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.06 18:12
Оценка: +2
Здравствуйте, Павел Кузнецов, Вы писали:

Собственно, чтобы было понятно. Вот пример код на Nemerle:
// Формируем строку формата "str" и список аргуменов (выражений в них подсавляемых).
def (str, args, _) = exprs.FoldRight(("", [], 0), fun(expr, accumulator)
{
    // Выделяем из кортежа отдельные значения
    // str - формируемая строка форамата.
    // args - формируемый список выражений параметров.
    // i - счетчик количества параметров.
    def (str, args, i) = accumulator;
    def x = expr.ToString(); // Преобразуем текущее выражение в строку.
    // Функция Unquot(s) убирает обрамляющие ковычки из строки.
    def Unquot(s) { s.Substring(1).Substring(0, s.Length - 2) }
    // AddTwiceBraces(s) удваиват знаки "{" и "}".
    def AddTwiceBraces(s) { s.Replace("{", "{{").Replace("}", "}}") }
    
    if (x.Length > 0)
    {
        // Если стока начинается с ", то это просто подстрока которую нужно 
        // обработать и добавить в строку формата.
        if (x[0] == '"')
            (str + AddTwiceBraces(Unquot(x)), args, i)
        // иначе это "встроеное" подвыражение выделенное из строки.
        // Для каждого такого подвыражения нужно добавить с форматную строку
        // тег вида {x} где x - это номер подвыражения, а так же добавить выражение 
        // в список выражений которые в посделствии будут формировать параметры.
        else
            (str + "{" + i.ToString() + "}", expr :: args, i + 1)
    }
    else // Если строка пуста, то ничего не делаем.
        accumulator
});

попробуй переписать его на С++ не заменяя рекурсию на цикл и ты поймешь насколько неудобна эмуляция кортежей.

Кстати, надо еще учитывать то, что кортеж в Нэмерле можно передавать в функцию вместо ее параметров. Так вызовы:
F(1, "text", 1.2);

и
def tuple1 = (1, "text", 1.2);
F(tuple1);

аналогичны.

Это позволяет описывать функции в терминах двух тюплов. Первый описывает возвращаемое значени, а второй параметры.

Таким образом можно рассматривать функцию как всегда принимающую один параметр и возвращающую одно значение. Это делает язык очень выразительным, а его концепции очень простыми.

Вот это я называю отличным дизайном!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Как думаете что мне больше всего нехватает в C# из Ne
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.06 18:18
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Паш, ты издевашся? Такую грязь я и на C# напишу за 5 минут!


AVK>Это как раз ерунда. Можно пережить.


Тебе может и ерунда. А я лично терпеть такую грязь в своем коде не намерян.

AVK>А вот это уже с трудом:

AVK>
AVK>int i = get<0>(t); i = t.get<0>();        // ok
AVK>int j = get<0>(ct);                       // ok
AVK>get<0>(t) = 5;                            // ok 
AVK>get<0>(ct) = 5;                           // error, can't assign to const 
AVK>  ...
AVK>double e = get<1>(t); // ok   
AVK>get<1>(t) = 3.14;     // ok 
AVK>get<2>(t) = A();      // error, can't assign to const 
AVK>A aa = get<3>(t);     // error: index out of bounds 
AVK>


+1

Без поддержки языка кортежи к сожалению выглядят неуклюже.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: Дарней Россия  
Дата: 13.03.06 03:41
Оценка: +1 -3
Здравствуйте, Igor Trofimov, Вы писали:

iT>Кто бы мог подумать? Думали многие читатели твоих фанатичных дифирамбов C#


ты сам себе противоречишь. Фанатик — это человек, который не откажется от своего мнения ни при каких условиях. Просто по определению.
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
От: Павел Кузнецов  
Дата: 13.03.06 04:31
Оценка:
VladD2,

> ПК> Да и в C++ tuples вполне реализуются на уровне библиотек...

>
>
>
>
> tuple<int>
> tuple<double&, const double&, const double, double*, const double*>
> tuple<A, int(*)(char, int), B(A::*)(C&), C>
> tuple<std::string, std::pair<A, B> >
> tuple<A*, tuple<const A*, const B&, C>, bool, void*>
>

>
> Паш, ты издевашся? Такую грязь я и на C# напишу за 5 минут!

В смысле, что именно не так?

> Но поглядев на такое я лучше выбиру другие пути.


Конкретнее, пожалуйста...
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Как думаете что мне больше всего нехватает в C# из Ne
От: Павел Кузнецов  
Дата: 13.03.06 04:32
Оценка:
> Это как раз ерунда. Можно пережить. А вот это уже с трудом:
>
> int i = get<0>(t); i = t.get<0>();        // ok
> int j = get<0>(ct);                       // ok
> get<0>(t) = 5;                            // ok
> get<0>(ct) = 5;                           // error, can't assign to const
>   ...
> double e = get<1>(t); // ok
> get<1>(t) = 3.14;     // ok
> get<2>(t) = A();      // error, can't assign to const
> A aa = get<3>(t);     // error: index out of bounds
>


А здесь что не так?
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
От: Павел Кузнецов  
Дата: 13.03.06 04:33
Оценка:
AndrewVK,

> ПК> в C++ tuples вполне реализуются на уровне библиотек...

>
> t.get<0> ничем не лучше t.Val1.

Лучше, конечно: в первом случае значения можно перебирать в цикле (времени компиляции). Впрочем, можно чуть более конкретно показать, как тебе больше нравится?
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Как думаете что мне больше всего нехватает в C# из Ne
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.06 05:09
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В смысле, что именно не так?


Объем синтаксического оверхэда. Ты погляди на код на Нэмерле.

>> Но поглядев на такое я лучше выбиру другие пути.


ПК>Конкретнее, пожалуйста...


Что конкренее? Забью на идею возврата нескольких значений из функции и реализую тоже самое но более громоздко.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Как думаете что мне больше всего нехватает в C# из Ne
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.06 05:09
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> Это как раз ерунда. Можно пережить. А вот это уже с трудом:

>>
>> int i = get<0>(t); i = t.get<0>();        // ok
>> int j = get<0>(ct);                       // ok
>> get<0>(t) = 5;                            // ok
>> get<0>(ct) = 5;                           // error, can't assign to const
>>   ...
>> double e = get<1>(t); // ok
>> get<1>(t) = 3.14;     // ok
>> get<2>(t) = A();      // error, can't assign to const
>> A aa = get<3>(t);     // error: index out of bounds
>>


ПК>А здесь что не так?

Вот это:
int i = get<0>(t);

по нормальному должно выглядеть так:
def (i, _) = t;

или так:
def (a, b, c, d) = t;
где a, b, c, d — это переменные тип тип и значения которых соотвествуют полям кортежа.
Это:
i = t.get<0>();        // ok

вообще не должно компилироваться.
А создание долно выглядеть так:
(1, "ss")

и чтобы никаких лишних фигней.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 13.03.06 08:01
Оценка: :))) :))
Здравствуйте, VladD2, Вы писали:

VD>Вот это я называю отличным дизайном!


Это временно.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Как думаете что мне больше всего нехватает в C# из Nemer
От: igna Россия  
Дата: 13.03.06 09:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кто бы мог подумать год назад, что я буду задумываться над тем, что неплохо было бы, чтобы МС выгнал к чертям Хейгельбергов и Саттеров и набрал поляков-студентов.



А без этого нельзя использовать Nemerle? Прямо сейчас.
Re: Как думаете что мне больше всего нехватает в C# из Nemer
От: ie Россия http://ziez.blogspot.com/
Дата: 13.03.06 09:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кто бы мог подумать год назад, что я буду задумываться над тем, что неплохо было бы, чтобы МС выгнал к чертям Хейгельбергов и Саттеров и набрал поляков-студентов.


Так насколько я понимаю, разработка Nemerle идет на майкрософтовский гранд, так что можно считать MS уже набрал этих самых студентов
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.