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
我在C中创建了一个编译器(使用lex和bison),用于支持循环,函数内部函数声明,递归调用等的动态类型编程语言.我还创建了一个运行编译器创建的中间代码的虚拟机.
我现在正在思考而不是编译到我自己的中间代码,将其编译为java字节代码.
我看到有关创建JVM语言的问题已经被提出,但是我找不到答案非常有用的信息.
所以这是我的问题:
compiler-construction jvm programming-languages jvm-languages
作为我的第一门编程语言,我决定学习Haskell.我是一个分析哲学专业,Haskell允许我快速而正确地创建感兴趣的程序,例如,用于自然语言解析的传感器,定理证明器和解释器.虽然我只编写了两个半月的编程,但我发现Haskell的语义和语法比传统的命令式语言更容易学习,并且对其大多数构造感到舒适(现在).
然而,Haskell中的编程就像巫术,我想拓宽我对编程的了解.我想选择一种新的编程语言来学习,但我没有足够的时间来学习任意语言,删除它并重复.所以我想我会在这里提出问题,以及关于我正在寻找的语言类型的几个规定.有些是主观的,有些是为了缓解从Haskell的过渡.
称重答案:当然,这些只是笔记.我只想回复所有给出良好反应的人.你一直非常乐于助人.
1)一些回答表明强调递归的强大的静态类型语言意味着另一种功能语言.虽然我想继续与Haskell合作,但是camccann和larsmans正确地指出另一种这样的语言会"过度缓解过渡".这些评论非常有用,因为我不打算在Caml中编写Haskell!在证明助理中,Coq和Agda看起来都很有趣.特别是,Coq将为建构逻辑和形式类型理论提供可靠的介绍.我花了一点时间使用一阶谓词和模态逻辑(Mendellsohn,Enderton,一些Hinman),所以我可能会对Coq有很多乐趣.
2)其他人非常青睐Lisp(Common Lisp,Scheme和Clojure).从我收集的内容来看,Common Lisp和Scheme都有很好的介绍性材料(On Lisp和The 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这样的证明助手是推荐的主要语言.
学习ASM还值得吗?
我知道一点,但我还没有真正使用它或者正确地学习它,因为我在汇编程序中学到的一切都可以用1/10的时间用C或C++这样的语言来完成.那么,我应该真正学习和使用ASM吗?这对我有什么好的专业吗?它会增加我的机智吗?总之,它会让我成为更好的程序员吗?
注意:我说的是像FASM或NASM这样的低级程序集,而不是像HLA(高级汇编程序)这样的程序.
"泄漏抽象"一词是什么意思?(请用例子解释.我经常很难完成一个理论.)
memory-leaks abstraction programming-languages functional-programming leaky-abstraction
我是斯蒂芬·沃尔夫勒姆(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
使用日期(1970年1月1日)作为时间操纵的默认标准是否有任何理由?我在Java和Python中都看到过这个标准.我知道这两种语言.是否有其他流行语言遵循相同的标准?
请描述一下.
有什么区别:
可以是异步和非阻塞(以及基于事件的)吗?
在编程中最重要的是拥有一些东西:异步,非阻塞和/或事件库(或全部3)?
如果你能提供一些例子,那就太棒了.
这个问题正在被问到,因为我正在阅读关于类似主题的这篇伟大的StackOverflow文章,但它没有回答我上面的问题.
asynchronous programming-languages event-based-programming nonblocking blocking
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的第一项,而不是零.
haskell ×2
abstraction ×1
arrays ×1
assembly ×1
asynchronous ×1
blocking ×1
c ×1
c# ×1
indexing ×1
java ×1
jvm ×1
memory-leaks ×1
nasm ×1
nonblocking ×1
operators ×1
python ×1
syntax ×1
trampolines ×1