Re[5]: Как думаете что мне больше всего нехватает в C# из Ne
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.03.06 09:20
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

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


Сравни с C# 3
var t = new (IntValue = 1, DoubleValue = 12.75, AValue = new A());
var t2 = new (2, 17.75, new A("A"));
int i = t.IntValue;
double d = t.DoubleValue;
A a = t2.AValue;
t2 = t1;
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: Oyster Украина https://github.com/devoyster
Дата: 13.03.06 09:21
Оценка:
Здравствуйте, igna, Вы писали:

I>А без этого нельзя использовать Nemerle? Прямо сейчас.


Можно, но на коммерческих проектах стрёмно.
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 13.03.06 11:58
Оценка:
Здравствуйте, Oyster, Вы писали:

I>>А без этого нельзя использовать Nemerle? Прямо сейчас.


O>Можно, но на коммерческих проектах стрёмно.


Речь шла о вполне конкретной задаче. Почему нельзя было использовать Nemerle я тоже не понял. Заодно и продемонстрировал бы интероперабельность между языками в рамках Net.
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[4]: Как думаете что мне больше всего нехватает в C# из Ne
От: Oyster Украина https://github.com/devoyster
Дата: 13.03.06 12:05
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Речь шла о вполне конкретной задаче. Почему нельзя было использовать Nemerle я тоже не понял. Заодно и продемонстрировал бы интероперабельность между языками в рамках Net.


А может, Влад и использует уже
Re: Как думаете что мне больше всего нехватает в C# из Nemer
От: srggal Украина  
Дата: 13.03.06 12:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В очередной раз чертыхнувшись решил поделиться причиной этого чертыхания с народом.


ГМ, а отчего бы, раз Немерле решает кучу проблем — не переписать под него Янус ж)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Как думаете что мне больше всего нехватает в C# из Ne
От: Павел Кузнецов  
Дата: 13.03.06 14:22
Оценка: -1
AndrewVK,

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

>
> Сравни с C# 3
>
> var t = new (IntValue = 1, DoubleValue = 12.75, AValue = new A());
> var t2 = new (2, 17.75, new A("A"));
>

Это к tuples напрямую не относится, для этого нужно что-нибудь типа auto из следующего C++:
auto t  = make_tuple(1, 12.75, A());
auto t2 = make_tuple(2, 17.75, A("A"));


>
> int i = t.IntValue;
> double d = t.DoubleValue;
> A a = t2.AValue;
> t2 = t1;
>

Не вполне уловил, почему можно писать t2.AValue: при инициализации t2 имена не указаны... Или же все tuples в C# 3.0 имеют одни и те же members, имена которых определяются их типами?

За исключением имен не вижу существенной разницы даже с существующими сегодня в C++ решениями:
int    i = get<0>( t );
double d = get<1>( t );
A      a = get<2>( t2 );
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[6]: Как думаете что мне больше всего нехватает в C# из Ne
От: Павел Кузнецов  
Дата: 13.03.06 14:27
Оценка:
VladD2,

>
> int i = get<0>(t);
>

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

Ну, это уже на любителя... В любых мало-мальски нетривиальных случаях мне больше нравится explicit typing:
int i;
tie(i, ignore) = t;

хотя в некоторых случаях было бы, безусловно, удобно.

> Это:

>
> i = t.get<0>();        // ok
>

> вообще не должно компилироваться.

Гм... Не вижу причин, почему, за исключением того, что должно быть так:
i = get<0>( t );

У этого синтаксиса есть очень существенное преимущество по сравнению с (i, _): возможность итерации по значениям t в compile-time цикле.

> А создание долно выглядеть так:

>
> (1, "ss")
>

> и чтобы никаких лишних фигней.

Ну, от make_tuple(1, "ss") отличие, имхо, не очень большое.
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[7]: Как думаете что мне больше всего нехватает в C# из Ne
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 13.03.06 14:27
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>
ПК>int    i = get<0>( t );
ПК>double d = get<1>( t );
ПК>A      a = get<2>( t2 );
ПК>


Эти захардкоденные номера при обращении к элементам tuple...
И не выразительно.
И подвержено ошибкам (при смене порядка следования элементов в tuple).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: little_alex  
Дата: 13.03.06 14:34
Оценка:
Здравствуйте, srggal, Вы писали:
S>ГМ, а отчего бы, раз Немерле решает кучу проблем — не переписать под него Янус ж)
S>
Еще один клон
Re[8]: Как думаете что мне больше всего нехватает в C# из Ne
От: Павел Кузнецов  
Дата: 13.03.06 14:45
Оценка: +3
eao197,

> ПК>
> ПК>int    i = get<0>( t );
> ПК>double d = get<1>( t );
> ПК>A      a = get<2>( t2 );
> ПК>

> Эти захардкоденные номера при обращении к элементам tuple...
> И не выразительно.
> И подвержено ошибкам (при смене порядка следования элементов в tuple).

Правда. Но, имхо, tuples и не должны использоваться "глобально", на мой взгляд там более адекватным будет явное определение соответствующей структуры.
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[8]: Как думаете что мне больше всего нехватает в C# из Ne
От: Cyberax Марс  
Дата: 13.03.06 14:50
Оценка: +2
eao197 wrote:
> Эти захардкоденные номера при обращении к элементам tuple...
> И не выразительно.
> И подвержено ошибкам (при смене порядка следования элементов в tuple).
Для незахардкоденых есть структуры
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
От: Павел Кузнецов  
Дата: 13.03.06 14:52
Оценка:
VladD2,

> Кстати, надо еще учитывать то, что кортеж в Нэмерле можно передавать в функцию вместо ее параметров. Так вызовы:

>
> F(1, "text", 1.2);
>

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

> аналогичны.

Это приятная возможность. Впрочем, никто не мешает сделать поддержку следующего:
auto tuple1 = make_tuple(1, "text", 1.2);
call(&F, tuple1);


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

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

Если бы я разрабатывал язык сегодня, скорее всего, так бы и делал. Кста, подобная же концепция обобщается и на параметризацию типов в духе шаблонов C++: там можно считать, что тип параметризуется списком типов.
Posted via RSDN NNTP Server 2.0
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[8]: Как думаете что мне больше всего нехватает в C# из Ne
От: Kluev  
Дата: 13.03.06 14:54
Оценка: 1 (1)
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Павел Кузнецов, Вы писали:


ПК>>
ПК>>int    i = get<0>( t );
ПК>>double d = get<1>( t );
ПК>>A      a = get<2>( t2 );
ПК>>


А нафига такие танцы с бубном? tuple удобен когда из функции надо вернуть несколько значений одновременно, юзать их для чего-то другого я смысла не нашел. Когда tuple возвращается из функции сразу юзаем tie для распаковывки его по переменным и все ок.

// Классика жанра:
// двоичный поиск в сортированном массиве
// возвращаем пару <найдено,индекс>
template <class Array, class T> pair<bool, int>
    bin_search(const Array &array, const T &key);

void test()
{
   bool  ok;
   int   pos;
   
// кортеж из функции сразу распаковываем, юзая функцию tie
// tie(...) { return Tie<>(...); } где Tie - хелпер-класс распаковки кортежей
   tie(ok, pos) = bin_search(some_array, some_key);
   if (ok) // понеслась
      work_with(some_array[pos]);
}
Re[7]: Как думаете что мне больше всего нехватает в C# из Ne
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.03.06 14:56
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> Сравни с C# 3

>>
>> var t = new (IntValue = 1, DoubleValue = 12.75, AValue = new A());
>> var t2 = new (2, 17.75, new A("A"));
>>

ПК>Это к tuples напрямую не относится, для этого нужно что-нибудь типа auto из следующего C++:

Относится.

ПК>
ПК>auto t  = make_tuple(1, 12.75, A());
ПК>auto t2 = make_tuple(2, 17.75, A("A"));
ПК>


После этого можно будет написать t.IntProperty? Правильный ответ: нельзя. Проблема именно в этом.

>>
>> int i = t.IntValue;
>> double d = t.DoubleValue;
>> A a = t2.AValue;
>> t2 = t1;
>>

ПК>Не вполне уловил, почему можно писать t2.AValue: при инициализации t2 имена не указаны...

Извини, наврал мальца. Правильно так:
var t = new {IntValue = 1, DoubleValue = 12.75, AValue = new A()};
int IntValue = 2; double DoubleValue = 12.75; A AValue = new A("A");
var t2 = new {IntValue, DoubleValue, AValue};
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[2]: Как думаете что мне больше всего нехватает в C# из Ne
От: srggal Украина  
Дата: 13.03.06 15:02
Оценка: +1 -2 :))
Здравствуйте, Павел Кузнецов, Вы писали:

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


Мои 5копеек:
В С++ уже есть std::pair, так что Владу если бы он писал на Янус на С++ не понадобилось бы изобретать велосипед, кроме того, Янус мог бы называться много приятней Янус++, но это на любителя.

Есть и функция std::map::insert() которая этот тупл использует.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.03.06 15:06
Оценка: +2
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Правда. Но, имхо, tuples и не должны использоваться "глобально", на мой взгляд там более адекватным будет явное определение соответствующей структуры.


Возможно. Но я тут в маленьком проекте применил как раз локально кортеж с 3 параметрами. И даже локально выглядело это преотвратно. Настолько, что я выкинул и добавил внутренний класс.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.03.06 15:06
Оценка:
Здравствуйте, Kluev, Вы писали:

K>А нафига такие танцы с бубном? tuple удобен когда из функции надо вернуть несколько значений одновременно, юзать их для чего-то другого я смысла не нашел.


Плохо искал. Типичный пример — некий временный контейнер с результатами каких либо расчетов.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.03.06 15:13
Оценка:
Здравствуйте, srggal, Вы писали:

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


S> Есть и функция std::map::insert() которая этот тупл использует.


Может тогда расскажешь чем он лучше KeyValuePair<K, V>?
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[4]: Как думаете что мне больше всего нехватает в C# из Ne
От: srggal Украина  
Дата: 13.03.06 15:21
Оценка: :))
Здравствуйте, AndrewVK, Вы писали:

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


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


S>> Есть и функция std::map::insert() которая этот тупл использует.


AVK>Может тогда расскажешь чем он лучше KeyValuePair<K, V>?


Тем, что:
a) Он наш, родной, С++ный;
б) Тем что он compile-time
в) Тем что он появился раньше
в) тем что Владу он не понравился ( Влад грил, что он использовал Tuple )

ЗЫ За юмор ниже пояса — не бить
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Как думаете что мне больше всего нехватает в C# из Ne
От: WolfHound  
Дата: 13.03.06 15:39
Оценка: +1 -1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>У этого синтаксиса есть очень существенное преимущество по сравнению с (i, _): возможность итерации по значениям t в compile-time цикле.

Влад сейчас тебе раскажет про макросы Nemerle и будет прав.
С++ со всеми своими щаблонами мягко говоря нурвоно курит в углу.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.