【问题标题】:Which programming languages were designed with Unicode support from the beginning?哪些编程语言从一开始就设计有 Unicode 支持?
【发布时间】:2010-11-27 19:45:04
【问题描述】:

哪些广泛使用的编程语言是从头开始设计并支持 Unicode 的?

许多编程语言在后来的版本中添加了 Unicode 支持作为事后的想法,但哪些广泛使用的语言从一开始就提供了 Unicode 支持?

【问题讨论】:

  • 当然,许多最流行和最成功的编程语言早于 Unicode 的引入。
  • 而且(除了 python 3 之外)最早于 16 位以上的 unicode 扩展 - Java 和 .net 语言都支持 UCS2 以及稍后添加的处理代理的方法
  • 只是好奇,你为什么这么问?
  • 您说的是哪个版本的 Unicode?许多语言的设计都支持 Unicode 1.0,但很少有“从一开始”就支持 Unicode 4.0。您对哪些特定的 Unicode 功能感兴趣?
  • 罗马:纯语言历史兴趣。

标签: unicode programming-languages localization internationalization language-design


【解决方案1】:

Perl 6 从头开始​​提供完整的 unicode 支持。
Rakudo Perl 6 compiler 是第一个实现)

General overview

Unicode operators

字符串、正则表达式和语法都基于字素进行操作,即使对于那些没有组合表示的代码点组合(在这些情况下会动态生成组合表示人工代码点)。

存在一种特殊编码来处理未知编码“utf8-c8”的数据:这会在可能的情况下假定 utf-8,但会为不可编码的序列创建人工代码点,以便在必要时允许它们往返。

【讨论】:

    【解决方案2】:

    Python 3 中有许多重大变化,其中包括切换到 Unicode for all text

    所以 Python 并不是为 Unicode 设计的,但 Python 3 是。

    【讨论】:

    • Unicode 支持是在 2000 年添加到 Python 中的。因此,虽然还没有完全“彻底”,但它还为时过早。 python.org/dev/peps/pep-0100(编辑:实际上该文档在 2000 年变成了 PEP,Unicode 支持可能早于此)
    • 我对这个答案的投票数量感到惊讶。 Python 3 只是一个主要版本,而不是一种新的编程语言。
    【解决方案3】:

    Google 的 Go programming language 支持 Unicode 并使用 UTF-8。

    【讨论】:

      【解决方案4】:

      有时,一种语言在最初设计时就包含的功能并不总是最好的。

      随着时间的推移,语言发生了变化,许多语言变得臃肿,带有额外的功能,但不一定能与最初包含的功能保持同步。

      所以我只是抛弃了你不应该打折最近添加了 Unicode 的语言的想法。他们将有优势将 Unicode 添加到已经成熟的开发工具中,并有机会在第一时间做对。

      考虑到这一点,我想确保将 Delphi 包含在此处,作为您的答案之一。 Embarcadero 在他们的 Delphi 2009 版本中添加了 Unicode,并且做得非常好。这足以最终促使我从我使用了 10 年的 Delphi 4 升级。

      【讨论】:

        【解决方案5】:

        正如其他评论者所指出的,Java 和 .NET 语言虽然 Java 的字符串是 UTF-16 而不是 UCS 或 UTF-8。 (当时,这似乎是一个明智的想法!现在显然 UTF-8 或 UCS 会更好。)而且 Python 3 确实是与 Python 1.x 和 2.x 不同的、不兼容的语言,所以它也符合条件。

        1992 年左右的 Plan9 语言可能是第一个这样做的语言:它们的方言 C、rc、Alef、mk、ACID 等都支持 Unicode。他们采用了非常简单的方法,即任何不是 ASCII 的东西都是标识符字符。查看他们的paper from 1993 on the subject.(这是发明 UTF-8 的项目,这意味着他们可以以非常兼容的方式做到这一点,特别是无需通过所有程序检测二进制与文本。)

        支持非 ASCII 标识符的其他语言包括当前的 PHP。

        【讨论】:

          【解决方案6】:

          java 和 .net 语言

          【讨论】:

            【解决方案7】:

            我不知道这在其他语言中能走多远,但关于 C# 的一个有趣之处在于,不仅 runtimestring 类等)支持 unicode - 而且 unicode 是源中完全支持:

            using משליט = System.Object;
            using תוצאה = System.Int32;
            public class שלום : משליט  {
                public תוצאה בית() {
                    int אלף = 0;
                    for (int λ = 0; λ < 20; λ++) אלף+=λ;
                    return אלף;
                }
            }
            

            【讨论】:

            • (请注意,上面浏览器/编辑器中可能存在一些奇怪的从右到左的问题;如果将其粘贴到 VS 中,则为“int {name} = 0”)跨度>
            • @gw:尝试在 LINQPad 中运行 "πθ√".Select(c=&gt;CharUnicodeInfo.GetUnicodeCategory(c)),你会明白为什么 ;-)
            • 在 Perl 5 和 Perl 6 中相同。Perl 6 甚至有 Unicode 运算符。
            • Python 长期以来一直支持对源代码文件进行显式编码。只有在 Python 3 中,您才能拥有 Unicode 标识符。 Unicode 运算符是个糟糕的主意……
            【解决方案8】:

            从一开始就在编程语言中为未来设计 Unicode 支持确实很困难。

            Java 是将其设计到语言规范中的语言之一。但是,Java is different from v5 的 v1.0 和 Java SDK 的 v6 支持 Unicode。这主要是由于最初设计语言时语言规范所适应的 Unicode 版本。 Java 尝试在每个主要版本中跟踪 Unicode 标准的变化。

            JLS 的早期实现可能声称支持 Unicode,主要是因为 Unicode 本身支持 65536 个字符(Java v1.0 支持 Unicode 1.1,Java v1.4 支持 Unicode 3.0),这与占用的 16 位存储空间兼容按字符向上。 Unicode 3.1 改变了这种情况——它是一个不断发展的标准,通常每个版本都会添加更多字符。后来在 3.1 中添加的字符称为supplementary characters。 Java 5 通过JSR-204 添加了对补充字符的支持; Java 5 和 6 支持 Unicode 4.0。

            因此,如果不同的编程语言以不同的方式实现 Unicode 支持,请不要感到惊讶。

            另一方面,PHP(!!) 和 Ruby 在开始时并没有内置 Unicode 支持。

            PS:在Java 7中支持v5.1 Unicode。

            【讨论】:

              【解决方案9】:
              【解决方案10】:

              Java 使用 Unicode 字符集中的字符。

              【讨论】:

              • 大多数编程语言都使用 Unicode 字符集中的字符。 (他们只是限制他们使用的字符)
              【解决方案11】:

              Java 可能是第一个支持 Unicode 的流行语言。

              【讨论】:

              • 除了它“仅”支持基本多语言平面(这是 Unicode 在 Java 发明时所拥有的全部)这一事实之外。 .NET 框架是我所知道的第一种围绕“完整”unicode 支持设计的语言(包括包含代理项的字符串的正确长度......)
              • Java 永远支持完整的 Unicode 标准,而不仅仅是 BMP。字符串以 UTF-16 存储(不是 UCS-2,这意味着仅 BMP)。
              • 在设计 Java 时,Unicode 只是 BMP。根据 MSDN 在 .Net 中关于 String 的文档 - “Length 属性返回此实例中 Char 对象的数量,而不是 Unicode 字符的数量。”。 java.lang.String.codePointCount() 方法返回考虑代理项的字符串中的代码点数。
              • @Joachim Sauer:UCS-2 支持完整的 Unicode 标准(不要忘记代理对 D800 到 DBFF)。 Java 设计为使用 UTF-16 和 .Net 框架,但 Java 是在 UTF-32/UCS-4 之前设计的,而 .NET 是在之后设计的,但两种语言都可以访问所有代码点。
              • @JoachimSauer:然而仍然没有内置功能可以遍历String的字符
              【解决方案12】:

              基本上所有 .NET 语言都是 Unicode 语言,例如 C#VB.NET

              【讨论】:

              • 真的吗?高五微软!知道 IronRuby、IronPython 和 F# 是否在同一条船上?
              • George,所有使用 System.String 类的 .NET 语言都有完整的 Unicode 支持。我不知道任何不使用 System.String 类的 .NET 语言,这意味着 IronRuby、IronPython 尤其是 F#(它是从 VS2010 开始的第一类语言)具有本机 Unicode 支持。当 BCL 中已经提供了 Unicode 字符串类时,我想不出为什么有人会创建一个 .NET 语言并为其创建一个特殊的非 Unicode 字符串类。
              • 严格来说,一个 System.String 是由 UTF-16 编码的字符组成,而不是 Unicode 5 抽象代码点(字形)。如果您的应用关心差异(大多数不需要),那么您可以使用 System.Globalization.StringInfo 类。
              • 你能在没有 System.String 支持的情况下制作符合 CLS 的语言吗?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-05
              • 1970-01-01
              • 1970-01-01
              • 2013-09-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多