OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

Синтаксис типизации в native

Open EvilBeaver opened this issue 1 year ago • 7 comments

Для уменьшения количества динамической диспетчеризации + более внятного кода в native нужен синтаксис типизации


Перем А: Строка
Функция Ф(М: Строка): Булево

Б = Нечто как Строка
Если Б это Строка Тогда // учитывает наследование, в отличие от ТипЗнч() = Тип()

EvilBeaver avatar Mar 29 '23 09:03 EvilBeaver

если уж дело идет к типизации, тогда предлагаю добавить такие операторы: Это, ЭтоНе - проверяют один и тот же это экземпляр объекта или нет... в отличие от оператора =, который сравнивает по содержимому. А="Мир"; Б=Лев("Миранда",3); //здесь А=Б возвращает Истина //а А Это Б возвращает Ложь

ЭтоТип, ЭтоНеТип - проверяет является ли левый операнд типом указанным в качестве правого операнда с учетом наследования. Если А ЭтоТип Строка Тогда Сообщить("Это тип Строка"); КонецЕсли

perfolenta avatar Mar 29 '23 12:03 perfolenta

ЭтоТип, ЭтоНеТип - проверяет является ли левый операнд типом указанным в качестве правого операнда с учетом наследования. Если А ЭтоТип Строка Тогда Сообщить("Это тип Строка"); КонецЕсли

По поводу проверки типов зачем так далеко уходить от канона?

ТипЗнч("Текстовая строка") = Тип("Строка")

Nivanchenko avatar Mar 30 '23 08:03 Nivanchenko

зачем так далеко уходить от канона?

я только отреагировал на это:

Если Б это Строка Тогда // учитывает наследование, в отличие от ТипЗнч() = Тип()

если уж внедрять оператор Это, то лучше разделить на Это и ЭтоТип...

perfolenta avatar Mar 30 '23 11:03 perfolenta

Кмк "Это" - это калька с is/instanceOf, которые как раз проверяют типы и наследование. = в оскрипте за исключением литералов всегда работает по ссылке, а не содержимому. Проверки на содержимое (а-ля equals) в оскрипте просто нет.

nixel2007 avatar Mar 30 '23 13:03 nixel2007

это калька с is

понятно, что калька с C#, но в шарпе это сделано не идеально, продумано плохо, так почему при создании своего языка брать плохую кальку? конечно, пока в оскрипте нет наследования и перегрузки операторов, то и так сойдет... но когда появятся, то возникнут те же недостатки, что и у шарпа... В шарпе чтобы проверить, что две ссылки указывают на один и тот же объект проще использовать Object.ReferenceEquals, чем оператор ==, т.к. никогда не знаешь не переопределен ли случайно оператор ==, надо каждый раз проверять... к тому же структуры не поддерживают ==, если не переопределят... а строки хоть и ссылочные проверяются по значению... Поэтому я и предложил оператор Это зарезервировать для проверки того, что перед нами тот же экземпляр объекта, а оператор ЭтоТип для проверки того, что перед нами нужный тип...

perfolenta avatar Mar 30 '23 15:03 perfolenta

Кстати, раз тут такой резкий поворот от канона, может уже пора просить наследование и интерфейсы ?

Nivanchenko avatar Jun 03 '23 19:06 Nivanchenko

Тут еще как бы не все нормально компилируется даже из классики 😢

EvilBeaver avatar Jun 04 '23 14:06 EvilBeaver