Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Programming languages 谁来决定哪些特性使它成为一种语言?_Programming Languages_Language Features - Fatal编程技术网

Programming languages 谁来决定哪些特性使它成为一种语言?

Programming languages 谁来决定哪些特性使它成为一种语言?,programming-languages,language-features,Programming Languages,Language Features,我对语言功能有一个想法: 在C#中,能够将foreach语句与for循环组合在一起对我来说非常有用,可以运行最多50个项。我意识到可以这样做: int count = 0; foreach (item in Items) { if (count > 50) break; item.acknowledge(); count++; } 但我认为如果它可以这样写(或类似的东西)会很好: 虽然这个建议很琐碎,但它让我想知道是谁决定了哪些语言特性将它变成了一种语言。C#是由

我对语言功能有一个想法:

在C#中,能够将foreach语句与for循环组合在一起对我来说非常有用,可以运行最多50个项。我意识到可以这样做:

int count = 0;
foreach (item in Items)
{
    if (count > 50) break;
    item.acknowledge();
    count++;
}
但我认为如果它可以这样写(或类似的东西)会很好:


虽然这个建议很琐碎,但它让我想知道是谁决定了哪些语言特性将它变成了一种语言。C#是由微软首创的,所以我相信公司内部有一个部门负责这方面的工作,但是像PHP这样的开源语言呢?(java算数吗?我知道java 7中有开关字符串,这是谁干的?)过程是什么?

你已经可以在C#中完成了


老实说,向一种语言添加特性通常涉及到看到客户端库无法实现的功能上的巨大且未经服务的差距

我想大多数语言都是由像您这样的人构建的,他们在使用现有语言的过程中产生了特定的功能需求。来自C#的Anders Hejlsberg一直在研究Delphi和Turbo Pascal earliser,这肯定给C#带来了一些灵感(他实际上也表达了一些遗憾,因为一旦特性被放入语言中,就无法删除它们,但那是另一回事了。)就主要语言而言,我猜语言设计师也会阅读SO和类似的地方,以获得想法和灵感。像clojure这样更小(更酷?)的语言似乎是对某些需求的响应,这些需求导致了clojure的流行:clojure不可变的集合和优雅的并发处理当然是对多核等的响应。

过程取决于语言。例如,Java有一个批准语言(我认为是核心库)更改的特定正式过程:基于JSR提案的Java社区过程。(我不确定自收购甲骨文以来,这种情况是否有所改变;我个人对JCP并不熟悉。)对于C#、Visual Basic和F#等微软语言,把关人是微软内部的语言设计团队(正如faester所指出的)。这些团队非正式地从客户那里获得信息,但也通过MSDN Connect和Microsoft MVP计划等计划获得更正式的信息。还有一些社区,比如Python,其讨论和设计过程更加开放(例如,在邮件列表上进行),尽管在Python的例子中,仍然有一个最终的权威Guido van Rossum


所以,如果你孤立地问“谁决定”,实际上没有一个答案。你必须问“谁决定使用语言X?”真的。

我不确定它是否只适用于某些具有Take()方法的对象,但我无法使用当前的项目列表来实现这一点。我更感兴趣的是社区在添加新的语言功能时所经历的过程。@John:Take功能是作为Linq的一部分作为扩展方法实现的,因此您需要导入System.Linq命名空间来利用它。它也只为IEnumerable项实现;一些旧的集合也没有实现该接口。@faester,仍然不走运。这很可能是因为我使用的是.NETCompactFramework。知道这一点很有趣,尽管如此,我问题的这一部分并不是我真正想问的。谢谢你!
foreach (upto 50 item in Items)
{
    item.acknowledge();
}
foreach(var item in Items.Take(50))
{
    // Do Stuff
}