Questions tagged «programming-languages»

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

3
为什么`main`不能返回double或String而不是int或void?
在许多语言(例如C,C ++和Java)中,main方法/函数的返回类型为void或int,但不具有double或String。背后的原因可能是什么? 我知道一点我们不能做到这一点,因为它main是由运行时库调用的,它需要某种语法int main(),int main(int,char**)所以我们必须坚持下去。 所以我的问题是:为什么要main具有它所拥有的类型签名,而又没有其他类型签名?

9
编程中的内存管理是否已成为无关紧要的问题?
背景信息 我重新访问了一个我很久没去过的古老(但很棒)的网站-Alioth Language Shootout(http://benchmarksgame.alioth.debian.org/)。 几年前,我开始使用C / C ++进行编程,但是由于参与的项目中的语言限制,从那时起,我几乎一直只在Java中工作。我不记得这些数字,而是想大致了解一下Java的状况。在资源使用方面与C / C ++背道而驰。 该执行时间仍然比较好,与Java在表现最差的4倍比C / C ++慢,但平均约(或以下)2倍。由于Java本身实现的性质,这不足为奇,并且它的性能时间实际上比我预期的要短。 真正的难题是内存分配 -最糟糕的是,Java分配了: 内存比C高52倍 比C ++高25倍。 52倍的内存...绝对令人讨厌,对吗?...还是?内存现在相对便宜。 问题: 如果我们不是在对工作内存(即嵌入式系统等)有严格限制的目标平台上说话,那么今天选择通用语言时是否应该考虑内存使用情况? 我之所以提出这样的要求,部分原因是因为我正在考虑迁移到Scala作为我的主要语言。我非常喜欢它的功能方面,但是从内存上看,它比Java还要昂贵。但是,由于内存似乎正在以每年更快,更便宜和更丰富的方式(似乎越来越难找到没有至少4GB DDR3 RAM的家用笔记本电脑),因此可以不争辩说资源管理正在变得越来越多与(可能需要昂贵的实现方式)高级语言功能无关,后者可以更快地构建更具可读性的解决方案?

12
C / C ++的可编译现代替代方案
我正在考虑编写新的软件产品。性能将是至关重要的,因此我对使用一种解释性语言或使用仿真层的语言(阅读Java)保持警惕。 这使我想到了使用C(或C ++)的想法,但是它们都相当长。我很久没用了。我认为在过去的20年中,有人可能创建了相当流行的东西,可以很好地编码和编译。 有什么比C更现代的替代方法来编写高性能的已编译代码? 如果说C ++与15年前是不同的野兽,我会考虑一下,我想我假设它有一些固有的问题。 并行化很重要,但可能不会跨多台计算机。

26
您希望语言设计师注意什么?[关闭]
这个问题的目的不是要整理一些编程语言功能,这些功能是您不能没有的,或者希望使用您选择的主要语言。这个问题的目的是揭示大多数语言设计师可能没有想到的语言设计的角落。因此,与其思考语言特征X,不如多加思考。 我的偏见之一,也许是有争议的,是工程学的较柔和的一面(为什么和为什么)比更为具体的一面要重要许多倍。例如,Ruby的设计目标是提高开发人员的满意度。尽管您对于是否可以交付发表意见不一,但事实上这是一个目标,这意味着语言设计中的某些选择受该哲学的影响。 请不要发布: 语法火焰大战。面对现实,我们有我们的喜好,语法很重要,因为它与语言设计有关。我只是想避免emacs与VI的本质之间的史诗般的战斗(如今,很多人对此一无所知)。 “任何不具有功能X的语言都不应该存在”类型注释。所有编程语言都存在的至少一个原因-好的或坏的。 请做后: 语言设计师似乎错过的哲学思想。 似乎实施得不好的技术概念经常会出现。请提供一个示例,说明造成疼痛的原因,以及您对如何使其功能有任何想法。 您希望的东西在平台的公共库中,但很少。一个相同的标记,通常在您希望的公共库中没有的东西。 您希望所有编程语言都能正确实现并正确定义的概念性功能(例如内置的测试/声明/合同/错误处理支持)。 我希望这将是一个有趣而有趣的话题。 编辑:澄清了我的意思是语法火焰战争。我并不是想避免对语法的所有讨论,特别是因为语法是程序语言设计的基础部分。

6
为什么类型推断有用?
我阅读代码的方式比编写代码的方式要多,并且我假设大多数从事工业软件工作的程序员都这样做。我认为类型推断的优点是减少了冗长和编写的代码。但是另一方面,如果您更频繁地阅读代码,则可能需要可读的代码。 编译器推断类型;有旧的算法可以解决这个问题。但是真正的问题是,当我阅读代码时,程序员为什么要推断出变量的类型?只是阅读该类型的人,是否比思考那里的类型还快? 编辑:作为结论,我理解为什么它有用。但是在语言功能类别中,我发现它在带有操作符重载的存储桶中显示-在某些情况下很有用,但如果滥用则会影响可读性。

6
为什么不在语法级别测试语言是受支持的功能?
您可以找到无穷无尽的博客,文章和网站列表,这些列表可以宣传对单元代码进行单元测试的好处。几乎可以保证,为Java,C ++,C#和其他类型的语言编写编译器的开发人员使用单元测试来验证其工作。 那么,为什么在这些语言的语法中,尽管它很流行,却为什么缺少测试呢? 微软在C#中引入了LINQ,那么为什么他们也不能添加测试呢? 我并不是要预测这些语言的变化,而是要阐明为什么它们一开始就没有。 例如:我们知道您可以编写一个for没有该语句语法的循环for。您可以使用while或if/ goto语句。有人认为for声明更有效,并将其引入语言。 为什么测试没有遵循编程语言的相同演变?

3
REPL和交互式外壳之间的区别
新手问题。我仅通过阅读Wikipedia上的定义就无法分辨REPL和交互式外壳之间的区别。 Wiki指出REPL是一种特殊的交互式语言外壳。它是否是适当的子集?Wiki定义似乎将术语REPL限制为类似Lisp的语言,而声明的属性实际上并不包含任何区别功能。 特别是,将IPython称为REPL是否正确?


22
在使用独特的编程语言的工作中是否有弊端?[关闭]
我刚从大学获得CS学位,所以我想找到一份工作,可以在其中学习更多有关该领域的知识并积累一些专业经验。 我曾在一家使用自己的内部编程语言的公司采访过,但我认为没有其他人会使用它。他们没有提到使用任何其他语言或将其用于开发环境。 从事这样的工作我应该担心什么?如果以后要换工作,是否会因为没有获得任何特定于语言的经验而不得不再次开始寻找入门级职位?

17
我如何对自己的编程技能更有信心?[关闭]
编程对我来说并不陌生。我最初在12岁时开始做标记(HTML,现在请不要嘲笑我),在13岁时我开始做一些BASIC编程(此时我对Flowcharts,Pseudocodes非常了解),但后来我被告诫高中时期的生物学,因此错过了诸如C,Java等语言的“真实”编程知识。我为UG BE学习了CS(与BS类似,但更理论化)。我自己(在较小程度上)学习了C&C ++(我的教授感到非常痛苦,并且课堂上充斥着代码小丑(谁在学校已经学过了,因此没有注意课堂,也没有让像我这样的小凡人也不必专心听课)),并可以制作出很棒的加法或乘法程序(现在甚至是花木园的程序) 我的主要问题是,我总是对自己有限的编程技能感到不足和窒息,而对代码丑陋不屑一顾(相信我,我在很久以前就遇到过这个网站,但现在可能会鼓起勇气进行实际发布一个问题),有时甚至因上述无能而感到沮丧。大多数人说,编程不一定与语言有关,而是与人的心态以及他们用来解决问题/问题的技术有关。我同意这样的观点,但是我能获得这样的“心态”吗?如果这样的话,我应该如何进行“编程/编码”?如果有什么设定的方法和步骤可以最有效地达到“禅宗”呢?编码”。我该怎么做?同样,如果某些圣徒想指导这件被压倒的$#!^也不会有什么坏处。 PS:我将永远感激任何认为我值得他们度过时光的人,并且作为奖励,我将命名为我随他们发行的第一款软件。(如果我要运送一个,即) TL; DR:从未真正学习过“编程/编码”,即使我尝试也无法解决问题。帮我!

11
“ blub悖论”和c ++
我在这里阅读文章:http : //www.paulgraham.com/avg.html,有关“ blub悖论”的部分特别有趣。作为主要使用c ++编写代码但接触过其他语言(主要是Haskell)的人,我知道这些语言中的一些有用的东西很难在c ++中复制。问题主要是针对精通c ++和其他某种语言的人,您是否使用某种强大的语言功能或惯用语言,如果仅使用c ++编写则很难概念化或实现? 特别是这句话引起了我的注意: 通过归纳法,唯一能够看到各种语言之间功能差异的程序员就是那些理解能力最强的程序员。(这可能是Eric Raymond所说的Lisp,使您成为更好的程序员的意思。)由于Blub悖论,您不能相信其他人的意见:他们对碰巧使用的任何语言都感到满意,因为它决定了语言的正确性。他们对程序的思考方式。 如果事实证明我等同于使用C ++的“ Blub”程序员,那么就会引发以下问题:如果您遇到过其他语言所遇到的有用概念或技术,您会发现很难概念化在用C ++编写或“思考”? 例如,可以使用Castor库在c ++中实现在Prolog和Mercury等语言中看到的逻辑编程范例,但最终我发现从概念上讲,我在考虑Prolog代码,并在使用时转换为c ++等效语言。为了扩大我的编程知识,我试图找出是否存在其他类似的有用/强大习语示例,它们可以用其他语言更有效地表达,而我可能不是C ++开发人员。我想到的另一个例子是lisp的宏系统,从程序内部生成程序代码似乎对某些问题有很多好处。这似乎很难在c ++中实现和考虑。 此问题并非旨在进行“ C ++ vs Lisp”辩论或任何形式的语言战争类型辩论。提出这样的问题是我发现有可能找出我不知道的事情的唯一途径。

11
为什么没有从一种编程语言到另一种编程语言的自动翻译器?[关闭]
大多数编程语言都是图灵完整的,这意味着可以用一种语言解决的任何任务都可以用另一种语言解决,甚至可以在图灵机上解决。那么为什么没有自动翻译器可以将程序从任何给定语言转换为任何其他语言呢?我已经看到过尝试两种语言的尝试,但是它们始终只能在一种语言的有限子集上工作,并且几乎不能用于转换实际项目。 至少在理论上,是否有可能在所有语言之间编写100%正确的翻译器?实践中有哪些挑战?是否有现有的翻译人员在工作?


2
什么是第四代和第五代编程语言?还有更多吗?[关闭]
由于通常在学校/学院级别进行分类,因此流行的编程语言(C#,Java,C ++)都是第3代语言(从机器的物理部件中具有更高的抽象级别)。同样,汇编语言被分类为第二语言,机器语言被分类为第一代语言。 最初,我认为SQL应该被认为是第四代语言,因为它更抽象,并且与循环细节和描述性相去甚远。 刚才我发现有第四代和第五代语言,但是将任何编程语言或技术归为第四代或第五代语言的基础是什么? 另外,还有第六代或第七代语言吗?

9
学校为什么要在List上教数组?[关闭]
我学校中大部分的初始编程课程作业都要求我使用数组。我现在全职工作,而且从未将数组用于我从事的任何项目。即使在现有的项目中,我也从未见过在任何地方使用数组。我认为,List更易于使用,是一个标准。教授为什么要告诉学生在作业中使用数组?只是为了让学生了解基础知识? 由于大多数大学都教授Java,因此这个问题是Java特有的。

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.