原文在这里: http://programming.reddit.com/info/63tnv/comments/c02qx55
Latent typing是一种你不需要在源码中的明确的声明你的变量的类型的类型系统.而与之相反的是manifest typing,它需要你在源码中明确的声明你的变量的类型。
Static typing类型系统指的是你的源码中的任何独立的表达式都必须有类型,不管它的类型是直接写在源码中,或者是通过编译器来推断.Dynamic typing是运行时的值才有类型的一种类型系统,因此在它里面程序的表达式能够有任意的类型.
overlap 是一种类型推断系统,像haskell和ocaml用的就是overlap,他们是 statically而且还是latently,他们的编译器能够推断出你的变量的类型。 理论上,这里还有另外一种overlap,它是把变量的类型写在源代码中,可是会直到运行时才会检测类型的是否正确. python3000已经被提议使用这种系统,Common Lisp 和Dylan 使用的就是这种系统.
structural subtyping意味着对象或者表达式能够基于他们的结构(比如他们的方法,变量等等)来进行比较他们的类型的兼容性.相比较而言,nominal subtyping意味着对象基于通过程序员来做的显示的子类声明来进行比较他们的类型的兼容性(比如java的接口).Haskell, ML, 和大部分的动态类型的语言是 structurally-subtyped.工业语言大多数都是nominal subtyping的.
这里还有一个strong vs. weak 类型,他们的区别是是否在运行时动态的转换变量的值 (也就是说要不要到不同的类型)的类型.
下面是类型系统的4种不同的维度:
引用
1Static (表达式有类型) vs. dynamic (值有类型)
2Strong (没有一个显示的强制转换,这个值的类型就不能被转换为另外的类型) vs. weak (运行时会转换值类型到合适的类型)
3Latent (没有类型声明) vs. manifest (有类型声明)
4Nominal (子类型需要被显式的声明) vs. structural (子类型是由操作可利用的的类型来进行推断的)
下面是一些语言所属的类型系统:
引用
Ocaml: static, strong, latent, structural typing
Haskell: static, strong, latent, structural typing, with nominal typing available via newtype and manifest typing through optional type declarations.
Erlang: dynamic, strong, latent, structural typing
Scheme: dynamic, strong, latent, structural typing, with nominal typing available in many object systems.
Common Lisp: dynamic, strong, latent or manifest typing. Same note about structural vs. nominal typing as Scheme, but nominal subtyping is used more often in practice.
Python & Ruby: dynamic, strong, latent, structural typing. Nominal subtyping is available via isinstance or Ruby equivalent, but good practice frowns upon it. PHP: dynamic, weak, latent, nominal or structural typing. Culture is much friendlier to nominal subtyping than Python or Ruby, but it's not required.
Java & C++: mostly static, strong, manifest, nominal typing. The casts give you a form of weak-typing when necessary, and C++ templates are structurally typed.
C: static, generally weak, manifest, nominal typing.
Assembly: dynamic, weak, latent, structural typing
分享到:
相关推荐
根据这四个维度的八个方面,MBTI 人格类型理论将人格类型分为 16 种,每种人格类型都有其特点和优势。 ISTJ 型的人格特点是:详尽、准确、系统、勤劳,关注细节。他们致力于改善组织程序与过程,无论组织处在开展...
2. 多维度调度:基于订单类型、地理位置、时间窗口等因素,进行智能化订单调度。 3. 订单调度逻辑: - 调度机制:定义各种调度策略,如优先级调度、最短路径调度等,以满足不同业务场景。 - 订单建立和释放逻辑:...
渐变维度用来处理维度属性随时间的变化情况,通常分为三种类型:类型1(覆盖旧值)、类型2(保留历史记录)、类型3(添加新列)。 **9. 角色模仿** 在某些情况下,同一维度可以扮演不同的角色,例如客户维度同时...
城市更新是伴随着城市化进程发展的一项重要任务,尤其在多维度视角下,系统建构城市更新显得更为关键。本文将从城市更新的历史发展、当代价值、多维属性、系统建构及其面临的挑战等方面进行详细阐述。 首先,城市...
嵌入维度是指为了完全重构系统动力学,需要的时间序列的最小维度。C-C方法(Cao's Method)是一种常用的方法,它通过计算相邻数据点之间的距离随嵌入维度变化的趋势来确定最佳嵌入维度。当嵌入维度增加时,若相邻点...
维度建模是构建数据仓库和商业智能系统的关键技术,它主要关注如何组织和设计数据库以支持高效的分析查询。本文档是针对维度建模初学者的学习资料,旨在介绍维度建模的一些核心概念,如慢速变化的维度、大维度处理、...
维度建模是数据仓库设计中的一种关键方法论,它强调数据的组织方式应当直观且易于理解,以便于商业智能分析和决策支持系统有效地利用。基于给定文件的信息,以下是对维度建模基本规则的深入解析: ### 规则1:加载...
有三种类型的慢变维度,分别对应不同类型的更新情况。 - 类型1:替换旧值 - 类型2:保留旧值并添加新值 - 类型3:添加新列 ### 维度建模的优势 1. **易用性**:由于其直观的设计,用户能够更容易地理解数据结构...
多维度立体化监控是一种更为全面且有效的监控方式,它能够从多个角度对系统进行监控,从而更准确地发现潜在的问题并及时采取措施。本文将围绕多维度立体化监控的核心理念及其具体实施方式进行详细介绍。 #### 二、...
SCD策略描述了如何处理这些变化,包括类型1、2和3的SCD,以及何时选择每种类型。 6. **数据清洗和ETL过程**:数据仓库的构建离不开数据抽取、转换和加载(ETL)的过程。书中会介绍如何处理数据质量问题,以及如何...
本书首先介绍了数据仓库的基本概念,包括数据仓库的定义、功能以及在企业决策支持系统中的作用。作者强调了数据仓库与操作型数据库的区别,解释了为何需要构建数据仓库来满足业务分析的需求。 在维度建模部分,书中...
MBTI性格类型系统将这四个维度组合起来,例如“INTJ”表示内向、直觉、思考、判断型,而“ESFP”则代表外向、感觉、情感、知觉型。每种类型都有其独特的优点和挑战,并且没有好坏之分,只是表明了个体在处理信息和...
3. **类型2 (Type 2)**: 这是最常见的一种类型,它允许维度表中的某些字段发生改变,并保留了旧值的历史记录。具体做法是在维度表中添加额外的字段来记录版本信息,包括有效的起始日期和结束日期。 4. **类型3 (Type...
### 数据仓库维度数据处理的方法探究 #### 一、维度概述 **1.1 概述** 维度是多维数据集中非常关键的一个组成部分,...不同类型维度的处理策略也有所不同,了解并掌握这些策略对于构建高效的数据仓库系统至关重要。
多维度数据融合是一种将电网系统信息、环境数据、开关量数据、电气量等多种来源的数据进行整合的方法。通过这种方法,系统能够从多个角度分析故障现象,从而获得更全面的诊断结果。例如,环境数据可能影响线路的运行...
维度模型是数据仓库中一种特殊的数据结构设计方法,旨在通过将数据组织成易于理解和分析的形式来支持决策支持系统(DSS)。这种模型通常包括事实表和多个维度表,其中事实表存储具体度量值,而维度表则提供关于这些...
3. **维度建模**:根据分析需求,设计合理的维度模型,包括但不限于时间维度、地区维度、话机类型维度等。 4. **维度转换实现**:通过自编程序实现在数据仓库中按需进行维度转换,提高数据查询的灵活性和效率。 5. *...