Здравствуйте, vmpire, Вы писали:
V>Я уже посмотрел повнимательнее, в данном случае синтаксис остаётся как у метода, поэтому проблем не будет.
И где логическая связь? А ее нет!
Проблем не будет просто потому, что это проверенно на практике. В Немрле позиции определяются порядком определения полей. Но никаких проблем нет. Ты просто понимаешь, что позиции полей имеют значение и не меняешь их без необходимости.
Единственно, что... возможно кому-то придется пересмотреть порядок объявлений. Лично я и те кто со мной работает на Немерле давно привыкли описывать весь список полей (не зависимо от того приватные они или публичные) и автосвойства вначале файла, а методы и простые свойства после конструкторов (если они есть).
Но это полезно не только из-за рекородв, а в принципе. Опять же практикой подтверждено. Поля в классе объясняют его суть (и наследование, конечно же). А значит она должны быть на виду.
V>Ну я и С++ пользовался лет 10, где порядок объявления членов в классе влиял на логику программы. Но это не значит, что я считаю, что это хорошо. V>Но, ещё раз: в данном случае используется синтаксис вызова метода, поэтому проблем не будет.
Не надо сравнивать творение рук не человеческих и наунчо обоснованную вещь.
С++ создает проблемы потому что криво спроектирован изначально. Тут же таких родовых травм нет.
Ты базами данных пользовался? Функциями? Ну, вот тут очень близкая база. Все растет из котрежей. А они и есть структурный тип.
Ну, или тогда будь последователен и протестуй против кортежей, которые давно в шаре есть.
V>Вот уж тут Вы точно не угадали Чего чего, а боязни нового у меня нет.
Боязнь нового, как и просто боязнь — это нормально. Не бояться может только дурак или маньяк. Вопрос лишь в разумности. Насколько человек может рационально взвесить пользу и возможные проблемы.
V>Наоборот, я постоянно смотрю, где что появилось и как это может мне пригодится.
Значит это первый случай в твоей жизни.
V>Но вместе с тем, некоторые (именно некоторые) вещи вызывают во мне опасение, так я наловился за свою жизнь ошибок в программах, как своих так и не своих, и примерно понимаю, где могут быть слабые места.
Вот, вот. Это и есть страх "как бы чего не вышло". Это нормально. Даже хорошо. Но нужно подходить к нему рационально. А то вот люди тоже боятся чипирования и прочего бреда из тех же соображений. Но у них нет понимания того чего они боятся.
V>В качестве контрпримера: под реляционными базами тоже лежит нехилый научный базис, даже поболее, чем то, что мы обсуждаем. V>Что совершенно не мешает поколениям программистов ходить строем по одним и тем же граблям.
По граблям вообще сложно запретить ходить. В Шарпе много думали о том как их число сократить. Хотя иногда и факапили.
И ты прав. Под РСБУД лежит не просто наука, а ровно та же наука. Только ее там немного в другое русло увело (в множества). А теория типов там очень похожая. И именно по этому АлгТД отлично ложатся на работу с СУБД.
V>Верить не буду. Ни плюсам, ни минусам. Дойдут руки — проверю сам. V>Верить не буду потому, что неоднократно видел, как мыши годами ели кактус и считали, что всё замечательно.
Ну, дерзай. Я тоже на слово редко верю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Тебе опять поднять мой старый пост, где я в ответ на твои космические корабли предсказал будущее Немерле?
Да ты можешь хоть об отвечаться. Это ничего не меняет. Шарп неумолимо превращается в нНемерл с чуть другим синтаксисом. Поду и макры лет через 10 осилят.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>И как оно видно в студии? Отсутствующие типы? Так то по идее если насрать текст в файл и подсунуть это студии через проектную систему должно кое-как работать.
Голая студия видит сгенерированные типы и методы после перезагрузки. Решарпер же ни в какую их видеть не хочет — подсвечивает все красным
Здравствуйте, VladD2, Вы писали:
V>>Я уже посмотрел повнимательнее, в данном случае синтаксис остаётся как у метода, поэтому проблем не будет. VD>И где логическая связь? А ее нет!
А она есть. К тому, что порядок параметров метода имеет значение все привыкли.
К тому, что порядок объявления членов класса в C# имеет значение не только никто не привык, а даже мало кто подозревает об этом.
VD>Проблем не будет просто потому, что это проверенно на практике. В Немрле позиции определяются порядком определения полей. Но никаких проблем нет. Ты просто понимаешь, что позиции полей имеют значение и не меняешь их без необходимости.
Не соглашусь. Сравнение с Немерлем вообще некорректное: те, кто на нём пишет изначально привыкли к поведению, которое для него специфично и не меняется.
Изменение поведения языка, на котором уже много кто пишет — это совсем другое дело.
VD>Единственно, что... возможно кому-то придется пересмотреть порядок объявлений. Лично я и те кто со мной работает на Немерле давно привыкли описывать весь список полей (не зависимо от того приватные они или публичные) и автосвойства вначале файла, а методы и простые свойства после конструкторов (если они есть).
Лично вы — привыкли. Но не все пишут в таком стиле и не стоит считать его единственно верным.
А привыкнуть можно ко всему (кроме PowerShell ). На С когда-то тоже переменные группировали наверху. А JS (местами) и TSQL и сейчас так неявно делают. Но это не значит, что это удобно. И как раз из за этого бывают иногда реальные ошибки.
Привыкнуть — да, можно. Я, например, как-то привык писать на языке, где не было циклов, а есдинственным способом их сделать было goto. Причём, списков и даже целочисленных переменных там тоже не было.
Привык? Да, привык. Понравилось ли это? Нет.
VD>Но это полезно не только из-за рекородв, а в принципе. Опять же практикой подтверждено. Поля в классе объясняют его суть (и наследование, конечно же). А значит она должны быть на виду.
Только для DTO. А так, точно так же можно сказать, что суть класса объясняют его методы. Или название. Или интерфейсы.
Это понимание у каждого своё, спорить тут бессмысленно.
V>>Ну я и С++ пользовался лет 10, где порядок объявления членов в классе влиял на логику программы. Но это не значит, что я считаю, что это хорошо. V>>Но, ещё раз: в данном случае используется синтаксис вызова метода, поэтому проблем не будет. VD>Не надо сравнивать творение рук не человеческих и наунчо обоснованную вещь.
Нескромный вопрос: а "научно обосновал" кто? инопланетяне? Тоже ведь люди.
И никто ничего не сравнивает, это разные вещи, которые обе нужно брать во внимание.
VD>С++ создает проблемы потому что криво спроектирован изначально. Тут же таких родовых травм нет. VD>Ты базами данных пользовался? Функциями? Ну, вот тут очень близкая база. Все растет из котрежей. А они и есть структурный тип. VD>Ну, или тогда будь последователен и протестуй против кортежей, которые давно в шаре есть.
Я ни против чего не протестую. Я высказываю мнение, что при изменении привыченого поведения возможны ошибки.
>>> Версия 9.0 >>> Добавили covariant return types
σ>>Вот что значит доверить проектирование языка дельфисту. S>Дельфист сейчас разрабатывает TypeScript https://ru.wikipedia.org/wiki/TypeScript
Т.е. банальные covariant return types завезли только когда дельфист отстранился (ну или его отстранили) от разработки языка?
Здравствуйте, σ, Вы писали:
>>>> Версия 9.0 >>>> Добавили covariant return types
σ>>>Вот что значит доверить проектирование языка дельфисту. S>>Дельфист сейчас разрабатывает TypeScript https://ru.wikipedia.org/wiki/TypeScript
σ>Т.е. банальные covariant return types завезли только когда дельфист отстранился (ну или его отстранили) от разработки языка?
ну если ты прочитаешь ссылочку, то он с 12 года занимантся. И он активно развивается.
При нем так и не ввели метаклассы. Типа статические методы класса можно было переопределять.
Там же были и виртуальные конструкторы.
А вот как он ушел, даже and, or, not и with вспомнили!
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, VladD2, Вы писали:
НС>>Тебе опять поднять мой старый пост, где я в ответ на твои космические корабли предсказал будущее Немерле? VD>Да ты можешь хоть об отвечаться. Это ничего не меняет.
Безусловно. Как Немерле был в жопе, так там и остался.
VD>Шарп неумолимо превращается в нНемерл с чуть другим синтаксисом.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>Потому что C# это не F# и Nemerle.
VD>И в чем разница, особенно в плане equals и копированя?
VD>Не выдумывай.
VD>А Шарп продолжает движение к Немерлу. И это правльно. Вот только не ясно зачем было тратить на это 20 лет и делать столько ошибок. Рано или поздно Шарп станет Немерлом с уговняконным, не консистентным синтаксисом, косяками дизайна, но идеальной реализацией компилятора и ИДЕ. О чем я и говорил 13 лет назад.
Десятое правило Гринспена:
Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp.
Здравствуйте, VladD2, Вы писали:
VD>Да ты можешь хоть об отвечаться. Это ничего не меняет. Шарп неумолимо превращается в нНемерл с чуть другим синтаксисом. Поду и макры лет через 10 осилят.
Чего не было (как сейчас не знаю), так это ref locals/ref return values, expression bodied methods, throw expressions и async streams вроде. При чем поддержать все это можно, было бы желание). Unsafe подмножество немерле не поддерживает изначально по идеологическим причинам насколько помнится. Все остальное было с 2006, что-то может немного позже, а то, чего не хватало появлялось достаточно быстро, можно было и самому написать, вплоть до расширения синтаксиса. К тому же, то что было и то, что есть в языке — на две головы выше, чем в том же шарпе есть сейчас. При чем многое из всего этого доступно было еще 10-14 лет назад Карл! К чему можно придраться, так это, чтобы написать linq query нужно писать linq <# from .... #>.
Просто, чтобы расширить кругозор пройдись по ссылкам, что я дал, посмотри примеры и оцени масштабы
И главное, в немерле многие вещи, которые казались невозможными или труднореализуемыми — доступны, главное понять это. А понимаешь это не сразу, так как трудно сразу думать другими категориями.
S>В C# 7.2. появились Span<T> и Memory<T> S>https://docs.microsoft.com/ru-ru/dotnet/csharp/write-safe-efficient-code
Нативная поддержка Span<T> это заслуга рантайма, а не шарпа.
Здравствуйте, rameel, Вы писали:
R>а то, чего не хватало появлялось достаточно быстро, можно было и самому написать, вплоть до расширения синтаксиса.
Что и было продемонстрировано на примере добавления линка. Правда, почему то пришлось параллельно основательно перепахать компилятор, потому что expression tree не влез в возможности макросов, но то такое.
R>К тому же, то что было и то, что есть в языке — на две головы выше, чем в том же шарпе есть сейчас. При чем многое из всего этого доступно было еще 10-14 лет назад Карл! К чему можно придраться, так это, чтобы написать linq query нужно писать linq <# from .... #>.
А к чему придраться, видимо, нельзя, так это к тому что линк в немерле появился позже шарпа.
Ну и еще один мелкий нюансик. До Немерле те же фичи были в Хаскеле и еще пачке других языков, а подиж ты.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Что и было продемонстрировано на примере добавления линка. Правда, почему то пришлось параллельно основательно перепахать компилятор, потому что expression tree не влез в возможности макросов, но то такое.
Для того, чтобы поддержать линк в том виде, что есть, перепахивать компилятор не пришлось. А вот с expression tree всех деталей я не помню. Недостатки в реализации макросов пересмотрели только в N2, но заметь, даже этого хватило, чтобы линк заработал. Если так смотреть, то в шарпе так вообще грамматику языка перепахали, но то такое
R>>К тому же, то что было и то, что есть в языке — на две головы выше, чем в том же шарпе есть сейчас. При чем многое из всего этого доступно было еще 10-14 лет назад Карл! К чему можно придраться, так это, чтобы написать linq query нужно писать linq <# from .... #>.
НС>А к чему придраться, видимо, нельзя, так это к тому что линк в немерле появился позже шарпа.
Так я что против?! Я только за. То, что показало себя удобно, перекочевывало из шарпа, при чем достаточно быстро, а вот в обратную сторону — годами.
НС>Ну и еще один мелкий нюансик. До Немерле те же фичи были в Хаскеле и еще пачке других языков, а подиж ты.
Из немерля мне не хватало толька патерн матчинга.
Макросы заменяли T4 и использование рослина для генерации классов.
То, что появилось и нет в Nemerle больше нужно. Один async awaite чего стоит. >> это заслуга рантайма, а не шарпа.
Ну этого не хватало, а так как основной язык .Net это C# то и заслуга его.
Все таки говорить, что C# это недоделанный немерль неправда!
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, rameel, Вы писали:
НС>>Ну и еще один мелкий нюансик. До Немерле те же фичи были в Хаскеле и еще пачке других языков, а подиж ты. R>А кто-то говорил об исключительности?
Никто, однако, не говорит, что C# превращается в Хаскель или там Скалу, верно?
Здравствуйте, Serginio1, Вы писали:
S>Из немерля мне не хватало толька патерн матчинга.
То, что в шарпе появился паттерн-матчинг хорошо, теперь ждем 9 версию, в которой может устранят куцость текущего.
S>Макросы заменяли T4 и использование рослина для генерации классов.
Вы делаете мне смешно... Если мощностей T4 хватало бы, в команде шарпа не задумались бы о source generator. Только сколько времени теперь пройдет, когда мы увидим квазицитаты для этого?
S>То, что появилось и нет в Nemerle больше нужно. Один async awaite чего стоит.
async/await есть в немерле. Я говорил об async streams, которые только вот появились в шарпе
S>Все таки говорить, что C# это недоделанный немерль неправда!
ЗЫ. Вы зачем так агритесь на то, что кто-то указал на недостатки шарпа?!
Ты спросил, что было, а что нет в немерле, я тебе написал. Шарп — это всего лишь инструмент, которым пользуюсь и я каждый день, но это не мешает мне видеть плюсы и минусу моего инструмента.
ЗЫ. Несколько лет назад у нас в команде были джависты, которым тоже все эти var, foreach, структуры, linq и expression trees, properties не нужны были, излишними и чужеродными. Но стоило некоторым вещам появится в джаве как вдруг это все надо и удобно. Или вот, одному из команды джавистов нужно было пересесть на шарп, то скажем так, проникся, особенно поработав с linq2db. Да, по началу плевался, чертыхался, здесь не так и тут не эдак, но позже возвращаясь обратно было досадно, что нельзя как в шарпе. При том, что и джаве было/есть что предложить шарпу — те же реализации методов интерфейса по умолчанию. Или к примеру, анонимные классы с реализацией интерфейса по месту. Или вот, поддержка tiered compilation в джите. Разве плохо, что плюсы и возможности других языков и платформ появляются в твоем любимом языке или платформы?! Или теперь нельзя обсуждать недостатки/недоделки языка/платформы потому что чьи чувства будут задеты, потому что в моем инструменте все прекрасно, все идеально. Нет не все, иначе язык не развивался бы так как сейчас.
Expression<Func<int,int>> f = i => i * 0 + 0 + i + 10 * (i * 0 + 2);
var f1 = f.TransformEx(ex => ex switch
{
Multiply(Constant(0) e, _) => e, // 0 * e => 0
Multiply(_, Constant(0) e) => e, // e * 0 => 0
Multiply(Constant(1), var e) => e, // 1 * e => e
Multiply(var e, Constant(1)) => e, // e * 1 => e
Divide (Constant(0) e, _) => e, // 0 / e => 0
Divide (var e, Constant(1)) => e, // e / 1 => e
Add (Constant(0), var e) => e, // 0 + e => e
Add (var e, Constant(0)) => e, // e + 0 => e
Subtract(Constant(0), var e) => Negate(e), // 0 - e => -e
Subtract(var e, Constant(0)) => e, // e - 0 => e
Multiply(Constant(int x), Constant(int y)) => Constant(x * y), // x * y => e
Divide (Constant(int x), Constant(int y)) => Constant(x / y), // x / y => e
Add (Constant(int x), Constant(int y)) => Constant(x + y), // x + y => e
Subtract(Constant(int x), Constant(int y)) => Constant(x - y), // x - y => e
_ => ex
});
Console.WriteLine(f);
Console.WriteLine(f1);
Assert.IsTrue(f1.EqualsTo(i => i + 20));
Здравствуйте, Ночной Смотрящий, Вы писали:
R>>А кто-то говорил об исключительности?
НС>Никто, однако, не говорит, что C# превращается в Хаскель или там Скалу, верно?
Шарп и немерл визуально очень близки, вот и сравнение... Был бы F# с С-подобным синтаксисом говорили бы... хотя о шарпе наверное мало бы тогда говорили
Шарп развивается сейчас быстро и много фич из разных языков взято. Здесь проблема скорее всего была с совместимостью итд.
Сейчас язык будет развиваться без оглядки на старый фреймворк и будут вводиться новые фичи в том числе и для Source Generators .
Посмотрим.
А так не хватало даже обычного
if (o is int n)
и солнце б утром не вставало, когда бы не было меня
R>Чего не было (как сейчас не знаю), так это ref locals/ref return values, expression bodied methods, throw expressions
throw expressions вроде были, не было catch ... when