Open raidenluikang opened 1 year ago
Существующий синтакс чем хуже ?
Message m {
.id = 22,
.text = "Hello world",
.delivery = std::chrono::steady_clock::now()
}
Существующий синтакс чем хуже ?
Функции-члены нельзя вызывать, а иногда хочется.
Существующий синтакс чем хуже ?
Это инициализатор. Во первых инициализирует ВСЕ полей (явно+неявно). Во вторых нужен быть внимателен, нельзя поменять порядок иницилизация переменных как они были объявлены. Во третих те который опустили в иницилизаций , сами иницилизирует дефаултами значениями. Во четвёртых , нелзя мержить несколько структур в одном блоке как with m1, m2 do m1_variable = m2_variable;
Во пятых, нельзя добавить другие выражений в блок, например, with m do { int a = calc_something(); m_member_data = a * a * sqrt(a); }
Коротко, это совсем другое.
Во первых
Я лишь прошелся по примеру. Что бы изменить язык нужно подобрать подходящий пример который покажет необходимость в новой языковой конструкции.
Как эта фича должна интегрироваться с другими возможностями языка которых не было в паскале. Например ADL и Unqualified name lookup: Из какой области видимости компилятор должен взять calc_something(); при условии что функции с таким именем объявлены везде (включая член класса m) ? А если добавить аргумент с типом из соседнего неймспейса ?
Как эта фича должна интегрироваться с другими возможностями языка которых не было в паскале. Например ADL >> и Unqualified name lookup: Из какой области видимости компилятор должен взять calc_something(); при условии что функции с таким именем >> объявлены везде (включая член класса m) ? А если добавить аргумент с типом из соседнего неймспейса ?
Все это пока открытый вопрос, который надо изучать.
Из себя могу предлагать, что with .. do { } тело with do оператор пусть работает как тело метода указанного объекта, все имена и функция, методы (шаблонный АДЛ МАДЛ) сначала ищут внутри класса, только если не найдётся ищут вне класса.
Вспомнил 20 лет давности : with .. do оператор было адский удобно, для инициализация полей у структур (Record).
Ссылка https://freepascal.org/docs-html/ref/refsu62.html
Почему это идея не дойдет до стандарта? )
Маленький пример,
Не путайте with оператор у Пайтон, там другая.