问题标签 [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.
refactoring - Duck 类型作为反射的语法糖:好主意还是坏主意?
我最近一直在想,在 Java 和 C# 等语言中,将“鸭子”类型作为方法参数类型包含在内是否是一种很好的语法糖形式?这将如下所示:
这可能是通过反射调用 doStuff() 的语法糖,或者它可以以不同的方式实现。Foo 可以是任何类型。如果 foo 没有 doStuff() 方法,这将引发运行时异常。关键是,当您需要时,即大多数时候,您将获得更严格的预先指定的接口范例(性能、错误检查)的好处。同时,您将拥有一个简单、干净的后门来避免打字,这将允许您干净地进行初始设计中未预见到的更改,而无需进行大量重构。此外,它可能会 100% 向后兼容,并与现有的语言结构完美结合。我认为这可能有助于减少过度设计的以防万一的编程风格,这种风格会导致混乱、混乱的 API。
c++ - 为什么变量名不能以数字开头?
不久前,我和一位新的 C++ 开发人员一起工作时,他问了一个问题:“为什么变量名不能以数字开头?”
除了某些数字中可以包含文本(123456L、123456U)之外,我无法给出答案,如果编译器认为带有一定数量字母字符的所有内容都是变量名,那将是不可能的。
那是正确的答案吗?还有其他原因吗?
language-design - 创建自己的语言
如果我想创建自己的语言,有什么工具可以帮助我吗?我听说过 yacc,但我想知道如何在语言中实现我想要的功能。
x86 - 进程内存中的 Unicode 字符串
处理内存中 unicode 字符串的首选格式是什么?为什么?
我正在通过为其生成可执行文件映像来实现编程语言。显然,一个工作的编程语言实现需要一个处理字符串的协议。
我考虑过使用动态数组作为字符串的基础,因为它们实现起来非常简单,并且对于短字符串非常有效。当以这种方式使用字符串时,我只是不知道字符的最佳可能格式。
c# - 为什么在 c# 中 if 和委托的范围是这种方式
受这个问题的启发,我开始想知道为什么以下示例在 c# 中都是非法的:
和
我只是想知道是否有人知道这种语言设计的确切原因?是为了阻止不良的编程实践,如果是这样,为什么不发出警告?出于性能原因(编译和运行时)还是原因是什么?
haskell - Typed FP: Tuple Arguments 和 Curriable Arguments
在静态类型的函数式编程语言中,如标准 ML、F#、OCaml 和 Haskell,函数通常会使用彼此分隔的参数和函数名称简单地通过空格来编写:
这里的类型是“ int -> (int -> int)
”,即一个函数,它接受一个 int 并返回一个函数,该函数又接受一个 int 并最终返回一个 int。因此,柯里化成为可能。
也可以定义一个以元组作为参数的类似函数:
(int * int) -> int
在这种情况下,类型变为“ ”。
从语言设计的角度来看,有什么理由不能简单地识别类型代数中的这两种类型模式?换句话说,使得“(a * b) -> c”简化为“a -> (b -> c)”,从而允许两个变体同样容易地被柯里化。
我想这个问题一定是在设计我提到的四种语言时出现的。那么有没有人知道任何原因或研究表明为什么所有这四种语言都选择不“统一”这两种类型模式?
compiler-construction - 实现类型推断
我在这里看到一些关于静态与动态类型的有趣讨论。由于编译类型检查、更好的文档化代码等原因,我通常更喜欢静态类型。但是,我确实同意,如果按照 Java 的方式完成,它们确实会使代码变得混乱,例如。
所以我即将开始构建我自己的函数式风格语言,类型推断是我想要实现的事情之一。我确实明白这是一个很大的主题,我并不是想创造一些以前没有做过的东西,只是基本的推理......
关于阅读内容的任何指示将帮助我解决这个问题?最好是更实用/实用的东西,而不是更理论的范畴论/类型论文本。如果那里有实现讨论文本,带有数据结构/算法,那就太好了。
language-design - 更聪明的编译器、语言和框架会让程序员变得更笨吗?
我们拥有的越来越先进的编译器、语言和框架要么自动执行任务,要么向我们隐藏某些复杂性,它们最终会让我们成为更笨的程序员吗?
Jim C给出了以下计算器的类比:
最近有人用纸和铅笔求平方根吗?我们使用计算器或简单地调用我们最喜欢的编程语言中的函数。我们当中有多少人知道计算器的功能甚至功能?
那么,为什么我们不都告诉我们的孩子忘记学习数学,这就是我们拥有计算器的目的呢?这不会天生就让我们的孩子变得更笨吗?
java - 为什么 Java 不支持无符号整数?
为什么 Java 不包含对无符号整数的支持?
在我看来,这是一个奇怪的遗漏,因为它们允许人们编写不太可能在意外大输入时产生溢出的代码。
此外,使用无符号整数可以是一种自我证明的形式,因为它们表明无符号整数打算保存的值永远不会是负数。
最后,在某些情况下,无符号整数对于某些操作(例如除法)可能更有效。
包含这些有什么缺点?