问题标签 [language-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
100874 浏览

programming-languages - 返回类型的函数重载?

为什么更多主流静态类型语言不支持返回类型的函数/方法重载?我想不出有什么办法。它似乎与支持参数类型的重载一样有用或合理。怎么人气这么低?

0 投票
13 回答
27031 浏览

c# - 为什么 C# 不允许只读局部变量?

与同事就这件事进行了友好的辩论。我们对此有一些想法,但想知道 SO 人群对此有何看法?

0 投票
13 回答
11494 浏览

computer-science - 评估语言的“图灵完整性”的实用指南是什么?

我已经阅读了“什么是图灵完备”和维基百科页面,但我对正式证明的兴趣不如对图灵完备的实际意义感兴趣。

我实际上想要决定的是我刚刚设计的玩具语言是否可以用作通用语言。我知道如果我可以用它编写图灵机,我可以证明它是。但在我相当确定成功之前,我不想进行那个练习。

是否有最小的功能集,没有图灵完备性是不可能的?是否有一组功能几乎可以保证完整性?

(我的猜测是条件分支和可读/可写的内存存储将使我大部分时间到达那里)


编辑:

我想我已经说“图灵完成”了。我试图以合理的信心猜测具有特定功能集的新发明语言(或者具有特定指令集的 VM)将能够计算任何值得计算的东西。我知道证明你可以用它构建图灵机是一种方法,但不是唯一的方法。

我希望的是一套指导方针,例如:“如果它可以做 X、Y 和 Z,它可能可以做任何事情”。

0 投票
3 回答
936 浏览

actionscript-3 - 向 AVM2 添加语言

我对制作一种在 AVM2 上运行的语言很感兴趣,我正在寻找关于从哪里开始的建议。我确实意识到这绝不是一项微不足道的任务,但我想尝试一下,至少在此过程中了解更多关于实现语言的知识。

我已经搞砸了 ANTLR,并且一直在阅读语言开发的语法问题。我正在寻找的是关于路径的建议或有用的参考资料/书籍。

例如,我想生成(脚本/手动)一些非常简单的 AVM2 字节码,并让它在 VM 上运行作为开始。

谢谢

0 投票
6 回答
1692 浏览

python - 解析的部分评估

我正在为 Python 开发一个宏系统(如此处所讨论的),我一直在考虑的一件事是度量单位。尽管可以在没有宏或通过静态宏(例如提前定义所有单位)的情况下实现度量单位,但我正在玩弄允许在运行时动态扩展语法的想法。

为此,我正在考虑在编译时对代码使用一种部分评估。如果对给定表达式的解析失败,由于其语法的宏不可用,编译器将停止对函数/块的评估,并生成它已经拥有的代码,其中包含未知表达式所在的存根。当此存根在运行时被命中时,该函数将针对当前宏集重新编译。如果此编译失败,将引发解析错误,因为执行无法继续。如果编译成功,新函数将替换旧函数并继续执行。

我看到的最大问题是,在受影响的代码运行之前,您无法找到解析错误。但是,这不会影响很多情况,例如 []、{}、() 和 `` 等组运算符仍然需要配对(我的标记器/列表解析器的要求),以及类和函数等顶级语法不会受到影响,因为它们的“运行时”实际上是加载时间,在那里评估语法并生成它们的对象。

除了实现困难和我上面描述的问题,这个想法还有什么问题?

0 投票
5 回答
1077 浏览

c++ - C++0x 实现猜测?

C++0x 标准即将完成。到目前为止,我已经涉足 C++,但避免彻底学习它,因为它似乎缺少许多我在其他语言中被宠坏的现代特性。但是,我会对 C++0x 非常感兴趣,它解决了我的很多抱怨。任何猜测,在标准被批准后,主要编译器供应商需要多长时间才能提供相当完整的、生产质量的实现?它会很快发生以扭转 C++ 受欢迎程度的下降,还是太少、太晚了?你相信 C++0x 会在几年内成为“C++”,还是你相信大多数人会在实践中坚持早期的标准,而 C++0x 会有点像一个混蛋继子,有点像C99?

0 投票
19 回答
5014 浏览

java - 我们需要Java++吗?

在我看来,在某些方面,Java 是 C 很久以前的地方。两者在当时都是相当简约的语言,具有相对干净、简单的核心构建。(我指的是这里的核心语言,而不是库。)两者都非常流行。两者都是/曾经是通用语,具有大量遗留代码。两者都缺乏其他语言的程序员经常错过的几个现代生产力功能。两者似乎都非常惯性主导,并且适应不断变化的世界的速度很慢。

在我看来,创建一个大致是 Java 超集的 Java++ 是合理的,就像 C++ 之于 C 一样。这种语言会试图让 Java 摆脱它所经历的相对停滞,只在少数情况下破坏向后兼容性仅在绝对必要的情况下使用次要方法,添加许多普通旧 Java 所缺少的现代特性,并担心以后的标准化。可能是个好主意的功能包括:

  1. 一流的功能,代表。
  2. 关闭。
  3. 静态类型推断,类似于varC# 或autoD 中的类型。
  4. 运算符重载。
  5. 结构体作为不同于类的值类型,如 C# 和 D。
  6. 特性。
  7. 忽略检查异常的选项。
  8. 在一个文件中声明多个顶级公共类的能力。
  9. 更强大的内置数组,允许追加之类的东西。
  10. 更好的泛型/真实模板。
  11. 类似于 C# 4.0 的动态关键字,它允许在必要时以一般静态语言进行鸭式输入。
  12. 由于 Java 主要是一种 VM 语言,因此可能有一些核心元编程功能,例如为某些事情动态生成代码。

你认为这种语言会有需求吗?你认为这样的事情会成功吗?

编辑:我不是在谈论运行时/字节码级别的兼容性,而是在源代码级别谈论与 Java 的兼容性。此外,是的,Java 7 可以添加其中的一些,但似乎为 Java 添加功能的“官方”过程非常保守。真正的重点是将Java分叉成一个分支的想法,重点是创新而不是稳定性/标准化。

0 投票
6 回答
2782 浏览

programming-languages - 在一个项目中使用多种语言

从我对语言设计的讨论来看,似乎很多人认为不存在也永远不会是“一种真正的语言”。根据这些人的说法,另一种选择是熟悉几种语言并为工作选择合适的工具。 这在整个项目或大型子项目的级别上非常有意义,只需通过非常狭窄、定义明确的界面与项目的其余部分进行交互。

另一方面,当试图优雅地解决许多小子问题时,使用许多不同的语言似乎是一件非常尴尬的事情。换句话说,恕我直言,在所有方面都不错的通用语言仍然很重要。作为一个简单的示例,假设您需要执行以下操作:

  1. 从文件中读取一些任意格式的数据。检查它是否有错误等(最好在 Perl 之类的东西中完成)。
  2. 将此数据加载到矩阵中,对其执行一堆核心矩阵操作(最好在 Matlab 之类的东西中完成)。
  3. 在其上运行自定义的计算密集型例程,该例程必须快速且节省空间(最好在 C 或 C++ 中完成)。

这是一个相当简单的项目,除了编写计算密集型的自定义矩阵处理例程之外,但关于使用什么语言的唯一好答案似乎是一个通用的,在所有方面都不错。

我在这里想念什么?一个人如何有效地使用多种语言来充分利用它们的每一种优势?

0 投票
3 回答
3751 浏览

vb6 - 为什么短路不是 VB 中的默认行为?

VB 有运算符AndAlsoOrElse,它们执行短路逻辑连接。

为什么这不是AndOr表达式的默认行为,因为短路在每种情况下都很有用。

奇怪的是,这与&&||的大多数语言相反。进行短路。

0 投票
13 回答
1447 浏览

python - 动态语言的用途

我现在的主要语言是 D,我正在学习 Python,因为它是我正在学习的课程所必需的。虽然我理解为什么动态语言对于在没有类型推断或模板的情况下使用静态语言进行编程的人们来说是一股新鲜空气(恕我直言,模板在很大程度上是编译时的鸭子类型),但我很好奇动态语言有什么好处即使你有这些。

底线是,如果我要学习 Python,我想以一种真正改变我对编程的想法的方式来学习它,而不是仅仅用 Python 编写 D。我没有使用过动态语言,因为我是一个相当新手的程序员,无法欣赏它们应该提供的灵活性,并且现在想学习充分利用它们。什么可以在动态类型的解释语言中轻松/优雅地完成,而这在静态语言中是尴尬或不可能的,即使使用模板、多态性、静态类型推断,也许还有运行时反射?