Title Text

STAR

@memo function MyComponent(name: string) {
    let counter = rememberMutableState(0)
    Button({ color: Color.Red }) {
        Text(`Hello, ${name}`)
        Text(`${counter.value} times!`)
        OnClick(()=> {
            counter.value++
        })
    }
}
@Entry
@Component
struct Hello {
  @State myText: string = 'World';

  build() {
    Column() {
      Text(`Hello ${this.myText}`)
        .fontSize(50)
      Divider()
      Button('Click me')
        .onClick(() => {
          this.myText = 'ArkUI'
        })
    }
    .height(50)
    .width(100)
    .margin({ top: 20 })
  }
}

STAR

Требования:

  • мигрировать два плагина к tsc на новый компилятор
  • работа с плагинами не должна быть bottleneck-ом в производительности

Входные данные:

  • два tsc плагина на 10k+ loc
  • отсутствие нативного API от компилятора

STAR

Действия:

  • Сделать mock-прототип и презентовать его компиляторной команде
  • Сформулировать требования к нативному API
  • Написать прототип с настоящим компилятором в виде бекенда
  • Развивать прототип / генерировать API

STAR

Результаты:

  • плагины мигрированы без задержек со стороны библиотеки API
  • успешный запуск системного приложения на новом стеке
  • легкость поддержки библиотеки с развитием компиятора

compiler.so

node_addon (.node/.so)

interop

C++

Managed (node)

bindings

wrappers

factory
creates/updates

visitEachChild

execution driver

binder

utils

public

Компиляторная команда

UI команда

Продуктовая команда

panda sdk
(compiler.so + .idl)

api generator

managed API library

new runtime engine
plugin

arkui plugin

Made with Slides.com