gpt4 book ai didi

language-agnostic - 语言内语义差异

转载 作者:行者123 更新时间:2023-12-04 09:00:11 25 4
gpt4 key购买 nike

我一直在考虑用我自己的语言(实用性:这是一个思想实验)。我提出的想法之一是语言中的语义变化。您将编写本质上的语义正则表达式,以替换为等效的代码。您可以在 D 中以不那么直接的形式看到这一点 - 它们具有转换为 D 代码的字符串混合。除了我打算以一种更循环的方式隐含地做它们。

现在,我来自 C++。所以如果你考虑:

string a, b, c, d;
// do stuff
a = b + c + d;

此代码导致各种临时文件。即使您有右值引用,您也会创建临时对象,它们只会更有效地重用。但是它们仍然存在并且仍然浪费性能。我在想,在最简单的情况下,如何消除这些。您可以编写一个语义正则表达式,将其转换为最优化的形式。
string a, b, c, d;
// do stuff
a.resize(b.size() + c.size() + d.size());
a = b; a += c; a += d;

如果我实现了 std::string,我可能会写得更快。关键是它们是隐式的——当你使用 std::string 类时,由 std::string 实现者编写的公理可以影响任何 std::string 代码。您可以将它放入现有的 C++ 代码库中,重新编译,并获得 std::string 实现者可以免费设想的最快的字符串连接。

目前,您可以进行的优化是有限的,因为您只有语言允许的上下文,在这种情况下,C++ 中的运算符重载仅采用两个参数,this 和 arg。但是语义正则表达式几乎可以获取您可能需要的所有上下文 - 因为您可以指定它匹配的内容 - 甚至可以匹配宿主语言中不存在的语言功能。例如,交换将是微不足道的
string a;
a.size;

为了
string a;
a.size();

如果您想窃取 C# 属性。您可以匹配类定义并实现编译或运行时反射等。

但是,我的意思是,它可能会令人困惑。如果有错误,或者幕后真正做了什么并没有反射(reflect)所编写的代码,那么追查可能是一个彻头彻尾的婊子,我还没有考虑过如何深入实现。你们如何看待我提议的语言功能?

哦,伙计,选择正确的标签。嗯……

编辑:关于我的一个答案,我也想违反限制范围。简单的事实是语义正则表达式没有限制(减去可能必须添加的实现细节)。例如,您可以将表达式
int i;
cin >> i;
int lols[i];

进入
int i;
cin >> i;
std::variable_array<int>(alloca(sizeof(int) * i), i);

alloca 的语义使得无法使用模板进行操作 - 如果您需要上述内容,您必须编写一个宏。在 C++03 或 C++0x 中,您不能封装自己的 VLA。

此外,语义正则表达式可以匹配实际上不调用任何编译时工作的代码。例如,您可以匹配类定义的每个成员并使用它来创建反射系统。迄今为止,这在 C++ 中也是不可能的。

最佳答案

如果您在 Google 上搜索诸如“C++ 表达式模板”之类的内容,您会发现实际上 C++ 已经具有非常相似的功能。根据您想出的语法,您的想法可能会使此类代码更易于理解(表达式模板 当然 不是微不足道的)但至少对我来说并不完全清楚您添加了多少(如果有的话)以真正的新功能的方式。

关于language-agnostic - 语言内语义差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3588651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com