我看到这些术语在编程中遍布各地,我对它们的含义有一个模糊的概念.搜索显示,事实上,这些事情已被问到堆栈溢出.据我所知,语言中的静态/动态类型与强/弱类型略有不同,但这种差异是我的意思.不同的来源似乎使用不同的含义甚至可以互换地使用这些术语.我找不到谈论两者的地方,实际上说明了差异.如果有人能够在这里为我和世界其他地方清楚地说明这一点,那会更好.
terminology static-typing weak-typing strong-typing dynamic-typing
我已经阅读了如何使用asm.js测试和开发的问题?,接受的答案提供了http://kripken.github.com/mloc_emscripten_talk/#/的链接.
该幻灯片的结论是" 静态类型语言,特别是C/C++可以有效地编译成JavaScript ",因此我们可以" 期望编译的C/C++的速度比本机代码慢2倍,或更好,今年晚些时候 ".
但是非静态类型的语言呢,比如常规的JavaScript本身呢?可以编译为asm.js吗?
我刚刚开始学习Javascript,我立即对Mozilla的重新引入JavaScript(JS教程)中看似矛盾的陈述感到困惑.
一方面:
" 在JavaScript中没有整数这样的东西,所以如果你习惯于用C或Java进行数学运算,你必须要小心算术."
另一方面(紧接该段后):
"实际上,整数值被视为32位整数(并在某些浏览器实现中以这种方式存储),这对于逐位运算非常重要."
和
"您可以使用内置的parseInt()函数将字符串转换为整数."
那么,JavaScript中存在整数这样的东西还是不存在?
静态和动态编程语言有什么不同?我知道这完全是关于类型系统的,但我正在寻找更清晰的说明.
为什么第一种方式是正确的,但第二种方式不是?
第一种方式:
new Object() {
public void a() {
/*code*/
}
}.a();
Run Code Online (Sandbox Code Playgroud)
第二种方式:
Object object = new Object() {
public void a() {
/*code*/
}
};
object.a();
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到更多相关信息?
我有这个问题,除了Swift.如何Type在泛型中使用变量?
我试过这个:
func intType() -> Int.Type {
return Int.self
}
func test() {
var t = self.intType()
var arr = Array<t>() // Error: "'t' is not a type". Uh... yeah, it is.
}
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
var arr = Array<t.Type>() // Error: "'t' is not a type"
var arr = Array<t.self>() // Swift doesn't seem to even understand this syntax at all.
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我觉得Swift不支持它并且给我一些含糊不清的错误信息.
编辑:这是一个更复杂的例子,使用通用函数头无法规避问题.当然它没有意义,但我在我的代码中的某个地方明智地使用了这种功能,而宁愿发布一个干净的例子而不是我的实际代码:
func someTypes() -> [Any.Type] {
var ret = [Any.Type]()
for (var i = …Run Code Online (Sandbox Code Playgroud) Brian Goetz撰写本文的第一行让我在SO中发布这个问题.这又是一行:
为动态编译语言(如Java)编写和解释性能基准要比使用C或C++这样的静态编译语言困难得多.
我知道静态类型与动态类型语言的答案.但动态编译语言与静态编译语言之间有什么区别?
c java compiler-construction programming-languages compilation
我正在研究一种通用的非侵入式智能指针实现.我在第4节中有些困惑.一个声明是
仅当结果类型是多态类类型的左值时,才计算作为typeid运算符的参数提供的表达式.
相关的示例代码是:
template<typename T>
void* startOfObject(T* p) {
void* q=static_cast<void*>(p);
typeid(q=dynamic_cast<void*>(p),*p); // This line
return q;
}
Run Code Online (Sandbox Code Playgroud)
AFAIU,它意味着q=dynamic_cast<void*>(p)如果结果类型是多态类类型的左值,则将对其进行评估.该结果意味着评价的结果dynamic_cast<void*>(p)(我想),所以dynamic_cast在任何情况下被应用.文章陈述(据我所知),如果p不是多态的话dynamic_cast就不会应用,但为什么呢?在应用它之前,如何知道结果是否是多态的?如果有人详细描述了如何执行完整的语句,将会很有帮助.
另一种说法是
如果p为NULL也存在问题 - typeid将抛出std :: bad cast.
我看到的问题是取消引用,如果p是NULL,而不是typeid(虽然它可能抛出bad_typeid,但这不是因为转换).dynamic_cast会返回一个NULL类型的指针void*,如果p是NULL,而且typeid应该能够推断出类型的信息.这是一个错字,还是我错过了什么?
在Python中命名接口和抽象类的约定是什么?PEP 8没有讨论这个问题.例如,在Java中,接口通常以"I"前缀命名.在PHP(名称空间之前)中,抽象类通常以"_Abstract"后缀命名.
(我意识到Python主义者并不热衷于接口,也许这就是为什么我在这个主题上找不到多少共识的原因.但接口和抽象类的使用不是我的问题.)
java ×2
javascript ×2
asm.js ×1
c ×1
c++ ×1
comma ×1
compilation ×1
dynamic ×1
dynamic-cast ×1
generics ×1
integer ×1
methods ×1
object ×1
python ×1
static ×1
swift ×1
terminology ×1
type-safety ×1
type-systems ×1
typeid ×1
weak-typing ×1