Compiler construction 设计一种使用空格而不是符号来分组代码的语言是否更好?

Compiler construction 设计一种使用空格而不是符号来分组代码的语言是否更好?,compiler-construction,Compiler Construction,我发现自己设计了一种有趣的语言,它是Ruby和Java的交叉,当我在编译器/解释器上工作时,我发现自己正在考虑使用空格作为终止符,比如: class myClass extends baseClass function someFunction(arg) value eq firstValue value2 eq anotherValue x = 2 另一种方法是使用一个符号或一个单词作为终止符,比如JavaScript的“;”和Ruby的“end

我发现自己设计了一种有趣的语言,它是Ruby和Java的交叉,当我在编译器/解释器上工作时,我发现自己正在考虑使用空格作为终止符,比如:

class myClass extends baseClass
    function someFunction(arg)
       value eq firstValue 
       value2 eq anotherValue
    x = 2
另一种方法是使用一个符号或一个单词作为终止符,比如JavaScript的“;”和Ruby的“end”


现在,像Python这样的语言似乎更受欢迎,我想看看StackOverflow社区对老式语法的看法。为旧样式的语法编写解析器似乎容易得多,所以还是坚持Java/JavaScript样式好吗?如果是,为什么?

从根本上说,使用空格格式化代码没有错。但老实说,真的有一种格式化代码的最佳方法吗?为什么不让代码格式化程序来设计强制样式呢


我觉得有趣的是,近二十年来,一直有人指责“束缚和纪律语言”缺乏灵活性和世俗的编码结构(pascal、cobol),然而,我们已经看到它们在Java和Python等语言中重新出现。

鉴于任何两个人都可能在使代码可读的空白和缩进量上存在分歧,我认为空白是一个糟糕的上下文分隔符选择。我会让语言在空格方面更灵活,而不是让空格的数量和位置推断代码的组织。

抛开这些不谈,我更喜欢使用符号的语言,因为它们使代码更可读,更易于维护。大括号的可视分隔符是一个受欢迎的信息分隔符,当大括号不匹配、代码行不以分号结尾等无法编译时,更容易发现错误。VB是一种非常烦人的语言,因为你必须在代码中的换行符中明确表示出来。

一致的缩进或分界符号(例如大括号)都不能完全替代另一个。我个人的偏好是两者兼有


也就是说,可选缩进确实使一行程序更容易(我认为)。

Scala有这样一个功能,如果语法正确,则在aline的末尾推断出分号。我不喜欢它,因为它迫使我将块的开始括号放在前一行的末尾


在Python中,我在重组大块代码时遇到了问题,因为很容易弄乱缩进和块结构。

因为这是一个非常主观的问题,而且有很多样式,这就是我的品味:

块的“{}”JS样式或“结束函数”、“结束”VB样式。做任何事情,除了空白,这是非常讨厌的,阅读代码是非常困难的。在我的书中,空白或制表符作为一种特殊含义是错误的

不要使用特殊的终结者,我认为新的线路很好。你应该考虑“哪种情况是例外?”。在每一行末尾加上一个字符没有多大意义,例外是在一行中放多个语句

所以使用“;”作为分隔符来支持一行中的多个语句,但默认情况下不需要它。这是我的选择。

,讨论“大用户界面的科学”,即“大用户界面”的原则。(如中所示。)


这意味着,通过添加不必要的对比度,您正在增加必须处理的“噪音”级别。在我看来,从“用户界面”的角度来看,这意味着使用符号来分组代码而不是空格表示噪音级别的增加。

空格/缩进通常是一种风格。正如其他人所提到的,当3个人知道你应该使用什么间距时,你会得到4个答案。我当然更喜欢语言结构(即:{}或BEGIN/END)


此外,不同的编辑器可能定义了不同的选项卡。您可以在编辑器中编辑代码,将选项卡设置为3,代码看起来会很好。我可能在编辑器中编辑它,将选项卡设置为8,但不理解代码。这将代码限制为只能使用特定工具进行编辑,或者设置其他工具进行快速更改会很痛苦。

我看到了很多好的答案。让我再添一条皱纹

当我编写代码时,这似乎是一个主观问题

然而,如果我正在编写一个编写代码的程序,这可能会产生很大的影响

过去,我必须编写代码生成器来生成FORTRAN 77、C和C++。 Fortran 77每行仅允许一条语句,行长72个字符,前6列保留,注释在第1列以“c”开头,续行在第6列以字符标记,等等

<>你不能相信我有多喜欢生成C或C++,其中空白是一个选择问题,不是任务。< /P>
补充:此外,我认为预处理器宏在某些阵营中不受欢迎,但如果空格有意义,它们将受到严重限制。

请确保使用制表符而不是空格;)我将使分号成为可选的(您可以在一行上有一个不带分号的语句,如果您使用分号,可以有任意多个语句)。但是我发现基于空格的块结构令人恼火,所以请使用大括号,让缩进是为人类而不是编译器准备的。只要确保使用空格而不是制表符;)我通常也很喜欢它们,但我也喜欢类的Cocoa中的@end,以及Ruby中的end关键字,而不是分号,尽管有时它确实会使可读性成为一个问题。然而,有人可能会说,右大括号的“噪音”实际上是信号而不是噪音。你所指的那篇文章提到了对“视觉元素的需求,这些元素可以产生明显的不同”。我认为一个可见的角色比一个或多个不可见的角色更符合这个标准
function myFunction(arg){
   value = someVal;
}