区分大小写与强类型语言(或松散类型的语言)有什么关系?

时间:2010-12-15 01:24:54

标签: programming-languages theory case-sensitive strong-typing

(我承认这可能是一个n00b问题 - 我对CS理论知之甚少,主要是动手/爱好排序。)

我正在使用强类型语言搜索官方定义,我找到的一个顶级链接来自Yahoo Answers,这表明区分大小写是语言是否松散/强类型的一部分。

我一直认为强类型/弱类型语言之间区别的简单答案是第一个需要显式类型声明,而后者更开放,甚至是“动态”。

到目前为止我发现的两个S / O线程(herehere)似乎暗示(或多或少),但他们没有提到有关区分大小写的任何内容。在区分大小写和强/弱之间是否存在关系?

3 个答案:

答案 0 :(得分:4)

一些澄清:

  1. 区分大小写与强类型与弱类型,静态与动态类型或类型系统的任何其他属性无关。我不知道为什么雅虎答案的答案已经得到了一个赞成,但这是完全错误的。请忽略它。

  2. 强类型不是一个明确定义的术语,但它通常用于指代几乎没有隐式类型转换的语言,即对不支持该操作的类型执行操作时出错的语言

    作为一个示例,将字符串"foo""bar"相乘会在{2}中得到0,而它会导致ruby,python,java,haskell,ml和许多类型错误其他语言。因此,这些语言的类型比perl更强。

    强类型有时也被用作静态类型的同义词。

  3. 静态类型语言是一种语言,其中变量,函数和表达式的类型在编译时(或者在运行时之前)是已知的 - 静态类型语言本身不需要编译,尽管在实践中它通常是是)。这意味着如果静态类型的程序包含类型错误,它将不会运行。如果动态类型的程序包含类型错误,它将运行到发生错误的位置然后崩溃。

  4. 语言是否需要类型注释(在某种程度上)与其类型系统是强还是弱或静态或动态无关。从理论上讲,动态类型语言可能需要(或至少允许)类型注释,然后在这些注释被破坏时抛出运行时错误(尽管我不知道任何动态实际上这样做)。

    更重要的是,有许多静态和强类型语言(例如Haskell,ML)不需要类型注释,而是使用类型推断算法来推断类型。

答案 1 :(得分:2)

理论上,区分大小写与类型严格性完全无关。区分大小写是关于标识符 fooFOOfOo是否引用相同的变量,函数或有什么内容。类型严格性是指变量是否具有类型或只是,在类型之间进行转换是多么容易,等等。

在实践中,案例敏感性和类型严格性之间可能存在相关性,但我现在无法想到足够的不区分大小写的语言来进行评估。我的印象是,今天常用的大多数语言都区分大小写 - 可能是因为C区分大小写并且非常有影响力,可能是因为这是迫使人们在经过几十年的FORTRAN,COBOL和BASIC之后停止编程的唯一方法

答案 2 :(得分:1)

不 - 他们没有联系。强类型语言强制您指定变量可能包含的数据类型 - 例如实数,整数,文本字符串或某些程序员定义的对象。他们不会意外地将另一种类型的数据分配到该变量中,除非它是可隐式转换的:例如,您通常可以将整数放入实数(即double x = 3.14; x = 3;即可,但int x = 3; x = 3.14;可能不是,取决于语言的强度类型)。弱类型语言只是存储它们所要求的内容而不进行这些健全性检查。在像C ++这样的强类型语言中,您仍然可以创建可以存储可以是任何特定类型集合的数据的类型(例如C ++的boost::variant),但有时候它们的数量会受到限制。做的和方便使用。

区分大小写意味着同一个字母的大写和小写版本在某些情况下被视为等效...通常在字符串比较或正则表达式匹配中。现代计算机语言忽略变量名(标识符)中的字母大小是不寻常的,但并非闻所未闻。