我在一个讨论变量命名的论坛中进行了一次有趣的讨论.
除了惯例之外,我注意到变量具有Unicode字符的名称是合法的,例如以下是合法的:
int \u1234;
Run Code Online (Sandbox Code Playgroud)
但是,如果我给它命名为#,则会产生错误.根据Sun的教程,如果"以字母开头,美元符号为"$"或下划线字符"_",则有效."
但是unicode 1234是一些Ethiopic角色.那真正被定义为"字母"的是什么?
我想在Haskell中用标识符中的Unicode字符(非拉丁语)编写一些教育代码.(因此,对于除英语之外的自然语言的说话者而言,标识符看起来不错且自然,在写作中没有使用拉丁字符.)因此,我开始寻找适当的Haskell实现来实现这一点.
但是语言规范中指定了哪个功能?在寻找符合要求的实现时,我将如何引用此功能?(已知哪些Haskell实现支持Unicode标识符?)
事实证明,一个Haskell实现确实接受了带有Unicode标识符的代码,而另一个Hatsell实现未能接受它.我希望如果有一种方法可以用语言特征切换的形式来形式化我的代码的这个要求,那么如果我或其他人试图运行我的代码,那么将立即清楚他的实现是否缺失所需的功能,因此他应该寻找另一个.(可能还有一个用于此功能的维基页面 - "Unicode标识符",它将列出哪些现有实现支持它,以便在需要时可以知道去哪里.)
(顺便说一下,我在这个问题上加上了一个"语法"标签,但我实际上认为它是一个lexing级别的问题,比语言的语法更低.这里有一个标签用于lexing的特征语言的级别,而不是语言的语法规范的功能?)
syntax multilingual haskell language-implementation language-specifications
当我编程的时候,我经常发现自己编写的函数 - 应该 - (适当的英语)包含撇号(太糟糕的C开始每个人都认为撇号是一个合适的分隔符).例如:get_user's_group() -> get_users_group().你们怎么处理这种强迫性的英语模糊英语?只是忽略撇号?创建一个不同的措辞?