Re: Что нужно добавить в C#?
От: ionoy Эстония www.ammyui.com
Дата: 19.02.13 15:19
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

1. АТД и ПМ
2. Довести поддержку локальных функций до уровня Немерле
3. Туплы, встроенные в язык
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re: Что нужно добавить в C#?
От: agat50  
Дата: 19.02.13 15:50
Оценка:
Мнение ламера. Как мейнстримовый язык шарп почти идеален, Roslyn видимо позволит фишек по части синтаксиса добавить. А вот по части кроссплатформенности\оперсорса джавe проигрывает конечно. На много серверов винду не поставишь увы, и под себя не перепишешь то, что не особенно нравится\баг пофиксить быстро. И имхо, для этого нужно более активное участие самой Microsoft. За код спасибо, но WPF, например, могли сделать не на directx, а на том же opengl, и всё стало бы чуть проще по части GUI. Ну и вообще какой-то бред, когда в Mono приходится переписывать то, что уже написано в MS.
Re[5]: Что нужно добавить в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.13 15:59
Оценка:
Здравствуйте, kaa.python, Вы писали:

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

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

Гы-гы (2005-й год). Думаю, что и до этого где-то было.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Что нужно добавить в C#?
От: Aлeкceй  
Дата: 19.02.13 16:00
Оценка:
Здравствуйте, agat50, Вы писали:

A>Мнение ламера. Как мейнстримовый язык шарп почти идеален, Roslyn видимо позволит фишек по части синтаксиса добавить. А вот по части кроссплатформенности\оперсорса джавe проигрывает конечно. На много серверов винду не поставишь увы, и под себя не перепишешь то, что не особенно нравится\баг пофиксить быстро. И имхо, для этого нужно более активное участие самой Microsoft. За код спасибо, но WPF, например, могли сделать не на directx, а на том же opengl, и всё стало бы чуть проще по части GUI. Ну и вообще какой-то бред, когда в Mono приходится переписывать то, что уже написано в MS.


А что мешает моно на сервер поставить?

А по теме: ПМ, АТД, кортежи, встроенные в язык и индексаторы в foreach.
Re[3]: Что нужно добавить в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.13 16:10
Оценка:
Здравствуйте, k0st1x, Вы писали:

K>дико извиняюсь, что такое "ПМ" и что такое "АТД"?


Агебраические типы данных (ака Варианты или ограниченные объеденения) и сопоставление по ним.

http://nemerle.org/wiki/Grok_Variants_and_matching
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Что нужно добавить в C#?
От: Аноним  
Дата: 19.02.13 16:13
Оценка: -2
Сделайте union наконец (хотя бы для ссылочных типов)
Я думаю, что это могло бы быть С# 1.0, но до сих пор почему-то нет...
Re[2]: Что нужно добавить в C#?
От: Aлeкceй  
Дата: 19.02.13 16:14
Оценка: +3
Здравствуйте, Аноним, Вы писали:

А>Сделайте union наконец (хотя бы для ссылочных типов)

А>Я думаю, что это могло бы быть С# 1.0, но до сих пор почему-то нет...

Зачем?
Re[4]: Что нужно добавить в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.13 16:19
Оценка:
Здравствуйте, k0st1x, Вы писали:

K>вообще, идею увидел в проекте Kotlin.

K>jetbrains как-то живет с такой фичей

Там язык с нуля проектировался и другого поведения нет. Кроме того там оно не для всех случаев работает, вроде как. Потому как для изменяемых переменных поведение будет кривым.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Что нужно добавить в C#?
От: agat50  
Дата: 19.02.13 17:11
Оценка:
Здравствуйте, Aлeкceй, Вы писали:

A>А что мешает моно на сервер поставить?


Мешает то, что банальнейшая прога на winforms .net4.0 c mysql коннектором (который специально под mono) на убунте с 2.10.8.1 вылетает при запуске с замечательной ошибкой " Could not load file or assembly 'MySql.Data, Version=6.5.5.0, ...", которая валяется в той же папке. И какая тут "Yes, Mono is binary compatible with Windows."? Не тянет писать под Mono с его приколами, а не под .net как единую платформу аля java. В принципе всё решаемо, опять-таки java либы через ikvm можно на крайний случай для кроссплатформенности использовать. MS мог бы выпустить CLR под линукс, мб и с покоцанным функционалом типа wpf, хоть серваки гонять, но чтобы работало всё так же как на винде.
Re[2]: Что нужно добавить в C#?
От: Ziaw Россия  
Дата: 19.02.13 17:12
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Сделайте union наконец (хотя бы для ссылочных типов)

А>Я думаю, что это могло бы быть С# 1.0, но до сих пор почему-то нет...

FieldOffsetAttribute доступен с первого фреймворка.
Re: Что нужно добавить в C#?
От: matumba  
Дата: 19.02.13 17:50
Оценка: 3 (1) +1 -4
Здравствуйте, AndrewVK, Вы писали:

AVK>Сейчас сложилась такая ситуация, что для следующего релиза C# нет big thing


Их не было и в 5 релизе — ну не async же — революция программазма!

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


Забавно — т.е. к народу обращаются только когда ИМ нужно? Я думал, MS просто завален предложениями на десятилетие вперёд! И предложения совсем не обязательно должны быть big thing — даже элементарные вещи могут делать жизнь прогера намного легче. Ладно, раз уж дали высказаться, нате вам:

  1. Авто-инициализация авто-проперти:
    int a {get;set;} = 7;
    Это мелочи, но без них ШАРП БЕСИТ!
  2. Автопроперть тоже сократить до: prop int a; // паблик проперть для r/w; куча приложений идёт именно с таким дефолтом, почему б его не сократить? Заодно ускорится компиляция.
  3. Мультиприсвоение: var (a, b) = GetCoords(); // в a и b попадают отдельные числа. Т.е. типа кортежа, но без кортежа. Перл это умеет на раз-два. Сишарп ждём уже 10 лет....
  4. Ещё один вид мультистрочных каментов (а-ля D): /+ это отладочный коммент /* скрывающий рабочий коммент */ и нужный только временно +/
  5. Раз уж строки являются "немного встроенным" и широко используемым типом, нельзя ли упростить дебилизм типа if (!string.IsNullOrWhiteSpace(бла-бла...)) на что-то типа if (^string_var) — это сократило бы целую кучу кода.
  6. Вывод типов для филдов: var SomeField = 6; // знаю, есть проблемы, но они трясут в 0.000001% случаев — так не лучше ли сделать жизнь большинства легче?!
  7. Если тип переменной уже известен, пересоздавать её простым способом:
    File f; ...где-то позже... f = new();
    — бенефит очевиден при использовании всяких трёхэтажных генериков.
  8. .ToString() бесит. Можно как в Руби: obj.ToS ? (заметьте — без скобок)
  9. Синонимы функций. Console.WriteLine задолбал — хочу типа так:
    using Out = Console.WriteLine; Out(bzbz);

  10. Зачем в switch(SomeEnumVar) пишут в case SomeDamnBigEnumName.EnumValue: ? нельзя ли просто switch(SomeEnumVar) case EnumValue: — тип-то везде один и тот же!
  11. Приведение типов неуклюжее. Вместо
    double z = (double)IntVar;
    можно было б писать
    double z := IntVar;
    , т.е. := — это "присвоить с приведением типа к lvalue". Словесный понос надо искоренять — пусть паскалисты его тыркают.

Фичи из голосовалки, к которым +100:

Хочется, чтобы офигевшие от своей крутости шарподелы спустились на землю и не выпежонивались "суперфичами", а слушали тех, кто РЕАЛЬНО использует шарп — это МЫ ежедневно колдыбасимся с их компилером и это нам виднее, что есть "мелочи". А если ради мелочей надо переписывать компилер, то.... в топку такие компилеры.
Re[2]: Что нужно добавить в C#?
От: Gollum Россия  
Дата: 19.02.13 17:51
Оценка:
Здравствуйте, IT, Вы писали:

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

IT>- приделать к query comprehensions to list, to array, first, single, top, skip и т.п.

+1

IT>- nameof/infoof и т.п.

IT>- ПМ и АТД.

Ну у вас и мелочи
Eugene Agafonov on the .NET

Re[2]: Что нужно добавить в C#?
От: Jack128  
Дата: 19.02.13 18:44
Оценка: +1
Здравствуйте, matumba, Вы писали:

M>*Раз уж строки являются "немного встроенным" и широко используемым типом, нельзя ли упростить дебилизм типа if (!string.IsNullOrWhiteSpace(бла-бла...)) на что-то типа if (^string_var) — это сократило бы целую кучу кода.

ну сделай экстеншн метод if (string_var.A) и кол-ву символов, и по читабельности примерно одинаково.

M>*Приведение типов неуклюжее. Вместо
double z = (double)IntVar;
можно было б писать
double z := IntVar;
, т.е. := — это "присвоить с приведением типа к lvalue". Словесный понос надо искоренять — пусть паскалисты его тыркают.

чем те var z = (double)IntVar не устраивает?
Re: Что нужно добавить в C#?
От: matumba  
Дата: 19.02.13 18:49
Оценка: -1 :)
Пробежался по треду и собрал ещё фич, которые поддерживаю (почему-то в голосовалке — мусор вместо дельных пунктов):

  1. Упрощённая работа с атрибутами. Какой смысл рассуждать об их пользе, если работа с ними осущ. через анус? Хочется изящной простоты, типа: foreach(PropInfo pi in WindowType.class.GetProperties(Attr1, attr2, ..)); Или PropInfo.HasAttribute(AttrClass); Вообще, у C# довольно помоечный синтаксис работы с классами: вместо элегантных конструкций с именами типов приходится влезать чуть ли не в ассемблер: Класс.ДайСвойТип().ШаманскиеФункции.... отстой полнейший. Нужен синтаксис сразу на уровне "Класс", типа "Класс.ДайПропертиСАтрибутом(Атрибут)". Это мелочи, но без них код загромождается фуфлом — хорошо бы девелоперам сишарпа заботиться не только "предоставить доступ к фиче", но и о элегантности кода с этими фичами.
  2. Оператор .?
  3. Улучшить оператор AS: нечасто, но изрядно упрощает бойлерплэйт a = b as SomeType; if (a != null) ....; Вариант: when(b = a as SomeType) { юзаем b }
  4. Упрощ. иниц. объекта помимо new: var z = GetObject() <= { filed = 4, field2 = 5 }
  5. Duck typing ака MapAs: приводить объект к интерфейсу, если он совместим по методам. Уж лучше в рантайме всё **нётся, зато в коде можно очень элегантно обруливать всякое гетерогенное фуфло из разных иерархий.
Re[3]: Что нужно добавить в C#?
От: matumba  
Дата: 19.02.13 19:01
Оценка:
Здравствуйте, Jack128, Вы писали:

J>чем те var z = (double)IntVar не устраивает?


Тем, что это абсолютно левый пример. Я хочу избавиться от _приведения_типа_, а не замены double на var.
Re[4]: Что нужно добавить в C#?
От: Jack128  
Дата: 19.02.13 19:08
Оценка: +2
Здравствуйте, matumba, Вы писали:

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


J>>чем те var z = (double)IntVar не устраивает?


M>Я хочу избавиться от _приведения_типа_, а не замены double на var.

нет, ты предлагаешь заменить один синтаксис приведения другим.
Re[3]: Что нужно добавить в C#?
От: IT Россия linq2db.com
Дата: 19.02.13 19:17
Оценка:
Здравствуйте, Gollum, Вы писали:

IT>>- ПМ и АТД.

G>Ну у вас и мелочи

На самом деле если разобраться, то и то и другое — это сахар. АТД — это плоская иерархия, по типу Linq.Expressions только с информацией о соответствии полей/свойст класса с их позиционированием в паттернах для ПМ. Немерле, кстати, умеет задавать такую информацию в том числе и для обычных классов. ПМ — это всего лишь навороченный switch/if с максимально компактным синтаксисом, включающим распаковку структур данных, и умным алгоритмом оптимизации перебора условий.

Единственное чем ПМ может не вписаться в C# — так это то, что в том же Немерле всё есть выражение и все языковые конструкции могут возвращать значение.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Что нужно добавить в C#?
От: k0st1x Марс  
Дата: 19.02.13 20:21
Оценка:
Здравствуйте, Jack128, Вы писали:

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


K>>было бы здорово иметь возможность писать


K>>
K>>interface IFoobar { void DoWork(); }
K>>...
K>>object value;
K>>if(value is IFoobar) {
K>>  value.DoWork(); // не надо делать "cast" или "as"
K>>}
K>>


J>Уже существующим синтаксисом не обойтись, нужно новый придумывать, иначе такая фича поломает обратную совместимость.



я тут подумал и не смог придумать, какой сценарий поломает обратную совместимость?
Re[4]: Что нужно добавить в C#?
От: Jack128  
Дата: 19.02.13 20:44
Оценка:
Здравствуйте, k0st1x, Вы писали:

J>>Уже существующим синтаксисом не обойтись, нужно новый придумывать, иначе такая фича поломает обратную совместимость.



K>я тут подумал и не смог придумать, какой сценарий поломает обратную совместимость?


а тебе придумывать не нужно, я уже придумал. И даже написал этот пример, но ты при цитировании почему то удалил его.
Re: Что нужно добавить в C#?
От: aloch Россия  
Дата: 19.02.13 21:45
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

Оператор with

with (node)
{
   .name = "QQ";
   .index = 10;
   .DoSome();
}



(именно с точкой перед именем метода или свойства, как в VB)


Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.