Re[7]: Что нужно добавить в C#?
От: agat50  
Дата: 04.03.13 12:17
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


A>>Момент в том, что dotnet и C# как пророк его возможно мог бы продаваться "лучше" винды.


AVK>На фоне бесплатной джавы?


Ну винда же продаётся на фоне бесплатной убунты. Мне, например, шарп нравится весьма как язык, почему бы и не платить. Естественно, если это будет удобно осуществимо.
Re[7]: Что нужно добавить в C#?
От: Евгений Акиньшин grapholite.com
Дата: 04.03.13 12:19
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


A>>Момент в том, что dotnet и C# как пророк его возможно мог бы продаваться "лучше" винды.


AVK>На фоне бесплатной джавы?


Ксамарин для Андроида продается на фоне бесплатной явы.
Не шалю, никого не трогаю, починяю примус Diagrams Designer for iPad and Windows 10
Re[7]: В C# уже и так многое добавили
От: GlebZ Россия  
Дата: 04.03.13 14:24
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

GZ>>Неверно. Для ngen требуются административные права.

AVK>Для инсталляторов обычно тоже.
Ваще-то нет. Всё прекрасно ставится в профайл, и прекрасно работает в терминалках.
Ладно, я вполне понимаю зачем они требуют для ngen — full trust. На здоровье, мне на это наплевать. Но зачем требовать административных прав для запуска ngen, когда он спокойно компилируется в профайл — мне непонятно.

GZ>> Это приводит к невозможности его использования в моих приложениях.

AVK>Современные фреймворки запускают ngen для часто используемых сборок самостоятельно, в том числе и для твоих продуктов.
Таких эффектов замечено не было. Где почитать?
Re: Что нужно добавить в C#?
От: Аноним  
Дата: 04.03.13 21:39
Оценка:
Здравствуйте, AndrewVK, Вы писали:

1. constraint на enum.
2. public int MyProp { get; set; } = 10 (задалбался для этого заводить конструктор)
3. (почти как 2). Дать возможность инициализировать поля как private MyContainer _containter = new MyContainer(this);
4. var f = x => x + 1; Хочется, чтобы был авто-вывод к Func и Action
Re[8]: В C# уже и так многое добавили
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.03.13 00:04
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Но зачем требовать административных прав для запуска ngen, когда он спокойно компилируется в профайл — мне непонятно.


Защита от вирусов.

AVK>>Современные фреймворки запускают ngen для часто используемых сборок самостоятельно, в том числе и для твоих продуктов.

GZ>Таких эффектов замечено не было. Где почитать?

http://blogs.msdn.com/b/dotnet/archive/2012/03/20/improving-launch-performance-for-your-desktop-applications.aspx
... << RSDN@Home 1.2.0 alpha 5 rev. 66 on Windows 8 6.2.9200.0>>
AVK Blog
Re: Что нужно добавить в C#?
От: ldarcy  
Дата: 05.03.13 06:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Partial attributes? Чтобы атрибуты на член класса можно было указывать в разных файлах.
Re[4]: Что нужно добавить в C#?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.03.13 18:00
Оценка:
Здравствуйте, k0st1x, Вы писали:

K>спасибо : ) не знал про этот странный нюанс.


Хотя о нём явно написано в спеке: 10.7.3 Automatically implemented properties
Re: Анонимные классы, модули, вычисляемые строки и пр.
От: iHateLogins  
Дата: 08.03.13 07:23
Оценка: 11 (1)
1) Анонимные классы как в джаве
2) Модули из CLR
3) свитчи по типам
4) кейс-инсенситив свитч (инвариант)
5) Вычисляемые строки как в повершелле ("@var") — пусть хотя бы и с возможностью использования только переменных и полей в области видимости.
6) catch нескольких типов сразу catch(IOException, FileNotFoundException){}
7) internals visible only to на уровне классов (для проектов, у которых одна большая ДЛЛ и не хочется "делиться" внутренностями класса со всеми)
8) Байндинг одного алиаса к нескольким неймспейсам.
Re: Что нужно добавить в C#?
От: Евгений Акиньшин grapholite.com
Дата: 08.03.13 13:03
Оценка:
Здравствуйте, AndrewVK, Вы писали:

1) Возврат множества значений из функции, что-нибудь типа:


public (string a, int b) Function()
{
  return new { a = "text", b  = 1 };
}


2) Более мощная система ограничений для дженериков, в частности ограничения на поддержку перегруженных операторов

3) Дефолтные реализации методов в интерфейсах (что-то типа трейтов)

4) Null safety — not nullable types.

Что-то типа


string! str = null; //compile time error



Хейлсберг говорил в интервью, что они этого не делают, потому что при использовании в существующих библиотеках это поломает совместимость. Но кто мешает не использовать эту фичу в старых апи?

5) Упрощенный синтаксис для лямбд без параметров или с одним параметром, по типу того, как сделано в Котлине. Чтобы там, где ожидается лямбда, можно было бы писать ее без лишних скобок

чтобы вместо

  list.Where(it => it < 5);


было

  list.Where(it < 5);


а если еще и позволить использовать операторный синтаксис для методов с одним параметром, то можно даже так:


list where it < 5



6) Ну и главная хотелка это конечно мета-программирование, хотя бы для простейших случаев:



[RaisesPropertyChanged]
public string Str {get; set; }


Но это, как я понимаю, выходит за рамки вопроса о небольших улучшениях.
Не шалю, никого не трогаю, починяю примус Diagrams Designer for iPad and Windows 10
Re[2]: Что нужно добавить в C#?
От: Цыба Украина  
Дата: 08.03.13 13:10
Оценка:
Здравствуйте, Евгений Акиньшин, Вы писали:

ЕА>5) Упрощенный синтаксис для лямбд без параметров или с одним параметром, по типу того, как сделано в Котлине. Чтобы там, где ожидается лямбда, можно было бы писать ее без лишних скобок


ЕА>чтобы вместо


ЕА>
ЕА>  list.Where(it => it < 5);
ЕА>


ЕА>было


ЕА>
ЕА>  list.Where(it < 5);
ЕА>


ЕА>[/c#]


По-моему, дикость. Что если метод, подобный Where, будет принимать boolean в одной из своих перегрузок?
Re[3]: Что нужно добавить в C#?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 08.03.13 13:23
Оценка:
Здравствуйте, Цыба, Вы писали:

Ц>По-моему, дикость. Что если метод, подобный Where, будет принимать boolean в одной из своих перегрузок?


В Немерле решается использованием подчёркивания вместо имени переменной. Причём, работает и для лямбд с несколькими параметрами:

[2, 3, 5].Aggregate(_ * _) // 30
Ce n'est que pour vous dire ce que je vous dis.
Re[3]: Что нужно добавить в C#?
От: iHateLogins  
Дата: 12.03.13 08:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

O>>Записывать guid без кавычек и прочих выкрутасов, как обычное число.

AVK>Еще один literal of the day с применением 1 штука на мегабайт кода?

Как насчёт 0x синтакса из T-SQL?
Re[4]: Что нужно добавить в C#?
От: Klikujiskaaan КНДР  
Дата: 12.03.13 09:41
Оценка: :)))
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, Цыба, Вы писали:


Ц>>По-моему, дикость. Что если метод, подобный Where, будет принимать boolean в одной из своих перегрузок?


DR>В Немерле решается использованием подчёркивания вместо имени переменной. Причём, работает и для лямбд с несколькими параметрами:


DR>
[2, 3, 5].Aggregate(_ * _) // 30


Жопа какая-то :D
Re[3]: В C# уже и так многое добавили
От: sgrape Россия  
Дата: 13.03.13 11:03
Оценка: 1 (1) +4 -1
Здравствуйте, AndrewVK, Вы писали:

X>>Я бы предложил им переписать компилятор, чтобы намного сильнее увеличить уровень оптимизации.

AVK>Основные оптимизации в дотнете производит не компилятор, а джит.

Похоже, что ничего за 10 лет не изменилось.
Те, кто делают компилятор думают, что оптимизировать будет джит.
А те, кто делают джит — оптимизацией не занимаются, чтобы не тормозил запуск приложений.
В результате все в пролете.

X>> Но на ближайшие лет десять могли бы написать универсальный оптимизатор именно байт-кода, который производил бы тот же байт код.

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

Очень жаль, если команда дотнета так считает.
Значит никаких высокоуровневых оптимизаций просто не будет.

Как джит поможет превратить вот это:

            list.ForEach((item) =>
                {
                    item.SetValue(1);
                });


например в это:

            for (int i = 0; i < list._array.Length; i++)
            {
                list._array[i]._value = 1;
            }


последовательно совершив инлайнинг лямбды внутрь ForEach, затем превратив ForEach в for, вытащив массив изнутри списка и выкинув проверки на границы массива в индексаторе?
А ведь это только одна из элементарных оптимизаций, которые хотелось бы видеть в дотнете.

Да просто чтобы развернуть цикл или сделать глобальный сквозной инлайнинг (чтобы схлопнуть многоуровневые вызовы мелких фукций) — разве надо знать архитектуру процессора?

Но очевидно, ничего этого не будет, пока оптимизацией делает вид что занимается джит.

И при чем тут императивные языки, если в дотнете сейчас тормозит вообще все?
Начиная от базовых вещей типа рефлекшена и сериализации, и заканчивая библиотеками вроде WPF.
Тут оптимизировать надо абсолютно все и на всех уровнях.

Оптимизатор уровня байт-кода, про который говорит Xentrax — как раз во многом помог бы.
Например, генерацией дополнительного кода (для рефлекшона/сериализации), выкидыванием лишних проверок (проанализировав, что они не нужны), трансформацией одних конструкций в другие, тотальным инлайнингом и т.п.

И в частности это решило бы вечную проблему, кто должен оптимизировать: джит или компилятор.

PS: а по теме — ничего от С# не надо, пока приходится для всех объектов писать самопальную (зато быструю и компактную) сериализацию да переписывать код в стиле С, когда скорость нужна.
Re[7]: Что нужно добавить в C#?
От: WolfHound  
Дата: 13.03.13 13:01
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Ты про то, что GC следит за всеми указателями и падает если испортить один из них? Есть такая проблема, да, нельзя смешать value и cсылку. Два значения смешать нет проблем, а две ссылки смешивать нет смысла (можно просто хранить один object).

Такая проблема есть в реализации .НЕТного ГЦ, а не ГЦ вообще.
Ибо ни что не мешает сделать ГЦ, который понимает, в каком состоянии находится объединение.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: В C# уже и так многое добавили
От: WolfHound  
Дата: 13.03.13 14:45
Оценка:
Здравствуйте, sgrape, Вы писали:

S>PS: а по теме — ничего от С# не надо, пока приходится для всех объектов писать самопальную (зато быструю и компактную) сериализацию да переписывать код в стиле С, когда скорость нужна.

Попробуй немерле. То о чем ты говоришь, на макросах автоматизируется на раз.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Что нужно добавить в C#?
От: GlebZ Россия  
Дата: 13.03.13 15:29
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ибо ни что не мешает сделать ГЦ, который понимает, в каком состоянии находится объединение.

Это не вариативный тип. union отличается тем, что это кусок памяти с данными который программист может интерпретировать как ему заблагорасудится. GC — себе такого позволить не может. Определить, что это long или указатель, или вообще и то и другое без дополнительных знаний — невозможно.
Re[9]: Что нужно добавить в C#?
От: WolfHound  
Дата: 13.03.13 15:43
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Это не вариативный тип. union отличается тем, что это кусок памяти с данными который программист может интерпретировать как ему заблагорасудится. GC — себе такого позволить не может. Определить, что это long или указатель, или вообще и то и другое без дополнительных знаний — невозможно.

Бывают такие юнионы, которые содержат в себе флаг, указывающий в каком они состоянии.
Я такими каждый день пользуюсь.
И для них нет никаких проблем узнать, что там лежит.

Причем для этого флага не всегда даже нужно заводить отдельную память.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Что нужно добавить в C#?
От: Ziaw Россия  
Дата: 13.03.13 15:44
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Такая проблема есть в реализации .НЕТного ГЦ, а не ГЦ вообще.

WH>Ибо ни что не мешает сделать ГЦ, который понимает, в каком состоянии находится объединение.

Для того, чтобы это понимать, объединение должно это состояние хранить. А это уже не очень честное объединение.
Re[9]: Что нужно добавить в C#?
От: WolfHound  
Дата: 13.03.13 16:15
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Для того, чтобы это понимать, объединение должно это состояние хранить. А это уже не очень честное объединение.

Для того чтобы разумно работать с объединением тебе в любом случае нужно состояние. В том или ином виде.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.