这个问题来自于this question。
一种说法是,如果一种语言有类型字符串或浮动等,那么它就被输入了。但如果它也符合维基百科对未输入的解释呢:
http://en.wikipedia.org/wiki/Programming_language#Typed_versus_untyped_languages
是一种非类型化语言,例如大多数汇编语言,它允许对任何数据执行任何操作,这些数据通常被认为是各种长度的位序列。非类型化的高级语言包括BCPL和Forth的一些变种。
那么,如果语言允许对任何数据进行操作,但只返回“未定义”或"NaN",我们是否可以说它是非类型的,即使它有字符串和浮动等等?
字符串、数组和对象不被认为是“不同长度的位序列”吗?“不同长度的位序列”实际上是指“系统中某些预定义长度的位序列(例如32位、64位等)”吗?
发布于 2009-06-08 14:58:49
如果这些语言有"string“和"float”这样的类型,那么就会输入它们。是静态类型化还是动态类型化是另一个问题。非类型化语言直接处理内存,而类型化语言在内存上有抽象层(类型本身)。
那么,如果语言允许对任何数据进行操作,但只返回“未定义的”或“
”,那么我们可以说它是非类型的,即使它有字符串和浮点数等等吗?
这听起来像是一种动态的、弱类型的语言,它依赖鸭子类型来操作类型,而不是直接在内存上操作。在没有类型的语言中,"NaN“是什么意思?如果您正在使用的语言的解释器/编译器能够确定在内存地址中找到的值是“非数字”,那么该语言是类型识别的。非类型化语言根本不关心类型--它只是直接操作内存。
发布于 2009-06-08 14:59:36
非类型化语言将任何给定的数据块视为操作给出的意义的位。例如,整数加法将这些位视为整数,而print则将其视为字符串。在这些语言中,确保操作是有意义的是程序员的责任。(例如,在Forth中,虽然内存中通常有数据类型,但堆栈上的内容(这意味着实际要操作的是什么)是堆栈条目,而不是整数、字符或其他什么。
因此,如果每个操作只使用位模式并与它们一起运行,则该语言是非类型的。如果操作对比特执行不同的操作(例如,添加32位整数和32位浮点数,则执行许多不同的操作),或者如果不是对所有数据定义了所有操作,则将对其进行键入。如果它是类型化的,但是很容易将数据作为不同的数据类型来处理,那么我们会说它是弱类型的。
你没有给出足够的背景来知道。浮点操作很可能在任意位模式上返回"NaN“,如果不能将输入解析为有效的Unicode字符,则打印操作很可能返回”未定义“,因此这可能发生在非类型化语言中。如果存在操作返回"NaN“或”未定义“的情况,无论数据的位模式如何,语言都会被键入。
发布于 2009-06-08 14:50:58
如果一种语言返回对某些类型的操作的“未定义”或"NaN“,我可能很难说它是非类型化的。对我来说,这意味着指定的操作不适用于该数据类型,这显然意味着该语言不支持该数据类型上的操作。
相反,大多数汇编语言都被认为是非类型化的,因为在该级别上,该语言实际上处理所有您认为“数据类型”为数据的东西。在程序集中完成的所有操作都不考虑实际处理的数据类型。例如,MOV或MOVE只是将数据从一个位置移动到另一个位置,ADD是一个按位操作,所以即使在那里,您也只是将两个寄存器的二进制数据一起添加。此时的一切都被认为是按位运算,所以一切都是这样处理的。
因此,任何自称“非类型化”的语言都必须遵守这一操作级别。通过返回“未定义”或"NaN“,该语言实际上是在声明”我不那么做“。
https://stackoverflow.com/questions/965228
复制相似问题