Re[4]: Welcome to C# 9.0
От: Ночной Смотрящий Россия  
Дата: 25.05.20 13:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А record struct не тянет? Или есть какой-то кайф в том, что в доках пишем record, а в коде data?


Блог-пост это не доки.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Summer of Code ...
От: Ночной Смотрящий Россия  
Дата: 25.05.20 13:47
Оценка:
Здравствуйте, VladD2, Вы писали:

НС>>data struct вроде уже есть. Но доживут ли они до релиза — ХЗ, там есть некоторое количество логических проблем.

VD>Это что за логические проблемы такие?

Я уже не помню. Там были какие то нестыковки с вспомогательными методами типа equals или copy-конструктора.

VD> И почему они не мешают F# и Nemerle?


Потому что C# это не F# и Nemerle.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: Welcome to C# 9.0
От: vmpire Россия  
Дата: 25.05.20 14:07
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

V>>Про функциональные языки не скажу, но что будет если поменять порядок объявлений в классе? Всё же поедет. А если типы данных поменянных членов совпадут, то ошибка ещё и не сразу вылезет.


S>Ну то же самое, что в конструкторе параметры поменять.

Конструктор — это всё-таки метод.
То, что порядок параметров в вызове метода имеет значение, все понимают интуитивно. Плюс, есть всякие решарперы, чтобы поменять везде порядок аргументов.
А вот то, что изменение порядка объявлений членов класса может поломать программу — интуитивно непонятно (про С++ сейчас не говорим ).
Re[6]: Welcome to C# 9.0
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.05.20 14:23
Оценка: +1
Здравствуйте, vmpire, Вы писали:

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


V>>>Про функциональные языки не скажу, но что будет если поменять порядок объявлений в классе? Всё же поедет. А если типы данных поменянных членов совпадут, то ошибка ещё и не сразу вылезет.


S>>Ну то же самое, что в конструкторе параметры поменять.

V>Конструктор — это всё-таки метод.
V>То, что порядок параметров в вызове метода имеет значение, все понимают интуитивно. Плюс, есть всякие решарперы, чтобы поменять везде порядок аргументов.
V>А вот то, что изменение порядка объявлений членов класса может поломать программу — интуитивно непонятно (про С++ сейчас не говорим ).

Ну будут и для рекордов в студии . Там так или иначе есть конструктор.
Ты его можешь сам и написать. Но большинство будут использовать краткую запись. Для этого они и придумывались

Positional records
Sometimes it’s useful to have a more positional approach to a record, where its contents are given via constructor arguments, and can be extracted with positional deconstruction.
It’s perfectly possible to specify your own constructor and deconstructor in a record:

public data class Person 
{ 
    string FirstName; 
    string LastName; 
    public Person(string firstName, string lastName) 
      => (FirstName, LastName) = (firstName, lastName);
    public void Deconstruct(out string firstName, out string lastName) 
      => (firstName, lastName) = (FirstName, LastName);
}

But there’s a much shorter syntax for expressing exactly the same thing (modulo casing of parameter names):
public data class Person(string FirstName, string LastName);

This declares the public init-only auto-properties and the constructor and the deconstructor, so that you can write:
var person = new Person("Scott", "Hunter"); // positional construction
var (f, l) = person;                        // positional deconstruction

If you don’t like the generated auto-property you can define your own property of the same name instead, and the generated constructor and deconstructor will just use that one.
и солнце б утром не вставало, когда бы не было меня
Re[8]: Welcome to C# 9.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 14:58
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>А вместо data struct?


Вместо "data". Оно, конечно, с научной точки зрения будет не верно, так как record относится только к не SUM-типам (к кортежам и типам без наследования), но этих тонкостей один хрен никто не знает кроме человек 100 на земле. Так что было бы нормально.

А так, действительно, в рассуждениях record, а в синтаксисе data. В прочем может это Мэдс не очень компетентен в вопросе или рассчитывает на некомпетентную аудиторию, вот и использует не верную терминологию. В принципе нужно было это АлгТД называть. Термин "запись" применим только к классам без наследования и к структурам. А с наследованием получается эдакое расширение SUM-тиов. То что в Nemrle variant-ами называется, а в F# union-ами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Welcome to C# 9.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 14:58
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>А это уже работает и так.


Тогда и не надо было ничего изобретать. А то эта попытка упростить выливается в неприятие людьми.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Welcome to C# 9.0
От: vmpire Россия  
Дата: 25.05.20 15:11
Оценка:
Здравствуйте, Serginio1, Вы писали:

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

S>Ну будут и для рекордов в студии. Там так или иначе есть конструктор.
Конструктор тут ни при чём, я же про positional deconstruction
Но я, кажется, понял смысл: деконструктор объявляется явно, а синтаксис records повторяет синтаксис метода, а не класса, этого я поначалу не уловил.
Если так, то проблем быть не должно
Re[5]: Summer of Code ...
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 21:08
Оценка:
Здравствуйте, rameel, Вы писали:

R>https://github.com/dotnet/roslyn/blob/master/docs/features/source-generators.cookbook.md

R>Можно дополнять код, но нельзя менять/переписать

Судя по описанию это пруф оф концепт. В ИДЕ поддержки нет. Как к проекту цеплять не ясно. Ты это пробовал использовать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Summer of Code ...
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 21:13
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

R>>>а то до генераторов дошли,

>>>Это где? Что-то я пропустил.
S>http://rsdn.org/forum/dotnet/7719189.flat
Автор: Serginio1
Дата: 01.05.20


Гы. Первый шаг к макросам сделан. Еще лет 20 и будут в C# макросы. Им надо только все грабли сгрести.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Welcome to C# 9.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 21:26
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Про функциональные языки не скажу, но что будет если поменять порядок объявлений в классе? Всё же поедет. А если типы данных поменянных членов совпадут, то ошибка ещё и не сразу вылезет.


Будет тоже самое, что при изменении порядка параметров в методе. С методами тебя это не смущает? Ну, на фигачат рефакторинов по их изменению.

V>Вот это и напрягает, когда вместо базового класса появляется производный.


Это у тебя предрассудки. Тут нет никакой разницы с вызовом метода. Ты точно так же можешь вызвать метод на базовом тип, а он преобразуется в вызов наследника, так как виртуальный. По сути тут и есть завуалированный вызов виртуального метода копирования.

V>Нет, если LSP в порядке, то проблем не будет. Но вот если не в порядке...


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

Ну, а то что они реализовали растет из науки и 100 проверенно на практике. Я этим уже 14 лет пользуюсь и доволен.

V>Хотя тут, скорее всего, дело привычки. Нужно просто запомнить, как это работает.


Тут дело в боязни нового и парадоксе блаба (погугли). Просто ты смотришь на изменения которые тебе новы и не понятны и резонно опасаешься "как бы чего не вышло". Но эти фичи не новые. Они только для Шарпа новые. Так то они появились в 1970-м году в ML-е. Под ними лежит не хилый научный базис.

Поверь тем кто это уже использовал. На практике это очень упрощает жизнь.

V>Эта "куча" — 2 строки кода.


А ты посчитай. 3 на класс. 3 на метод. А тебе нужно вывести одну строку на консоль.

Согласен, что особой пользы от этого нет. Но как приятное бесплатное дополнение вполне потянет.

V>Единественно когда это может быть полезно, так это если делать интерпретатор, как в скриптовых языках.


Отнюдь. Компилируемым языкам это тоже полезно, хотя и без этого прожить легко.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Welcome to C# 9.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 21:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Блог-пост это не доки.


Не думаю, что ни будут лучше. Обычно в них все еще хуже чем в блогах. Терминология то нужна.

По мне так вкусовщина. Но заметь сколько людей согласны с AlexRK. И это отнюдь не все немерлисты.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Summer of Code ...
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 21:32
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Потому что C# это не F# и Nemerle.


И в чем разница, особенно в плане equals и копированя?

Не выдумывай.

А Шарп продолжает движение к Немерлу. И это правльно. Вот только не ясно зачем было тратить на это 20 лет и делать столько ошибок. Рано или поздно Шарп станет Немерлом с уговняконным, не консистентным синтаксисом, косяками дизайна, но идеальной реализацией компилятора и ИДЕ. О чем я и говорил 13 лет назад.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Welcome to C# 9.0
От: σ  
Дата: 26.05.20 00:25
Оценка: :)
> Версия 9.0
> Добавили covariant return types

Вот что значит доверить проектирование языка дельфисту.
Отредактировано 26.05.2020 5:41 σ . Предыдущая версия . Еще …
Отредактировано 26.05.2020 0:26 σ . Предыдущая версия .
Re[6]: Summer of Code ...
От: rameel https://github.com/rsdn/CodeJam
Дата: 26.05.20 06:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Судя по описанию это пруф оф концепт. В ИДЕ поддержки нет. Как к проекту цеплять не ясно. Ты это пробовал использовать?


Да, в ИДЕ поддержки пока нет, но обещают сделать. Цепляется как сторонние анализаторы, прописывается в .csproj как "зависимость". Вот здесь написано чуть подробнее Introducing C# Source Generators. Там же, в статье, есть ссылка на демо https://github.com/dotnet/roslyn-sdk/tree/master/samples/CSharp/SourceGenerators
<ItemGroup>
    <!-- Note that this is not a "normal" ProjectReference.
         It needs the additional 'OutputItemType' and 'ReferenceOutputAssmbly' attributes. -->
    <ProjectReference Include="path-to-sourcegenerator-project.csproj" 
                      OutputItemType="Analyzer"
                      ReferenceOutputAssembly="false" />
</ItemGroup>


Пробовал пару примеров, работает, но поддержки со стороны студии никакой, только командная строка.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[2]: Welcome to C# 9.0
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.05.20 07:12
Оценка: +2
Здравствуйте, σ, Вы писали:

>> Версия 9.0

>> Добавили covariant return types

σ>Вот что значит доверить проектирование языка дельфисту.

Дельфист сейчас разрабатывает TypeScript https://ru.wikipedia.org/wiki/TypeScript
и солнце б утром не вставало, когда бы не было меня
Re[6]: Summer of Code ...
От: _FRED_ Черногория
Дата: 26.05.20 07:13
Оценка:
Здравствуйте, VladD2, Вы писали:

R>>https://github.com/dotnet/roslyn/blob/master/docs/features/source-generators.cookbook.md

R>>Можно дополнять код, но нельзя менять/переписать

VD>…В ИДЕ поддержки нет.


Нормальная поддержка в студии:

Note: you will currently need to restart Visual Studio to see IntelliSense and get rid of errors with the early tooling experience

отсюда

VD>Как к проекту цеплять не ясно.

if(!Debugger.IsAttached) {
  Debugger.Launch();
}//if

Наше всё :о))

VD>Ты это пробовал использовать?


Я пробую. Пока не понятно, как удобнее код генерить: через `StringBuilder.Append(…)` или вручную дерево собирать.
Help will always be given at Hogwarts to those who ask for it.
Re[6]: Welcome to C# 9.0
От: Ночной Смотрящий Россия  
Дата: 26.05.20 08:51
Оценка:
Здравствуйте, VladD2, Вы писали:

НС>>Блог-пост это не доки.

VD>Не думаю, что ни будут лучше.

Обсуждение твоих думок лишено какого либо смысла.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: Welcome to C# 9.0
От: vmpire Россия  
Дата: 26.05.20 10:30
Оценка:
Здравствуйте, VladD2, Вы писали:

V>>Про функциональные языки не скажу, но что будет если поменять порядок объявлений в классе? Всё же поедет. А если типы данных поменянных членов совпадут, то ошибка ещё и не сразу вылезет.

VD>Будет тоже самое, что при изменении порядка параметров в методе. С методами тебя это не смущает? Ну, на фигачат рефакторинов по их изменению.
Я уже посмотрел повнимательнее, в данном случае синтаксис остаётся как у метода, поэтому проблем не будет.

VD>Ну, а то что они реализовали растет из науки и 100 проверенно на практике. Я этим уже 14 лет пользуюсь и доволен.

Ну я и С++ пользовался лет 10, где порядок объявления членов в классе влиял на логику программы. Но это не значит, что я считаю, что это хорошо.
Но, ещё раз: в данном случае используется синтаксис вызова метода, поэтому проблем не будет.

VD>Тут дело в боязни нового и парадоксе блаба (погугли). Просто ты смотришь на изменения которые тебе новы и не понятны и резонно опасаешься "как бы чего не вышло". Но эти фичи не новые. Они только для Шарпа новые. Так то они появились в 1970-м году в ML-е. Под ними лежит не хилый научный базис.

Вот уж тут Вы точно не угадали Чего чего, а боязни нового у меня нет. Наоборот, я постоянно смотрю, где что появилось и как это может мне пригодится.
Но вместе с тем, некоторые (именно некоторые) вещи вызывают во мне опасение, так я наловился за свою жизнь ошибок в программах, как своих так и не своих, и примерно понимаю, где могут быть слабые места.
В качестве контрпримера: под реляционными базами тоже лежит нехилый научный базис, даже поболее, чем то, что мы обсуждаем.
Что совершенно не мешает поколениям программистов ходить строем по одним и тем же граблям.

VD>Поверь тем кто это уже использовал. На практике это очень упрощает жизнь.

Верить не буду. Ни плюсам, ни минусам. Дойдут руки — проверю сам.
Верить не буду потому, что неоднократно видел, как мыши годами ели кактус и считали, что всё замечательно.
Re[7]: Summer of Code ...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.20 13:35
Оценка:
Здравствуйте, rameel, Вы писали:

R>Пробовал пару примеров, работает, но поддержки со стороны студии никакой, только командная строка.


И как оно видно в студии? Отсутствующие типы? Так то по идее если насрать текст в файл и подсунуть это студии через проектную систему должно кое-как работать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Summer of Code ...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.20 13:43
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Нормальная поддержка в студии:

_FR>Note: you will currently need to restart Visual Studio to see IntelliSense and get rid of errors with the early tooling experience

Да, мега технология.
Ну, ладно. Лиха беда начало. Тут главное, чтобы они свои свои животные страхи и парадокс блаба преодолели. Дальше пойдет легче.


_FR>Наше всё :о))


Я имел в виду, как подключить это чудо к своему проекту, а не как дебажит. Но, спасибо rameel, в его сообщении есть ответ
Автор: rameel
Дата: 26.05.20
.

_FR>Я пробую. Пока не понятно, как удобнее код генерить: через `StringBuilder.Append(…)` или вручную дерево собирать.


Да там главное как к проекту подключиться и как это обратно окмпилятору подсунуть.

Что-то больно через жопу они все это подключают. Надо было через ключ компилятора. Тогда можно было бы пользоваться его символами и новый код было бы не проблема подсунут. В Росзлине все это предусмотрено (ну хоть как-то). А они через расширения к студии пошли. Это тупик, я думаю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.