思维碎片
提示
盘古 OS
的设计仍在逐步改进与完善中,本文将随时发生变化,感兴趣的朋友们可以时刻保持关注;- 在下方的版权声明中有本文作者的联系方式,有不同意见和相关建议的朋友可以与其保持联系;
- 也可在本文底部的评论区登录 Github 后,直接发表您的观点;
版权声明
- 文章作者: flytreeleft - flytreeleft@crazydan.org
- 文章链接: https://studio.crazydan.org/docs/pangu-os/program-language/thoughts
- 版权声明: 本文章采用许可协议《署名 4.0 国际 (CC BY 4.0)》。 转载或商用请注明来自 Crazydan Studio!
- 结构化编辑。空格等为非重要内容
- 面向结构编程
- 有限数据集类型
- 最少关键字
- 支持可逆计算:分层叠加;坐标定位;
- 以命名空间方式直接引入、赋值和覆盖其他附加结构的数据,不需要提前声明
- 统一采用等号定义变量、类型和函数,类似 Elm。变量的本质就是不带参数的函数
- 匹配分支可包含多个匹配项,不支持任意匹配以避免遗漏
- 引用 Hash 化(内容寻址): Unison Lang
- 编译期可对逻辑代码做差量修改
- 在代码的 AST 树的每个节点设置唯一标识作为定位坐标,用于支持差量定制。开发期引用 AST 树,构建后采用二进制
- 以结构化方式展示和编写代码,彻底消除代码格式不统一和太随意的问题。消除函数名,不再需要定义名称。id 为引用唯一标识,hash 为内容唯一标识
- 以数学符号编写函数?:
f(x, y) = x + y
- 命名参数的管道支持:
{a: 1, b: 2} | f {c: 3} <=> f {a: 1, b: 2, c: 3}
,即多组命名参数列表将在合并为一组后再传给函数 - 采用中缀表达式编写函数?:
f x y = (+ x y)
- 数据类型:tuple 类型
(a,b,c,...)
;union 类型type enum = A | B | C,type Tree a = Empty | Node a (Tree a) (Tree a),type User = Anonymous | Named String
;模式匹配;不可变; - 文档结构化:代码即文档,文档即代码。参考 typst
- 函数化文档系统
- 相同文本定义为函数,在各处调用函数进行文本引用,确保唯一性
- 样式和块也是函数,支持统一维护和按需定制
- 左右布局,左侧为文档编辑,右侧为函数
- 可随时将相同文本提取为函数,也可自动识别
- 可导入已有文档,输出任意格式文档。对已有目录内文档做统一管理和源格式生成
代码样例
{ name="abc"
style { color=rgb( 0 , 255 , 255 )
}
}
属性即类型,类型即函数
type alias User =
{ name: User.Name
, gender: User.Gender
, age: User.Age
}
type alias User.Name =
{ first: User.Name.First
, family: User.Name.Family
}
type alias User.Name.First =
Capitalize String
type alias User.Name.Family =
Capitalize String
type User.Gender
= Male
| Female
type alias User.Age =
(Between 1 150) Int
user =
User
{ name: User.Name
{ first: User.Name.Fisrt '三'
, family: User.Name.Family '张'
}
, gender: User.Gener.Male
, age: User.Age 28
}
user.name.first
-- User.Name.Fisrt '三'
user.age
-- User.Age 28
user =
{ user | age = User.Age 200 }
user.age
-- Invalid (User.Age 200) 'User.Age 的有效值只能在 1~150 之间'
文档即代码,代码即文档
{{
{{{ repeat.signature }}}
{{{ repeat.signature.name }}} is a function which will repeat the provided text a specified number of times.
{{{ repeat.doc.examples }}}
}}
repeat.doc.examples : Doc
repeat.doc.examples = {{
Examples:
- (repeat 2 "rose is a ") ++ "rose"
{{{ (repeat 2 "rose is a ") ++ "rose" }}}
- repeat 0 "zero"
{{{ repeat 0 "zero" }}}
}}
- 文档本质为树形结构的数据(
Doc
),可以被赋值给变量 {{ ... }}
代表文档块,{{{ ... }}}
代表代码块, 并且二者可相互多级嵌套。在文档文件中,默认内容均为文档块, 而在代码文件中,默认内容均为代码- 在文档中的代码块内定义的函数和变量可在树的父子层级内可被调用, 即,其作用域为树的纵向方向,在同级内的后继代码块中也可访问
- 对于富文本内容则通过
Doc
中的函数进行处理,且函数一般均返回文档对象节点, 比如,在文档中插入图片{{{ Doc.image './img/doc-as-code.png' }}}
, 在文档中插入表格{{{ Doc.table (Doc.table.header []) (Doc.table.body []) }}}