首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区分大小写与强类型语言(或松散类型语言)有关吗?

区分大小写与强类型语言(或松散类型语言)有关吗?
EN

Stack Overflow用户
提问于 2010-12-15 09:24:54
回答 3查看 384关注 0票数 2

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

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

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

到目前为止,我发现的两个S/O线程(herehere)似乎表明了这一点(或多或少),但它们没有提到任何区分大小写的问题。区分大小写和强/弱之间有关系吗?

EN

回答 3

Stack Overflow用户

发布于 2010-12-15 22:16:41

以下是几点说明:

  1. 区分大小写与强类型与弱类型、静态类型与动态类型或类型系统的任何其他属性无关。我不知道为什么yahoo answers上的答案得到了一张赞成票,但这是完全错误的。忽略它。
  2. 强类型不是一个定义良好的术语,但它通常用于指代隐式类型转换很少的语言,即在不支持该操作的类型上执行操作是错误的语言。

例如,在perl中,将字符串"foo""bar"相乘得到的结果是0,而在ruby、python、java、haskell、ml和许多其他语言中,这会导致类型错误。因此,这些语言比perl具有更强的类型。

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

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

一种语言是否需要类型注释(在某种程度上)与它的类型系统是强还是弱、静态还是动态无关。从理论上讲,动态类型语言可以要求(或至少允许)类型注释,然后在这些注释被破坏时抛出运行时错误(尽管我不知道有哪种动态语言可以做到这一点)。

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

票数 4
EN

Stack Overflow用户

发布于 2010-12-15 09:32:34

从理论上讲,区分大小写与类型严格性完全无关。区分大小写是关于标识符fooFOOfOo是否引用相同的变量、函数或所拥有的内容。类型严格性是关于变量是否有类型,还是只有值有类型,在类型之间转换有多容易,等等。

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

票数 2
EN

Stack Overflow用户

发布于 2010-12-15 09:32:59

不-他们没有联系。强类型语言迫使您指定变量可以保存的数据类型-例如实数、整数、文本字符串或某个程序员定义的对象。你,他们不能意外地将另一种类型的数据赋给该变量,除非它是隐式可转换的:例如,你通常可以将一个整数转换为实数(例如,double x = 3.14; x = 3;可以,但int x = 3; x = 3.14;可能不可以,这取决于语言的强类型)。弱类型语言只存储它们被请求的任何内容,而不执行这些健全性检查。在像C++这样的强类型语言中,您仍然可以创建可以存储数据的类型,这些类型可以是一组特定类型中的任何一种(例如C++的boost::variant),但有时它们在您可以做的事情和使用起来有多方便方面会受到一些限制。

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

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

https://stackoverflow.com/questions/4445925

复制
相关文章

相似问题

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