Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Programming languages 区分大小写是否与强类型语言(或松散类型语言)有关?_Programming Languages_Theory_Case Sensitive_Strong Typing - Fatal编程技术网

Programming languages 区分大小写是否与强类型语言(或松散类型语言)有关?

Programming languages 区分大小写是否与强类型语言(或松散类型语言)有关?,programming-languages,theory,case-sensitive,strong-typing,Programming Languages,Theory,Case Sensitive,Strong Typing,(我承认这可能是一个n00b问题——我对CS理论知之甚少,主要是一种实践/爱好。) 我在谷歌上搜索强类型语言的官方定义,我发现的一个顶级链接来自,这表明区分大小写是语言是否松散/强类型的一部分 我一直认为,对于强类型语言和弱类型语言之间的区别,最简单的答案是前者需要显式的类型声明,而后者更开放,甚至是“动态的” 到目前为止,我发现的两个S/O线程(和)似乎(或多或少)表明了这一点,但它们没有提到任何关于区分大小写的内容。区分大小写与强/弱之间是否存在任何关系 理论上,区分大小写与类型严格性完全无

(我承认这可能是一个n00b问题——我对CS理论知之甚少,主要是一种实践/爱好。)

我在谷歌上搜索强类型语言的官方定义,我发现的一个顶级链接来自,这表明区分大小写是语言是否松散/强类型的一部分

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


到目前为止,我发现的两个S/O线程(和)似乎(或多或少)表明了这一点,但它们没有提到任何关于区分大小写的内容。区分大小写与强/弱之间是否存在任何关系

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


实际上,区分大小写和类型严格性之间可能存在关联,但我现在想不出足够多的不区分大小写的语言来进行评估。我的印象是,当今大多数常用的语言都是区分大小写的——可能是因为C是区分大小写的,而且非常有影响力,可能是因为在使用了几十年的FORTRAN、COBOL和BASIC之后,这是迫使人们停止使用所有CAP编程的唯一方法。

不,它们没有联系。强类型语言强制您指定变量可能包含的数据类型,例如实数、整数、文本字符串或某些程序员定义的对象。除非变量是隐式可转换的,否则它们不会意外地将另一种类型的数据赋给该变量:例如,通常可以将整数赋给实数(即
double x=3.14;x=3;
可以,但
int x=3;x=3.14;
可能不会,这取决于langauge的类型有多强)。弱类型语言只存储它们被要求存储的内容,而不进行这些健全性检查。在C++之类的强类型语言中,您仍然可以创建可以存储任何特定类型集合的数据的类型(例如C++的代码> Boo::变体< /C>),但有时它们在您能做多少和使用起来多么方便方面有点局限。
区分大小写是指在某些情况下,同一字母的大小写版本被认为是等效的。。。通常在字符串比较或正则表达式匹配中。现代计算机语言忽略变量名(标识符)中字母的大小写是不寻常的,但并非闻所未闻。

有几点澄清:

  • 区分大小写与强类型与弱类型、静态类型与动态类型或类型系统的任何其他属性无关。我不知道为什么yahoo answers上的答案获得了一票,但这是完全错误的。别理它

  • 强类型不是一个定义良好的术语,但它通常用于指很少进行隐式类型转换的语言,即对不支持该操作的类型执行操作时出错的语言

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

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

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

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


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

    如果存在相关性,则不完美。例如,Pascal比C强类型(隐式转换更少,没有非类型指针),但它不区分大小写,而C区分大小写。你的来源是一个糟糕的笑话,很像:Q。你知道为什么一些计算机科学家在键入程序时对键使劲敲吗?他们更喜欢强类型语言!哇,这是一个7年前的老问题,当时我还是一个php/javascript的人