我想知道是否有任何其他C#开发人员会发现它有一个改进,有一个编译器指令,csc.exe以使空白显着的空间Haskell或Python,其中各种类型的空白创建代码块.
虽然这肯定会远离C风格的语言,但在我看来,由于C#最终被编译成CIL(它仍然有大括号和分号),它实际上只是编译器可以解析的技巧.处理任何一种方式(也就是说,它可以处理重要的空格或不处理).由于curlies和分号通常是进入C#的障碍,它们实际上只是解析帮助程序(它们本身并没有赋予你的代码含义),所以它们可以被删除为Haskell/Python.
F#使用#light编译器指令处理它,您可以在F#1.1.12.3中的Lightweight语法选项中阅读该指令.
我想在C#中看到同样的事情:#SigSpace或某些指令,它会csc.exe像空白一样直接将源视为Haskell文件(仅作为示例).
标准C#:
public void WhiteSpaceSig()
{
List<string> names = new List<string>();
List<string> colors = new List<string>();
foreach (string name in names)
{
foreach (string color in colors)
{
// bla bla bla
}
}
}
Run Code Online (Sandbox Code Playgroud)
重要的空白:
#SigSpace
public void WhiteSpaceSig()
List<string> names = new List<string>()
List<string> colors = new List<string>()
foreach (string name in names)
foreach (string color in colors)
// bla bla bla
Run Code Online (Sandbox Code Playgroud)
我并不是说我想在C#中使用它,但我对这些权衡是什么感兴趣.我的猜测是,大多数C#开发人员已经习惯了语法,以至于他们无法看到它是多么模仿(尽管它最终可能使代码更容易阅读).
Ree*_*sey 11
如果你想要这种语法,为什么不使用IronPython或Boo而不是C#?
为此实现自定义语言似乎更好,而不是尝试调整C#.正如你所说,它们都编译为相同的IL,所以没有理由改变一个好的,干净的工作语法来实现本质上是一种新的语言语法.
您可能对 Kirill Osenkov 的论文“设计、实现和集成结构化 C# 代码编辑器”感兴趣。
基本思想是,虽然大括号是 C# 语言定义的一部分,但编辑器不必向您显示它们。Osenkov 为 SharpDevelop 实现了一个编辑器控件,它将大括号对表示为缩进,并使程序员能够更快地处理代码结构。跳转到链接文档中的第 113 页查看一个很好的示例。