Основная проблема с ПМ, как озвучил Мэдс, в АТД. Это новый first class citizen, который отчасти дублирует существующие сущности в языке. Так что АТД ака discriminated unions на данный момент однозначно no way. Теоретически можно обойтись без АТД существующими типами с какими то дополнительными доработками, но тут нужно говорить более конкретно.
... << RSDN@Home 1.2.0 alpha 5 rev. 23 on Windows 8 6.2.9200.0>>
Здравствуйте, matumba, Вы писали:
AVK>>Сейчас сложилась такая ситуация, что для следующего релиза C# нет big thing M>Их не было и в 5 релизе — ну не async же — революция программазма!
Под революциями я имел в виду масштабные изменения конкретно в C#, а не новые открытия в computer science.
AVK>>Соответственно, от вас хотелось бы получить те фичи, которых не хватает лично вам.
M>Забавно — т.е. к народу обращаются только когда ИМ нужно?
Здесь к народу обращаюсь я, и я в МС не работаю, не переживай.
M>Хочется, чтобы офигевшие от своей крутости шарподелы спустились на землю и не выпежонивались "суперфичами", а слушали тех, кто РЕАЛЬНО использует шарп — это МЫ ежедневно колдыбасимся с их компилером и это нам виднее, что есть "мелочи". А если ради мелочей надо переписывать компилер, то.... в топку такие компилеры.
Ты продолжай в таком тоне общаться, и тебя вообще никто слушать не будет.
... << RSDN@Home 1.2.0 alpha 5 rev. 23 on Windows 8 6.2.9200.0>>
Здравствуйте, Jack128, Вы писали:
J>а тебе придумывать не нужно, я уже придумал. И даже написал этот пример, но ты при цитировании почему то удалил его.
В принципе это решаемо эвристиками в компиляторе. Так что если очень хочется, то можно.
Здравствуйте, matumba, Вы писали:
M>Пробежался по треду и собрал ещё фич, которые поддерживаю (почему-то в голосовалке — мусор вместо дельных пунктов):
M>Упрощённая работа с атрибутами. Какой смысл рассуждать об их пользе, если работа с ними осущ. через анус? Хочется изящной простоты, типа: foreach(PropInfo pi in WindowType.class.GetProperties(Attr1, attr2, ..)); Или PropInfo.HasAttribute(AttrClass);
При чём тут C#?
public static IEnumerable<PropInfo> GetProperties<A1, A2>(this Type type) where A1: Attribute, A2: Attribute { ... }
public static bool HasAttribute<A1>(this PropInfo pi) where A: Attribute {...};
foreach(var pi in typeof(WindowType).GetProperties<Attr1, attr2>())
if (pi.HasAttribute<Attr1>())
...
M>Вообще, у C# довольно помоечный синтаксис работы с классами: вместо элегантных конструкций с именами типов приходится влезать чуть ли не в ассемблер: Класс.ДайСвойТип().ШаманскиеФункции.... отстой полнейший. Нужен синтаксис сразу на уровне "Класс", типа "Класс.ДайПропертиСАтрибутом(Атрибут)". Это мелочи, но без них код загромождается фуфлом — хорошо бы девелоперам сишарпа заботиться не только "предоставить доступ к фиче", но и о элегантности кода с этими фичами. M>Оператор .? M>Улучшить оператор AS: нечасто, но изрядно упрощает бойлерплэйт a = b as SomeType; if (a != null) ....; Вариант: when(b = a as SomeType) { юзаем b }
public static void WhenIs<T>(this object o, Action<T> action) {
if (Typeof(T).IsAssignableFrom(o.GetType()))
action((T)o);
}
a.WhenIs<SomeType>{b=>юзаем b }
M>Упрощ. иниц. объекта помимо new: var z = GetObject() <= { filed = 4, field2 = 5 }
Зачем? M>Duck typing ака MapAs: приводить объект к интерфейсу, если он совместим по методам. Уж лучше в рантайме всё **нётся, зато в коде можно очень элегантно обруливать всякое гетерогенное фуфло из разных иерархий.
Реализовано в библиотеках — BLToolkit смотрели?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, k0st1x, Вы писали:
K> — просто ради красоты — возможность писать код без ";" в конце каждой строчки : )
Тогда придется спилить безымянный палец. Чтоб не стучал по клавише ;
Здравствуйте, Mihas, Вы писали:
M>Здравствуйте, k0st1x, Вы писали:
K>> — просто ради красоты — возможность писать код без ";" в конце каждой строчки : ) M>Тогда придется спилить безымянный палец. Чтоб не стучал по клавише ;
как временное решение или workaround,
можно примотать мизинец к безымянному пальцу, ну или приклееть суперклеем.
Здравствуйте, Jack128, Вы писали:
J>Здравствуйте, k0st1x, Вы писали:
J>>>Уже существующим синтаксисом не обойтись, нужно новый придумывать, иначе такая фича поломает обратную совместимость.
K>>я тут подумал и не смог придумать, какой сценарий поломает обратную совместимость?
J>а тебе придумывать не нужно, я уже придумал. И даже написал этот пример, но ты при цитировании почему то удалил его.
извиняюсь, действительно упустил.
btw, проверил этот сценарий в котлине — он ругается и не дает скомпилить.
Здравствуйте, AndrewVK, Вы писали:
S>>Последнее, что я слышал — все по уши застряли в Рослине, сильно сомневаюсь, что у них хватит сил на что-то ещё AVK>Я не могу озвучивать конкретики, но ситуация несколько иная сейчас.
1) switch по всему, чему угодно, очень надоело писать костыли в виде словарей. Т.е., вместо, например, этого:
class A
{
private readonly Dictionary<Type, Action> helpers;
public A()
{
this.helpers = new Dictionary<Type, Action>
{
// инициализация какими-то значениями
};
}
public void Foo()
{
var type = someObject.GetType();
helpers[type]();
}
}
писать так:
class A
{
public void Foo()
{
var someVar = //...var type = someObject.GetType();
switch (type)
{
case typeof(string):
break;
case typeof(A):
break;
case someVar.GetType():
break;
}
}
}
Пусть это все разворачивается в тот же Dictionary, но типовым и однообразным способом.
2) [PropertyChanging] и [PropertyChanged] для автосвойств искаропки:
[PropertyChanging]
[PropertyChanged]
public int MyProperty { get; set; }
3) Разрешить инициализатору поля ссылаться на экземплярный метод, поле или свойство, сейчас вместо этого приходиться городить конструктор:
Здравствуйте, AndrewVK, Вы писали:
IT>>- ПМ и АТД.
AVK>Основная проблема с ПМ, как озвучил Мэдс, в АТД. Это новый first class citizen, который отчасти дублирует существующие сущности в языке.
И чего оно такого дублирует?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, k0st1x, Вы писали:
M>>Тогда придется спилить безымянный палец. Чтоб не стучал по клавише ; K>как временное решение или workaround, K>можно примотать мизинец к безымянному пальцу, ну или приклееть суперклеем.
Я использовал более радикальный вариант: ездил на велосипеде по городу без гарда на руле. В итоге на три недели мизинец пригипсовали к безымянному.
Сецчас язык настолько опережает рантайм, что дальнейшие "мажорные" фичи — это рост колосса на глиняных ногах.
С точки зрения людей, не знакомых с кухней MS, C# и .NET CLR — даже не муж и жена, а вообще один человек.
Так что все силы надо пускать на CLR — многоплатформенность, нормальные оптимизации, наконец-таки нормальный x64, внятный и предсказуемый GC
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
X>Так что все силы надо пускать на CLR — многоплатформенность, нормальные оптимизации, наконец-таки нормальный x64, внятный и предсказуемый GC
А что не так с x64 если не секрет? Ну и чем GC не предсказуем?
Просто интересуюсь
Здравствуйте, Tom, Вы писали:
Tom>А что не так с x64 если не секрет?
Полное отсутствие оптимизаций
Tom>Ну и чем GC не предсказуем?
Тут я не могу строго сформулировать... Но общее ощущение что он "живет своей жизнью", в отличии от jvm. Ну и захлебывается на гораздо меньших объемах кучи.
Что надо и хочется чтоб было сделано —
1) инкрементальная фоновая сборка в gen2 БЕЗ релокации до определенного % наполнения кучи
2) сборка в LOH с релокацией
3) раздельные (конфигурябельно) GEN0 кучи для тредов для устраниния эффекта "кризиса среднего возраста"
и т.д.
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"