首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一种语言具有"string“和"float”类型,但它也允许对任何数据类型进行操作,那么这种语言是类型化还是非类型化?

如果一种语言具有"string“和"float”类型,但它也允许对任何数据类型进行操作,那么这种语言是类型化还是非类型化?
EN

Stack Overflow用户
提问于 2009-06-08 14:43:58
回答 7查看 328关注 0票数 1

这个问题来自于this question

一种说法是,如果一种语言有类型字符串或浮动等,那么它就被输入了。但如果它也符合维基百科对未输入的解释呢:

http://en.wikipedia.org/wiki/Programming_language#Typed_versus_untyped_languages

是一种非类型化语言,例如大多数汇编语言,它允许对任何数据执行任何操作,这些数据通常被认为是各种长度的位序列。非类型化的高级语言包括BCPL和Forth的一些变种。

那么,如果语言允许对任何数据进行操作,但只返回“未定义”或"NaN",我们是否可以说它是非类型的,即使它有字符串和浮动等等?

字符串、数组和对象不被认为是“不同长度的位序列”吗?“不同长度的位序列”实际上是指“系统中某些预定义长度的位序列(例如32位、64位等)”吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-06-08 14:58:49

如果这些语言有"string“和"float”这样的类型,那么就会输入它们。是静态类型化还是动态类型化是另一个问题。非类型化语言直接处理内存,而类型化语言在内存上有抽象层(类型本身)。

那么,如果语言允许对任何数据进行操作,但只返回“未定义的”或“

”,那么我们可以说它是非类型的,即使它有字符串和浮点数等等吗?

这听起来像是一种动态的、弱类型的语言,它依赖鸭子类型来操作类型,而不是直接在内存上操作。在没有类型的语言中,"NaN“是什么意思?如果您正在使用的语言的解释器/编译器能够确定在内存地址中找到的值是“非数字”,那么该语言是类型识别的。非类型化语言根本不关心类型--它只是直接操作内存。

票数 4
EN

Stack Overflow用户

发布于 2009-06-08 14:59:36

非类型化语言将任何给定的数据块视为操作给出的意义的位。例如,整数加法将这些位视为整数,而print则将其视为字符串。在这些语言中,确保操作是有意义的是程序员的责任。(例如,在Forth中,虽然内存中通常有数据类型,但堆栈上的内容(这意味着实际要操作的是什么)是堆栈条目,而不是整数、字符或其他什么。

因此,如果每个操作只使用位模式并与它们一起运行,则该语言是非类型的。如果操作对比特执行不同的操作(例如,添加32位整数和32位浮点数,则执行许多不同的操作),或者如果不是对所有数据定义了所有操作,则将对其进行键入。如果它是类型化的,但是很容易将数据作为不同的数据类型来处理,那么我们会说它是弱类型的。

你没有给出足够的背景来知道。浮点操作很可能在任意位模式上返回"NaN“,如果不能将输入解析为有效的Unicode字符,则打印操作很可能返回”未定义“,因此这可能发生在非类型化语言中。如果存在操作返回"NaN“或”未定义“的情况,无论数据的位模式如何,语言都会被键入。

票数 1
EN

Stack Overflow用户

发布于 2009-06-08 14:50:58

如果一种语言返回对某些类型的操作的“未定义”或"NaN“,我可能很难说它是非类型化的。对我来说,这意味着指定的操作不适用于该数据类型,这显然意味着该语言不支持该数据类型上的操作。

相反,大多数汇编语言都被认为是非类型化的,因为在该级别上,该语言实际上处理所有您认为“数据类型”为数据的东西。在程序集中完成的所有操作都不考虑实际处理的数据类型。例如,MOV或MOVE只是将数据从一个位置移动到另一个位置,ADD是一个按位操作,所以即使在那里,您也只是将两个寄存器的二进制数据一起添加。此时的一切都被认为是按位运算,所以一切都是这样处理的。

因此,任何自称“非类型化”的语言都必须遵守这一操作级别。通过返回“未定义”或"NaN“,该语言实际上是在声明”我不那么做“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/965228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档