- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在阅读一个幻灯片,上面写着“JavaScript 未输入类型”。这与我认为的真实情况相矛盾,因此我开始挖掘以尝试了解更多信息。
对 Is JavaScript an untyped language? 的每个回答说 JavaScript 不是无类型的,并提供了我熟悉和满意的各种形式的静态、动态、强和弱类型的示例......所以这不是要走的路。
于是我问了 JavaScript 的创造者 Brendan Eich,他说:
academic types use "untyped" to mean "no static types". they are smart enough to see that values have types (duh!). context matters.
专注于学术的计算机科学人员是否将“无类型”用作“动态类型”的同义词(这是否有效?)还是我缺少更深层次的东西?我同意 Brendan 的观点,即上下文很重要,但任何对解释的引用都会很好,因为我目前的“入门”书籍并没有在这个主题上发挥作用。
我想确定这一点,以便提高我的理解,因为即使是 Wikipedia 也没有提到这种替代用法(无论如何我都能找到)。如果我错了,我不想在将来使用该术语或质疑该术语的使用:-)
(我还看到一位顶级 Smalltalker 说 Smalltalk 也是“无类型”的,所以这不是一次性的,这让我开始了这个任务!:-))
最佳答案
是的,这是学术文献中的标准做法。要理解它,知道“类型”的概念是在 1930 年代在 lambda 演算的背景下发明的(事实上,甚至更早,在集合论的背景下),这会有所帮助。从那时起,出现了一个完整的计算逻辑分支,即所谓的“类型论”。程序设计语言理论就是建立在这些基础之上的。在所有这些数学上下文中,“类型”具有特定的、公认的含义。
术语“动态类型”是在很久以后才发明的——与“类型”这个词的常见数学用法相比,它在术语上是矛盾的。
例如,这里是 Benjamin Pierce 在他的标准教科书中使用的“类型系统”的定义 Types and Programming Languages :
A type system is a tractable syntactic method for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute.
他还说:
The word “static” is sometimes added explicitly--we speak of a “statically typed programming language,” for example--to distinguish the sorts of compile-time analyses we are considering here from the dynamic or latent typing found in languages such as Scheme (Sussman and Steele, 1975; Kelsey, Clinger, and Rees, 1998; Dybvig, 1996), where run-time type tags are used to distinguish different kinds of structures in the heap. Terms like “dynamically typed” are arguably misnomers and should probably be replaced by “dynamically checked,” but the usage is standard.
大多数从事该领域工作的人似乎都同意这一观点。
请注意,这不是意味着“无类型”和“动态类型”是同义词。相反,后者是前者特定情况的(技术上具有误导性的)名称。
PS:FWIW,我碰巧既是类型系统的学术研究员,又是 JavaScript 的非学术实现者,所以我不得不忍受这种 split 。 :)
关于javascript - "untyped"在学术 CS 世界中是否也意味着 "dynamically typed"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154388/
我在 OS X 中构建菜单栏项时找到了一些示例代码。它使用了单个 |我不确定它的实际含义。 (我想做的是在菜单项左键单击时调用一个函数,但在右键单击时显示菜单) 这是我的代码 //Get refere
为什么它在第 23 行抛出编译错误。'a' 是 Apple 类的对象,col 是包含 Apple 对象的列表,但它仍然是抛出下面提到的编译错误: 类型 Collection 中的方法 add(capt
我有一个类A,它扩展了抽象类B。 让B有一个 protected 字段值 我想在 A 中使用这个字段。如果 A 没有 value,我可以编写 this.value 从 B 获取它。 与super.va
DBLint 用于检查数据库状态。有46条规则。在 www.dblint.org 上对每条规则都有一些简单的解释,但对规则 31 的描述如下: 定义的主键不是最小键:主键是最小的 super 键。如果
var aa: (()?) = (john.residence?.address = someAddress) var bb: ()? = john.residence?.printNumberOfR
我对 jquery 的可重用插件有点陌生。我已经多次遇到这段代码,但无法弄清楚究竟发生了什么。 (function( $ ){ ... })( jQuery ); 谁能帮我解答一下吗? 最佳答案
这个问题已经有答案了: int foo (int argc, ...) vs int foo() vs int foo(void) in C (4 个回答) 已关闭 9 年前。 所以我最近在 Hack
typedef struct Element { struct Element *next; void *data; } Element; 在 pop 函数中,(!(elem = *s
数据加载两次...意味着 AsyncTask onPostExecute 加载相同的数据两次?我的 AsyncTask onPostExecute 运行两次它加载相同的数据...我正在运行异步任务以从
运行“yomeanjs”时,我无限期地挂起“这可能需要几分钟”。当我尝试运行 grunt 时,它失败了,与 npm start 相同。 我使用的是 Win 8.1,并安装了最新的 Node 和 Mon
我正在看 big nerd ranch 的“Android Programming”中的这个页面,我对下面的句子感到困惑。它声明“当 Activity 被隐藏时, Activity 对象不存在”。这让
是否 const vector意味着它的元素是const也一样? 在下面的代码中, v[0].set (1234);在 void g ( const vector & v )产生编译器错误 const
我是 xml 相关事物的新手 我无法理解: SelectNodes(@"//Form/*[. = 'on']"); 注:SelectNodes是 XmlNode 的函数.(与 XmlDocument
我想方便地控制命令行参数。因此我想使用 ShellLib。 我的代码是这样的: ... #include ... EFI_STATUS EFIAPI UefiMain ( EFI_HANDL
着眼于更正 Debian 上/etc/init.d/hostapd 中的一个问题。但是,我不知道这行代码是做什么的,也不知道它是如何工作的 [ -n "$DAEMON_CONF" ] || exit
有没有人遇到过类似我下图所示的情况? 我有一个变量 landingBools.didSlowPast40Knots(正如您从调试打印输出中看到的那样)为假,但出于某种原因,if 语句评估为真。 知道为
我设法使用 flexbox 和一些非常基本的 JavaScript 为自己构建了三个下拉菜单。 因为我不太了解,所以我使用了一个简单的函数三次,而不是使用参数、变量和其他东西。我将其称为丑陋的“蛮力”
这周刚开始学习 javascript。我有一个非常菜鸟的问题。 exports.displayName = (undefined: ?string); 在 React Native 中意味着什么? 这
我正在阅读有关 NaN here 的内容它说: A comparison with a NaN always returns an unordered result even when compari
编码格式:引入*表示“从头开始重复”。例子。输入-{a,b,a,b,c,a,b,a,b,c,d}可以写成{a,b,*,c,*,d}。输出:5;例如2:ABCABCE,输出- 5。 这里*表示从头开始重
我是一名优秀的程序员,十分优秀!