Что нужно добавить в C#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.02.13 23:56
Оценка: 3 (1)
Небольшое вступление.
Сейчас сложилась такая ситуация, что для следующего релиза C# нет big thing, т.е. основной фичи, вокруг которой строится весь релиз (типа linq в 3 версии, динамиков в 4 и асинка в 5). Благодаря этому появилась возможность реализовать кучу мелких вещей, которые, с одной стороны, не требуют революций в языке их их можно реализовать сравнительно разумным объемом ресурсов, а с другой способны сильно облегчить жизнь.
Поэтому у меня есть желание сформировать некий документ со списком фич и отдать его дизайнерам шарпа. Гарантии, что хоть что то из него будет реализовано нет никакой, но шансы этого высоки как никогда
Соответственно, от вас хотелось бы получить те фичи, которых не хватает лично вам. Желательно раскрыть мысль поподробнее. Идеально было бы привести гипотетический пример исходного кода с описанием его семантики, и потом примерный код на текущем шарпе, в который первый пример должен раскрываться.
Проголосовать за конкретные фичи можно здесь
Автор: AndrewVK
Дата: 19.02.13
Вопрос: Какие возможности, не требующие революционных переделок, вам бы хотелось видеть в C#?
.
... << RSDN@Home 1.2.0 alpha 5 rev. 23 on Windows 8 6.2.9200.0>>
AVK Blog
Re: Что нужно добавить в C#?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 19.02.13 00:00
Оценка: 4 (2) +2 -1 :)
Все очень и очень просто: Java-way — работа на *NIX-ах из коробки
Re[2]: Что нужно добавить в C#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.02.13 00:02
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Все очень и очень просто: Java-way — работа на *NIX-ах из коробки


При чем тут компилятор шарпа? Это вопрос к CLR.
... << RSDN@Home 1.2.0 alpha 5 rev. 23 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Что нужно добавить в C#?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 19.02.13 00:05
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>При чем тут компилятор шарпа? Это вопрос к CLR.


Ну, это как сказать. С одной стороны да. С другой стороны, CLR — это в первую очередь C#, так же как JVM это в первую очередь Java. Они неразрывно связанны и обсуждение одного в отрыве от второго бессмысленно.
Re[4]: Что нужно добавить в C#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.02.13 00:09
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Ну, это как сказать.


Как ни говори — в контексте данного вопроса это точно обсуждать смысла нет.

KP>С другой стороны, CLR — это в первую очередь C#


Я бы так не сказал. В любом случае — изменения в CLR это уже точно революция, и это другая команда. И вообще это больше политика, нежели технический вопрос.
... << RSDN@Home 1.2.0 alpha 5 rev. 23 on Windows 8 6.2.9200.0>>
AVK Blog
Re: Что нужно добавить в C#?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 19.02.13 00:31
Оценка: 62 (9) +10
Здравствуйте, AndrewVK, Вы писали:

Мне в Шарпе не хватает одной фичи из Немерле: foreach c индексатором, типа:

foreach (var x from collection with i)

Здесь i номер текущей итерации.
Ce n'est que pour vous dire ce que je vous dis.
Re: Что нужно добавить в C#?
От: Gollum Россия  
Дата: 19.02.13 00:37
Оценка: 2 (2) +1
Здравствуйте, AndrewVK, Вы писали:

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


Если брать мелочи, мне было бы интересно видеть более удобную работу со строками а-ля питон.

Вот например, (псевдо)код на питоне (копипаста из документации)

word = 'HelpA'

>>> word[2:4]
'lp'

>>> word[:2]
'He'

>>> word[2:]
'lpA'

>>> word[-1]     # The last character
'A'
>>> word[-2]     # The last-but-one character
'p'
>>> word[-2:]    # The last two characters
'pA'
>>> word[:-2]    # All but the last two characters
'Hel'


Потом можно прицениться к спискам
Eugene Agafonov on the .NET

Re: Что нужно добавить в C#?
От: Цыба Украина  
Дата: 19.02.13 01:24
Оценка: 6 (1) +1 :)
Здравствуйте, AndrewVK, Вы писали:

AVK>Небольшое вступление.

AVK>Сейчас сложилась такая ситуация, что для следующего релиза C# нет big thing, т.е. основной фичи, вокруг которой строится весь релиз (типа linq в 3 версии, динамиков в 4 и асинка в 5). Благодаря этому появилась возможность реализовать кучу мелких вещей, которые, с одной стороны, не требуют революций в языке их их можно реализовать сравнительно разумным объемом ресурсов, а с другой способны сильно облегчить жизнь.
AVK>Поэтому у меня есть желание сформировать некий документ со списком фич и отдать его дизайнерам шарпа. Гарантии, что хоть что то из него будет реализовано нет никакой, но шансы этого высоки как никогда
AVK>Соответственно, от вас хотелось бы получить те фичи, которых не хватает лично вам. Желательно раскрыть мысль поподробнее. Идеально было бы привести гипотетический пример исходного кода с описанием его семантики, и потом примерный код на текущем шарпе, в который первый пример должен раскрываться.
AVK>Проголосовать за конкретные фичи можно здесь
Автор: AndrewVK
Дата: 19.02.13
Вопрос: Какие возможности, не требующие революционных переделок, вам бы хотелось видеть в C#?
.


Вряд ли скажу big thing, но мелкие доработки были бы очень даже неплохи. Сам начинал с C#, потом судьба забросила на Java, и могу сказать, что оба языка прекрасны, и всё же C#-у стоило бы позаимствовать некоторые Java-фишки.


А если big thing, то, наверное, макросы.
Re[2]: Что нужно добавить в C#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.02.13 01:32
Оценка:
Здравствуйте, Цыба, Вы писали:

Ц>литералы для регулярок


По поводу этого Мэдс сегодня сказал примерно следующее: You mean literal of the day?
... << RSDN@Home 1.2.0 alpha 5 rev. 23 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Что нужно добавить в C#?
От: Цыба Украина  
Дата: 19.02.13 01:39
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>По поводу этого Мэдс сегодня сказал примерно следующее: You mean literal of the day?


Есть "покруче".
Re[4]: Что нужно добавить в C#?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 19.02.13 02:16
Оценка: :)
Здравствуйте, Цыба, Вы писали:

Ц>Есть "покруче".


ААА! Вот откуда эту идею в Rust притащили
Re[5]: Что нужно добавить в C#?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 19.02.13 02:22
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>ААА! Вот откуда эту идею в Rust притащили


В Немерле было раньше.
Ce n'est que pour vous dire ce que je vous dis.
Re: Что нужно добавить в C#?
От: Sinix  
Дата: 19.02.13 05:48
Оценка: 112 (3)
Здравствуйте, AndrewVK, Вы писали:

AVK>Небольшое вступление.

AVK>Сейчас сложилась такая ситуация, что для следующего релиза C# нет big thing, т.е. основной фичи, вокруг которой строится весь релиз (типа linq в 3 версии, динамиков в 4 и асинка в 5). Благодаря этому появилась возможность реализовать кучу мелких вещей, которые, с одной стороны, не требуют революций в языке их их можно реализовать сравнительно разумным объемом ресурсов, а с другой способны сильно облегчить жизнь.
AVK>Поэтому у меня есть желание сформировать некий документ со списком фич и отдать его дизайнерам шарпа. Гарантии, что хоть что то из него будет реализовано нет никакой, но шансы этого высоки как никогда

Последнее, что я слышал — все по уши застряли в Рослине, сильно сомневаюсь, что у них хватит сил на что-то ещё. Из мелочей в голову приходит только вот это:

1. По аналогии с [CallerMemberName] и прочими — [ArgExpression]: текст выражения в заданном атрибуте:
public static void AssertFileExists(string filePath, [ArgExpression("filePath")] argName = "")
{
  if (!File.Exists(filePath))
    throw new ArgumentException(argName, "...");
}

// ...
  AssertFileExists(someClass.SomePath); // throws ArgumentException, argument name = "someClass.SomePath"


2. Явный duck typing, что то вида
  class A { SomeMethod(); } // Чужая сборка.
  interface IB { SomeMethod(); }

// ...
  var a = new A()
  var b = a mapas IB; // синтаксис - первый пришедший в голову. Всё разруливается в compile time - генерится обёртка, строчка превращается в b = new <>c__Wrapper_A_IB(a).

Для скриптов (раз уж у нас шарп в ближайшем будущем можно будет хостить) можно дополнить анонимные типы до того, что есть в яве и добавить возможность передавать анонимные типы шарпа за границы метода (пускай и только для internal/protected-методов).

Но, опять-таки, если рослин допилят, такие мелочи можно будет сделать и самому, благо возможностей выше крыши. Code rewrite, AOP, рефакторинг, code analysis, script hosting — имхо, вполне тянет на big thing.

Ещё, судя по полунамёкам Липперта (сейчас не найду, но было ещё в паре статей), compiler team периодически думает над добавлением явного маппинга "ключевое слово — вызов подходящего метода", как это сделано для linq/foreach/await. Выглядит интересно, но насколько оно будет полезно на практике —
Re: Let/where
От: Qbit86 Кипр
Дата: 19.02.13 05:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Благодаря этому появилась возможность реализовать кучу мелких вещей, которые, с одной стороны, не требуют революций в языке их их можно реализовать сравнительно разумным объемом ресурсов, а с другой способны сильно облегчить жизнь.

AVK>Поэтому у меня есть желание сформировать некий документ со списком фич и отдать его дизайнерам шарпа. Гарантии, что хоть что то из него будет реализовано нет никакой, но шансы этого высоки как никогда :)
AVK>Соответственно, от вас хотелось бы получить те фичи, которых не хватает лично вам. Желательно раскрыть мысль поподробнее. Идеально было бы привести гипотетический пример исходного кода с описанием его семантики, и потом примерный код на текущем шарпе, в который первый пример должен раскрываться.

Хочу какой-нибудь синтаксический сахар для let/where: http://bik-top.livejournal.com/50984.html
Глаза у меня добрые, но рубашка — смирительная!
Re: Что нужно добавить в C#?
От: IT Россия linq2db.com
Дата: 19.02.13 06:10
Оценка: 36 (3) +6 :)
Здравствуйте, AndrewVK, Вы писали:

AVK>Проголосовать за конкретные фичи можно здесь
Автор: AndrewVK
Дата: 19.02.13
Вопрос: Какие возможности, не требующие революционных переделок, вам бы хотелось видеть в C#?
.


— Вывод типов при вызове констркуторов.
— nameof/infoof и т.п.
— приделать к query comprehensions to list, to array, first, single, top, skip и т.п.
— ПМ и АТД.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Что нужно добавить в C#?
От: k0st1x Марс  
Дата: 19.02.13 06:29
Оценка:
Здравствуйте, IT, Вы писали:

IT>- Вывод типов при вызове констркуторов.

+100
Re: Что нужно добавить в C#?
От: Jack128  
Дата: 19.02.13 06:47
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

если из мелких фич, то
1) сплайс строк

var i = 10;
$"Int = $i";



2) чуть по продвинутей вывод дженерик аргументов


TResult Method<TArg, TResult>(TArg arg)  { return default(TResult); }
...
var res = Method<, string>(10); // TArg выведется.



var list = new List<>{10};




А если покупнее, то ПМ
Re: Что нужно добавить в C#?
От: k0st1x Марс  
Дата: 19.02.13 06:48
Оценка:
- Expression Substitution вместо string.Format
var x = 5;
Console.WriteLine("x = #{x}"));


— extension метод .ForEach для IEnumerable
— просто ради красоты — возможность писать код без ";" в конце каждой строчки : )

и, как уже указал "IT" в http://www.rsdn.ru/forum/dotnet/5074746.1
Автор: IT
Дата: 19.02.13

— Вывод типов при вызове констркуторов
Re[2]: Что нужно добавить в C#?
От: k0st1x Марс  
Дата: 19.02.13 06:52
Оценка:
Здравствуйте, IT, Вы писали:

IT>- ПМ и АТД.


дико извиняюсь, что такое "ПМ" и что такое "АТД"?
Re[2]: Что нужно добавить в C#?
От: Аноним  
Дата: 19.02.13 06:54
Оценка:
Здравствуйте, Цыба, Вы писали:

Ц>Небезысвестный Jon Skeet уже как семь лет назад говорил о таком. Компилятор справился бы с перечислениями, я думаю, без изменения CLR.


При всем моем уважении к Скиту, его идея супернавороченных enum'ов мне не нравится. Что чаще всего надо? Парсинг и прочие конвертеры привязать к enum'у, чтобы не болтались в левых классах типа Utils. То есть, если иметь возможность добавить статические методы, этого более чем достаточно. Объявлять enum каким-то class enum совсем не надо. Ну, или, если хочется иметь методы .To(), можно сделать как в мутаторах — в контексте нестатических методов enum'а считать value ключевым словом.

Все остальное решается через наследование. Наследуйся, там добавишь все, что надо. Примерно, как от класса с одним целочисленным полем. Соответственно, доступ к значению через то же самое base.value.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.