暂时使用的名字是SixtyFPS: https://sixtyfps.io
他们又搞了门很像qml的UI DSL,这个DSL可以用rust的宏系统在编译时转换成rust代码,然后通过rust编译器统一编译成二进制代码。这样的设计会得到比QtQuick更高的性能。
这个思路我在这里也说过,果然是很好的策略。
不过这样的设计也会引入双语言的问题,就是ui部分是一门语言,主逻辑部分又是另一门语言,虽然SixtyFPS的UI DSL跟rust相像,但不免还是要学习和同时使用两门语言。
对比flutter,jetpack compose,swiftui这三个主流的声明式UI框架,它们的UI和逻辑都是同一门语言。flutter对语言特性的要求是最少的,但看上去并不那么“声明式”;jetpack compose通过编译器插件做转换(如果理解不对请指出);swiftui在语言上加料,直接在编译器上增加swiftui所需特征支持。可以说都各有取舍,各有爽点和槽点,没有百分百完美。
跟qt使用GPL和商业授权这两种授权模式相比,SixtyFPS加多了一种名为“大使(Ambassador)”的授权,客户可以不交费同时不开源,但需要宣传SixtyFPS。这对中小微企业比较有吸引力,对SixtyFPS自然也有营销的价值。更高的性能、更安全的语言、更普适的授权,我觉得假以时日SixtyFPS很可能会取得比qt更大的发展。再加上SixtyFPS在欧洲工业中心德国,未来更可期。当然中间被qt收购也说不准。
SixtyFPS支持rust、c++、js作为主语言。rust学习有点难度,而且生态还处于拓荒阶段尚待成熟;c++容易出bug,想写稳定需要功夫;js性能慢,脚本语言也不适合写大程序,各有各难点。如果系统有gpu的还是优先选择flutter。高端ap用flutter,低端ap或mcu用SixtyFPS应该是比较实用的选择,特别是flutter刚开始就以支持gpu加速为设计目标,SixtyFPS则相反到现在对gpu加速支持并不完善。即使未来SixtyFPS对gpu加速支持完善了,但高端ap性能强,拿点性能出来支持GC,不用自己管理内存,其实也挺爽的。
离线
SixtyFPS提供了一个简单的上手教程: https://sixtyfps.io/releases/0.1.5/docs/tutorial/rust/getting_started.html
不妨跟斯坦福的CS139课程做对比。斯坦福的CS139课程是教SwiftUI的,开始那几课是写一个记忆力游戏。SixtyFPS的这个上手教程也是写记忆力游戏,正好可以相互对比,看看使用不同的声明式UI库编写应用的差异。
我怀疑SixtyFPS的这个上手教程是故意选择写记忆力游戏这么一个例子,好让大家跟斯坦福的CS139课程内容做比较。当然罗,即使两边都看过后,我还是喜欢SwiftUI多点。
斯坦福的CS139课程可以在 youtube.com 免费观看,教学水平相当的高。每年一更,记得追新。
离线
感谢分享!看了下demo,感觉响应速度非常快,声明式编程还算方便,不过有个问题就是UI还不太漂亮,控件也不多;商业价格29900欧还挺贵的,必须每年都交钱
离线
我用Python也做了个声明式框架,一直没有完工,这是初步效果:支持class组件和stateless函数组件
class AgeComponent(Component):
def render(self):
return Text(text = f"I\'m {self.props['year']} years old")
# stateless functional component
def AgeFunctionComponent(age):
if age < 15:
return <AgeComponent year=10 />
else:
return <Text text=" I'm Adult" />
class MyApp(Component):
age = State(9)
@thread
def add_age(self):
for i in range(100):
self.age += 1
print(f'age:{self.age}')
# time.sleep(0.01)
def render(self):
return (
<App>
{<Text text=" I'm Child" visible = {self.age > 15}/> if self.age < 18 else <Text text=" I'm Adult" />}
<Text text=" ---------------------------- " />
<AgeFunctionComponent age = {self.age} />
<AgeComponent year={self.age + 1} />
<Button text = 'Press Me' on_press = {self.add_age}/>
</App>
)
render(<MyApp/>)
离线
return <AgeComponent year=10 />
这return的是什么语法?
离线
return <AgeComponent year=10 />
这return的是什么语法?
JSX的语法,类似JS的ReactJS的那种写法。实际会被编译成Python的语法:AgeComponent(year = 10)
最近编辑记录 达克罗德 (2022-01-05 18:06:20)
离线
感谢分享!看了下demo,感觉响应速度非常快,声明式编程还算方便,不过有个问题就是UI还不太漂亮,控件也不多;商业价格29900欧还挺贵的,必须每年都交钱
20万RMB一年,也就一个熟手rust程序员的普通工资水平,真不贵。
想想有哪些公司是需要高性能,低时延,高安全,又不能开源的app的,这些公司很可能是吃军工,航空航天,汽车行业饭的,利润之高根本不在乎这20万。
何况这20万不单单是买license还有技术支持。
普通民用消费市场,没必要非要上SixtyFPS,市面一堆c/c++的ui库,出原型又快,人还好招,消费产品出点bug可以接受。
rust的ui库较大范围替代c++ ui库,我想还有5到10年的路要走。现在可以上手,但不建议立马就用上。
最近编辑记录 jlau (2022-01-06 16:16:14)
离线
改名字了:
https://slint-ui.com
离线
试用了一下,在F1C上也移植了下,感觉还是很nice原生就有DFB,但是不知道为啥如果假如select轮询后,linuxfb会出现有的timer会不触发,死循环是没这个问题的,估计还是自己的问题,总体感觉还是很不错,打印机demo也就1m左右
离线
@jlau
不是EUR 5900 永久吗?
离线
感觉不错。就是在H7上运行的话好像是比较慢的。
离线