Questions tagged «programming-languages»

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

30
如何创建自己的编程语言和用于它的编译器[关闭]
我对编程很了解,并且遇到过各种语言,包括BASIC,FORTRAN,COBOL,LISP,LOGO,Java,C ++,C,MATLAB,Mathematica,Python,Ruby,Perl,JavaScript,Assembly等。我不明白人们是如何创建编程语言并为其设计编译器的。我也无法理解人们如何创建Windows,Mac,UNIX,DOS等操作系统。对我来说,另一件事是神秘的,人们如何创建像OpenGL,Op​​enCL,OpenCV,Cocoa,MFC等之类的库。我无法弄清的最后一件事是科学家如何设计微处理器的汇编语言和汇编器。我真的很想学习所有这些知识,而且我今年15岁。我一直想成为计算机科学家,例如Babbage,Turing,Shannon或Dennis Ritchie。 我已经读过Aho的Compiler Design和Tanenbaum的OS概念书,他们都只在高层次上讨论概念和代码。它们不涉及细节和细微差别,也不涉及如何设计编译器或操作系统。我需要一种具体的理解,以便我自己创建一个,而不仅仅是对线程,信号量,进程或解析的理解。我问我兄弟这一切。他是麻省理工学院EECS的SB学生,对如何在现实世界中实际创建所有这些东西一无所知。他所知道的只是对编译器设计和OS概念的理解,就像你们提到的(即线程,同步,并发,内存管理,词法分析,中间代码生成等)一样。

4
苏联的太空计划使用了哪些软件编程语言?
我对苏联的太空计划产生了兴趣,并有兴趣发现Buran航天器上的软件大约是1988年用Prolog编写的。 有谁知道在较早的任务中可能使用了哪些语言,尤其是1970年代初期的Mars PrOP-M火星漫游者任务,这些任务在某种程度上是自主的并且可以越过障碍物? 编辑 我来自Buran Prolog的资料是1990年5月从CIA网站获得的这份解密文件。我找不到OCR版本,因此这里是p中的相关引文。0449: 根据开放源文献,苏联人使用法国开发的编程语言Prolog来为Buran车辆开发车载系统软件...

16
杂乱无章的Java文化-为什么事情如此繁重?它优化了什么?[关闭]
我以前经常用Python编写代码。现在,出于工作原因,我使用Java编写代码。我从事的项目相当小,也许Python会更好地工作,但是有使用Java的非工程性正当理由(我无法详述)。 Java语法没问题;这只是另一种语言。但是,除了语法外,Java还具有被视为“正确”的文化,一套开发方法和实践。现在,我完全无法“培养”这种文化。因此,我将不胜感激正确方向的解释或指点。 我开始的堆栈溢出问题中提供了一个最小的完整示例:https://stackoverflow.com/questions/43619566/returning-a-result-with-several-values-the-java-way/43620339 我有一个任务-解析(从单个字符串)并处理一组三个值。在Python中,它是一个单行(元组),在Pascal或C中,它是一个五行记录/结构。 根据答案,可以在Java语法中使用struct的等效项,在广泛使用的Apache库中使用struct的等效项-但是“正确”的实现方法实际上是通过为值创建一个单独的类,并完成吸气剂和二传手。有人很乐意提供一个完整的例子。它是47行代码(嗯,其中一些行是空白)。 我知道,庞大的开发社区可能并非“错误”。因此,根据我的理解,这是一个问题。 Python实践优化了可读性(按照这种哲学,导致了可维护性),然后提高了开发速度。C惯例针对资源使用进行了优化。Java实践针对什么进行了优化?我最好的猜测是可伸缩性(一切都应准备好以百万计的LOC项目的状态),但这是一个非常微不足道的猜测。

9
为什么人们会犹豫使用Python 3?
Python 3于2008年12月发布。从那时起已经过去了很多时间,但是直到今天,许多开发人员仍在犹豫使用Python3。甚至流行的框架(如Django)仍不兼容Python 3,但仍依赖于Python 2。 当然,Python 3与Python 2有一些不兼容,有些人需要依靠向后兼容。但是,对于大多数项目来说,Python 3的存在时间是否已经足够长,以至于大多数项目都无法切换或开始使用Python 3? 有两个竞争版本有很多缺点。需要保持两个分支,学习者的困惑等等。那么,为什么在整个Python社区中对于切换到Python 3如此犹豫?

8
每种语言都是用C编写的吗?
有时,当使用不同的语言(C / C ++,C#)进行编程时,我想到了这种想法: 每种语言都用C编程语言编写吗? C语言是所有语言的母亲/父亲吗? 每个概念(OOP等)是否都在C中实现? 我的方向正确吗?

19
是否有任何理由使用C ++代替C,Perl,Python等?[关闭]
作为Linux(服务器端)开发人员,我不知道在哪里以及为什么应该使用C ++。 当我追求性能时,第一个和最后一个选择是C。 当“性能”不是主要问题时,Perl和Python等编程语言将是不错的选择。 我在这方面了解的几乎所有开源应用程序都是用C,Perl,Python,Bash脚本,AWK甚至PHP编写的,但是没有人使用C ++。 我不是在讨论GUI或Web应用程序之类的其他领域,而是在谈论Linux,CLI和守护程序。 使用C ++是否有令人满意的理由?

26
不断寻找代码示例是否表明开发人员不好?[关闭]
我是CS的学生,在C和C ++方面拥有多年的经验,在过去的几年中,我一直在与Java / Objective C一起进行应用程序开发,现在我转向了Web开发,主要关注于ruby Rails和我意识到(与应用程序开发一样,)我过多地引用了其他代码。我一直在为许多事情提供Google功能,我想我应该可以从头开始做,这确实使我的信心有些破裂。 基本的基础知识不是问题,我不愿意以此为例,但是我可以在sprint中同时在java / python中运行javabat-显然不是一项成就,但是我的意思是说,我有一个扎实的基础知识我认为? 我知道我通常需要使用什么,但是经常引用语法。很乐意为此提供一些建议和意见,因为即使我正在完成学位,这也一直使我在寻找该领域的工作方面受到很大的阻碍。我提出这个问题的主要原因并不是关于就业的问题,而是我不想成为唯一一个不参加黑客马拉松的人,他不会敲开马不停蹄的代码并坐在那里打开20个Google / github标签,而且我不参加任何活动由于稍微缺乏信心... 通过不断地为中等到复杂的任务编写代码示例,一个人是否会成为一个糟糕的开发人员?


24
Python的缺点是什么?[关闭]
如今,Python似乎风行一时,而且并非不值得-因为它确实是一种语言,几乎有人喜欢用它来解决新问题。但是,正如一个智者曾经说过的(称他为智者,仅是因为我不知道是谁说的;不知道他是否真的是那个智者),真正懂一门语言的人不仅会知道它的语言,语法,设计等优点,但也有缺点。没有一种语言是完美的,有些只是比其他更好。 因此,您认为Python的客观缺点是什么。 注意:我不是在这里要求进行语言比较(即C#比Python更好,因为... yadda yadda yadda)-客观(某种程度上)认为哪些语言功能设计不当,是否,可能是什么?一些您在其中缺少的东西,依此类推。如果必须使用另一种语言作为比较,而仅仅是为了说明一个要点,否则很难对此进行详细说明(即,为了易于理解)

15
为什么像Java,Javascript和C#这样的内存管理语言保留了“ new”关键字?
newJava,Javascript和C#等语言中的关键字会创建类的新实例。 该语法似乎是从C ++继承的,在C ++中该语法new专门用于在堆上分配类的新实例,并返回指向该新实例的指针。在C ++中,这不是构造对象的唯一方法。您还可以在不使用new-的情况下在堆栈上构造一个对象,实际上,这种构造对象的方式在C ++中更为常见。 因此,来自C ++背景,newJava,Javascript和C#等语言中的关键字对我来说似乎很自然并且很明显。然后,我开始学习没有new关键字的Python 。在Python中,只需调用构造函数即可构造实例,例如: f = Foo() 最初,这对我来说似乎有点不对劲,直到我想到Python没有理由拥有它new,因为所有内容都是一个对象,因此无需区分各种构造函数语法。 但是后来我想new-Java 的真正意义是什么?我们为什么要说Object o = new Object();?为什么不只是Object o = Object();呢?在C ++中,绝对需要new,因为我们需要区分在堆上分配和在堆上分配之间的区别,但是在Java中,所有对象都在堆上构造,那么为什么还要使用new关键字呢?对于Javascript,可能会问同样的问题。在我不太熟悉的C#中,我认为new在区分对象类型和值类型方面可能有一些用途,但是我不确定。 无论如何,在我看来,C ++之后的许多语言只是“继承”了new关键字-并不需要它。它几乎像一个残余关键字。我们似乎出于任何原因都不需要它,但是它在那里。 问题:我对此是否正确?还是有一些令人信服的理由new需要以C ++启发的内存管理语言(例如Java,Javascript和C#)而不是Python?

8
C ++比D有什么优势?
我最近一直在学习D,并且开始对这种语言有所了解。我知道它提供了什么,我还不知道如何使用所有东西,并且我对D习语等不了解很多,但是我正在学习。 我喜欢D。这是一种很棒的语言,以某种方式对C进行了巨大的更新,并且做得很好。似乎没有一个功能可以“实现”,但实际上是经过深思熟虑和精心设计的。 您会经常听到D是C ++ 应该是的(我要问的是每个人都应该自己决定是否这样做,以避免不必要的火焰战争)。我还从几位C ++程序员那里听说,他们对D的喜欢远超过C ++。 我自己,虽然我知道C,但是我不能说我知道C ++。如果有人认为C ++比D 作为语言要好,那我想听听他们都知道C ++和D的东西(这不是通常的“它具有更多的第三方库”或“有更多的资源”或“需要C ++的工作多于D”。) D是由一些非常熟练的C ++程序员(在D社区的帮助下)由Walter Bright和Andrei Alexandrescu设计的,旨在解决C ++所遇到的许多问题,但是到底有没有真正变得更好的东西?他错过了什么吗?您认为不是更好的解决方案吗? 另外,请注意,我所说的是D 2.0,而不是D 1.0。


9
讨厌多重继承吗?
我一直很喜欢在一种语言中支持多重继承的想法。尽管通常是故意放弃的,但所谓的“替换”是接口。接口根本不能涵盖所有相同的多重继承,并且这种限制有时可能会导致产生更多样板代码。 我听说过的唯一基本原因是基类的钻石问题。我就是不能接受。对我来说,它的表现非常糟糕,例如:“嗯,有可能将其弄糟,所以这自然不是一个好主意。” 但是,您可以用编程语言修改任何内容,我的意思是。我只是不能认真对待这一点,至少没有没有更彻底的解释。 仅知道这个问题就占了90%。此外,我想我几年前听说过涉及通用解决方案的问题,该解决方案涉及“信封”算法或类似的东西(有人敲响铃吗?)。 关于钻石问题,我能想到的唯一潜在的真正问题是,如果您正在尝试使用第三方库,并且看不到该库中两个看似无关的类具有共同的基类,那么除了例如,文档是一种简单的语言功能,可能要求您明确声明要创建菱形的意图,然后才能为您实际编译菱形。有了这样的功能,任何钻石的制造要么是故意的,鲁ck的,要么是因为人们没有意识到这一陷阱。 所有人都这么说... 大多数人是否有真正的理由讨厌多重继承,还是仅仅是一堆歇斯底里会造成弊大于利?有没有我在这里看不到的东西?谢谢。 例 汽车扩展了WheeledVehicle,KIASpectra扩展了汽车和电子产品,KIASpectra包含无线电。为什么KIASpectra不包含电子产品? 因为它是电子的。继承vs.组合应该始终是is-a关系vs.has-a关系。 因为它是电子的。上下都有电线,电路板,开关等。 因为它是电子的。如果冬天电池没电了,您的麻烦就好像所有车轮突然丢失一样。 为什么不使用接口?以#3为例。我不想一遍又一遍地写这个,而且我真的不想创建一些奇怪的代理帮助器类来做到这一点: private void runOrDont() { if (this.battery) { if (this.battery.working && this.switchedOn) { this.run(); return; } } this.dontRun(); } (我们不会考虑该实现的好坏。)您可以想象如何可能有一些与电子相关的功能与WheeledVehicle中的任何内容都不相关,反之亦然。 我不确定是否要解决该示例,因为那里有解释的空间。您还可以考虑从平面扩展Vehicle和FlyingObject,以及从Bird扩展Animal和FlyingObject,或者从更纯粹的示例方面进行思考。

14
为什么大多数编程语言仅支持从函数返回单个值?[关闭]
为什么大多数(?)编程语言中的函数都设计为支持任意数量的输入参数,但仅支持一个返回值? 在大多数语言中,可以通过使用输出参数,返回指针或定义/返回结构/类来“解决”该限制。但是,编程语言没有设计为以更“自然”的方式支持多个返回值似乎很奇怪。 请问对此有解释吗?

15
LISP在当今世界仍然有用吗?哪个版本最常用?
我尝试每隔一定的时间自学一种新的编程语言。最近,我已经阅读了Lisp及其方言在C / C ++之类的语言中处于完全相反的一端的过程,这使我感到好奇,足以了解更多有关它的信息。但是,我不清楚两件事,我正在寻找有关它们的指导: LISP是否在当今世界仍在实践/使用,还是像FORTRAN / COBOL这样的传统语言?我的意思是,除了维护现有代码外,它是否还用于新项目? 什么是最广泛使用的方言?我遇到了Scheme和Common Lisp这两种最流行的方言,并希望您对哪种是最受青睐/最有用的方言发表意见,如果您能为初学者提供任何建议的资源,将不胜感激。 虽然渴望学习一种与我习惯上的程序语言根本不同的语言,但我不想为某种完全过时的东西投入过多的精力-如果它是专业上的“死胡同”,我仍然会学习它,但只有学术角度...

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.