Questions tagged «programming-languages»

与编程语言的设计,实现和分析有关的问题。不适用于有关如何编程的问题,该问题不在本网站上。

8
是什么决定了编程语言的“速度”?
假设一个程序是用两种不同的语言编写的,让它们分别是语言X和语言Y,如果它们的编译器生成相同的字节码,为什么我应该使用语言X而不是语言Y?是什么定义了一种语言比另一种语言快? 我之所以这么问,是因为经常看到人们说这样的话:“ C是最快的语言,ATS是和C一样快的语言”。我试图了解编程语言“快速”的定义。


13
选择第一门编程课程的语言的标准
作为大学水平的CS教育者,在第一门编程课程中要教授哪种编程语言经常会引起讨论。有成千上万种语言可供选择,许多宗教狂热(或崇拜)支持一种语言阵营高于另一种语言阵营。所有围绕每种编程语言的主观偏见使教育工作者很难选择一种语言。 我的问题是: 教育者可以使用什么客观标准来选择编程语言作为大学一年级编程课程的基础?这些标准的依据是什么? 注意:我不想看到编程语言的列表以及为什么它们是最好的使用语言。问题不是关于最佳语言,而是关于选择语言的标准。但是,答案可能是使用编程语言来说明特定点。 这个问题的灵感来自另一个被认为是题外的问题:https : //cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language。

10
可视化编程语言
我们大多数人都是使用“文本”编程语言(例如Basic,C / C ++和Java)学习编程的。我相信人类进行视觉思考会更加自然和有效。可视化编程允许开发人员通过操纵图形元素来编写程序。我猜想使用可视化编程应该可以提高代码质量并减少编程错误。我知道一些视觉语言,例如App Inventor,Scratch和LabView。 为什么开发人员没有主流的通用视觉语言?可视化编程的优缺点是什么?

2
关于“论真正教计算机科学的残酷”
迪克斯特拉(Dijkstra)在他的论文《关于真正教授计算科学的残酷性》中,提出了有关编程入门课程的以下建议: 一方面,我们教看起来像谓词演算的事物,但与哲学家却截然不同。为了训练新手程序员如何使用未解释的公式,我们将其更多地讲授布尔代数,使学生熟悉逻辑连接词的所有代数性质。为了进一步切断与直觉的联系,我们将布尔域的值{true,false}重命名为{black,white}。 另一方面,我们讲授一种简单,干净,命令式的编程语言,以跳过和多重赋值作为基本语句,具有局部变量的块结构,以分号作为语句组合的运算符,一种不错的替代构造,一种不错的方法。重复,以及(如果需要)过程调用。为此,我们添加了最少的数据类型,例如布尔值,整数,字符和字符串。至关重要的是,无论我们引入什么内容,相应的语义都是由附带的证明规则定义的。 从一开始,贯穿整个过程,我们强调程序员的任务不仅是编写程序,而且他的主要任务是提供形式证明,证明他提出的程序符合同样正式的功能规范。在设计证明和程序的同时,学生有充分的机会利用谓词演算来完善自己的操作敏捷性。最后,为了向人们传达这种入门编程课程主要是形式数学课程的信息,我们发现有问题的编程语言尚未在校园内实施,因此可以保护学生免受测试其程序的诱惑。 他强调这是一个认真的建议,并概述了各种可能的反对意见,包括他的想法“完全不现实”和“太难了”。 但事实证明,那只风筝不会放飞,因为事实证明是错误的:自80年代初以来,每年都有数百位大学新生成功地参加了这样的入门编程课程。[因为根据我的经验,说这一次是不够的,所以前一句话至少应再重复两次。] Dijkstra指的是哪门课程,并且还有其他文献可以讨论吗? 这篇论文发表于1988年,当时Dijkstra在德克萨斯大学奥斯汀分校的时候,这可能是一个线索-他们托管Dijkstra档案,但馆藏很大,我特别想听听其他人对这门课程的兴趣。 我不想在这里讨论Dijkstra的想法是好的还是现实的。我考虑过将此内容发布在cstheory.se或cs.se上,但因为在这里定居下来,是因为a)一个教育工作者社区可能更容易有人可以轻松回答,并且b)Dijkstra本人强调他的课程“主要是形式数学。” 如果您不同意,请随时举报迁移。

5
普通语言能否图灵完整?
我在阅读有关Iota和Jot的文章,发现本节令人困惑: 与Iota不同,在Iota中,字符串的语法树可以在左侧或右侧分支,而Jot语法统一在左分支。结果,Iota完全不受上下文限制,但Jot是常规语言。 我的理解是Iota和Jot都完成了。但显然,一个是上下文无关的,另一个是常规的!常规语言肯定不能完善图灵吗?

2
编程语言和数学基础如何关联?
基本上我知道数学的三个基础 集合论 类型理论 范畴论 那么编程语言和数学基础在哪些方面相关? 编辑 最初的问题是“基于数学基础的语言编程” 与添加的paragarph 理论的实现 1. Coq中的类型论 2. SETL中的 集合论3. Haskell中的范畴论 根据建议,该内容已更改为“编程语言和数学基础如何相关” 由于这是我不知道所要问的问题但想学习一些东西的问题之一,因此,我正在修改问题以使其对学习和其他人更有价值,但又保留了细节以免安德烈·鲍尔(Andrej Bauer)当前的答案似乎不合时宜。 感谢到目前为止的所有评论和答复,我正在向他们学习。

6
是否有可以在任何两种语言之间“翻译”源代码的程序?
是否存在可以在任何两种语言之间“翻译”源代码的程序(假设翻译者可以访问必需的库)? 如果存在,它们如何工作(使用的技术,所需的知识等)?它们将如何可行地构造? 如果不是,阻碍其发展的限制因素是什么?这是AI的完整问题(自然语言翻译列为其中一个)吗? 仅当语言具有相同的表达能力时,才可以预期 EDIT转换,可以解决相同类型的问题,并且要转换的代码可以用目标语言表示。(例如,不建议将Shell脚本转换为MATLAB)。

4
定点组合器(Y组合器)的清晰直观的推导?
(无类型)lambda演算()中的定点组合器FIX(aka Y组合器)定义为:λλ\lambda FIX≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))≜λf.(λx.f (λy.x x y)) (λx.f (λy.x x y))\triangleq \lambda f.(\lambda x. f~(\lambda y. x~x~y))~(\lambda x. f~(\lambda y. x~x~y)) 我了解它的目的,并且可以很好地跟踪其应用程序的执行。我想了解如何从第一原理中得出FIX。 这是我尝试自己导出时所得到的: FIX是一个函数:FIX ≜λ…≜λ…\triangleq \lambda_\ldots FIX使用另一个函数fff使其递归:FIX ≜λf.…≜λf.…\triangleq \lambda f._\ldots 函数f的第一个参数是函数fff的“名称”,用于打算递归应用程序的地方。因此,f的第一个参数的所有出现fff都应由一个函数替换,并且该函数应预期f的其余参数fff(假设f带有fff一个参数):FIX ≜λf.…f (λy.…y)≜λf.…f (λy.…y)\triangleq \lambda f._\ldots f~(\lambda y. _\ldots y) 这是我不知道如何在推理中“迈出一步”的地方。小椭圆表示我的FIX缺少了什么(尽管我只能通过将其与“真实” FIX进行比较来知道)。 我已经阅读了Types and …

9
编程语言是否越来越像自然语言?
此问题已从软件工程堆栈交换迁移,因为可以在计算机科学堆栈交换上回答。 迁移 6年前。 我们可以在语言学背景下学习编程语言吗?编程语言会以与自然语言类似的方式自然地进化吗? 尽管完全的合理性和数学上的一致性对于编程语言至关重要,但仍然需要(尤其是现代语言)使它们对人类可读并舒适。 编程语言是否正在发展以变得更加语言化并因此变得更加自然?例如,机器代码,打孔卡和汇编语言已被更易读的语言(如Ruby和Python等)所取代。 当我说计算机语言变得越来越自然时,我并不是说它们包含更多的“英语中的单词”,而是因为它们的语法复杂性和表达含义的能力似乎变得更像一种自然语言。 (例如,能够以理性和人类可理解的方式雄辩地描述来自数据库的查询)。 你们怎么想 编程语言是否变得越来越像自然语言,从而变得适用于语言学法则? 也许语言生活在一个范围内,一方面,您拥有极端理性的语言,另一方面,您拥有更多的创造力。也许编程语言和自然语言是完全相同的,并且两者都只是在这种语言范围内(它们唯一的区别,也许就是他们试图赋予其含义的“事物”)。 人类语言的(巴别塔效应)分离与计算机语言之间是否存在联系?它们是否由于相同的原因而变得更加多样化(即解决不断发展的计算机系统/文化系统等内部的不同问题)?

7
为什么我们需要汇编语言?
我们主要用高级语言编写程序。因此,在学习期间,我遇到了汇编语言。因此,汇编器将汇编语言转换为机器语言,而编译器对高级语言也是如此。我发现汇编语言有指令,如move r1 r3,move 5等等。这很难研究。那么为什么要创建汇编语言呢?还是比高级语言更先出现的汇编语言?为什么在我的计算机工程课上学习汇编程序?

7
为什么在垃圾收集语言中普遍缺少对象析构函数范式?
寻找有关垃圾收集语言设计决策的见解。也许语言专家可以启发我?我来自C ++背景,所以这个领域令我感到困惑。 似乎几乎所有具有OOPy对象支持的现代垃圾收集语言(如Ruby,Javascript / ES6 / ES7,Actionscript,Lua等)都完全省略了析构函数/定型化范例。Python似乎是唯一使用它的class __del__()方法。为什么是这样?在具有自动垃圾收集的语言中,语言是否存在功能/理论上的限制,从而无法在对象上有效实现析构函数/完成方法? 我发现非常缺乏这些语言将内存视为唯一值得管理的资源。套接字,文件句柄,应用程序状态如何?由于无法实现自定义逻辑以清除对象最终确定中的非内存资源和状态,因此我需要使用自定义myObject.destroy()样式调用来填充我的应用程序,将清除逻辑置于“类”之外,破坏尝试的封装,并降级我的应用程序由于人为错误而导致资源泄漏,而不是由gc自动处理。 什么是语言设计决策,这些决策导致这些语言无法对对象处理执行任何自定义逻辑?我必须想象有一个很好的理由。我想更好地理解导致这些语言不支持对象销毁/完成的技术和理论决策。 更新: 也许更好的方式表达我的问题: 为什么一种语言会具有带有类或类结构以及自定义实例化(构造函数)的对象实例的内置概念,却完全省略了销毁/最终确定功能?提供自动垃圾收集的语言似乎是支持对象销毁/完成的主要候选方法,因为他们知道当不再使用某个对象时会100%确定。但是,其中大多数语言都不支持它。 我认为在这种情况下可能永远不会调用析构函数,因为那将是核心内存泄漏,gcs旨在避免这种情况。我可以看到一个可能的论点是,直到将来某个不确定的时间,析构函数/ finalizer才会被调用,但这并没有阻止Java或Python支持该功能。 不支持任何形式的对象完成的核心语言设计原因是什么?

7
所有图灵语言是否可以互换
注意,虽然我知道如何编程,但我还是CS理论的初学者。 根据这个答案 图灵完整性是可计算性的抽象概念。如果一种语言是图灵完备的语言,那么它就可以进行任何其他图灵完备的语言可以进行的计算。 并写在任何图灵完备的语言的任何程序可以在另一个被改写。 好。这很有道理。我可以将C转换(编译)为Assembly(并且每天都做!),也可以将Assembly转换为C(您可以使用C编写虚拟机)。同样适用于任何其他语言-您可以将任何一种语言编译为Assembly,然后在用另一种其他语言编写的VM中运行它。 但是,可以任意写在一个图灵完备的语言程序重新编写的另一个? 如果我的部件具有LIGHTBUTTON操作码怎么办?在没有灯泡的情况下,我实际上无法在系统(语言)上模拟该语言。 好。因此,您会说,由于我们正在处理计算机理论,因此我们不在讨论物理设备限制。 但是,没有乘法的设备呢?师?据我所知(尽管这更多是关于math.SE的问题),无法模拟加法和减法的乘法(绝对不是除法)[1]。 那么,“图灵完整语言”(可以添加,减去和跳转)如何模仿另一种可以添加,减去,乘法和跳转的语言呢? 编辑 [1]。关于任意实数。

3
可视化编程工具,为什么不直接与AST一起使用?
我已经找到了一些开源的可视化编程工具,例如Blockly和friends,以及在Github托管的其他项目,但是找不到直接与抽象语法树配合使用的工具。 这是为什么? 我之所以问是因为,一旦我发现那里的每个编译器在编译过程中都有一个阶段,它将源代码解析为AST,对我来说很明显,某些可视化编程工具可以利用这一点为程序员提供方法直接以视觉方式编辑AST,还可以进行从源到节点图的往返,然后在需要时再次返回源。 例如,人们可能认为,从JavaScript AST Visualizer到实际的JavaSript可视化编程工具,两者之间并没有太大的区别。 那么,我想念什么?


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.