Size: a a a

2021 November 23

с#

саша сок #KotlinGang... in Kotlin JS
можно пояснить?)
как правильно инициализировать класс с полями. или это не про то?
источник

ZB

Zalim Bashorov in Kotlin JS
для JS VM обычно выжно чтобы поля инициализировались в одном порядке, вот так плохо:

function Point(x, y, f) {
  if (f) {
    this.x = x
    this.y = y
  } else {
    this.y = y
    this.x = x
  }
}
источник

ZB

Zalim Bashorov in Kotlin JS
это конечно утрированный пример, в реальности будет какая-то логика по сложнее
источник

ZB

Zalim Bashorov in Kotlin JS
Или другой (упрощенный) пример того как не следует делать:

function Foo(x) {
 this.boo = ….
 if (x != null) {
    this.bar = x.bar
 }
 this.baz = ….
}
источник

AM

Andrew Mikhaylov in Kotlin JS
В V8 тоже есть свои неявные типы для объектов, зовутся shadow classes, но устроены они там, конечно, необычно для котлиниста. Каждый раз, как ты в объект добавляешь новое поле, ему присваивается новый шедоу класс на основании текущего класса и нового поля. Поэтому если ты добавишь к объекту x, потом y, ты получишь один класс, а если сначала y, потом x, то другой. Соответственно, при манипуляциях этими объектами ты не получишь тех оптимизаций, которые мог бы получить, используя одинаковый порядок полей.

Да-да, если ты думал, что уже многое видел о джиэсике, то ты видел только вершину айсберга)
источник

O

OlegKrikun in Kotlin JS
это оно так исторически сложилось или в этом есть какойта смысл?
источник

AM

Andrew Mikhaylov in Kotlin JS
Это компромиссное решение между затратами на каждую операцию (не будет же ВМ на каждую модификацию сортировать и хешировать объект, к примеру) и доступными оптимизациями. Авторы библиотек просто знают о таких особенностях и опираются на них, чтобы получать лучший перф. Как и везде, собственно.
источник

AN

Alexander Nozik in Kotlin JS
Чего-то я вижу новый типа ошибки на JS-IR в 1.6:

> Task :visionforge-solid:compileTestDevelopmentExecutableKotlinJs FAILED
e: org.jetbrains.kotlin.backend.common.serialization.linkerissues.IrDisallowedErrorNode: Class found but error nodes are not allowed.
 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeErrorType(IrDeclarationDeserializer.kt:840)
источник

ZB

Zalim Bashorov in Kotlin JS
источник

MO

Mar Ort in Kotlin JS
Хмм, возможно была какая-то ошибка в инференсе, из-за нее вывелся ErrorType, его не поймали, он попал в библиотеку, а при чтении крешнулся на ассерте
источник

MO

Mar Ort in Kotlin JS
А что за программа там была? Можно посмотреть или сложно понять?
источник

AN

Alexander Nozik in Kotlin JS
источник

AN

Alexander Nozik in Kotlin JS
Сложно понять, там очень жирная логика. И ошибка валится в самом жирном модуле
источник

MO

Mar Ort in Kotlin JS
Спасибо
источник

MO

Mar Ort in Kotlin JS
Хех, как обычно в общем-то 🙂

Посмотрю
источник

AN

Alexander Nozik in Kotlin JS
Если вы напишите, на что смотреть, то я попробую сам поискать.
источник

MO

Mar Ort in Kotlin JS
Сложно с ходу сказать, надо бы там еще диагностики улучшить конечно, чтобы было понятно
источник

MO

Mar Ort in Kotlin JS
Их немного улучшили, но все равно недостаточно, как оказалось
источник

AN

Alexander Nozik in Kotlin JS
В нативе он прям класс говорит, в котором ошибка
источник

MO

Mar Ort in Kotlin JS
да, я примерно об этом же, почему-то в JS не заработало сразу, хотя вообще говоря там общая логика между нейтивом и js. Возможно в нейтиве эта же ошибка была бы такой же
источник