我想在Haskell中用标识符中的Unicode字符(非拉丁语)编写一些教育代码.(因此,对于除英语之外的自然语言的说话者而言,标识符看起来不错且自然,在写作中没有使用拉丁字符.)因此,我开始寻找适当的Haskell实现来实现这一点.
但是语言规范中指定了哪个功能?在寻找符合要求的实现时,我将如何引用此功能?(已知哪些Haskell实现支持Unicode标识符?)
事实证明,一个Haskell实现确实接受了带有Unicode标识符的代码,而另一个Hatsell实现未能接受它.我希望如果有一种方法可以用语言特征切换的形式来形式化我的代码的这个要求,那么如果我或其他人试图运行我的代码,那么将立即清楚他的实现是否缺失所需的功能,因此他应该寻找另一个.(可能还有一个用于此功能的维基页面 - "Unicode标识符",它将列出哪些现有实现支持它,以便在需要时可以知道去哪里.)
(顺便说一下,我在这个问题上加上了一个"语法"标签,但我实际上认为它是一个lexing级别的问题,比语言的语法更低.这里有一个标签用于lexing的特征语言的级别,而不是语言的语法规范的功能?)
syntax multilingual haskell language-implementation language-specifications
大多数编程语言都对Unicode 有一些支持,但是所有编程语言都有一些或多或少的记录的极端情况,其中的东西将无法正常工作.
例子
Java: StringBuilder/StringBuffer中的reverse()正常工作.但是如果一个字符需要超过16位进行编码,那么String中的length(),charAt()等就不会出现.
C#: 没有找到正确的反向方法,长度和索引访问返回错误的结果.
Perl:同样的问题.
PHP: 根本没有Unicode的想法,mbstring有一些更好的工作替代品.
我想知道是否有一种编程语言,它具有完整和正确的Unicode支持?那里必须做出什么妥协才能实现这样的目标?
它是如何在内部实施的?
我看到Python 3在这方面有一些很大的变化.Python 3现在与正确的实现有多接近?
language-agnostic string unicode encoding programming-languages
我正在寻找新的语言,对于我不再需要担心字符串问题,我在PHP中用于新项目的过多其他问题.
我倾向于发现Java太冗长和混乱,我不想用6英尺的杆子触摸Windows往往排除.Net.这基本上留下了其他所有东西 - 除了PHP,C和C++(我知道后两个与unicode的东西混乱,无论ICU库如何).
我简要列出了迄今为止的一些语言,即Ruby(喜欢mixins),Python,Lisp和Javascript(node.js).但是,我发现有关unicode 支持的高度不一致的 信息 ,我害怕(缺乏时间......)学习它们中的每一个,以至于我可以安全地破解它以排除它.
据我所知,Python 3 似乎拥有它.和Ruby 1.9一样.Lisp 不一定.大概是Javascript.
对于一种语言来说,可以说比unicode支持更多,但根据我的经验,它在处理语言环境时往往成为一个主要的缺点.
我也意识到这个问题有些主观.(请不要因为这个原因关闭它:我实际上是链接到我发现不满意的几个SO线程.)但是......作为这些语言的用户,它们在实践中如何支持unicode?
由于Java代码可以在任何Java VM中运行,我想知道如何以编程方式识别支持哪种Unicode版本?