宋子桓开发的一个语言(aFun Language)

SongZihuan 585c10c060 refactor & fix: 修复CMake找不到dl库时编译失败的问题 il y a 3 ans
cmake 585c10c060 refactor & fix: 修复CMake找不到dl库时编译失败的问题 il y a 3 ans
deps 9fef3e23da fix: 统一CMake指定-G参数的方式 il y a 3 ans
include c9a1a4882f refactor: 拆分runtime模块 il y a 3 ans
lang 5cd9dc4c27 fix: 修复CMake中add_custom_xxx的转义错误 il y a 3 ans
src c9a1a4882f refactor: 拆分runtime模块 il y a 3 ans
test 92d307e229 refactor & style: 调整文件名 il y a 3 ans
.gitignore 07598f509c refactor & feat: 调整CMake输出 il y a 3 ans
.gitmodules d94e2fd6ed refactor & feat: 去除fflags il y a 3 ans
CMakeLists.txt 92d307e229 refactor & style: 调整文件名 il y a 3 ans
LICENSE fbc9e34860 style: 修改LICENSE il y a 3 ans
README.md 120c4581f9 refactor: 调整依赖包的安装方式 il y a 3 ans
version a41c3411ab feat: 修改版本号 il y a 3 ans
version-info 237a858191 feat: 添加版本管理 il y a 3 ans

README.md

# aFunlang 编程语言

aFun简介

aFun是一款通用的动态解释型编程语言,具有函数式编程范式和面向对象编程范式。它可以与C语言联动,可以调用C的高效率函数,同时不失编程的抽象性。

aFun的设计哲学

  • 保持简单
  • 和谐统一更优雅
  • 关注做什么而不是怎么做
  • 状态可在运行时被修改
  • 灵活性与安全可以并存
  • 注释和提示信息很重要
  • 计算机的时间比人的时间廉价

保持简单,可以使用更简洁的语法就不使用复杂的方法。

  1. 在编写aFun代码时,可以使用字面量解决的问题就不要使用函数回调;
  2. 尽量为函数添加默认参数,简化函数调用时的参数负担;
  3. 不是编写一个为用户完成所有决定的程序,相反程序应该有更多的参数供用户定制,但是需要一个合适的默认参数。
  4. 扁平胜于嵌套,但若嵌套更能表现意思则应使用嵌套而非扁平。
  5. 变量名应体现具体意思,可以利用符号。如int->strint_to_str更优雅。

和谐统一更优雅,在aFun中追求和谐与统一。正是因为这种和谐、统一,令aFun有更少的公理,使得aFun更容易被理解与上手。

  1. 内置对象和非内置对象的地位是相同的,底层实现也是相似的、统一的。
  2. if分支、for分支底层都是通过函数实现的,甚至可以添加任意新分支或去除任意分支。
  3. 无论是用户拓展的字面量还是基础的字面量(如int),都是通过.afg文件中正则表达式实现匹配的。
  4. 和谐与统一不应仅仅在表面上体现为统一,这往往会造成漏洞。
  5. 和谐统一的界面、接口比混乱不堪明显更加优雅。

关注做什么而不是怎么做,合理的模块化代码,通过OOP将代码分类。同时,使用类库而不是自己造轮子。

  1. 例如,使用map函数用于遍历列表,而不是手写一个for循环遍历列表。
  2. 例如,计算图形面积时,应该为不同图形封装一个类,而不是把所有图形面积计算的代码放在一个函数中。
  3. 代码应该抽象,而不总是关注底层。

状态可在运行时被修改,代码的语义、对象的标识等都可在运行时被修改。

  1. 代码可以生成代码、分析代码、修改代码。
  2. 前缀的语义可以在运行时被改变。
  3. 对象的类型(如,是否可被继承、是否内联函数)可在运行时被修改。
  4. 运行时状态修改有时候会带来灾难,但是一定程度上提高了灵活性。afc提供了大量的API供这种运行时状态修改。

灵活性与安全性并存,灵活性与安全性之间可以有所取舍和偏袒。

  1. 合约、权限限定等都是可选的。
  2. 语言的动态性,运行时状态修改为aFun提供了很大的灵活性。
  3. afc提供的API时aFun灵活性的有力支持。
  4. 对象为afc提供的API是afc运行的有力支持。
  5. 一次性任务的代码以及激进的大型项目代码应追求灵活性,而稳定的大型项目的代码应追求安全性。

注释和提示信息很重要,aFun会保存注释信息,而不仅仅是无视他。

  1. 使用函数前,查阅函数的注释信息。
  2. 使用变量、函数前,查阅其合约信息以及权限信息。
  3. aFun会将注释信息、合约信息、权限信息处理为一个文本,记录下来。

计算机的时间比人的时间廉价,编码时应思考问题的解决方案,而不是思考二进制代码。

  1. 为了提供逻辑与思维的便利,可以适度割让一定的效率。
  2. 现在对硬件的浪费,在未来或许只是一种寻常事。
  3. 与关注做什么而不是怎么做类似,怎么做是计算机的事情,aFun通常提供了高效的实现函数。

项目依赖

PCRE2

项目依赖于PCRE2库,因此需要提前安装该库,并且在配置CMAKE时指定一下参数:

PCRE2_ROOT:PATH=<安装目录>  # 不指定则按默认路径寻找
PCRE2_USE_STATIC_LIBS:BOOL=<是否为静态库>  # 不指定则默认为动态库

FFlags

项目依赖于FFlags库,因此需要提前安装该库,并且在配置CMAKE时指定一下参数:

FFlags_ROOT:PATH=<安装目录>  # 必须指定

dlfcn-win32

windows平台编译时依赖于dlfcn-win32库,因此需要提前安装该库,并且在配置CMAKE时指定一下参数:

dlfcn-win32_ROOT:PATH=<安装目录>  # 不指定则按默认路径寻找