问题标签 [language-extension]
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.
haskell - Haskell TransformListComp 扩展
我阅读了有关 haskell 语言扩展的指南,并且对 TransformListComp 的解释感到有些困惑。我试图在没有糖的情况下重写所有 TransformListComp 表达式,但我不确定我是否正确。
另外我认为指南中有一个错误:“then group using clauses”的示例是不可能的,因为“(groupBy(==))”的类型不正确(“Eq a”不能使用)
haskell - 为什么 GeneralizedNewtype 不派生一个安全的 Haskell?
来自 GHC 的手册,Section Safe Language:
模块边界控制——使用安全语言编译的 Haskell 代码保证只能访问通过其他模块导出列表公开可用的符号。其中一个重要部分是,安全编译的代码无法使用无法导入的数据构造函数检查或创建数据值。如果模块 M 通过仔细使用其导出列表建立了一些不变量,则使用导入 M 的安全语言编译的代码保证尊重这些不变量。因此,Haskell 模板和
GeneralizedNewtypeDeriving
在安全语言中被禁用,因为它们可用于违反此属性。
如何使用 打破模块的不变量GeneralizedNewtypeDeriving
?
haskell - 使用 FlexibleContexts 和 FlexibleInstances 有哪些陷阱?
由于这些灵活的上下文和实例在 Haskell 标准中不可用,我假设使用它们时存在潜在问题。这些是什么?它们会导致一些歧义、不可判定性、重叠实例等吗?
有一个类似的问题只询问FlexibleInstances
,而不是FlexibleContexts
,但答案只说“使用它们是安全的”。
macros - 使用 Racket 的语言扩展,通过宏定义辅助函数
我已经被一个问题困扰了好几个小时了。我正在尝试使用 Racket 的语言扩展功能定义 DSL。我想做类似下面的伪代码。最终,我想根据 DSL 中的输入生成函数和宏,其中大部分现在似乎都可以工作,问题是提供的定义应该与声明在同一级别上工作。这甚至可能吗?已经很晚了,我敢肯定我错过了一些非常微不足道的东西。这个问题最基本的例子是这样的:
tinylang.rkt:
现在我尝试在其他地方使用这种新语言:
尝试.rkt:
但是我在加载第二个模块时收到错误“你好:模块中的未绑定标识符:你好”。
macros - 使用 Racket 宏生成 require 子句
好吧,我一定很傻。我正在尝试创建一个宏(一个更大的任务的一部分),它给定一个函数,将它包装在它自己的子模块中,然后require
它,这样定义的函数就不会与周围的术语混淆,而是它们的主机的其余部分模块可以正常使用它们。也许这不是一个好主意,但请幽默——我不明白为什么这是不可能的。
我在两个文件中有以下最小代码示例。
tinylang.rkt:
tinyimp.rkt:
我对向这个网站发送垃圾邮件感到内疚,我认为这些问题对我来说用文档来解决应该是微不足道的,但我仍然不清楚在什么阶段会发生什么。如果有人知道一个好的资源(书籍、讲座、论文),我会很高兴听到它。我知道 Racket 文档,它非常广泛,但我经常错过那里解释中的关键细节。
haskell - Haskell 扩展模式匹配与类型约束
有谁知道允许对模式匹配施加类型约束的扩展?例如:
注意:我问这个是为了让 monad 根据其输入类型做出不同的反应。具体来说,我试图制作一个概率单子,但我想检查输入类型是否相等,以便我可以合并重复项。
javascript - 我将如何扩展 JavaScript 语言以支持新的运算符?
问题的答案是否可以在 JavaScript 中创建自定义运算符?还没有,但@Benjamin 建议可以使用第三方工具添加新的操作员:
可以使用 sweet.js 之类的第三方工具来添加自定义运算符,尽管这需要额外的编译步骤。
我将举同样的例子,就像在上一个问题中一样:
(ℝ, ∘), x ∘ y = x + 2y
对于任意两个实数x和y:x ∘ y是x + 2y也是一个实数。如何在我的扩展 JavaScript 语言中添加此运算符?
之后将运行以下代码:
输出将包含
(因为8
是2 + 2 * 3
)
我将如何扩展 JavaScript 语言以支持新的运算符?
c++ - 使 cppcheck 跳过 PACKAGE 定义
我正在使用 cppcheck 1.64 的 GUI 版本对 C++-Builde-6 代码进行静态代码分析。对于 DLL 导出和导入,定义PACKAGE
是必要的:
cppcheck遇到就停止,PACKAGE
因为不知道是什么意思:
未处理代码“class PACKAGE TAppInfoDialog {”。您可以使用 -I 或 --include 添加对此代码的处理。
...这当然意味着整个班级都没有被检查。如果我可以让 cppcheck简单地忽略PACKAGE
“关键字”,它会做完全正确的事情,但怎么做呢?通过包含路径包含其原始定义似乎不是一个选项:cppcheck 然后告诉我很多关于VCL 框架的标头的信息,我无法更改...
该手册没有描述这样做的选项,谷歌没有帮助,所以还没有答案。
在 cppcheck 问题跟踪器中,我发现了类似的问题#4707(Microsoft 'abstract' and 'sealed' extension for class)—— cppcheck。在这里,主要开发人员建议创建一个文件并(预先?)将其包含到 cppcheck 运行中,但我使用的是 GUI 版本,并且没有包含单个文件的选项。所以我尝试在我的项目选项的 include 部分(一个 XML 文件)中添加一个 director,然后我将相应的行编辑为一个文件规范,但这显然是无稽之谈,因为该部分包含包含路径。
接下来我可以尝试什么?
haskell - 重载列表扩展不起作用
GHC 7.8 中的 OverloadedLists 语言 pragma 非常吸引人,所以我决定尝试一下:
编译器给了我:
即使是发行说明中的示例也不起作用:
有谁知道这里发生了什么?
c++ - MSVC 直接构造函数调用扩展
在这个回复中,tloveless指出在 MSVC 中使用this->foo::foo(42);
构造函数委托直接调用构造函数是可能的:
我很惊讶这甚至可以在 MSVC 中编译。clang++、g++ 和我都同意这是非法的,例如 [class.ctor]/2 “因为构造函数没有名称,所以在名称查找过程中永远找不到它们”
但是,MSVC在 MSVC12 Update 1 (2013) 和 MSVC10 SP1 (2010)中甚至不会发出带有/Wall
和不带有语言扩展的警告。/Za
输出是:
在两个版本中。所以没有临时创建,而是调用了一个构造函数。
问题:
- 这个扩展名是什么?
- 它不被视为扩展吗?(
/Za
并且扩展列表似乎不这么认为) - 是否有此功能的一些文档/官方描述?
(我用 [delegating-constructors] 标签标记了这个问题,因为它让我想起了这个功能)
元信息:我几乎可以肯定这个问题是重复的,因为这个功能是众所周知的。例如,请参阅“类似问题”的此答案。如果您能找到描述此功能的答案,请不要犹豫,将其作为 dup 关闭。