aFun是一款通用的动态解释型编程语言,具有函数式编程范式和面向对象编程范式。它可以与C语言联动,可以调用C的高效率函数,同时不失编程的抽象性。
- 保持简单
- 和谐统一更优雅
- 关注做什么而不是怎么做
- 状态可在运行时被修改
- 灵活性与安全可以并存
- 注释和提示信息很重要
- 计算机的时间比人的时间廉价
保持简单,可以使用更简洁的语法就不使用复杂的方法。
- 在编写aFun代码时,可以使用字面量解决的问题就不要使用函数回调;
- 尽量为函数添加默认参数,简化函数调用时的参数负担;
- 不是编写一个为用户完成所有决定的程序,相反程序应该有更多的参数供用户定制,但是需要一个合适的默认参数。
- 扁平胜于嵌套,但若嵌套更能表现意思则应使用嵌套而非扁平。
- 变量名应体现具体意思,可以利用符号。如
int->str
比int_to_str
更优雅。
和谐统一更优雅,在aFun中追求和谐与统一。正是因为这种和谐、统一,令aFun有更少的公理,使得aFun更容易被理解与上手。
- 内置对象和非内置对象的地位是相同的,底层实现也是相似的、统一的。
- if分支、for分支底层都是通过函数实现的,甚至可以添加任意新分支或去除任意分支。
- 无论是用户拓展的字面量还是基础的字面量(如
int
),都是通过.afg
文件中正则表达式实现匹配的。 - 和谐与统一不应仅仅在表面上体现为统一,这往往会造成漏洞。
- 和谐统一的界面、接口比混乱不堪明显更加优雅。
关注做什么而不是怎么做,合理的模块化代码,通过OOP将代码分类。同时,使用类库而不是自己造轮子。
- 例如,使用
map
函数用于遍历列表,而不是手写一个for
循环遍历列表。 - 例如,计算图形面积时,应该为不同图形封装一个类,而不是把所有图形面积计算的代码放在一个函数中。
- 代码应该抽象,而不总是关注底层。
状态可在运行时被修改,代码的语义、对象的标识等都可在运行时被修改。
- 代码可以生成代码、分析代码、修改代码。
- 前缀的语义可以在运行时被改变。
- 对象的类型(如,是否可被继承、是否内联函数)可在运行时被修改。
- 运行时状态修改有时候会带来灾难,但是一定程度上提高了灵活性。
afc
提供了大量的API供这种运行时状态修改。
灵活性与安全性并存,灵活性与安全性之间可以有所取舍和偏袒。
- 合约、权限限定等都是可选的。
- 语言的动态性,运行时状态修改为aFun提供了很大的灵活性。
afc
提供的API时aFun灵活性的有力支持。- 对象为
afc
提供的API是afc
运行的有力支持。 - 一次性任务的代码以及激进的大型项目代码应追求灵活性,而稳定的大型项目的代码应追求安全性。
注释和提示信息很重要,aFun会保存注释信息,而不仅仅是无视他。
- 使用函数前,查阅函数的注释信息。
- 使用变量、函数前,查阅其合约信息以及权限信息。
- aFun会将注释信息、合约信息、权限信息处理为一个文本,记录下来。
计算机的时间比人的时间廉价,编码时应思考问题的解决方案,而不是思考二进制代码。
- 为了提供逻辑与思维的便利,可以适度割让一定的效率。
- 现在对硬件的浪费,在未来或许只是一种寻常事。
- 与关注做什么而不是怎么做类似,怎么做是计算机的事情,aFun通常提供了高效的实现函数。
项目依赖于PCRE2
库,因此需要提前安装该库,并且在配置CMAKE
时指定一下参数:
PCRE2_ROOT:PATH=<安装目录> # 不指定则按默认路径寻找
PCRE2_USE_STATIC_LIBS:BOOL=<是否为静态库> # 不指定则默认为动态库
项目依赖于FFlags
库,因此需要提前安装该库,并且在配置CMAKE
时指定一下参数:
FFlags_ROOT:PATH=<安装目录> # 必须指定
在windows
平台编译时依赖于dlfcn-win32
库,因此需要提前安装该库,并且在配置CMAKE
时指定一下参数:
dlfcn-win32_ROOT:PATH=<安装目录> # 不指定则按默认路径寻找