gpt4 book ai didi

c# - C#、评估和自定义编译器中方法的纯度?

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:21 25 4
gpt4 key购买 nike

当使用调试器单步执行代码时,您是否曾因为 Visual Studio 没有重新计算某些监视表达式而感到沮丧?

我有,这里有人关心纯方法吗?没有副作用的方法?我喜欢 C# 的许多优点,但我无法编写纯函数,即没有副作用的静态方法。

如果您要构建自己的 C# 编译器,您可以在其中编写类似这样的代码,那会怎样。

function int func(readonly SomeRefType a, int x, int y) { return /*...*/; }

上面不仅是一个免费函数,唉,我不叫它方法,这个函数保证没有任何副作用。 C# 关键字 readonly 在这里可以用来表示这一点,并为纯函数提供契约。这些类型的功能总是可以被评估,而不会引起副作用。这是 Visual Studio 始终在 watch 中评估我的功能的一种方式,尽管错误地假设所有方法调用和用户运算符都有副作用。所有参数都按值复制的方法永远不会有副作用,但 Visual Studio 无法识别这一点。

我喜欢 C++,因为它可以在编译时执行,但我怀念 C# 中的这些东西,我认为 C# 对用户有点笨拙,基本上不允许某些表现力,伤害了程序员。许多事情实际上与您在编译时可以做什么有关,我实际上希望看到更多元程序,这些程序是由编译器运行以编译您的原始程序。

例如虽然 C# 有 bool 值并且不允许 if (var a = obj as MyRefType) 之类的东西,但它不会生成适当的代码。我做了一些挖掘并注意到 C# 如何无法为无分支条件生成适当的 IL,例如 x > y ? 1 : 0,C# 编译器没有使用的 IL 指令。

您想要或对开源 .NET 编译器感兴趣吗?它看起来像 C#,但在您可以用它做什么方面完全不同,更具表现力,更灵活,并且完全令人震惊?

最佳答案

不是真的。如果我想要不同的语言选项,我已经有了:

  • 功能性弯曲的 F#
  • Boo 用于具有自定义编译阶段的 DSL 助手

IMO,“由委员会设计”(或者甚至“由单个业余语言设计师设计”)语言最终与 C# 一样被深思熟虑的可能性非常小。

如果能多表达一些东西就好了?绝对。

拥有数十万懂同一种语言的人、来自真正了解它的人的内置 Visual Studio 集成等等,这是否相当方便?绝对!

对我来说,“看起来像 C# 但完全不同”听起来像是一个问题,而不是解决方案。

关于c# - C#、评估和自定义编译器中方法的纯度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719480/

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