`
simohayha
  • 浏览: 1403369 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

类型系统的四种维度

阅读更多
原文在这里: 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
分享到:
评论
1 楼 pig345 2008-04-08  
很明显,structural subtyping能够解决目前困扰大多数人的OO建模时的分类问题。

可以这么看:structural是基于行为的建模,而之前的Nominal是基于名词的建模。

基于名词更加依赖人的主观判定,虽然这个判定也是基于对模型行为的分析,只不过是在建模的早期就要决定下来(随后写死到程序里面),而往往早期的决定都是不准确的,加上需求的不断深入,这就导致了后续的对模型结构上的改动,这对程序的影响是巨大的。究其原因就是把人的不成熟的主观判定放到了程序里面。

而如果是直接基于行为的类型系统就不会有这个问题了,人的主观判定还是会不断改变,但是不会体现在程序里面(可能更多地体现在文档里),程序里面都是真确的行为,语言环境本身根据行为进行判定。。。一个清净的世界形成了!!!

在我看来,java中的interface也是为了在nominal的类型系统中解决这个问题的,只不过由于本身的限制,没有structural来的彻底。。。

所以现在的动态类型脚本语言(往往是structural)比较受人欢迎,
但是这类语言本身也有问题,它更依赖代码人员的水平和编写单元测试(没有编译期的语法检查),如果做得不好,更容易出现大量低级bug(可怕的是如果测试人员不能100%覆盖,就无法发现)。。。两难阿。

相关推荐

    MBTI的人格类型分为四个维度.pdf

    根据这四个维度的八个方面,MBTI 人格类型理论将人格类型分为 16 种,每种人格类型都有其特点和优势。 ISTJ 型的人格特点是:详尽、准确、系统、勤劳,关注细节。他们致力于改善组织程序与过程,无论组织处在开展...

    京东订单多维度调度系统PRD1.0.docx

    2. 多维度调度:基于订单类型、地理位置、时间窗口等因素,进行智能化订单调度。 3. 订单调度逻辑: - 调度机制:定义各种调度策略,如优先级调度、最短路径调度等,以满足不同业务场景。 - 订单建立和释放逻辑:...

    数据仓库维度建模笔记

    渐变维度用来处理维度属性随时间的变化情况,通常分为三种类型:类型1(覆盖旧值)、类型2(保留历史记录)、类型3(添加新列)。 **9. 角色模仿** 在某些情况下,同一维度可以扮演不同的角色,例如客户维度同时...

    多维度下城市更新的系统建构培训讲义.pdf

    城市更新是伴随着城市化进程发展的一项重要任务,尤其在多维度视角下,系统建构城市更新显得更为关键。本文将从城市更新的历史发展、当代价值、多维属性、系统建构及其面临的挑战等方面进行详细阐述。 首先,城市...

    C-C计算延迟时间和嵌入维数_计算延迟时间和嵌入维度_嵌入维度

    嵌入维度是指为了完全重构系统动力学,需要的时间序列的最小维度。C-C方法(Cao's Method)是一种常用的方法,它通过计算相邻数据点之间的距离随嵌入维度变化的趋势来确定最佳嵌入维度。当嵌入维度增加时,若相邻点...

    维度建模学习资料-初学者

    维度建模是构建数据仓库和商业智能系统的关键技术,它主要关注如何组织和设计数据库以支持高效的分析查询。本文档是针对维度建模初学者的学习资料,旨在介绍维度建模的一些核心概念,如慢速变化的维度、大维度处理、...

    维度建模基本规则

    维度建模是数据仓库设计中的一种关键方法论,它强调数据的组织方式应当直观且易于理解,以便于商业智能分析和决策支持系统有效地利用。基于给定文件的信息,以下是对维度建模基本规则的深入解析: ### 规则1:加载...

    [itpub.net]数据仓库工具箱:维度建模的

    有三种类型的慢变维度,分别对应不同类型的更新情况。 - 类型1:替换旧值 - 类型2:保留旧值并添加新值 - 类型3:添加新列 ### 维度建模的优势 1. **易用性**:由于其直观的设计,用户能够更容易地理解数据结构...

    多维度立体化监控

    多维度立体化监控是一种更为全面且有效的监控方式,它能够从多个角度对系统进行监控,从而更准确地发现潜在的问题并及时采取措施。本文将围绕多维度立体化监控的核心理念及其具体实施方式进行详细介绍。 #### 二、...

    数据仓库工具箱-维度建模权威指南-第3版

    SCD策略描述了如何处理这些变化,包括类型1、2和3的SCD,以及何时选择每种类型。 6. **数据清洗和ETL过程**:数据仓库的构建离不开数据抽取、转换和加载(ETL)的过程。书中会介绍如何处理数据质量问题,以及如何...

    数据仓库工具箱 维度建模权威指南 (第3版)

    本书首先介绍了数据仓库的基本概念,包括数据仓库的定义、功能以及在企业决策支持系统中的作用。作者强调了数据仓库与操作型数据库的区别,解释了为何需要构建数据仓库来满足业务分析的需求。 在维度建模部分,书中...

    MBTI性格类型系统.rar

    MBTI性格类型系统将这四个维度组合起来,例如“INTJ”表示内向、直觉、思考、判断型,而“ESFP”则代表外向、感觉、情感、知觉型。每种类型都有其独特的优点和挑战,并且没有好坏之分,只是表明了个体在处理信息和...

    数据仓库维度表更新技术分析

    3. **类型2 (Type 2)**: 这是最常见的一种类型,它允许维度表中的某些字段发生改变,并保留了旧值的历史记录。具体做法是在维度表中添加额外的字段来记录版本信息,包括有效的起始日期和结束日期。 4. **类型3 (Type...

    数据仓库-关于数据仓库维度数据处理的方法探究系列

    ### 数据仓库维度数据处理的方法探究 #### 一、维度概述 **1.1 概述** 维度是多维数据集中非常关键的一个组成部分,...不同类型维度的处理策略也有所不同,了解并掌握这些策略对于构建高效的数据仓库系统至关重要。

    多维度数据融合的输电线路故障智能诊断系统.pdf

    多维度数据融合是一种将电网系统信息、环境数据、开关量数据、电气量等多种来源的数据进行整合的方法。通过这种方法,系统能够从多个角度分析故障现象,从而获得更全面的诊断结果。例如,环境数据可能影响线路的运行...

    BI环境中的维度模型

    维度模型是数据仓库中一种特殊的数据结构设计方法,旨在通过将数据组织成易于理解和分析的形式来支持决策支持系统(DSS)。这种模型通常包括事实表和多个维度表,其中事实表存储具体度量值,而维度表则提供关于这些...

    基于数据仓库和维度转换技术的广东电信公话IC话机话务动态分析系统

    3. **维度建模**:根据分析需求,设计合理的维度模型,包括但不限于时间维度、地区维度、话机类型维度等。 4. **维度转换实现**:通过自编程序实现在数据仓库中按需进行维度转换,提高数据查询的灵活性和效率。 5. *...

Global site tag (gtag.js) - Google Analytics