代码之家  ›  专栏  ›  技术社区  ›  Eric Petroelje

真正的多语言编程语言?

  •  12
  • Eric Petroelje  · 技术社区  · 17 年前

    有没有真正的“多语言”语言支持多种语言的语言关键字等?

    11 回复  |  直到 17 年前
        1
  •  29
  •   Stack Overflow is garbage    17 年前

    这通常是一个可怕的想法,任何在本地化IDE工作过的人都可以证明这一点。程序员在很大程度上依赖于拥有一个通用词汇表。当编译器给我错误“missing type说明符-int-prescribed”时,我可以与其他人分享这个确切的错误消息,例如在SO上,它将 熟悉的 给其他人,这样他们就可以告诉我这意味着什么。如果编译器用丹麦语生成错误消息,我将只能从相对较少的会说丹麦语的程序员那里获得帮助。

    西班牙的开发人员无法使用我的代码,因为它实际上是用另一种语言编写的。如果我的代码有问题,其他人将无法调试它,因为它甚至不会在他们的本地化设置下编译(即使这样,他们仍然无法阅读)。

    最终,编程语言是 一种语言 它可能借用了一些英语单词,但 不是英语,你不需要理解英语来编程,就像我需要理解拉丁语才能说英语一样(英语也借用拉丁语单词)。

    你不妨要求一个多语种的英语。 这有什么意义 是的,理论上,这将允许不会说英语的人……说英语。它只是不会和其他说英语的人说的英语一样,所以它实际上无法实现他们之间的交流。

    关键字 if 在编程语言中 就像用英语一样。它们意味着不同的东西,尽管其中一个显然受到了另一个的启发。

    delegate C#中的关键字与英语中的“delegate”含义不同。也没有 while , return 或“建设者”。它们不是英语单词,而是C++、Java、C#、Python或任何其他编程语言中的关键字或概念。

        2
  •  9
  •   David Thornley    17 年前

    在我看来,这听起来是个坏主意。如果我正在编写一个程序,我怎么知道我键入的变量名实际上是保加利亚语或韩语的音译关键字?我必须处理数千个关键字,还是在结合瑞典和埃及同事编写的两个例程时遇到问题?

        3
  •  4
  •   Chad Birch    17 年前
        4
  •  2
  •   anon anon    17 年前

        5
  •  2
  •   elifiner    17 年前

    有一个领域,本地化语言可能很有用,这些是专为非程序员使用的DLS(领域特定语言)。这些语言肯定会从本地化中受益,因为来自非英语国家的商业用户往往不像程序员那样懂英语。

    如果程序员处理大量不可翻译的术语,这种本地化的DSL也可能对他们有利。我遇到的一个相当成功的系统被用来计算以色列军队人员的工资。它使用了基于希伯来语的语法,以及数百个只能用希伯来语正确表达的术语。在这种情况下,标准逻辑关键字 if , then , else 等被翻译成希伯来语,整个代码编辑器从右向左。至今,仍以这种方式维护着大量的业务逻辑,依我之见,这是正确的。

        6
  •  2
  •   Sam    12 年前

    这似乎是出了名的困难,除非是社区的努力,但对于某些语言,我不明白为什么你不能使现有的语言多语言化,而是创建自定义库来本地化标准库。

    public class HoweverYouSayExampleObjectInYourLanguage extends ExampleObjectName {
      }
    

    然后使用目标语言的名称创建包装器函数/方法,但这些函数/方法基本上调用现有的标准方法

    private void HoweverYouSayExampleMethodInYourLanguage(parameters) {
          this.ExampleMethod(parameters);
          // Some error handling code
    }
    

    如果你正确处理错误,堆栈跟踪/错误将全部引用标准库中的错误,除非它是本地化库实现过程中特有的错误——在这种情况下,应该通过本地化库本身的正确错误处理来指出。

    正如其他人所提到的,缺点是共享源代码。如果我们对给定语言的IDE有相同的看法,我看不出为什么你不能构建一个真正国际化的IDE,在这个IDE中,你在屏幕上看到的源代码本身不是真实的源代码,而是通过某种形式的映射对真实源代码的本地呈现。

    我要继续说,我上面说的一切可能充其量都是一个好主意,因为函数名并不像库和API的本地化文档那么重要。根据我的经验,对于常见的编程语言/上下文来说,这件事做得很糟糕,或者根本不做。

        7
  •  0
  •   nxadm    17 年前

    你可以用Perl编程 Latin .

        8
  •  0
  •   Community Mohan Dere    9 年前

    Learn the "programming" language instead .

    后来(当我学习英语时)我想。嘿,这很有趣,英语也有一个“开关”词,就像C.一样

    无论你的英语有多好或多差,你都不能对java说

    将java.util.*导入我的CD-ROM;

    因为它不是有效的语法。

        9
  •  0
  •   Adam Jaskiewicz    17 年前
        10
  •  0
  •   Yale Yale    17 年前

    Sorted!

    有什么有用的吗?这是一个更好的问题。

        11
  •  0
  •   Chrissy Flangé Allen    13 年前

    我认为一个例子最能说明我的意思:

    復活節( V1, V2, V3) :-
       A 是 (V1 mod 19),
       B 是 V1// 100,
       C 是 V1 mod 100,
       D 是 B // 4,
       E 是 B mod  4,
       F 是 (B + 8) // 25,
       G 是 (B - F + 1) // 3,
       H 是 (19*A + B - D - G + 15 )mod 30,
       I 是 C // 4,
       J 是 C mod  4,
       K 是 (32 + 2*E + 2*I - H - J) mod  7 ,
       L 是 (A + 11*H + 22*K) // 451,
       M 是 (H + K - 7*L + 114) // 31,
       N 是 (H + K - 7*L + 114)mod  31,
       V2 是 M,
       V3 是 N + 1.
    

    示例测试:

    ?-(2013,V2,V3)。 V2=3, V3=31

    即今年的复活节将在3月31日

    • 这是我用来重新定义内置“is”运算符的方法(如果它不完美,请不要对我开枪):

      (X,Y):-是(X,Y)。