Как стать автором
Обновить

Комментарии 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-код? Ну, тоже хорошо.

Не совсем понял в чем профит от "Функции-декораторы", декоратор на метод и раньше был.

Они были раньше как устаревшее экспериментальное языковое расширение, а теперь они наконец-то входят в стандарт ECMAScript.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий