#deriving #visitor #traits #procedural #inference #macro #specs

specs-visitor-derive

为specs-derive中派生特质提供的过程宏

4个版本 (2个破坏性更新)

0.3.0 2019年1月7日
0.2.0 2019年1月4日
0.1.1 2018年12月12日
0.1.0 2018年12月12日

#32 in #visitor


2 crate使用

MIT许可证

9KB
187

tin CircleCI codecov docs

tin是一种新的静态结构化编程语言。其主要目的是嵌入到其他程序中(类似于Lua等),但易于编译(最初是JIT)。

tin是创建您应用程序焊料所需的东西。使用tin可以轻松构建类型安全的插件API。

尽管tin有化学符号Sn,但tin文件通常使用.tn扩展名,因为它更容易记忆。

目前,该语言仍在开发中。最小可行产品(MVP)将是一个名为tin的Rust库和可执行文件,它包含JIT编译器和基本的类型推断。

Crate | 文档

示例

tin纯粹是面向表达式的;实际上没有类型。为了定义一个类型,你需要为该类型提供一个示例值。这与基于原型的类型系统非常相似,只不过不支持继承。

/* Defines the Int type by giving an example value */
Int = 0i64;
/* Similarly for String */
String = "";

/* A Person is anything that has both a name of type String and an age of type Int
 * The definintion is identical to: { name: "", age: 0i64 }
 */
Person = { name: String, age: Int };

一切都是表达式或变量定义。例如,没有函数;只有可以分配给变量的lambda函数。

getAge = |person: Person| Int { person.age };

tin支持结构化多态类型推断

getAge = |person| { person.age };

main = || {
  getAge({age: 3}); /* → returns 3 */
  getAge({age: "Hello"}); /* → returns "Hello" */
  getAge({name: "Hello"}) /* compile time error */
};

tin有几个内置类型

/* An unsigned 8-bit integer */
ExampleU8 = 0u8;
/* An unsigned 16-bit integer */
ExampleU16 = 0u16;
/* An unsigned 32-bit integer */
ExampleU32 = 0u32;
/* An unsigned 64-bit integer */
ExampleU64 = 0u64;

/* A signed 8-bit integer */
ExampleI8 = 0i8;
/* A signed 16-bit integer */
ExampleI16 = 0i16;
/* A signed 32-bit integer */
ExampleI32 = 0i32;
/* A signed 64-bit integer */
ExampleI64 = 0i64;

/* A 32 bit floating point number */
ExampleF32 = 0.0f32;
/* A 64 bit floating point number */
ExampleF64 = 0.0f64;

/* An UTF-8 string */
ExampleString = "";

/* A symbol value */
ExampleSymbol = :foo;

/* A tuple */
ExampleTuple = (String, I8, I8);
/* A record */
ExampleRecord = { name: String, x: I8, y: I8 };

/* A lambda */
ExampleLambda = |tuple: ExampleTuple, record: ExampleRecord, int: I8| I8 { int };

lib.rs:

用于派生specs实体访问者的过程宏。

这些访问者可用于实现编译成非常有效的代码的ECS图的泛型转换。

请参阅 specs-visitor crate 了解由本 crate 导出的实际类型的 API 文档。

依赖项

约 2MB
约 47K SLoC