Здравствуйте, Павел Кузнецов, Вы писали:
ПК>А здесь что не так?
Сравни с 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;
Здравствуйте, Oyster, Вы писали:
I>>А без этого нельзя использовать Nemerle? Прямо сейчас.
O>Можно, но на коммерческих проектах стрёмно.
Речь шла о вполне конкретной задаче. Почему нельзя было использовать Nemerle я тоже не понял. Заодно и продемонстрировал бы интероперабельность между языками в рамках Net.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Речь шла о вполне конкретной задаче. Почему нельзя было использовать Nemerle я тоже не понял. Заодно и продемонстрировал бы интероперабельность между языками в рамках Net.
А может, Влад и использует уже
Re: Как думаете что мне больше всего нехватает в C# из Nemer
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
Ну, это уже на любителя... В любых мало-мальски нетривиальных случаях мне больше нравится 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
> ПК>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
eao197 wrote: > Эти захардкоденные номера при обращении к элементам tuple... > И не выразительно. > И подвержено ошибкам (при смене порядка следования элементов в tuple).
Для незахардкоденых есть структуры
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Как думаете что мне больше всего нехватает в C# из Ne
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
Здравствуйте, 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
После этого можно будет написать 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};
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>А Саттер-то тут причем? Да и в C++ tuples вполне реализуются на уровне библиотек...
Мои 5копеек:
В С++ уже есть std::pair, так что Владу если бы он писал на Янус на С++ не понадобилось бы изобретать велосипед, кроме того, Янус мог бы называться много приятней Янус++, но это на любителя.
Есть и функция std::map::insert() которая этот тупл использует.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Правда. Но, имхо, tuples и не должны использоваться "глобально", на мой взгляд там более адекватным будет явное определение соответствующей структуры.
Возможно. Но я тут в маленьком проекте применил как раз локально кортеж с 3 параметрами. И даже локально выглядело это преотвратно. Настолько, что я выкинул и добавил внутренний класс.
Здравствуйте, Kluev, Вы писали:
K>А нафига такие танцы с бубном? tuple удобен когда из функции надо вернуть несколько значений одновременно, юзать их для чего-то другого я смысла не нашел.
Плохо искал. Типичный пример — некий временный контейнер с результатами каких либо расчетов.
Здравствуйте, srggal, Вы писали:
S> В С++ уже есть std::pair, так что Владу если бы он писал на Янус на С++ не понадобилось бы изобретать велосипед, кроме того, Янус мог бы называться много приятней Янус++, но это на любителя.
S> Есть и функция std::map::insert() которая этот тупл использует.
Может тогда расскажешь чем он лучше KeyValuePair<K, V>?
Здравствуйте, 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
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>У этого синтаксиса есть очень существенное преимущество по сравнению с (i, _): возможность итерации по значениям t в compile-time цикле.
Влад сейчас тебе раскажет про макросы Nemerle и будет прав.
С++ со всеми своими щаблонами мягко говоря нурвоно курит в углу.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн