我钦佩Python的一个原因是它区分了可变类型和不可变类型.在进入Python之前花了一段时间在c编程,我很惊讶Python如何轻松地消除指针解除引用的所有复杂性,这让我很生气.在Python中,一切都按照我期望的方式工作,我很快意识到可变/不可变的区别在其中起着重要作用.
当然还有一些皱纹(可变函数参数默认是一个值得注意的例子)但总的来说,我觉得可变/不可变的区别大大澄清了变量及其值是什么以及它们应该如何表现的问题.
但是它来自哪里?我必须假设GvR不是第一个设想这种区别的人,并且Python不是第一个使用它的语言.我有兴趣听听使用这个概念的早期语言,以及任何早期的理论讨论.
将this/ self/me指针强制显式有什么好处?
根据OOP理论,一个方法应该主要(仅?)对成员变量和方法的参数进行操作.在此之后,它应该是更容易指成员变量,而不是外部的(从视图中的对象的一侧)变量...明确this使得它更详细因而更难指成员变量,而不是外部因素.这对我来说似乎很直观.
我们假设我有以下语法:
S ? X
X ? a | ?
Run Code Online (Sandbox Code Playgroud)
如果那个语法没有?涉及,我会构建第一个状态,如:
S' ? .S
S ? .X
X ? .a
Run Code Online (Sandbox Code Playgroud)
但这个?符号怎么样?我应该包括:
X ? .?
Run Code Online (Sandbox Code Playgroud)
太?
如果是这样......当创建下一个州......我应该这样做GOTO(Io,?),是否是第一个州?
我学习了C++,当它是C语言时.我发现自己越来越不喜欢XML和垃圾收集等新技术.另一方面,我发现了像Lua和Python这样的脚本语言.而且我发现自己更喜欢C++的混合环境,具有确定性内存控制,嵌入式脚本语言,垃圾收集以及所有这些.
我的问题是,当我试图学习这些语言时,我发现自己遇到了一些我不理解的术语:lambdas,closures等.
有哪些在线资源可供老年人了解这些内容?
我的理解是,这意味着可以编写一个程序来正式证明用静态类型语言编写的程序将没有某些(小)缺陷子集.
我的问题如下:
假设我们有两种图灵完整语言,A和B.A被认为是'类型安全'而'B'被假定为不是.假设我有一个程序L来检查用A写的任何程序的正确性.什么阻止我将用B写的任何程序翻译成A,应用L.如果P从A转换为B,那么为什么不是PL a用B编写的任何程序的有效类型检查器?
我接受过代数培训,而且我才刚开始学习CS,所以可能有一些明显的原因,这不起作用,但我非常想知道.整个'类型安全'的东西已经有一段时间闻到了我的味道.
我在解决这个问题时遇到了问题: - 它是一个任务,我解决了它,但它看起来太长而且模糊,可以帮助我,请帮助我......
具有偶数个a和奇数个b的字符串的正则表达式,其中字符集= {a,b}.
动态范围语言的一些示例是什么?选择那个设计的原因是什么?是因为它易于实施吗?
lisp language-agnostic programming-languages language-theory logo-lang
我知道在声明(我正在谈论Java,C++和类似语言)之后需要分号,但在卷曲括号之后不需要分号.为什么这样?
if (a > b)
printf("hello!"); // semicolon is mandatory
if (a > b) {
printf("hello!");
} // semicolon is not required
Run Code Online (Sandbox Code Playgroud)
是什么原因?我的意思是,这背后的理论是什么?
例如,在编写无法用图灵完整语言完成的操作系统时是否存在某些问题?
language-agnostic compiler-construction programming-languages language-theory turing-complete
language-theory ×10
c++ ×1
grammar ×1
immutability ×1
java ×1
lisp ×1
logo-lang ×1
mutable ×1
oop ×1
parsing ×1
python ×1
scheme ×1
string ×1
syntax ×1
terminology ×1
theory ×1
type-safety ×1