Performance 定义所有新的语法是否会影响Scheme和Racket中的性能?

Performance 定义所有新的语法是否会影响Scheme和Racket中的性能?,performance,compilation,binary,scheme,racket,Performance,Compilation,Binary,Scheme,Racket,我正在用racketdefine语法分析器创建一个新的lang。许多新的语法,甚至取代了基本形式 我打算在生产中使用新的lang,但不知道太多的新语法是否会影响性能 我应该编译成二进制还是类似的?TL;医生:没有表现惩罚 插入的语法在宏展开时展开。这意味着,如果您使用racomake,它将用宏的扩展形式取代所有宏的使用 有时,在创建特性时,扩展的代码可能比最初编写代码的方式更复杂。jit编译器也可能会像处理其他未优化的代码一样删除这一点 有时,您的功能需要更复杂的东西,而不能简化为最简单的形式。

我正在用racketdefine语法分析器创建一个新的lang。许多新的语法,甚至取代了基本形式

我打算在生产中使用新的lang,但不知道太多的新语法是否会影响性能


我应该编译成二进制还是类似的?

TL;医生:没有表现惩罚

插入的语法在宏展开时展开。这意味着,如果您使用
racomake
,它将用宏的扩展形式取代所有宏的使用

有时,在创建特性时,扩展的代码可能比最初编写代码的方式更复杂。jit编译器也可能会像处理其他未优化的代码一样删除这一点

有时,您的功能需要更复杂的东西,而不能简化为最简单的形式。在这种情况下,您可能会失去性能


例如,将覆盖
#%app
以执行数组和列表访问,而您通常会执行
(vector ref vec 3)
,其中语法
(vec 3)
可以表示数组访问和应用程序。扩展可能变成
(如果(racket:#%app vector?vec)(racket:#%app vector ref vec 3)(racket:#%app vec 3))
,如果系统不能断定它不是
vector?
,它将对每个应用程序进行测试。如果重新调整
[
]
的用途,使它们只是数组访问
[vec 5]
可以很容易地转换为
(vector ref vec 3)
,而
(vec 5)
没有性能影响,但这也意味着语法告诉您它是什么,并且不太通用

我想你的意思是
#%app
,而不是
%top
@SoraweePorncharoenwase,我确实是这么想的。谢谢