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

SongZihuan a41c3411ab feat: 修改版本号 3 年之前
cmake 73a49c9c6a style: 修改命名规范 3 年之前
deps 826c300611 fix: cygwin时不安装cygwin1.dll 3 年之前
include f67f1ece37 feat: 添加守护器生成工具 3 年之前
lang f2289d0344 feat: 修复HuanGetText的错误 3 年之前
src f67f1ece37 feat: 添加守护器生成工具 3 年之前
test 4eddfee70d feat: 语法系统新增错误输出和翻译 3 年之前
.gitignore e1de965caf refactor: 调整文件结构 3 年之前
.gitmodules e1de965caf refactor: 调整文件结构 3 年之前
CMakeLists.txt 35c0b2d069 feat: 使用CMake定义SUFFIX和PREFIX宏 3 年之前
LICENSE fbc9e34860 style: 修改LICENSE 3 年之前
README.md cde511d8b9 feat: 添加了aFun的基础部件 3 年之前
version a41c3411ab feat: 修改版本号 3 年之前
version-info 237a858191 feat: 添加版本管理 3 年之前

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通常提供了高效的实现函数。