Мнение ламера. Как мейнстримовый язык шарп почти идеален, Roslyn видимо позволит фишек по части синтаксиса добавить. А вот по части кроссплатформенности\оперсорса джавe проигрывает конечно. На много серверов винду не поставишь увы, и под себя не перепишешь то, что не особенно нравится\баг пофиксить быстро. И имхо, для этого нужно более активное участие самой Microsoft. За код спасибо, но WPF, например, могли сделать не на directx, а на том же opengl, и всё стало бы чуть проще по части GUI. Ну и вообще какой-то бред, когда в Mono приходится переписывать то, что уже написано в MS.
Здравствуйте, agat50, Вы писали:
A>Мнение ламера. Как мейнстримовый язык шарп почти идеален, Roslyn видимо позволит фишек по части синтаксиса добавить. А вот по части кроссплатформенности\оперсорса джавe проигрывает конечно. На много серверов винду не поставишь увы, и под себя не перепишешь то, что не особенно нравится\баг пофиксить быстро. И имхо, для этого нужно более активное участие самой Microsoft. За код спасибо, но WPF, например, могли сделать не на directx, а на том же opengl, и всё стало бы чуть проще по части GUI. Ну и вообще какой-то бред, когда в Mono приходится переписывать то, что уже написано в MS.
А что мешает моно на сервер поставить?
А по теме: ПМ, АТД, кортежи, встроенные в язык и индексаторы в foreach.
Здравствуйте, Аноним, Вы писали:
А>Сделайте union наконец (хотя бы для ссылочных типов) А>Я думаю, что это могло бы быть С# 1.0, но до сих пор почему-то нет...
Здравствуйте, k0st1x, Вы писали:
K>вообще, идею увидел в проекте Kotlin. K>jetbrains как-то живет с такой фичей
Там язык с нуля проектировался и другого поведения нет. Кроме того там оно не для всех случаев работает, вроде как. Потому как для изменяемых переменных поведение будет кривым.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, 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, хоть серваки гонять, но чтобы работало всё так же как на винде.
Здравствуйте, Аноним, Вы писали:
А>Сделайте union наконец (хотя бы для ссылочных типов) А>Я думаю, что это могло бы быть С# 1.0, но до сих пор почему-то нет...
FieldOffsetAttribute доступен с первого фреймворка.
Здравствуйте, AndrewVK, Вы писали:
AVK>Сейчас сложилась такая ситуация, что для следующего релиза C# нет big thing
Их не было и в 5 релизе — ну не async же — революция программазма!
AVK>Соответственно, от вас хотелось бы получить те фичи, которых не хватает лично вам.
Забавно — т.е. к народу обращаются только когда ИМ нужно? Я думал, MS просто завален предложениями на десятилетие вперёд! И предложения совсем не обязательно должны быть big thing — даже элементарные вещи могут делать жизнь прогера намного легче. Ладно, раз уж дали высказаться, нате вам:
Авто-инициализация авто-проперти:
int a {get;set;} = 7;
Это мелочи, но без них ШАРП БЕСИТ!
Автопроперть тоже сократить до: prop int a; // паблик проперть для r/w; куча приложений идёт именно с таким дефолтом, почему б его не сократить? Заодно ускорится компиляция.
Мультиприсвоение: var (a, b) = GetCoords(); // в a и b попадают отдельные числа. Т.е. типа кортежа, но без кортежа. Перл это умеет на раз-два. Сишарп ждём уже 10 лет....
Ещё один вид мультистрочных каментов (а-ля D): /+ это отладочный коммент /* скрывающий рабочий коммент */ и нужный только временно +/
Раз уж строки являются "немного встроенным" и широко используемым типом, нельзя ли упростить дебилизм типа if (!string.IsNullOrWhiteSpace(бла-бла...)) на что-то типа if (^string_var) — это сократило бы целую кучу кода.
Вывод типов для филдов: var SomeField = 6; // знаю, есть проблемы, но они трясут в 0.000001% случаев — так не лучше ли сделать жизнь большинства легче?!
Если тип переменной уже известен, пересоздавать её простым способом:
File f; ...где-то позже... f = new();
— бенефит очевиден при использовании всяких трёхэтажных генериков.
.ToString() бесит. Можно как в Руби: obj.ToS ? (заметьте — без скобок)
Синонимы функций. Console.WriteLine задолбал — хочу типа так:
using Out = Console.WriteLine; Out(bzbz);
Зачем в switch(SomeEnumVar) пишут в case SomeDamnBigEnumName.EnumValue: ? нельзя ли просто switch(SomeEnumVar) case EnumValue: — тип-то везде один и тот же!
Приведение типов неуклюжее. Вместо
double z = (double)IntVar;
можно было б писать
double z := IntVar;
, т.е. := — это "присвоить с приведением типа к lvalue". Словесный понос надо искоренять — пусть паскалисты его тыркают.
Фичи из голосовалки, к которым +100:
Сиськи!
Expression Substitution вместо string.Format
Синтаксис для кортежей с поддержкой везде: foreach(var (x, y) in seq)
Хочется, чтобы офигевшие от своей крутости шарподелы спустились на землю и не выпежонивались "суперфичами", а слушали тех, кто РЕАЛЬНО использует шарп — это МЫ ежедневно колдыбасимся с их компилером и это нам виднее, что есть "мелочи". А если ради мелочей надо переписывать компилер, то.... в топку такие компилеры.
Здравствуйте, IT, Вы писали:
IT>- Вывод типов при вызове констркуторов. IT>- приделать к query comprehensions to list, to array, first, single, top, skip и т.п.
Здравствуйте, 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 не устраивает?
Пробежался по треду и собрал ещё фич, которые поддерживаю (почему-то в голосовалке — мусор вместо дельных пунктов):
Упрощённая работа с атрибутами. Какой смысл рассуждать об их пользе, если работа с ними осущ. через анус? Хочется изящной простоты, типа: foreach(PropInfo pi in WindowType.class.GetProperties(Attr1, attr2, ..)); Или PropInfo.HasAttribute(AttrClass); Вообще, у C# довольно помоечный синтаксис работы с классами: вместо элегантных конструкций с именами типов приходится влезать чуть ли не в ассемблер: Класс.ДайСвойТип().ШаманскиеФункции.... отстой полнейший. Нужен синтаксис сразу на уровне "Класс", типа "Класс.ДайПропертиСАтрибутом(Атрибут)". Это мелочи, но без них код загромождается фуфлом — хорошо бы девелоперам сишарпа заботиться не только "предоставить доступ к фиче", но и о элегантности кода с этими фичами.
Оператор .?
Улучшить оператор AS: нечасто, но изрядно упрощает бойлерплэйт a = b as SomeType; if (a != null) ....; Вариант: when(b = a as SomeType) { юзаем b }
Упрощ. иниц. объекта помимо new: var z = GetObject() <= { filed = 4, field2 = 5 }
Duck typing ака MapAs: приводить объект к интерфейсу, если он совместим по методам. Уж лучше в рантайме всё **нётся, зато в коде можно очень элегантно обруливать всякое гетерогенное фуфло из разных иерархий.
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, Jack128, Вы писали:
J>>чем те var z = (double)IntVar не устраивает?
M>Я хочу избавиться от _приведения_типа_, а не замены double на var.
нет, ты предлагаешь заменить один синтаксис приведения другим.
Здравствуйте, Gollum, Вы писали:
IT>>- ПМ и АТД. G>Ну у вас и мелочи
На самом деле если разобраться, то и то и другое — это сахар. АТД — это плоская иерархия, по типу Linq.Expressions только с информацией о соответствии полей/свойст класса с их позиционированием в паттернах для ПМ. Немерле, кстати, умеет задавать такую информацию в том числе и для обычных классов. ПМ — это всего лишь навороченный switch/if с максимально компактным синтаксисом, включающим распаковку структур данных, и умным алгоритмом оптимизации перебора условий.
Единственное чем ПМ может не вписаться в C# — так это то, что в том же Немерле всё есть выражение и все языковые конструкции могут возвращать значение.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, 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>Уже существующим синтаксисом не обойтись, нужно новый придумывать, иначе такая фича поломает обратную совместимость.
я тут подумал и не смог придумать, какой сценарий поломает обратную совместимость?
Здравствуйте, k0st1x, Вы писали:
J>>Уже существующим синтаксисом не обойтись, нужно новый придумывать, иначе такая фича поломает обратную совместимость.
K>я тут подумал и не смог придумать, какой сценарий поломает обратную совместимость?
а тебе придумывать не нужно, я уже придумал. И даже написал этот пример, но ты при цитировании почему то удалил его.