Glossary - common terms used in fbc development
 

ARG, 论据
在过程调用中传递给参数的表达式。


类型转换更改表达式的编译时数据类型,并导致转变(例如,float < - >int)或表达式值的位表示的重新解释(例如,整数< - >uinteger)。

补偿, 复合
  • 语言中的复合块:允许嵌套代码(如IF块,SCOPE块,NAMESPACE块等)的任何代码块。被称为化合物。
  • 复合符号:UDT,有时也是命名空间,因为两者可能包含嵌套(命名空间)符号,并且它们共享一些通用代码。

CONV, 转变
A转换是在相同值的两个不同表示之间进行转换的操作(例如,float < - >int或32bit < - >64位)。

CONV经常在编译器源中互换使用。例如,AST的CONV节点表示类型转换,无论它们是否执行转换。

一些(但不是全部)需要运行时转变,例如:
< - >整数
单个< - >整数
单个< - >双

类别和大小相等的类型之间的简单不需要运行时转变,因为位表示不会改变。例如:
< - >ushort
整数< - >uinteger
这些??也称为noconv演员.

构造函数, 构造函数
  • UDT构造函数
  • 模块构造函数

CTX, 上下文
fbc源中的UDT /“类”用于保存在多个过程或模块之间共享的全局信息。

降序, 描述
  • 动态字符串描述符
  • 动态数组描述符

灌木, 析构函数
  • UDT析构函数
  • 模块析构函数

FBCen
  • FreeBASIC编译器项目作为一个整体,Git仓库,项目在Sourceforge上注册
  • 编译程序的二进制/可执行文件(fbc或fbc.exe),由编译源构建
  • 编译器的主要模块/前端/驱动程序

fbctinf
FB编译时信息,另请参阅objinfo.

fbgfx
FB图形,通常指使用FB的内置图形关键字,在gfxlib2

前台1
将.bas输入文件汇编成下一个中间格式:.asm(-gen gas),.c(-gen gcc)或.ll(-gen llvm)

前台2
将.c(-gen gcc)或.ll(-gen llvm)中间文件汇编成.asm文件。(不适用于-gen气体,因为FB编译器直接生成.asm本身)

功能
A 程序具有结果值;有时也用于代替程序,如C.

gfxlib2
FB图形运行库实现从fbc项目。

hashtb
散列表,通常与符号表一起使用,以便快速查找该符号表中的符号。

libfbuz, libfbmt, libfbgfx, libfbgfxmt
rtlib/ gfxlib2来源建造的图书馆名称。名为lib*mt的库是他们的lib*同行的线程安全版本。它们使用ENABLE_MT#define构建。

本地
  • 有时候:在堆栈上赋值一个变量
  • 嵌套作用域中的任何符号,而不是全局/ toplevel命名空间。作用域静态变量也具有FB_SYMBATTRIB_LOCAL属性,即使它们未在堆栈上赋值。

方法
  • 具有THIS参数的成员过程。静态成员程序(没有THIS参数的那些)没有FB_SYMBATTRIB_METHOD.
  • 有时候:任何成员程序,带或不带THIS参数

noconv演员
A ,不需要转变.

正常建设
这里描述:正常vs.独立

objinfo
见DevObjinfo

PARAM, 参数
过程DECLARE语句或实体中声明的过程参数。

paramvar
对于每个参数,编译器将在过程的范围内创建一个相应的局部变量,允许用户代码访问参数。

PROC, 程序
任何功能,包括构造函数/析构函数,操作符重载,属性设置器/ getter。

独立构建
描述于:正常vs.独立

静态的
  • 静态变量赋值:堆上而不是堆栈,但仍然是范围 - 也可以参见本地.
  • 静态成员变量:实际上是外部.
  • 静态成员程序:没有THIS参数的成员程序也参见方法.
  • “静态数组”常用于代替“固定大小的数组”(QB语言)

结构,结构
TYPEUNION,也称为struct/ union.


A 程序没有结果(具有VOID结果)。

symtb
符号表:在特定范围内拥有FBSYMBOL的链接列表。这就是FBSYMBOL的生活。

rtlib
来自fbc项目的FB运行时库实现

UDT, 用户定义的类型
TYPE / UNION / ENUM,有时只是TYPE / UNION。

VREG
发出AST时使用虚拟寄存器。AST为组成输入程序的所有操作的操作数和结果创建一个vreg。每个后端都会发出不同的结果:
    • ASM后端实际上将vreg映射到实际的寄存器,并在它们再次释放时重新使用它们。然后,vregs也让x86代码发射器知道使用哪些精确寄存器。
    • C后端有时将vregs作为临时变量,有时候简单地插入一个表达式,其结果由vreg表示,代替了vreg的首次使用。
    • LLVM后端简单地将每个vreg发送为编号的中间值。
由于C / LLVM后端不重新使用vreg,所以vreg几乎是静态单指派形式;虽然不完全是因为还有自营业务等由AST生成,不考虑SSA形式。