(我承认这可能是一个n00b问题-我对CS理论知之甚少,主要是动手/业余爱好。)
我在谷歌上搜索强类型语言的官方定义,我找到的一个顶级链接来自Yahoo Answers,它表明区分大小写是一种语言是否是松散/强类型的一部分。
我一直认为强类型和弱类型语言的区别的简单答案是,前者需要显式的类型声明,而后者更加开放,甚至是“动态的”。
到目前为止,我发现的两个S/O线程(here和here)似乎表明了这一点(或多或少),但它们没有提到任何区分大小写的问题。区分大小写和强/弱之间有关系吗?
发布于 2010-12-15 22:16:41
以下是几点说明:
例如,在perl中,将字符串"foo"和"bar"相乘得到的结果是0,而在ruby、python、java、haskell、ml和许多其他语言中,这会导致类型错误。因此,这些语言比perl具有更强的类型。
强类型有时也被用作静态类型的同义词。
一种语言是否需要类型注释(在某种程度上)与它的类型系统是强还是弱、静态还是动态无关。从理论上讲,动态类型语言可以要求(或至少允许)类型注释,然后在这些注释被破坏时抛出运行时错误(尽管我不知道有哪种动态语言可以做到这一点)。
更重要的是,有许多静态和强类型语言(例如Haskell、ML)不需要类型注释,而是使用类型推断算法来推断类型。
发布于 2010-12-15 09:32:34
从理论上讲,区分大小写与类型严格性完全无关。区分大小写是关于标识符foo、FOO和fOo是否引用相同的变量、函数或所拥有的内容。类型严格性是关于变量是否有类型,还是只有值有类型,在类型之间转换有多容易,等等。
在实践中,大小写敏感性和类型严格性之间可能存在关联,但我现在想不出足够多的不区分大小写的语言来进行评估。我的印象是,今天常用的大多数语言都是大小写敏感的-可能是因为C区分大小写并非常有影响力,可能是因为它是迫使人们在使用FORTRAN、COBOL和BASIC几十年后停止全部大写编程的唯一方法。
发布于 2010-12-15 09:32:59
不-他们没有联系。强类型语言迫使您指定变量可以保存的数据类型-例如实数、整数、文本字符串或某个程序员定义的对象。你,他们不能意外地将另一种类型的数据赋给该变量,除非它是隐式可转换的:例如,你通常可以将一个整数转换为实数(例如,double x = 3.14; x = 3;可以,但int x = 3; x = 3.14;可能不可以,这取决于语言的强类型)。弱类型语言只存储它们被请求的任何内容,而不执行这些健全性检查。在像C++这样的强类型语言中,您仍然可以创建可以存储数据的类型,这些类型可以是一组特定类型中的任何一种(例如C++的boost::variant),但有时它们在您可以做的事情和使用起来有多方便方面会受到一些限制。
区分大小写意味着在某些情况下,同一字母的大小写形式被认为是等效的……通常在字符串比较或正则表达式匹配中。对于现代计算机语言来说,忽略变量名(标识符)中字母的大小写是不寻常的,但也并非闻所未闻。
https://stackoverflow.com/questions/4445925
复制相似问题