Комментарии 10
Что-то про auto-accessor как-то вообще коротко написали, непонятно зачем он нужен. В других языках автосвойства нужны потому, что в будущем может понадобиться полноценное свойство, а замена поля на свойство нарушает ABI. Но в JavaScript-то такой проблемы нет!
На самом деле auto-accessor вводились для декораторов, потому что декоратор поля и декоратор свойства работают по-разному. В предложении о декораторах велась многолетняя война за возможность силами декоратора преобразовать поле в свойство, чтобы можно было писать код наподобие такого:
class Foo {
@observable bar = "baz";
}
"За" были авторы реактивных библиотек, "против" — разработчики браузеров. В итоге стороны сошлись на введении в язык auto-accessor.
а можно подробнее что за ABI и там нарушает там замена полей на свойства. TypeScript же транслятор в JavaScript - то как это выглядит в TypeScipt это одно - то, во что это транслируется в JavaScript - совсем другое
В других языках автосвойства нужны потому, что в будущем может понадобиться полноценное свойство, а замена поля на свойство нарушает ABI.
Другие языки — это C#, Scala, Kotlin
В каких языках это есть я знаю. Не знаю про нарушение ABI - о чём и спросил. И чем TypeScript тут принципиально отличается от, скажем, Kotlin - оба в JS транслироваться могут! Ну а в перспективе - вообще в WASM
Как я и писал изначально, в JavaScript никакой разницы в ABI нет. Собственно, в JavaScript и полей-то в привычном понимании нет.
А вот как раз в WASM разница между полем и свойством ещё как будет:
Поле — это именованная область памяти внутри объекта. Чтение или запись в поле — это операция косвенного обращения к памяти.
Свойство — это пара методов. Чтение или запись свойства — это вызов функции.
Если у вас раньше в классе было поле, и вы решили заменить его на свойство — то любой зависимый код должен быть перекомпилирован, иначе он будет делать совершенно некорректную операцию. Это и есть нарушение ABI.
Чтобы его избежать — желательно с самого начала все поля сделать приватными, а наружу выставлять только свойства. Однако, писать по свойству на каждое поле — громоздко и неудобно, отчего в разных языках и изобретают вариации автосвойств.
Спасибо за интерес и справедливое замечание. Расширили раздел про auto-accessor
Разработчики ожидают от нее 10-20% прироста производительности
TS это же транспилятор, значит разработчики добились прироста производительности при преобразовании TS-кода в JS-код? Ну, тоже хорошо.
Не совсем понял в чем профит от "Функции-декораторы", декоратор на метод и раньше был.
TypeScript 5.0 и 4.9: оцениваем и сравниваем изменения