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
deck
By Dmitry Naumov
deck
- 24