Questions tagged «programming-languages»

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


12
为什么会有那么多编程语言?
我精通C / C ++,并且可以绕过各种脚本语言(awk / sed / perl)。我开始更多地使用python,因为它结合了C ++的一些漂亮方面和awk / sed / perl的脚本功能。 但是为什么会有这么多不同的编程语言呢?我猜所有这些语言都可以做同样的事情,那么为什么不只坚持一种语言并将其用于计算机编程呢?特别是,作为我的计算机程序员,我是否应该知道某种功能语言? 相关阅读: 为什么新的编程语言成功-或失败? 还需要用编程语言进行研究吗?


5
为什么某些编程语言比其他编程语言“更快”或“更慢”?
我已经注意到,某些基于编程语言(例如C ++ / Rust)构建的应用程序或算法比在同一台机器上运行的基于Java / Node.js的应用程序或算法运行得更快或更灵活。我对此有一些疑问: 为什么会这样? 是什么决定了编程语言的“速度”? 这和内存管理有关系吗? 如果有人为我解决了这个问题,我将不胜感激。

9
编程语言的哪些属性使得无法进行编译?
题: “某种编程语言的某些属性可能要求将代码写入其中的唯一方法是通过解释来执行。换句话说,不可能编译成传统CPU的本机代码。这些属性是什么?” 编译器:Parag H. Dave和Himanshu B. Dave的原则和实践(2012年5月2日) 这本书没有给出答案的任何线索。我试图找到有关编程语言概念(SEBESTA)的答案,但无济于事。网络搜索也无济于事。你有什么线索吗?

6
实践中的正式程序验证
作为软件工程师,我为工业产品编写了大量代码。相对复杂的东西,包括类,线程,一些设计工作,但也有一些性能折衷的地方。我做了很多测试,对测试感到厌倦,所以我对正式证明工具(例如Coq,Isabelle)产生了兴趣……我可以使用其中之一来正式证明我的代码没有错误并且可以完成吗用它?-但是,每当我检查其中一种工具时,我都不敢相信它们可用于日常软件工程。现在,那只能是我,而我正在寻找有关的指针/观点/想法:-) 具体来说,我的印象是,要使这些工具之一对我有用,就需要大量投资才能向证明者正确定义所考虑程序的对象,方法...。然后我想知道,鉴于证明者必须处理的所有事情,证明者是否会不仅仅耗尽精力。或者,也许我将不得不摆脱副作用(那些证明工具似乎对声明性语言确实非常有用),我想知道这是否会导致无法使用“经过验证的代码”,因为它不会很快,或者足够小。另外,我不能奢侈地更改使用的语言,它必须是Java或C ++:我不能告诉老板我从现在开始要使用OXXXml进行编码,因为它是OXXXml中唯一的语言。我可以证明代码的正确性... 拥有更多形式验证工具经验的人可以发表评论吗?再说一遍-我很喜欢使用正式的证明工具,我认为它们很棒,但是我给人的印象是它们位于象牙塔中,而Java / C ++的低谷使我无法达到……(PS:I也喜欢 Haskell,OCaml ...不要误解:我是声明性语言和形式证明的粉丝,我只是想看看我如何切实地将其用于软件工程) 更新:由于涉及的范围很广,让我们尝试以下更具体的问题:1)是否有使用证明来证明工业Java / C ++程序正确性的示例?2)Coq是否适合该任务?3)如果适合使用Coq,我应该先用Coq编写程序,然后再从Coq生成C ++ / Java吗?4)这种方法可以处理线程和性能优化吗?

14
如何向父母解释我学习编程语言?
我目前正在完成计算机科学硕士学位。我对编程语言特别是类型系统感兴趣。我对这个领域的研究很感兴趣,下学期我将开始对该主题的博士学位。 现在这是一个真正的问题:我该如何向(以前)对计算机科学或相关领域没有知识的人解释自己的意愿? 标题来自以下事实:我什至无法向父母,朋友等解释自己的所作所为。是的,我可以说“重点在于帮助软件开发人员编写更好的软件”,但我认为这并不是真正有用的:他们不了解“编程”,他们不了解它的含义。感觉就像是我对中世纪的某人说我是一名汽车修理工:他们根本不知道我在说什么,更不用说如何改进它了。 有没有人与现实世界有很好的比喻?启发性的例子引起“啊哈”的时刻?我是否应该向60岁以上没有计算机科学(也没有学术经验)经验的人展示一段简短的代码?如果是这样,我应该使用哪种语言?这里有人遇到过类似的问题吗?

10
像Ruby / Python这样的动态语言能否达到性能一样的C / C ++?
我想知道是否可以为像Ruby这样的动态语言构建编译器,使其具有与C / C ++类似和可比的性能?根据我对编译器的了解,以Ruby为例,由于Ruby处理反射的方式,诸如从整数到大整数的自动类型转换以及缺少静态类型等特性,使得编译Ruby代码永远不可能高效地进行编译。对于Ruby来说非常困难。 是否有可能构建一个可以将Ruby或任何其他动态语言编译为与C / C ++非常接近的二进制文件的编译器?是否有根本的原因导致JIT编译器(例如PyPy / Rubinius)最终或永远无法在性能上与C / C ++相匹配? 注意:我确实知道“性能”可能是模糊的,所以要澄清一下,我的意思是,如果您可以在C / C ++中以X的性能执行X,那么您可以在Ruby / Python中以接近Y的性能执行X吗?X是从设备驱动程序和OS代码到Web应用程序的所有内容。



9
什么是安全的编程语言?
安全编程语言(PL)越来越流行。我想知道安全PL 的正式定义是什么。例如,C是不安全的,但是Java是安全的。我怀疑应该将“安全”属性应用于PL实施,而不是PL本身。如果是这样,让我们​​讨论安全PL实现的定义。我自己尝试将该概念形式化的结果很奇怪,所以我想听听其他意见。请不要说每个PL都有不安全的命令。我们总是可以选择一个安全的子集。

8
变量如何存储在程序堆栈中以及如何从程序堆栈中检索?
提前为这个问题的幼稚表示歉意。我是位50岁的艺术家,这是我第一次真正地正确理解计算机。所以去了。 我一直在尝试了解编译器如何处理数据类型和变量(从非常普遍的意义上讲,我知道有很多事情要做)。我对“堆栈”中的存储与值类型之间的关系以及“堆”中的存储与引用类型之间的关系的理解中缺少一些东西(引号旨在表示我理解这些术语是抽象的,而不是抽象的在像我构想此问题的方式这样的简化上下文中太夸张了。无论如何,我的简单想法是布尔值和整数之类的类型都放在“堆栈”上,因为它们可以存储,因为它们在存储空间方面是已知的实体,并且可以轻松地控制它们的范围。 但是我没有得到的是应用程序随后如何读取堆栈上的变量-如果我声明并分配x为整数,例如x = 3,并且存储在堆栈上保留,然后将其值3存储在堆栈中,然后在我声明和分配的功能与相同y,例如4,然后x在另一个表达式中使用(例如z = 5 + x),该程序如何读取x以便评估z何时在下面y在堆栈上?我显然缺少了一些东西。是不是堆栈上的位置仅与变量的生存期/范围有关,并且整个堆栈实际上始终可以被程序访问?如果是这样,是否意味着还有其他索引仅保留堆栈上变量的地址以允许检索值?但是后来我认为堆栈的全部目的是将值与变量地址存储在同一位置?在我微弱的头脑中,似乎还有其他索引,那么我们在谈论的更像是堆吗?我显然很困惑,我只是希望对我的简单问题有一个简单的答案。 感谢您阅读本文。

9
为什么图灵的某些编程语言比较完整,但缺乏其他语言的某些功能?
在编写(应该)挂钩到外部程序/函数的解释器时遇到一个奇怪的问题:'C'和'C ++'中的函数不能挂钩可变参数,例如,我无法创建调用'printf'的函数具有与它完全相同的参数,而必须调用采用可变参数的替代版本。这是非常有问题的,因为我希望能够制作一个持有匿名钩子的对象。 因此,我认为这很奇怪,因为Forth,JavaScript和也许其他多种语言都可以很容易地做到这一点,而不必求助于汇编语言/机器代码。由于其他语言可以很容易地做到这一点,这是否意味着每种编程语言可以解决的问题类别实际上也会因语言而有所不同,即使这些语言都已经完成了图灵处理?

2
Tarjan的伪代码如何工作(向熟悉C或Java的人解释)?
短篇小说 多年前,著名的计算机科学家Tarjan写了一本书。它包含绝对奇怪的伪代码。有人可以解释一下吗? 长篇小说 塔里扬(Tarjan)以许多成就而闻名,包括他是八角树的共同发明者。他在1980年代出版了《数据结构和网络算法》一书。 Tarjan书中的所有伪代码都是用他自己设计的语言编写的。伪代码约定非常严格。这几乎是一种真正的语言,可以想象为它编写一个编译器。Tarjan写道,他的语言基于以下三种语言: 迪克斯特拉的守卫命令语言 塞特 阿尔戈尔 我希望熟悉以上一种或两种语言或Tarjan作品的人能够回答我的问题。 用Tarjan语言编写的函数示例如下所示: heap function mesh (heap nodes h1, h2); if key(h1) > key(h2) → h1 ⟷ h2 fi; right (h1) := if right(h1) = null → h2 |right(h1) ≠ null → mesh (right(h1), h2) fi; if rank (left (h1)) < rank (right …

2
分代垃圾收集器本质上是缓存友好的吗?
典型的世代垃圾收集器将最近分配的数据保留在单独的内存区域中。在典型程序中,大量数据是短命的,因此,频繁收集年轻垃圾(较小的GC周期)而很少收集旧垃圾是内存开销和执行GC时间之间的良好折衷。 直觉上,随着主内存相对于高速缓存的等待时间比率的增加,与单区域垃圾收集器相比,世代垃圾收集器的好处应该增加,这是因为经常访问年轻区域中的数据并将它们全部保存在一个地方。实验结果是否证实了这种直觉?

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.