我在Go写一个解释器,我正在寻找存储AST的惯用方法.我读了Go编译器源代码,似乎他们使用带有空方法的接口来表示AST.例如,我们有以下层次结构,
Object
--Immovable
----Building
----Mountain
--Movable
----Car
----Bike
Run Code Online (Sandbox Code Playgroud)
这就是上述层次结构以"空方法"的方式实现的方式.
type Object interface {
object()
}
type Immovable interface {
Object
immovable()
}
type Building struct {
...
}
type Mountain struct {
...
}
type Movable interface {
Object
movable()
}
type Car struct {
...
}
type Mountain struct {
...
}
func (*Building) object() {}
func (*Mountain) object() {}
func (*Car) object() {}
func (*Bike) object() {}
func (*Building) immovable() {}
func (*Mountain) immovable() {}
func (*Car) movable() …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来实现Rust中的内存池.
我想以块的形式分配一组相关的小对象,并一次删除对象集.对象不会单独释放.这种方法有几个好处:
有没有办法在Rust中创建这样的分配器?
正如问题所说,我想在Ada中创建一个动态分配的数组.像C++这样的东西std::vector,我不希望将数组的长度存储在一个单独的变量中,就像在这里完成一样.由于Ada支持泛型,是否可以std::vector在Ada中创建类似的功能?