问题标签 [language-features]

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 投票
2 回答
577 浏览

language-features - Greenspunning:您对一门语言所做的最令人印象深刻的扩展以及是否值得

绿纺。我们都有机会破解一种语言缺失的特性来获得我们需要的东西。在 Java 中实现伪单子模式,在 Javascript 中实现 Y 组合器,在 C 中实现变量不变性......

您认为寻找更强大功能的最令人印象深刻的解决方法是什么?事后看来,这值得黑客攻击吗?更好的是:它是否像 Ruby 的string#to_proc一样,成为该语言更高版本的公认特性?

0 投票
3 回答
317 浏览

c# - IUsable:以比 IDisposable 更好的方式控制资源

我希望我们在 C# 中有“可用”模式,当 using 构造的代码块将作为委托传递给函数时:

在用户代码中:

优点:

  • 受控执行,异常
  • 使用“可用”的事实在调用堆栈中可见

缺点:

  • 委托费用

你认为它是否可行和有用,如果从语言的角度来看它没有任何问题?有没有你能看到的陷阱?

编辑:大卫施密特提出以下

它可以在这样的示例场景中工作,但通常您已经分配了资源并希望它看起来像这样:

GlobalResource(是的,我知道全球资源不好)实现 IUsable 的地方。你可以重写的时间很短

但它看起来有点奇怪(如果你显式地实现接口,那就更奇怪了),而且这种情况在各种风格中都很常见,我认为它应该成为一种语言中的新语法糖。

0 投票
3 回答
4193 浏览

programming-languages - 您将如何实施越位规则?

我已经编写了一个可以解决问题的生成器,但我想知道实现越位规则的最佳方法。

很快:越位规则在这种情况下意味着缩进被识别为句法元素。

这是伪代码中的越位规则,用于制作以可用形式捕获缩进的标记器,我不想通过语言限制答案:

此布局器一次不会生成多个 NEWLINE,并且在出现缩进时不会生成 NEWLINE。因此解析规则仍然非常简单。我认为这很好,但请告知是否有更好的方法来完成它。

虽然使用了一段时间,但我注意到在 DEDENT 之后发出换行符可能会很好,这样你可以用 NEWLINE 分隔表达式,同时保持 INDENT DEDENT 作为表达式的预告片。

0 投票
11 回答
7664 浏览

language-agnostic - 你最喜欢的语言如何处理深度递归?

我最近开始学习 Python,我很惊讶地发现深度递归限制为 1000(默认情况下)。如果你将它设置得足够高,大约 30000,它会像 C 一样因分段错误而崩溃。虽然,C 似乎要高得多。

(Python 人员很快指出,您始终可以将递归函数转换为迭代函数,并且它们总是更快。这是 100% 正确的。不过,这并不是我的问题所在。)

我在 Perl 中尝试了相同的实验,大约 1000 万次递归消耗了我所有的 4 gig ram,我使用 ^C 停止尝试。显然 Perl 不使用 C 堆栈,但它在递归时确实使用了大量的内存——考虑到调用函数需要做多少工作,这并不令人震惊。

我在 Pike 中尝试过,在大约 2 秒内获得了 100,000,000 次递归,这让我感到非常惊讶。我不知道它是如何做到的,但我怀疑它会将递归展平为一个迭代过程——它在执行此操作时似乎没有消耗任何额外的内存。[注意:Pike 确实可以使琐碎的情况变平,但在更复杂的情况下会出现段错误,或者我被告知。]

我使用了这些原本无用的功能:

我很好奇其他语言(例如 PHP、Ruby、Java、Lua、Ocaml、Haskell)是如何处理递归的,以及为什么它们以这种方式处理递归。此外,请注意如果函数是“尾递归”(见评论),它是否会有所不同。

0 投票
2 回答
620 浏览

sql-server - 经典 ASP:从 SQL 表翻译的页面文本,更快的方法?

使用经典的 ASP VBScript,与 MS SQL Server 耦合,我们有一个接受 3 个整数的函数,page_id, heading_id,language_id

它在翻译表中查找页面标题...

该表包含大约 10,000 行...

标题列是 nvarchar(1000) 加上 3 个 int 列,这意味着它每行最大大约 2KiB...

所以我的问题是,是否值得使用 ADO 的 GetRows 或通过其他方法将此表复制到内存(例如应用程序对象)中,或者由于“大”数据大小而不值得这样做。

每页大约有 1 到 250 个标题,462 页,平均每页 34 个标题。

因此,为了节省大约 34 个数据库调用一个页面,我使用了一大块内存,并调用了应用程序,而且它可能更慢?

想法?

0 投票
5 回答
331 浏览

php - PHP 是否会继续在主要版本发布时进行重大更改?

所以我从第 4 版开始使用 PHP,并且不得不切换到第 5 版。现在我知道第 6 版即将推出,并且已经重新考虑了很多事情。

这些变化可能是好的,但在未来,有人知道 PHP 的路线图吗?它看起来会变平吗?

0 投票
27 回答
192834 浏览

c# - 为什么 C# 不允许静态方法实现接口?

为什么 C# 是这样设计的?

据我了解,接口仅描述行为,并用于描述实现特定行为的接口的类的合同义务。

如果类希望在共享方法中实现这种行为,为什么不呢?

这是我想到的一个例子:

0 投票
6 回答
7370 浏览

c# - 在循环中执行 array.length 或 list.count 成本高吗

我知道在 JavaScript 中,创建这样的 for 循环:for(int i = 0; i < arr.length; i++)成本很高,因为它每次都会计算数组长度。对于列表和数组,这种行为在 c# 中是否也很昂贵。还是在编译时进行了优化?还有其他语言,比如Java,是怎么处理的?

0 投票
7 回答
693 浏览

language-features - 使用 bignums 的开销

当涉及数字时,我遇到了关于是否在我的语言中使用 bignums 作为默认数据类型的问题。我自己对此进行了评估,并将其简化为便利和舒适与性能的问题。该问题的答案取决于未得到优化的程序对性能的影响有多大。

在固定数字或整数就足够的地方使用大数字的开销有多小?在最好的实现中它可以有多小?什么样的实现可以达到最小的开销,它们会导致什么样的额外权衡?

如果我将我的语言默认设置为 bignums,我可以期望对整体语言性能产生什么样的影响?

0 投票
2 回答
12170 浏览

c# - 你如何找到调用者函数?

关闭为“如何找到调用当前方法的方法?”的完全相同的副本

可以用c#吗?