问题标签 [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.
language-features - Greenspunning:您对一门语言所做的最令人印象深刻的扩展以及是否值得
绿纺。我们都有机会破解一种语言缺失的特性来获得我们需要的东西。在 Java 中实现伪单子模式,在 Javascript 中实现 Y 组合器,在 C 中实现变量不变性......
您认为寻找更强大功能的最令人印象深刻的解决方法是什么?事后看来,这值得黑客攻击吗?更好的是:它是否像 Ruby 的string#to_proc一样,成为该语言更高版本的公认特性?
c# - IUsable:以比 IDisposable 更好的方式控制资源
我希望我们在 C# 中有“可用”模式,当 using 构造的代码块将作为委托传递给函数时:
在用户代码中:
优点:
- 受控执行,异常
- 使用“可用”的事实在调用堆栈中可见
缺点:
- 委托费用
你认为它是否可行和有用,如果从语言的角度来看它没有任何问题?有没有你能看到的陷阱?
编辑:大卫施密特提出以下
它可以在这样的示例场景中工作,但通常您已经分配了资源并希望它看起来像这样:
GlobalResource(是的,我知道全球资源不好)实现 IUsable 的地方。你可以重写的时间很短
但它看起来有点奇怪(如果你显式地实现接口,那就更奇怪了),而且这种情况在各种风格中都很常见,我认为它应该成为一种语言中的新语法糖。
programming-languages - 您将如何实施越位规则?
我已经编写了一个可以解决问题的生成器,但我想知道实现越位规则的最佳方法。
很快:越位规则在这种情况下意味着缩进被识别为句法元素。
这是伪代码中的越位规则,用于制作以可用形式捕获缩进的标记器,我不想通过语言限制答案:
此布局器一次不会生成多个 NEWLINE,并且在出现缩进时不会生成 NEWLINE。因此解析规则仍然非常简单。我认为这很好,但请告知是否有更好的方法来完成它。
虽然使用了一段时间,但我注意到在 DEDENT 之后发出换行符可能会很好,这样你可以用 NEWLINE 分隔表达式,同时保持 INDENT DEDENT 作为表达式的预告片。
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)是如何处理递归的,以及为什么它们以这种方式处理递归。此外,请注意如果函数是“尾递归”(见评论),它是否会有所不同。
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 个数据库调用一个页面,我使用了一大块内存,并调用了应用程序,而且它可能更慢?
想法?
php - PHP 是否会继续在主要版本发布时进行重大更改?
所以我从第 4 版开始使用 PHP,并且不得不切换到第 5 版。现在我知道第 6 版即将推出,并且已经重新考虑了很多事情。
这些变化可能是好的,但在未来,有人知道 PHP 的路线图吗?它看起来会变平吗?
c# - 为什么 C# 不允许静态方法实现接口?
为什么 C# 是这样设计的?
据我了解,接口仅描述行为,并用于描述实现特定行为的接口的类的合同义务。
如果类希望在共享方法中实现这种行为,为什么不呢?
这是我想到的一个例子:
c# - 在循环中执行 array.length 或 list.count 成本高吗
我知道在 JavaScript 中,创建这样的 for 循环:for(int i = 0; i < arr.length; i++)
成本很高,因为它每次都会计算数组长度。对于列表和数组,这种行为在 c# 中是否也很昂贵。还是在编译时进行了优化?还有其他语言,比如Java,是怎么处理的?
language-features - 使用 bignums 的开销
当涉及数字时,我遇到了关于是否在我的语言中使用 bignums 作为默认数据类型的问题。我自己对此进行了评估,并将其简化为便利和舒适与性能的问题。该问题的答案取决于未得到优化的程序对性能的影响有多大。
在固定数字或整数就足够的地方使用大数字的开销有多小?在最好的实现中它可以有多小?什么样的实现可以达到最小的开销,它们会导致什么样的额外权衡?
如果我将我的语言默认设置为 bignums,我可以期望对整体语言性能产生什么样的影响?
c# - 你如何找到调用者函数?
这可以用c#吗?