Questions tagged «programming-languages»

用于指示计算机执行计算步骤以完成任务的人工语言。它们允许程序员与计算机进行通信。

2
lambda演算与编程语言之间是什么关系?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我明年要开始(大学)计算机科学专业的第一年,而我主要用C语言写作(如果有关系的话)。我曾尝试搜索,但发现的大部分内容都是关于lambda演算的知识。为什么lambda演算在编程中比单变量演算有用得多?lambda表达式与功能程序之间是否存在关系?阿隆佐·丘奇(Alonzo Church)在lambda微积分上的工作是否影响了编程语言的发展? 校外的每个人都在忙着讨论它,即使我渴望学习它,并看到它与我的编程和对编程语言的理解直接相关,我也不知道他们会谈论什么。

6
调用函数时不知道函数的参数名称
这是我想听听您的想法的编程/语言问题。 我们已经制定了约定(大多数程序员应该遵循),这些约定不是语言语法的一部分,但是可以使代码更具可读性。当然,这些总是一个辩论的问题,但是至少有一些核心概念是大多数程序员认为可以接受的。适当地命名变量,一般来说命名,使行的长度不会过长,避免使用长函数,封装等那些东西。 但是,有一个问题我尚未找到任何人对此发表评论,而这可能是其中最大的问题。这是调用函数时参数匿名的问题。 函数源于数学,其中f(x)具有明确的含义,因为函数具有比编程中通常更为严格的定义。数学中的纯函数比编程中的函数执行的功能要少得多,并且它们是一种更精致的工具,它们通常只接受一个参数(通常是一个数字),并且总是返回一个值(通常是一个数字)。如果一个函数接受多个参数,则它们几乎总是只是该函数域的额外维度。换句话说,一个论据并不比其他论据更重要。当然,它们是明确排序的,但是除此之外,它们没有语义排序。 但是,在编程中,我们拥有更多的自由定义函数,在这种情况下,我认为这不是一件好事。常见的情况是,您定义了这样的函数 func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {} 查看定义,如果函数编写正确,则完全清楚是什么。在调用该函数时,您甚至可能在您的IDE /编辑器中出现了一些智能/代码完成魔术,这些魔术将告诉您下一个参数应该是什么。可是等等。如果我在实际编写呼叫时需要此功能,这里是否不缺少某些内容?读代码的人没有IDE的好处,除非他们跳转到定义,否则他们不知道作为参数传递的两个矩形中的哪个用于什么。 问题不仅仅如此。如果我们的参数来自某个局部变量,那么在某些情况下,我们甚至不知道第二个参数是什么,因为我们只能看到变量名称。以这行代码为例 DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2]) 使用不同的语言可以在不同程度上缓解这种情况,但是即使使用严格类型的语言,即使您明智地命名变量,在将变量传递给函数时,您甚至都不会提到变量的类型。 与编程通常一样,此问题有很多潜在的解决方案。许多已经以流行语言实现。例如,C#中的命名参数。但是,我所知道的全部都有明显的缺点。命名每个函数调用中的每个参数都不可能导致可读代码。几乎感觉像是我们正在超越纯文本编程为我们提供的可能性。我们几乎在每个领域都从仅文本迁移而来,但是我们仍然编写相同的代码。需要在代码中显示更多信息吗?添加更多文本。无论如何,这有点切线,所以我在这里停止。 我对第二个代码段的回答是,您可能首先将数组解压缩为一些命名变量,然后使用它们,但是变量的名称可能意味着很多事情,并且其调用方式并不一定会告诉您应该使用的方式在调用函数的上下文中进行解释。在本地范围内,您可能有两个名为leftRectangle和rightRectangle的矩形,因为这是它们在语义上表示的,但是在扩展给函数时并不需要扩展到它们表示的内容。 实际上,如果变量是在被调用函数的上下文中命名的,则所引入的信息要少于该函数调用可能带来的信息,并且在某种程度上会导致代码变差。如果您有一个过程产生一个矩形,该过程存储在rectForClipping中,然后另一个过程提供了rectForDrawing,则对DrawRectangleClipped的实际调用只是一种仪式。这行没有什么新意,只是在那里,因此即使您已经用命名解释了它,计算机也知道您到底想要什么。这不是一件好事。 我真的很想听听对此的新见解。我确定我不是第一个将其视为问题的人,那么如何解决呢?

6
信号是否使源代码更易于阅读?
在大多数编程语言中,变量没有像PHP中那样具有识别字符。在PHP中,必须在变量前面加上$字符。 例; var $foo = "something"; echo $foo; 我正在为业务应用程序开发一种新的脚本语言,而我的目标用户没有编程背景。这些字符是否使代码更易于阅读和使用? PHP使用的原因之一$是因为没有它,PHP无法分辨名称是函数引用还是变量引用。这是因为该语言允许奇怪地引用函数。因此,该$符号可帮助解析器分隔名称空间。 我的解析器中没有这个问题。因此,我的问题仅在于可读性和易用性。我已经用PHP编写了多年代码,以至于我$foo很容易将其识别为变量。我只是给该标识符一个偏见偏好吗?


4
费尔南多·科巴托(Fernando J.Corbató)的“受限语言”
Fernando J.Corbató 在1990年的图灵奖演讲中列出了复杂系统不可避免地会失败的原因。在他的结论中,他提出了一些减少故障可能性的建议。他列举了一个想法如下: [U]使用约束语言进行设计或综合是一种强大的方法。通过不允许程序员或设计师表达不相关的想法,可能出现的错误的范围变得更加有限。 他所说的“受限语言”是什么意思? 一会儿我考虑了约束编程。但是,约束编程是关于限制程序的解决方案空间。它是赋予程序员权力的工具。Corbató所指的功能似乎实际上限制了程序员,或者至少使她更倾向于编写简短代码。 我的第二个想法是他指的是保守的编程语言。Corbató因在1960年代和1970年代所做的工作而获得了图灵奖。据我了解,他处理了很多打孔卡。我从未见过打孔卡,所以我当然不知道如何编程,但是我可能会猜到打孔卡编程非常自由。我怀疑类型检查,静态分析等概念根本不存在。因此,Corbató可能是指限制开发人员犯下愚蠢错误的语言概念吗?似乎也不是这样。安全检查和数据建模与简洁性无关,当他提到“不允许...无关紧要的想法”时,这似乎就是他所谈论的话题。

2
通过类构造所有代码并编译为类(如Java)的优缺点
编辑:与Java不同,我的语言允许多重继承。 我已经开始设计和开发自己的编程语言,用于教育,娱乐和可能有用的目的。 首先,我决定将其基于Java。 这意味着所有代码都将以类的形式编写,并且代码会编译为类,这些类由VM加载。 但是,我排除了诸如接口和抽象类之类的功能,因为我发现不需要它们。他们似乎在强制范式,我希望我的语言不要这样做。但我想将这些类保留为编译单元,因为实现起来似乎很方便,熟悉,而且我只是喜欢这个想法。 然后,我注意到我基本上只剩下一个模块系统,在该系统中,类可以用作“命名空间”,使用static指令提供常量和函数,或用作需要实例化的对象的模板(类的“实际”目的)其他语言)。 现在我不禁要问:将类用作编译单元有什么好处和坏处? 另外,对于我的设计的任何一般性评论也将不胜感激。可以在以下网站找到有关我的语言的丰富信息:http : //www.yannbane.com/2012/12/kava.html。

3
是否已对任何编程语言的语法进行了可用性测试?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。 在发布给公众之前,任何编程语言的语法都经过可用性测试吗?如果是,执行了哪些测试,结果是什么,以及测试结果对语言的设计产生了什么影响?

5
经典OOP优于Go语言
我一直在思考语言设计以及“理想”编程语言所必需的要素,而对Google Go的研究使我提出了很多其他常识。 具体来说,Go似乎从面向对象的编程中获得了所有有趣的好处,而实际上没有任何面向对象语言的结构。没有类,只有结构。没有类/结构继承-仅结构嵌入。没有任何层次结构,没有父类,没有显式的接口实现。取而代之的是,类型转换规则基于类似于鸭子类型的松散系统,因此,如果结构实现“阅读器”,“请求”或“编码”的必要元素,则可以对其进行转换并使用它作为一个。 用C ++和Java和C#实现的OOP是否具有某种固有的功能,更可维护,更强大的功能,而在转向Go这样的语言时,您必须放弃这些功能?为了获得这种新范例所代表的简单性,您必须放弃什么好处? 编辑 消除了读者似乎过分迷恋和激怒的“过时”问题。 问题是,在普通语言实现中经常看到的传统的面向对象范式(具有层次结构等)必须提供哪些在这种简单模型中无法轻松实现的范式?或者,换句话说,如果您今天要设计一种语言,是否有理由要包含类层次结构的概念?


9
如果不练习,您的编程知识会减少吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我是新手程序员。我学习诸如C,C ++,Python和Java之类的语言(主要侧重于C ++)。我就是您所说的“年轻且经验不足”的人,我承认这是因为我无可否认。 作为一名学生,除编程外,我还有许多其他问题。我会尽可能多地练习编程,尤其是因为我的老师给我的练习比课堂上的其余课程要多(这是一个很低的水平),所以我经常花数周时间做其他事情,例如学校项目或体育运动,或者旅行,除了编程。 但是不要误会我的意思,我喜欢编程。我喜欢构建功能代码,只需按一下按钮就可以观看程序的运行,并学到很多东西。问题是,我根本没有太多时间。 现在,直接问一个问题:您的编程知识会随着时间的流逝而减少,而您却没有练习吗?您可能会问“您的意思是多少时间?”。我并不是说要花费特定的时间,但是作为参考,您可以以两个月甚至一年为例。 就知识而言,我指的是从语法到语言功能的所有内容。

4
Ruby是做什么的(或者是Rails)?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 大多数编程语言都有一些影响其用法和适用性的设计决策。 例如: Python专注于代码的可维护性/可读性,并且缩进已成为语言本身的一部分。 Java的意图是使跨平台的OOP比C ++更加“轻松”和“友好” Objective-C是作为C的OO包装而构建的,当时还不知道C ++的未来 Erlang专为高度容错和并发系统而设计 PHP设计用于处理网页的动态创建 CoffeeScript旨在公开Java 脚本的大部分内容,并添加OOP语法糖,并在“幕后”等中隐藏JS的细微差别(全局等)。 每种编程语言都试图利用并利用特定的细分市场恕我直言。以上是我对编程语言的基本原理以及支配其发展和广泛采用性的观点。当然,还有更多,但是该列表仅用作示例 但是,我一直在努力地理解Ruby的创立原则及其日益普及的趋势。Ruby的流行是什么?还是设计Rails框架的一个人的天才?如果是后者,是因为Ruby使Rails的设计更好/更容易/更快了?凭什么? 根据其创建者最常被引用的原因是“ ...想要一种有趣的弱类型编程语言”-我不认为这完全是创建新编程语言的原因!恕我直言,无论使用哪种语言,编程都很有趣(每种语言都有一些不好的部分,但是要么绕过它,要么与它共存)。 那么,Ruby语言在当前语言中没有(或没有)利用什么利基呢?导致广泛采用的Ruby的“强项”(USP)是什么?Ruby以前没有做过(或者非常困难)做了什么? 我不是Ruby程序员,而是Ruby noob,所以很困惑。 免责声明:这不是一场大战,我不是在寻找Ruby vs编程语言类型的答案。我正在寻找导致广泛采用的基于Ruby的设计决策。Ruby满足于流行有什么利基?还是纯粹归因于Rails?

8
单一责任原则-我是否过度使用它?
供参考-http://en.wikipedia.org/wiki/Single_responsibility_principle 我有一个测试场景,其中一个应用程序模块负责创建分类帐条目。可以执行三个基本任务: 以表格格式查看现有分类帐条目。 使用创建按钮创建新的分类帐条目。 单击表中的分类帐条目(第一个指针中提到),然后在下一页查看其详细信息。您可以在此页面中使分类帐条目无效。 (每页中有几个其他的操作/验证,但为了简洁起见,我将其限制为这些操作/验证) 因此,我决定创建三个不同的类- LedgerLandingPage CreateNewLedgerEntryPage ViewLedgerEntryPage 这些类提供了可以在那些页面中执行的服务,Selenium测试使用这些类将应用程序带入可以确定某些状态的状态。 当我和一位同事一起对它进行复习时,他感到不安,要求我为所有人开一门课。尽管我仍然觉得自己的设计很干净,但是我是否过度使用单一职责原则还是值得怀疑的

5
为学习体验创建新的脚本语言?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为自己的个人学习经验创建脚本语言值得吗? 我问的原因是已经有那么多编程语言可用,我知道我的语言除了提供良好的学习体验外,不会有任何实际用途。但是,我确实发现仅尝试将脚本语言作为一种学习经验是有弊端的:要花费更多的时间和精力,我可能会做一些更具“生产力”的事情。 创建一种编程语言(包括编写其预期目的,语法,哲学,解释器等的草稿)是否值得花费时间,精力和学习经验?还是还有其他我可以从中受益的项目?

7
什么构成了在编程中正确使用线程?
我厌烦听到人们建议您每个处理器仅使用一个线程,而许多程序每个进程最多使用100个线程!以一些常见程序为例 vb.net ide uses about 25 thread when not debugging System uses about 100 chrome uses about 19 Avira uses more than about 50 每当我发布与线程相关的问题时,几乎每次都会提醒我,每个处理器不应使用一个以上的线程,并且上面提到的所有程序在使用单个处理器的系统上都会崩溃。

4
人们为什么将某些库重写为多种编程语言?
有一些库,这些库的版本可用许多不同的编程语言编写,例如Lucene,该库是用Java(如他们所说的100%纯Java)编写的,但也具有C ++,C,Perl的版本,Ruby,Lisp和其他一些语言。我说的是这些语言的实现,而不仅仅是FFI接口。 人们为什么这样做?我可以看到一个明显的原因:当项目具有较少的依赖项时,部署和分发(也可能是开发)更加容易。但是还有别的吗?在什么情况下值得?

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.