这个问题多年来让我感到迷惑,考虑到这个网站的名字,这是要问的地方。 为什么我们程序员仍然有这个StackOverflow问题? 为什么在每一种主要语言中,线程堆栈的内存都必须在创build线程时静态分配? 我将在C#/ Java的背景下讲,因为我使用它们最多,但这可能是一个更广泛的问题。 固定的堆栈大小会导致巨大的问题: 除非你确定recursion的深度很小,否则没有办法写一个recursionalgorithm。 recursionalgorithm的线性内存复杂度通常是不可接受的。 没有便宜的方法来开始新的线程。 你必须为堆栈分配巨大的内存块来说明线程的所有可能的用途。 即使不使用非常深的recursion,由于堆栈大小是一个任意的固定数字,您总会有堆栈空间不足的风险。 考虑到StackOverflow通常是不可恢复的,这是我眼中的一个大问题。 现在,如果dynamic调整堆栈大小,上述所有问题都将得到缓解,因为堆栈溢出只有在存在内存溢出时才可能发生。 但事实并非如此。 为什么? 现代CPU有没有一些基本的限制,会使它变得不可能/效率低下? 如果你考虑重新分配会带来的性能问题,那么应该是可以接受的,因为人们ArrayList使用像ArrayList这样的结构而不会受到太大的影响。 所以,问题是,我错过了什么, StackOverflow是不是一个问题,或者我错过了一些东西,有很多语言与dynamic堆栈,还是有一些很大的原因,这是不可能的/难以实现? 编辑:有人说,performance将是一个大问题,但考虑到这一点: 我们保持编译的代码不变。 堆栈访问保持不变,因此“通常情况下”的性能保持不变。 我们处理当代码尝试访问未分配的内存并启动我们的“重新分配”例程时发生的CPUexception。 重新分配将不会经常发生,因为<将您通常的ArrayList参数放在这里>。 应该在大多数保护模式CPU上工作而不会损失性能。 没有?
我对编译器,口译员和语言感兴趣。 什么是你知道的最有趣,但被遗忘或未知的语言? 更重要的是,为什么? 我对编译,解释和虚拟机语言都很感兴趣,但对空白或BF这些深奥的语言没有兴趣。 当然,开源将是一个加号,因为我打算学习并希望从中学习。
鉴于在Scala中定义一个函数的下列结构,你能解释一下这个区别是什么,它的含义是什么? def foo = {} 与 def foo() = {} 更新 感谢您的快速回复。 这些都很棒。 我唯一的问题是: 如果我省略括号,是否还有一种方法来传递函数呢? 这是我得到的repl: scala> def foo = {} foo: Unit scala> def baz() = {} baz: ()Unit scala> def test(arg: () => Unit) = { arg } test: (arg: () => Unit)() => Unit scala> test(foo) <console>:10: error: type mismatch; found : […]
我在许多与Scheme有关的代码和文档以及类似领域遇到过“thunk”这个词。 我猜测这是一个程序的通用名称,有一个正式的论点。 那是对的吗? 如果是的话,还有更多吗? 如果不是,请吗? 例如。 在SRFI 18的“程序”部分。
我曾经接触过命令式语言(C,一些Java),但是我会说我没有编程经验 。 因此:把我当作非程序员来对待,Haskell是否适合作为第一语言? 我对纯math和CS的兴趣似乎与大多数Haskell教程的意图是一致的,尽pipe我可以固有地认识到命令式编程的当前和未来的行业价值,但是我发现函数式编程的潜力(尽pipe似乎是这样的范式转变)引人入胜。 我想我的问题可以被提炼如下 – 一个非程序员是否必须理解命令式编程来欣赏和充分利用函数式编程? 一些参考: 有没有关于function性/声明性或命令式编程作为第一语言更容易学习的研究? 哪些编程语言帮助您更好地理解编程?
如果你有一个有趣的故事要分享, 请发表一个答案 ,但不要滥用这个问题来抨击一种语言。 我们是程序员,我们的主要工具是我们使用的编程语言。 虽然有很多关于最好的讨论, 我想听听你曾经使用的最糟糕的编程语言的故事 ,我想知道你究竟是什么恼火。 我想收集这个故事的一部分,以避免在devise一种语言(特别是DSL)时常见的陷阱,部分是为了避免将来的古怪语言。 这个问题不是主观的 。 如果一种语言只支持单个字符标识符(请参阅我自己的答案 ),这是一个不可争议的方式 。 编辑 有人提出这个问题吸引巨魔的担忧。 通过所有的答案涉水清楚一件事。 大部分的答案是适当的,有用的,写得很好。 更新2009-07-01 19:15 GMT 语言概述现已完成,涵盖了来自102个答案的103种不同的语言 。 我决定对于什么是一种编程语言并且包括任何合理的东西而放松。 感谢大卫对此的评论。 这里是迄今为止涵盖的所有编程语言(按字母顺序排列,与答案链接,新条目以粗体显示): ABAP , 所有20世纪的语言 , 所有拖放语言 , 所有专有语言 , APF , APL (1) , AS400 , Authorware , Autohotkey , BancaStar , BASIC , Bourne Shell , Brainfuck , C ++ […]
当人们想强调一种语言比另一种语言更好时,我看到很多“performance力”一词。 但是我不明白他们的意思。 是冗长/简洁吗? 我的意思是,如果一种语言可以写下比另一种语言短的东西,那么这是否意味着expression性? 请参考我的其他问题 – 关于代码密度作为衡量编程语言能力的措施的文章 这是语言的力量吗? 保罗·格雷厄姆(Paul Graham)认为,一种语言比另一种语言更强大,因为一种语言可以做另一种语言无法做到的事情(例如,LISP可以使用其他语言无法做到的macros)。 这只是让生活更轻松吗? 正则expression式可以是其中一个例子。 这是解决同一个问题的另一种方式:像SQL解决search问题? 你怎么看待编程语言的performance力? 你能用一些代码来performance出performance力吗? 与performance力和DSL有什么关系? 人们拿出DSL来获得performance力吗?
我正在研究在DSP上运行Linux的embedded式系统。 现在我们想要使它的一些部分可以编写脚本,我们正在寻找一个很好的embedded式脚本语言。 这些脚本应该与我们现有的C ++代码库很好地集成,小而快。 我知道Lua是这样的问题的行业select。 我们可能会和Lua一起去,因为它被certificate是稳定的,而且是稳定的。 然而,作为一种编程语言,它有一些相当古怪的angular落。 那么,可embedded语言有哪些替代scheme呢? 编辑: 大约一年之后。 我们实际上在我们的embedded式系统上使用了Lua,它performance的非常好。 随着时间的推移,我们为越来越多的项目部分添加了越来越多的脚本支持,并且真正帮助实现了这一目标。 性能非常出色,真的。 即使相当复杂的操作,涉及search长arrays或花式string操作performance惊人的好。 我们基本上从来没有碰到过Lua相关的性能问题。 与C函数接口非常简单,效果很好。 这使我们能够无痛地发展脚本系统。 最后,我们对Lua被certificate是多么灵活感到震惊。 我们的Lua解释器必须在非标准内存分配器的系统上运行,并且不支持双数据types。 在一个头文件中有两个logging良好的地方,我们必须修改它们以使Lua在该系统上工作。 它非常适合embedded!
可能重复: Android Dalvik上可以使用哪些编程语言? Android可以使用哪些编程语言进行开发? 什么编程语言可以用来开发Android应用程序? 也有计划在未来扩大Android将支持的编程语言的数量? 更新:这里有很好的答案 Android可以使用哪些编程语言进行开发?
我使用CoffeeScript来简化 JavaScript开发。 这是一种语言清晰的语言,可以编译成JavaScript。 那么,为了简化语法和/或增强function,编译成C / C ++源代码的既定编程语言是什么?