[Fix][Impl] 为了消除类构造带来的语法歧义,同时保持实现简洁和括号省略的语法,自此版本,引入了 `new` 操作符
造成歧义的原方法:
if a == A{}
条件是 a == A,还是 a == A{} ?
因此,现在使用 new a_struct{}来构造类
[Opti] 相较于 Fig v0.4.1-alpha版本,release O3同编译条件下
Fib普通递归法性能提升 ~50%
具体方式:
增加了小整数优化,-128~127的整数现在会直接从IntPool获取而不是新构造
...忘了
[Fix] 类构造 shorthand模式忘写了,现在补上了
[Feat][Impl] 类型声明现在接受一个表达式,原为Identifier。实现 var start: time.Time = time.now() 的效果
这是符合语法和语言特性的支持,类型为一等公民。类似Python的 <class 'type'>
[Impl] 修改了部分错误输出的细节
Fig Language - A Modern Scripting Language
Fig is a statically-typed, expression-oriented programming language designed for clarity, safety, and modern development practices. With features inspired by Go, Rust, and JavaScript, Fig aims to provide a productive development experience while maintaining strong type safety.
Features
🚀 Core Language Features
- Static typing with type inference - Strong typing with minimal annotations
- Modern control flow - Full
forloop support with proper scoping - First-class functions - Lambda expressions and closures
- Rich data structures - Structs, lists, maps, and tuples
- Memory safety - No null pointer exceptions, automatic memory management
🔧 Technical Highlights
- Three-level scoping for loops - Proper variable isolation in iterations
- Smart semicolon handling - Flexible statement termination with RAII guards
- Comprehensive error handling - Detailed error messages with source locations
- Clean C++ implementation - Modern C++23 with RAII and smart pointers
🔧 Install
Installation
Prerequisites
Xmake version 3.0.0 or higher must be installed on your system.
Build Instructions
- Clone the repository:
git clone https://github.com/PuqiAR/Fig.git
- Navigate to the project directory:
cd Fig
- Build the project:
xmake build Fig
- Run the program:
xmake run Fig [file]
Replace [file] with the path to your input file.
📁 Project Structure
. ├── ExampleCodes # Example programs & performance tests │ └── SpeedTest # Performance benchmark samples ├── LICENSE # Project license ├── Logo # Project logo assets ├── README.md # English README ├── README_ZH-CN.md # Chinese README ├── compile_flags.txt # Compiler flags helper ├── fig-vscode # VSCode extension project │ ├── node_modules # Extension dependencies │ ├── out # Built extension output │ ├── src # Extension source code │ └── syntaxes # Syntax highlighting definition ├── src # Core Fig language source │ ├── Ast # AST definitions │ ├── Context # Runtime context │ ├── Core # Core utilities (UTF8/string/etc.) │ ├── Error # Error handling system │ ├── Evaluator # Interpreter / evaluator │ ├── Lexer # Lexical analyzer │ ├── Module # Modules and builtins │ ├── Parser # Parser │ ├── Token # Token definitions │ ├── Utils # Utilities & helper headers │ └── Value # Runtime type/value system ├── test.fig # Test script └── xmake.lua # Xmake build config
Language Philosophy
Fig is designed around several core principles:
Clarity over cleverness - Code should be readable first
Safety by default - Prevent common errors at compile time
Modern ergonomics - Developer experience matters
Gradual learning - Simple to start, powerful when needed