几个小的建议

增加Len的trait
很多时候,rust中很多into iter 迭代器为空需要特殊处理,但是因为语言没有自带len trait,而默认容器的iter也没有size,得用第三方的len trait ,很烦
2.
语言介绍中增加wasm文件大小的对比
3.
提供vim的coc插件,因为习惯用vim编程

补充第2点,除了文件大小,运行时性能、内存开销什么的也可以对比下

增加1个建议
4. 学习rust的build.rs、const fn和zig的编译期运行,让所有函数都可以在编译期运行。
参考 Zig Programming Language Blurs the Line Between Compile-Time and Run-Time - Andrew Kelley

Zig Programming Language Blurs the Line Between Compile-Time and Run-Time

Zig 编程语言模糊了编译时和运行时之间的界限

这种扩展,可以替代宏来做元编程,比如做数据库orm的时候就特别有用,
我之前就用过程宏搞过一个rust在编译期间连接数据库,生成表结构对应的类的东西
也就是在编译期间,可以动态的输出代码,然后把输出的代码再次编译
rust有个cargo expand,可以做宏展开,查看输出的代码,很方便

1 个赞

增加1个建议

增加类似python的装饰器语法,typescript也有类似的语法
https://pythonhowto.readthedocs.io/zh-cn/latest/decorator.html
https://www.tslang.cn/docs/handbook/decorators.html
装饰器语法很多时候,大家还希望函数签名和底层函数一致,
但是,有时候也会修改函数签名,
建议考虑下怎么实现比较优雅

6.看文档,现在还没有位移操作,感觉这是是必须的要有的

  1. 数组的文档,感觉太简陋,比如数组有什么函数(len,find,reverse什么)的都没写
    建议参考rust的文档
    array - Rust
    从程序中自动导出一个函数的清单文档,方便开发

deno可以控制模块权限
https://nugine.github.io/deno-manual-cn/getting_started/permissions.html
我觉得moonbitlang很适合用来做嵌入式环境的语言
比如我写一个网站,让用户可以提交自己的wasm,作为类似cloudflare的worker
但是,比如我希望限制用户不能访问tcp、udp,避免他们用来搞ddos,
只能用来处理字符串,比如把图片加水印,可以引用我的函数来异步请求http(我可以根据流量计费,这样wasm运行时不能禁用tcp权限,因为需要可以网络请求,但是用户不能直接用,必须通过我的函数用),
希望未来在实现异步、网络功能之后,加入权限系统(比如,限制用户不可以用某个模块的某个函数)
设计的时候也可以考虑这个

2 个赞
  1. 建议搞一个roadmap的页面,给出每个季度的进展和计划
  1. 因为有泛型,建议支持类型typedef别名和默认泛型参数,用起来方便

说实话typedef这个关键词太长, Bytes := List<u8> 这种语法感觉更加简约

  1. 进一步完善异常系统
    异常应该支持区分类型,比如 err is HttpError ,err is HttpNotFound 这种
    这个怎么设计,需要思考一下,可以参考python和rust的错误系统
  • 关于Len的trait,现在标准库还在计划当中,后续设计时会和社区一起讨论
  • 与其他语言产生的wasm大小、运行时性能参数的对比可以在MoonBit docs仓库找到
  • 语言服务方面,目前我们专注于vscode插件的开发,未来会有其他编辑器的支持。
  • 编译期执行和类似”装饰器“的语法,这个不在我们目前的计划当中,未来可能会纳入讨论。
  • MoonBit有内建的位移操作:
    fn lsl(self : Int) -> Int  // 逻辑左移
    fn lsr(self : Int) -> Int // 逻辑右移
    fn asr(self : Int) -> Int // 算术右移
    fn land(self : Int) -> Int // 按位与
    fn lor(self : Int) -> Int // 按位或
    fn lxor(self : Int) -> Int // 按位异或
    
    这部分还没有文档,之后会补充,也有可能补充到mooncakes.io的内建包/标准库文档中。其他的内建数据类型(array、ref、option)也是一样的。
  • 关于每个季度的详细计划,我们后续会更新在MoonBit docs仓库的issue里。详细进展可以关注我们的每周动态,在微信公众号或者官网上都可以找到,论坛里也会同步更新。
  • 可以使用type MyInt List[Int]声明一个别名
  • 关于异常处理,目前我们已经有了问号操作符,配合Option[T] Result[T,E]可以起到early return的效果。