【问题标题】:Programming Languages that Make Use of Special Characters使用特殊字符的编程语言
【发布时间】:2010-07-14 18:50:56
【问题描述】:

我正在研究一种通用编程语言。除了在字符串和标识符中支持 Unicode 的现代要求之外,我正在考虑提供一些运算符的替代拼写,特别是:

  • 关系型(<=>=!=

  • 按位和按位( for & |

  • 逻辑(¬&&||!

  • 箭头( for -> =>

我知道APLFortress 使用了特殊字符——而前者通常是关于它的笑话——但它们都非常适合学术和科学用途。特殊字符在现代的非学术语言中占有一席之地吗?

【问题讨论】:

  • 这不是你问的,但是你可以用ascii,然后用Fira Code字体看看。它使用字体连字将字符组转换为其他符号。例如,如果您输入 !=,您会看到(双倍宽度)
  • 朱莉娅浮现在脑海中。它为一些使用 Unicode 字符的运算符提供了内置别名。

标签: unicode programming-languages special-characters


【解决方案1】:

特殊字符在现代的非学术语言中占有一席之地吗?

是的, 但是因为在大多数桌面上,对特殊字符的支持仍然糟糕(糟糕的编辑器,糟糕的字体,随你便) ,

  • 您最好提前十年做好计划。
  • 您最好非常确定有一个好的、可用只使用 ASCII 字符的替代方案。

我绝不会提倡预处理器:有太多的诱惑和滥用的余地,除非做得非常小心,否则预处理器会使编写好的 IDE 和静态分析工具更加困难.

有些人喜欢 后处理器,即漂亮的打印机,它接收 ASCII 字符序列并将它们呈现为其他东西。虽然我一直觉得这种风格非常令人困惑,但它在一些 Haskell 程序员中非常流行和成功。

【讨论】:

  • 看起来 Donald Knuth 的 WEB 和 CWEB 将是另一个产生特殊字符的后处理示例,不是吗?当然,他们所做的远不止将<= 转换为
  • 我想如果我希望编辑器支持正确或完全完成,我必须自己做。我目前的想法是“预处理器”将在替代拼写之间严格运行,用于演示和跨语言目的。希望它可以向前或向后使用,因此可以用作预处理器或漂亮的打印机。
【解决方案2】:

在我看来,它们在语言中没有位置,但绝对属于 默认 预处理器。不过,您可能会遇到 APL 键盘问题。 (以及可能的视觉模糊)。

作为前/后处理的一个有限示例是 cweaved 代码。

【讨论】:

  • 预处理器可能只是门票,尽管我一直避免包含一个预处理器,以支持基于模板的更加结构化的系统。
【解决方案3】:

特殊字符 是Scala 中的保留字。 用于引入生成器绑定,而 在函数定义中用于将参数列表与函数体分开。

示例:

for {
  word ← List("Hello", "World")
  character ← word
} println(character)

val square = (x: Int) ⇒ x * x

需要注意的是,Scala 编译器还允许上述符号的 ASCII 替代项(即<-=>)。

【讨论】:

    【解决方案4】:

    Isabelle(定理证明者)允许 LaTeX 样式的命令序列作为有效输入。各种前端然后做适当的事情将这些变成特殊字符。这样做的好处是它仍然只是普通的 ASCII 文本,但是您可以在识别这些字符的编辑器中使所有漂亮的显示字符看起来像您期望的那样。

    【讨论】:

      【解决方案5】:

      这是一个有趣的概念,但您不担心同一事物的多个拼写会使解析代码变得更加困难,尤其是对于 IDE 而言?更不用说花费额外的时间来教授这些符号对新来的程序员意味着什么?如果您支持 unicode,因此可能支持其他语言(日语中的变量?),这些会增加一层神秘性。此外,您发现它们的逻辑对立面,C 三元组 (http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C) 有多大用处? :-)

      【讨论】:

      • 在我目前的设置下,为运算符添加替代拼写是微不足道的,编辑真的只需要知道存在替代拼写,而不是同义词。我打算不仅支持非英语变量,还支持 keywords (比如 ChinesePython)。我根本不需要三元组,但现在几乎可以保证键盘具有 C 所需的字符。单个符号来自数学,应该更容易记住。例如,我花了一段时间才打破我的阅读障碍朋友写=< 而不是<= 的习惯,因为与>= 对称。
      • @Jon 也许你的朋友是 Prolog 程序员?
      • @Norman:因为我看过他写的所有东西,而且除了 Java、C++ 或 VHDL 之外没有其他任何东西,所以我有点怀疑。但是你永远不知道人们在没人注意的时候会做什么。
      • @Jon:开玩笑。在 Prolog 中,“小于或等于”拼写为 =<,因为他们希望保持 <= 可用于拼写“左箭头”。
      【解决方案6】:

      我使用的一种依赖非 ASCII 字符的语言是 TI-BASIC,它使用 进行赋值,// 用于比较,具有内置常量 @ 987654326@和,一个函数等

      在 PC 上,我怀疑我是否会大量使用非 ASCII 运算符,因为输入 != 比在字符映射中查找 快得多。

      【讨论】:

      • 啊!我忘记了那件事。他们可以摆脱它的唯一原因是专用键盘,再加上用户接受计算器打字速度低的事实。
      【解决方案7】:

      我非常喜欢使用正确字符的想法。但是,为了使用,我真的想要一个有额外标点符号键的键盘供他们使用。在我们这样做的同时,{ } ( ) " ? + * 之类的东西也应该都在它们自己的键上。

      【讨论】:

      • 我们需要一个程序员键盘。
      • @GONeale:是的。不久前,我放弃并改变了我的键盘布局,将数字与符号交换,以及其他常见的移位符号与非移位对应物交换。它让我的编码世界变得更快、更舒适。
      【解决方案8】:

      不确定通用语言,但它们在 DSL 中对于它们是明智的领域占有一席之地。它当然可以用一些现代语言来完成。有关 Scala 中的示例,请参阅this blog post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多