您尚未登录。

楼主 # 2022-01-04 18:44:21

jlau
会员
注册时间: 2018-06-11
已发帖子: 174
积分: 166.5

qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

暂时使用的名字是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,不用自己管理内存,其实也挺爽的。

离线

楼主 #1 2022-01-04 18:59:27

jlau
会员
注册时间: 2018-06-11
已发帖子: 174
积分: 166.5

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

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 免费观看,教学水平相当的高。每年一更,记得追新。

离线

#2 2022-01-05 09:56:28

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,085
积分: 1047.5

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

感谢分享!看了下demo,感觉响应速度非常快,声明式编程还算方便,不过有个问题就是UI还不太漂亮,控件也不多;商业价格29900欧还挺贵的,必须每年都交钱

离线

#3 2022-01-05 10:06:42

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,085
积分: 1047.5

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

我用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/>)

离线

#4 2022-01-05 15:46:27

Quotation
会员
注册时间: 2018-10-04
已发帖子: 279
积分: 261.5

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

return <AgeComponent year=10 />

这return的是什么语法?

离线

#5 2022-01-05 18:05:23

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,085
积分: 1047.5

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

Quotation 说:
return <AgeComponent year=10 />

这return的是什么语法?

JSX的语法,类似JS的ReactJS的那种写法。实际会被编译成Python的语法:AgeComponent(year = 10)

最近编辑记录 达克罗德 (2022-01-05 18:06:20)

离线

#6 2022-01-05 22:11:05

海石生风
会员
注册时间: 2019-07-02
已发帖子: 94
积分: 188

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

SixtyFPS的渲染后端目前只有两种:gl(OpenGL ES 2.0)跟qt,基本不能用在嵌入式系统上。

最近编辑记录 海石生风 (2022-01-05 22:11:27)

离线

楼主 #7 2022-01-06 15:27:41

jlau
会员
注册时间: 2018-06-11
已发帖子: 174
积分: 166.5

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

达克罗德 说:

感谢分享!看了下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)

离线

楼主 #8 2022-02-19 23:13:57

jlau
会员
注册时间: 2018-06-11
已发帖子: 174
积分: 166.5

Re: qt公司的两个前员工又将QtQuick开发了一遍,用rust语言

改名字了:
https://slint-ui.com

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn