问题标签 [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 投票
13 回答
11969 浏览

c++ - C++ 迭代器被认为是有害的?

在今天的 Boost 库会议上, 《现代 C++ 设计和 Loki C++ 库》一书的作者Andrei Alexandrescu发表了题为“Iterators Must Go”(视频幻灯片)的演讲,讲述了为什么迭代器不好,他有一个更好的解决方案。

我试图阅读演示幻灯片,但我无法从中得到太多。

  1. 迭代器不好吗?
  2. 他的替补真的更好吗?
  3. C++ 实现者会接受他的想法吗?
0 投票
2 回答
438 浏览

concurrency - 为并发编程语言选择一致性模型

我处于编程语言的设计阶段,目前正在考虑并发方面。我需要找出一个一致性模型,即用这种语言编程的并发进程如何处理数据。

有两个重要的标准:

  • 我更喜欢易用性而不是性能,只要一致性模型允许良好的扩展,
  • 我不能使用需要阻塞或动态内存分配的一致性模型。

我现在的两个候选人一方面是非阻塞软件事务内存,另一方面是在不共享la Erlang的情况下复制消息传递语义。

我特别担心易用性,所以我将介绍我反对这两个模型的主要论点。

在 STM 的情况下,用户必须了解类的哪些成员必须以原子方式改变并正确界定原子代码段。这些必须写成可以重复未定义的次数,它们不能执行任何 I/O,不能调用一些外部函数等。我认为这对于没有经验的程序员来说远非易事。

Erlang 风格的无共享并发很有吸引力,但有一个问题:实时进程无法复制它们发送过来的对象,因为它们无法执行任何内存分配,因此对象必须从一个进程“移动”到另一个进程通过队列。用户必须知道,如果一个实时进程对一个对象有两个引用,那么如果他将对象发送到另一个进程,这两个引用都将被清除。这有点像在任何使用点都可能为空或不为空的弱指针:这可能令人惊讶。

我倾向于第二种模型,因为它看起来更容易理解,并且自然地扩展到分布式系统。

你有什么建议吗?

  • 非阻塞软件事务内存?
  • Erlang 风格的并发具有实时约束的困难?
  • 还有什么我没有考虑过的?
0 投票
6 回答
2509 浏览

language-agnostic - substring() 应该如何工作?

我不明白为什么 Java 的 [String.substring() 方法]( http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#substring(int,%20int% 29)以它的方式指定。我不能告诉它从编号位置开始并返回指定数量的字符;我必须自己计算结束位置。如果我指定结束位置超出字符串,而不是只为我返回字符串的其余部分,Java 抛出一个异常。

我习惯于 substring()(或 substr())采用两个参数的语言:起始位置和长度。这在客观上是否比 Java 做的更好,如果是,你能证明吗?您所见过的 substring() 的最佳语言规范是什么?什么时候让一种语言以不同的方式做事是个好主意?Java 抛出的 IndexOutOfBoundsException 是不是一个好的设计理念?这一切都归结为个人喜好吗?

0 投票
9 回答
3175 浏览

compiler-construction - 自然编程语言……你想看什么?

我正在考虑编写一个编译器,在我以“C”风格完成某些内容后,我正在考虑将其适应其他模型。您希望在“自然”编程语言中看到哪些句法结构?

这个编译器的目标平台是 CLR,我目前正在使用 Oslo+MGrammar 作为词法分析器/解析器(你可能会说这只是一个玩的借口)

我的项目的目标之一是让编程感觉更像是一种对话,而不是结构化的语法和需求。

我想我应该把这个扩展一点。我正在使用的一个想法是让类声明读起来像一个段落。

...也会翻译...

0 投票
4 回答
761 浏览

.net - 为什么属性 setter 和 getter 会与 get_X 和 set_X 方法发生冲突?

.NET属性中应该是一等公民,但是在IL代码中,属性 getter 和 setter 被实现为get_PropertyNameset_PropertyName

输出:

错误 CS0082:类型“SO.Property”已经保留了一个名为“get_Value”的具有相同参数类型的成员

错误 CS0082:类型“SO.Property”已经保留了一个名为“set_Value”的具有相同参数类型的成员

为什么设计者.NET决定使用可能与用户代码冲突的名称?他们可能使用了非法字符(正如 Java$用于内部类的东西)。

0 投票
6 回答
4742 浏览

language-design - 什么是“成熟”软件?

Jeffery Palermo 说“经典 WebForms 比 ASP.NET MVC 更成熟”:“经典 WebForms 比 ASP.NET MVC 更成熟吗?” .

这似乎是主观的,但我想知道的是,究竟什么是“成熟”的软件?

0 投票
3 回答
116020 浏览

javascript - 使用变量键访问 JavaScript 对象中的值

编码:

对象数据:

问题:

alert(data.A5A50000[0].time);正确显示“2009-05-27 16:36:45”。

alert(bsID);正确显示“A5A50000”。

alert(data.bsID[0].time);报告“data.bsID 未定义”。

alert(data[bsID][0].time);报告“数据 [bsID] 未定义”。

我有点不清楚何时评估/不评估变量。也许我忽略了一些愚蠢的事情,但我无法在这里找出我的问题。

0 投票
8 回答
12942 浏览

c++ - 在 C/C++ 中为什么 do while(expression); 需要半冒号吗?

我的猜测是它只是让解析更容易,但我不明白为什么。

那么这有什么...

这比……好

0 投票
7 回答
26611 浏览

c++ - make_heap 的意义何在?

有人可以告诉我 STL 堆函数模板的意义std::make_heap吗?为什么有人会使用它们?有实际用途吗?

0 投票
3 回答
4336 浏览

c# - Foreach 可以抛出 InvalidCastException 吗?

想象一下下面的代码:

我想知道,为什么这种 foreach 行为如此......不像 C#?这里发生的是对子类的隐式强制转换,这很容易出错,并且似乎在该语言的所有其他地方都被禁止。还是我不对?

PS我问的原因是我的项目中的类似代码中有一个错误,我曾经在其中迭代来自外部库的自定义集合,该库被称为 like SomeTypeCollection,但实际上提供了基本类型项的集合并且可能包含SomeOtherType. 我的错,但语言和编译器仍然没有提供任何明确的提示/警告,这对于 C# 来说是非常不寻常的......