标签: programming-languages

什么是蹦床功能?

在最近的工作讨论中,有人提到了蹦床功能.

我已经阅读了维基百科的描述.这足以给出功能的一般概念,但我想要更具体的东西.

你有一个简单的代码片段来说明蹦床吗?

c language-agnostic programming-languages trampolines

89
推荐指数
5
解决办法
3万
查看次数

是否与空合并运算符"相反"?(...用任何语言?)

null coalescing大致翻译为 return x, unless it is null, in which case return y

我经常需要 return null if x is null, otherwise return x.y

我可以用 return x == null ? null : x.y;

不错,但null中间总是困扰我 - 这似乎是多余的.我更喜欢这样的东西return x :: x.y;,::只有在它之前的东西不是的时候才会评估null.

我认为这几乎与null合并相反,有点简洁,内联null检查,但我[ 几乎 ]确定在C#中没有这样的运算符.

是否有其他语言有这样的运营商?如果是这样,它叫什么?

(我知道我可以用C#编写一个方法;我使用return NullOrValue.of(x, () => x.y);,但如果你有更好的东西,我也希望看到它.)

c# syntax programming-languages operators null-coalescing-operator

87
推荐指数
5
解决办法
1万
查看次数

创建JVM编程语言

我在C中创建了一个编译器(使用lex和bison),用于支持循环,函数内部函数声明,递归调用等的动态类型编程语言.我还创建了一个运行编译器创建的中间代码的虚拟机.

我现在正在思考而不是编译到我自己的中间代码,将其编译为java字节代码.

我看到有关创建JVM语言的问题已经被提出,但是我找不到答案非常有用的信息.

所以这是我的问题:

  1. 我想要为JVM创建一种语言,必须阅读JVM规范书,你能提出哪些其他书籍(当然除了龙书)?我主要关注如何创建JVM语言的书籍或教程,而不是一般的编译器.
  2. 有许多Java库可以读取,写入和更改.class文件,如jclasslib,bcel,gnu字节码等.您会建议哪一个?另外,您是否了解执行相同工作的C库?
  3. 我正在考虑看看另一种针对JVM的语言,如Clojure,Jython或JRuby.但是所有这些语言都非常高级且复杂(为它们创建编译器).我正在寻找一个更简单的(我不介意它是未知或未使用的)编程语言,它是针对JVM的,它的编译器是开源的.有任何想法吗?

compiler-construction jvm programming-languages jvm-languages

87
推荐指数
4
解决办法
2万
查看次数

在Haskell之后要学习什么语言?

作为我的第一门编程语言,我决定学习Haskell.我是一个分析哲学专业,Haskell允许我快速而正确地创建感兴趣的程序,例如,用于自然语言解析的传感器,定理证明器和解释器.虽然我只编写了两个半月的编程,但我发现Haskell的语义和语法比传统的命令式语言更容易学习,并且对其大多数构造感到舒适(现在).

然而,Haskell中的编程就像巫术,我想拓宽我对编程的了解.我想选择一种新的编程语言来学习,但我没有足够的时间来学习任意语言,删除它并重复.所以我想我会在这里提出问题,以及关于我正在寻找的语言类型的几个规定.有些是主观的,有些是为了缓解从Haskell的过渡.

  • 强类型系统.我最喜欢的Haskell编程部分之一是编写类型声明.这有助于构建我对各个功能及其与整个程序的关系的想法.它还可以更容易地非正式地推断我的程序的正确性.我关心的是正确性,而不是效率.
  • 强调递归而不是迭代.我在Haskell中使用迭代构造,但是递归地实现它们.但是,理解递归函数的结构要比复杂的迭代过程容易得多,尤其是在使用组合器和高阶函数(如map,folds和bind)时.
  • 有意识地学习.Haskell是一种有用的语言.它有点像读康德.然而,我几年前与C的经历并非如此.我不是在寻找C.语言应该强制执行一个概念上有趣的范例,在我完全主观的看法中,C-like不会.

称重答案:当然,这些只是笔记.我只想回复所有给出良好反应的人.你一直非常乐于助人.

1)一些回答表明强调递归的强大的静态类型语言意味着另一种功能语言.虽然我想继续与Haskell合作,但是camccann和larsmans正确地指出另一种这样的语言会"过度缓解过渡".这些评论非常有用,因为我不打算在Caml中编写Haskell!在证明助理中,Coq和Agda看起来都很有趣.特别是,Coq将为建构逻辑和形式类型理论提供可靠的介绍.我花了一点时间使用一阶谓词和模态逻辑(Mendellsohn,Enderton,一些Hinman),所以我可能会对Coq有很多乐趣.

2)其他人非常青睐Lisp(Common Lisp,Scheme和Clojure).从我收集的内容来看,Common Lisp和Scheme都有很好的介绍性材料(On LispThe Reasoned Schemer,SICP).SICP中的材料使我倾向于Scheme.特别是,通过SICP的Scheme将涵盖不同的评估策略,懒惰的实现,以及关注诸如延续,解释器,符号计算等主题的机会.最后,正如其他人所指出的那样,Lisp对代码/数据的处理将是全新的.因此,我倾向于选择(2),一个Lisp.

3)第三,Prolog.Prolog有很多有趣的材料,它的主要领域正是我感兴趣的.它具有简单的语法并且易于阅读.我现在无法评论更多,但在阅读了Prolog的概述并浏览了一些介绍材料之后,它排名为(2).似乎Prolog的回溯总是被黑客入侵Haskell!

4)在主流语言中,Python看起来最有趣.蒂姆耶茨使这些语言听起来非常吸引人.显然,Python经常被教给第一年的CS专业; 所以它要么在概念上丰富,要么易于学习.我需要做更多的研究.

谢谢大家的推荐!它看起来像Lisp(Scheme,Clojure),Prolog或像Coq或Agda这样的证明助手是推荐的主要语言.

haskell programming-languages

85
推荐指数
15
解决办法
1万
查看次数

学习汇编语言是否值得?

学习ASM还值得吗?

我知道一点,但我还没有真正使用它或者正确地学习它,因为我在汇编程序中学到的一切都可以用1/10的时间用C或C++这样的语言来完成.那么,我应该真正学习和使用ASM吗?这对我有什么好的专业吗?它会增加我的机智吗?总之,它会让我成为更好的程序员吗?

注意:我说的是像FASMNASM这样的低级程序集,而不是像HLA(高级汇编程序)这样的程序.

assembly programming-languages nasm

85
推荐指数
5
解决办法
7万
查看次数

泄漏抽象的含义?

"泄漏抽象"一词是什么意思?(请用例子解释.我经常很难完成一个理论.)

memory-leaks abstraction programming-languages functional-programming leaky-abstraction

81
推荐指数
7
解决办法
1万
查看次数

Mathematica:什么是符号编程?

我是斯蒂芬·沃尔夫勒姆(Stephen Wolfram)的忠实粉丝,但他绝对不会羞于吹响自己的号角.在许多参考文献中,他将Mathematica称为不同的符号编程范例.我不是Mathematica用户.

My questions are: what is this symbolic programming? And how does it compare to functional languages (such as Haskell)?

haskell programming-languages functional-programming wolfram-mathematica

78
推荐指数
4
解决办法
2万
查看次数

为什么日期是从1970年1月1日算起的?

使用日期(1970年1月1日)作为时间操纵的默认标准是否有任何理由?我在Java和Python中都看到过这个标准.我知道这两种语言.是否有其他流行语言遵循相同的标准?

请描述一下.

python java programming-languages

77
推荐指数
5
解决办法
6万
查看次数

有什么区别:异步,非阻塞,事件基础架构?

  1. 有什么区别:

    • 异步,
    • 非阻止,和
    • 基于事件的架构?
  2. 可以是异步非阻塞(以及基于事件的)吗?

  3. 在编程中最重要的是拥有一些东西:异步,非阻塞和/或事件库(或全部3)?

如果你能提供一些例子,那就太棒了.

这个问题正在被问到,因为我正在阅读关于类似主题的这篇伟大的StackOverflow文章,但它没有回答我上面的问题.

asynchronous programming-languages event-based-programming nonblocking blocking

77
推荐指数
3
解决办法
3万
查看次数

是否有其他常见的"c-like"或非"c-like"语言具有非零索引数组位置?

C编程语言被称为零索引数组语言.使用可访问数组中的第一项0.例如double arr[2] = {1.5,2.5},数组中的第一项arr位于位置0. arr[0] === 1.5哪些编程语言是基于1的索引?

我听说这些语言从1开始而不是0开始用于数组访问:Algol,Matlab,Action !, Pascal,Fortran,Cobol.这完整吗?

具体而言,基于1的阵列将访问具有1的第一项,而不是零.

arrays indexing programming-languages

75
推荐指数
9
解决办法
5万
查看次数