Questions tagged «language-features»

有关特定计算机语言的独特方面的问题,尤其是在编写方式或提供给程序员的表达能力方面。

2
为什么在C 2011中将可变长度数组设为可选?
在C 1999中引入VLA时,我认为这是对该语言的一项伟大创新。但是,在了解到它在C 2011中成为可选功能后,我想知道是什么导致了它的状态更改,以及这是否意味着该功能实际上即将过时。如果是这样,是否有等效的自动大小动态数据管理概念被认为可以替代它? 我试图找到C 2011基本原理文档,但该文档似乎尚未发布。


8
为什么不将设计模式添加到语言构造中?
最近,我正在与一位同事交谈,他提到他的公司正在努力将MVC设计模式添加为PHP扩展。 他解释说,他们编写了C代码以添加Controllers, Models and Views到语言构造中以提高性能。 现在,我知道MVC是一种架构设计模式,已在Web应用程序中广泛使用,但是我仍然不得不遇到例如具有Controllers语言构造的语言。 恕我直言,将设计模式集成到语言中可以强调良好的OO设计的重要性。 那么,为什么不将最常用的设计模式(MVC,工厂,策略等)添加到语言构造中呢? 如果问题听起来太宽泛,则可以将问题限制为仅PHP。 编辑: 我并不是在暗示开发项目时必须使用设计模式。实际上,我提倡只要可行就保持简单的方法。

3
设计音乐软件的适当编程语言
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 我想为我的乐器设计一种有节奏的软件(没有旋律)。我想要这些软件做的是: 使用户能够创作音乐 播放用户撰写的内容 为此,我需要记录该乐器的不同声音,并使每个信号与适当的声音匹配。 哪种编程语言足以满足此目的?

7
对于仅具有不可变引用或标签的语言,对于名称变量有什么好的替代方案?
例如,在函数式语言中,变量是单个赋值,并且一旦赋值它们的值就不可变。因此,它们有两个状态unbound和bound,一旦绑定,就无法更改。 是否有最适合诸如事物之类的数学术语或其他计算机科学术语?一些语义并不意味着方差或可变性。 如果不存在诸如term之类的词,并且如果您正在设计一种具有这种结构的语言,那么您除了使用word 变量之外还会使用什么呢? 我不是真的希望调查的想法,我试图找出是否已经有一个公认的行业(任何行业)项这样的事情。

11
当您似乎无法理解编程的特定部分时该怎么办?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我一直在学习新的语言,用多种语言为非常基本的程序编写代码,然后上课。我读过书,文章,课程,视频,随便你怎么说,但是我似乎无法掌握某些东西。 例如,我从不了解指针-它们擅长什么。(问题的一部分-不需要使用“指针”重新标记...) 但是,我的问题不是指针是做什么的,而是我如何理解这样的事情?如果在阅读有关编程的某些部分的书或文章后,我不理解,该怎么办?用某种编程功能编写代码肯定会有所帮助,但是实际上并不能帮助理解那么多。理论部分对理解很重要。

2
语言开发框架应该多么容易使用?
这是一系列问题的一部分,这些问题集中于一个称为抽象项目的项目,该项目旨在以框架的形式抽象语言设计中使用的概念。 可以在此处查看与它相关的与结构化类型相关的另一个页面。可以在此处找到与有关框架和适当发布位置的查询相关的元主题。 使用语言开发框架应该有多容易? 我编写了大规模的代码生成框架,其中还包括将结果发送到特定语言的编译器的功能。易用性主题来自这样一个框架示例:CodeDOM或代码文档对象模型。 它是由Microsoft编写的框架,描述了常见的代码结构,但通常忽略了很多(表达强制),并且在表示某些结构时趋于抽象,完全根据您的工作发出错误的代码:当使用的类型是通用接口时,CodeDOM不能很好地处理PrivateImplementationTypeon CodeMemberMethod。CodeDOM是我编写第一个代码生成器的最初原因。 为了简化框架,我正在尝试做的一件事是减少要做某件事所需的工作量,并着重于动作与构成这些动作的特定类型。 这是我正在编写的框架的并行比较: //Truncated... /* * * From a project that generates a lexer, this is the * state->state transition character range selection logic. * */ var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference())); //... char start = rangeElement.B.Value.Start; char end = rangeElement.B.Value.End; /* * * 'start' …

6
为什么绑定不是大多数语言中的本机功能?
恕我直言,将变量绑定到另一个变量或表达式是数学中非常普遍的情况。实际上,在一开始,许多学生认为赋值运算符(=)是某种绑定。但是在大多数语言中,不支持将绑定作为本机功能。在某些语言(例如C#)中,在满足某些条件的情况下,某些情况下支持绑定。 但是恕我直言,将其作为本机功能实现就像更改以下代码一样简单- int a,b,sum; sum := a + b; a = 10; b = 20; a++; 为此- int a,b,sum; a = 10; sum = a + b; b = 20; sum = a + b; a++; sum = a + b; 意味着将绑定指令作为赋值放置在每条指令之后,以更改右侧表达式中包含的任何变量的值。之后,修剪多余的指令(或在编译后进行汇编中的优化)即可。 因此,为什么大多数语言本身都不支持它。特别是在C语言家族中? 更新: 从不同的观点来看,我认为我应该更精确地定义这个提议的“绑定”- 这是绑定的一种方式。只有总和绑定到a + b,反之亦然。 绑定的范围是本地的。 绑定一旦建立,就无法更改。意思是,一旦将总和绑定到a …

5
一流的功能
我本周末开始认真看一下Lisp(这意味着我只是在学习Lisp,而不是回到C#中的项目),必须说我喜欢它。我曾涉猎其他功能语言(F#,Haskell,Erlang),但没有感受到Lisp给我的吸引力。 现在,当我继续学习Lisp时,我开始怀疑为什么非功能语言不支持一流的功能。我知道诸如C#之类的语言可以对委托执行类似的操作,并且在某种程度上您可以使用指向C / C ++中的函数的指针,但这是否有理由为什么它永远不会成为这些语言的功能?使函数成为一流有缺点吗?对我来说,它非常有用,所以我迷失了为什么更多的语言(功能范式之外)没有实现它。 [编辑]我很感谢到目前为止的回答。由于已经向我证明许多语言现在都支持一流的功能,因此我将问题重新表述为:为什么语言要花费这么长时间来实现它们?[/编辑]

3
为什么在公共可访问的头文件中描述了私有变量?
好的,因此希望对程序员来说这是一个主观的问题,但这是可行的。我一直在不断拓宽我的语言和软件工程实践的知识……而且我遇到了一些对我毫无意义的事情。 在C ++中,类声明将private:方法和参数包含在头文件中,从理论上讲,如果将它们设为lib,则传递给用户以包括这些内容。 在Objective-C中,@interface几乎做同样的事情,迫使您列出私有成员(至少有一种方法可以在实现文件中获取私有方法)。 据我所知,Java和C#允许您提供一个接口/协议,该接口/协议可以声明所有可公开访问的属性/方法,并使编码人员能够在实现文件中隐藏所有实现细节。 为什么?封装是OOP的主要原理之一,为什么C ++和Obj-C缺少此基本功能?对于Obj-C或C ++,是否存在某种隐藏所有实现的最佳实践解决方法? 谢谢,

5
是否存在技术限制或语言功能阻止我的Python脚本像等效的C ++程序一样快?
我是Python的长期用户。几年前,我开始学习C ++,以了解它在速度方面可以提供什么。在这段时间里,我将继续使用Python作为原型制作工具。看来,这是一个很好的系统:使用Python进行敏捷开发,在C ++中快速执行。 最近,我越来越多地使用Python,并学习如何避免早年使用该语言时很快使用的所有陷阱和反模式。据我了解,使用某些功能(列表理解,枚举等)可以提高性能。 但是,是否存在技术限制或语言功能使我的Python脚本无法与同等C ++程序一样快?

4
函数中内部作用域块的使用是否不好?
在某些(非常罕见)的情况下,存在以下风险: 重用不打算重用的变量(请参见示例1), 或使用一个变量代替另一个在语义上接近的变量(请参见示例2)。 范例1: var data = this.InitializeData(); if (this.IsConsistent(data, this.state)) { this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer. } // ... foreach (var flow in data.Flows) { // This shouldn't happen: given that ETL possibly altered the contents of `data`, it is …

3
编写编译器编译器-使用和功能简介
这是一系列问题的一部分,这些问题的重点是抽象项目的姐妹项目,该项目旨在以框架的形式抽象语言设计中使用的概念。姊妹项目称为OILexer,旨在从语法文件构造解析器,而不在匹配项上使用代码注入。 与这些问题相关的其他一些页面,与结构类型相关,可以在这里查看,以及在这里找到易用性。可以在此处找到与有关框架和适当发布位置的查询相关的元主题。 我现在要开始从给定的语法中提取解析树,然后是递归下降解析器,该解析器使用DFA识别前向路径(类似于ANTLR 4的LL(*)),所以我想我会打开它来获得洞察力。 在解析器编译器中,哪种功能比较理想? 到目前为止,这里是实现的简要概述: 范本 提前预测,知道在给定点上什么是有效的。 规则“非文字化”将规则中的文字取下来,并解析它们来自哪个标记。 非确定自动机 确定性自动机 简单的词法状态机,用于令牌识别 令牌自动化方法: 扫描-用于注释:注释:=“ / *” Scan(“ * /”); 减-对标识符有用:标识符:=减(IdentifierBody,关键字); 确保标识符不接受关键字。 编码-将自动化编码为基数N转换的X系列计数。 UnicodeEscape:=“ \\ u” BaseEncode(IdentifierCharNoEscape,16,4); 使用十六进制4转换以十六进制形式对Unicode进行转义。此与:[0-9A-Fa-f] {4}之间的区别是使用Encode进行的自动化将所允许的十六进制值集限制为IdentifierCharNoEscape的范围。因此,如果给它\ u005c,则编码版本将不接受该值。这样的事情有一个严重的警告:谨慎使用。最终的自动化可能非常复杂。 没有实现的是CST生成,我需要调整确定性自动化以继承适当的上下文才能使此工作正常进行。 对于感兴趣的人,我已经上传了T *y♯项目原始形式的漂亮印刷品。每个文件都应该链接到其他文件,我开始链接各个规则来遵循它们,但是这花了太长时间(自动化起来会更简单!) 如果需要更多上下文,请相应地发布。 编辑5-14-2013:我已经编写了代码,可以在给定语言下为状态机创建GraphViz图。 这是AssemblyPart的GraphViz有向图。语言描述中链接的成员在其相对文件夹中应具有rulename.txt,以及该规则的图。自从我发布示例以来,某些语言描述已更改,这是由于简化了语法。这是一个有趣的graphviz图像。

4
有什么理由不能将延迟初始化内置到Java中吗?
由于我在服务器上使用的用户绝对没有非持久状态,因此我们在每个请求中都会推出我们拥有的每个与用户相关的对象。 因此,我经常发现自己对可能未使用的对象的属性进行了延迟初始化。 protected EventDispatcher dispatcher = new EventDispatcher(); 成为... protected EventDispatcher<EventMessage> dispatcher; public EventDispatcher<EventMessage> getEventDispatcher() { if (dispatcher == null) { dispatcher = new EventDispatcher<EventMessage>(); } return dispatcher; } 有什么理由无法将其内置到Java中吗? protected lazy EventDispatcher dispatcher = new EventDispatcher(); 就像下面的评论中提到的那样,我意识到一种语言在理论上可以发展为包含您想要的大多数内容。我正在寻找一种可能性的实用度量。这会与其他功能冲突吗?实现是否足够简单,可以很好地与JVM一起使用?甚至,这是个好主意吗?

5
为什么没有fortran标准库?
要成为专注于数学和科学计算的语言,我总是对Fortran标准库中完全缺乏有用的数学例程感到困惑。人们希望它至少带有一个计算标准偏差和均值的例程,但是事实并非如此。特别是随着Fortran 90的推出和模块的添加(从而减少了名称空间的污染),我看不出这种严重缺乏服务的任何原因。 我想听听您关于为什么会这样的知识。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.