为什么大多数脚本语言都是松散类型的?

2023-12-20

为什么大多数脚本语言都是松散类型的?例如

javascript、python 等?


首先,您的术语存在一些问题。不存在这样的事情松散类型语言和术语脚本语言也很模糊,最常见的是所谓的动态编程语言.

弱类型 vs. 强类型关于如何严格区分不同类型(即,如果1 + "2" yields 3或错误)。

并且有dynamic vs. 静态类型,这大约是when类型信息在运行时或运行前确定。

那么现在,什么是动态语言?一种解释而不是编译的语言?当然不是,因为语言的运行方式从来不是语言的某些固有特征,而是纯粹的实现细节。事实上,同一种语言可以有解释器和编译器。 Haskell 有 GHC 和 GHCi,甚至 C 也有 Ch 解释器。

那么,什么是动态语言呢?我想通过人们如何使用它们来定义它们。

在动态语言中,您喜欢快速构建程序原型并使其以某种方式运行。你不想做的是正式指定你的程序的行为,你只是希望它按照预期的方式运行。

因此,如果你写

foo = greatFunction(42)
foo.run()

in a 脚本语言,你会简单地假设有一些greatFunction获取一个将返回某个对象的数字,您可以run。您不以任何方式向编译器证明这一点 - 没有预先确定的类型,没有IRunnable....这会自动让您进入以下域动态类型.

但是还有类型推断也。类型推断意味着在静态类型语言,编译器会自动为您找出类型。生成的代码可以非常简洁,但仍然是静态类型的。举个例子

square list = map (\x -> x * x) list

在哈斯克尔。 Haskell 提前计算出这里涉及的所有类型。我们有list是一个数字列表,map某个函数将其他函数应用于列表的任何元素,并且square从另一个数字列表生成一个数字列表。

尽管如此,编译器可以提前证明一切正常 - 任何支持的操作are正式指定。因此,我永远不会称 Haskell 为脚本语言,尽管它可以达到类似的表达水平(如果不是更高!)。


所以总而言之,脚本语言 are 动态类型因为这允许您在不指定的情况下对正在运行的系统进行原型设计,但是assuming所涉及的每个操作都存在,这就是脚本语言的用途。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么大多数脚本语言都是松散类型的? 的相关文章

  • 除了 Haxe 之外,还有其他针对 PHP 的编程语言吗?

    PHP 并没有得到太多的喜爱 但在易于部署 对于廉价托管 方面仍然是赢家 有没有任何编程语言 除了Haxe http haxe org 那个目标 PHP 用这种语言编写应用程序 然后将其翻译成 PHP 就像某些语言以 C 作为中间语言一样
  • 有哪些例子可以说明在程序中使用括号会降低可读性?

    我一直认为括号提高了可读性 但在我的教科书中有这样一句话 使用括号会极大地降低程序的可读性 有人有例子吗 我可以找到很多反例lack括号降低了可读性 但我能想到的作者可能的意思的唯一例子是这样的 if a null a isSomethin
  • 我想知道 &a 到底返回什么?

    Suppose 第一个案例 int a int p a it works no error 第二种情况 long int a long int b b a it wont work 我们大多数人都说 b 是变量而不是指针 但请看下面的内容
  • Lua 作为嵌入式语言的替代品?

    我正在开发一个在 DSP 上运行 Linux 的嵌入式系统 现在我们想让它的某些部分可以编写脚本 并且我们正在寻找一种很好的嵌入式脚本语言 这些脚本应该与我们现有的 C 代码库很好地集成 并且小而快 我知道 Lua 是解决此类问题的行业选择
  • Perl 闭包和 $_

    我尝试学习一种不熟悉的编程语言的第一件事就是它如何处理闭包 它们的语义通常与语言处理范围和其他各种棘手位的方式交织在一起 因此理解它们可以揭示该语言的其他几个方面 另外 闭包是一种非常强大的构造 并且通常会减少我必须输入的样板文件的数量 所
  • 了解外部函数接口 (FFI) 和语言绑定

    混合不同的编程语言长期以来一直是我不太理解的事情 根据这篇维基百科文章 http en wikipedia org wiki Foreign function interface Operation of an FFI 外部函数接口 或 F
  • Ruby 是脚本语言还是解释语言?

    我刚刚注意到在Ruby的维基百科页面中 这种语言被定义为解释性语言 我明白我的背景中可能缺少一些东西 我一直都知道不需要编译器的解释型语言和编译型语言 需要在程序执行之前进行编译 之间的区别 但是脚本语言有什么特点呢 Ruby 可以定义为脚
  • Objective C 编码指南

    有没有关于 Objective C 中的编码指南的 pdf 文件 例如 1 Breaking the function names checkIfHitTheTrack 2 member variables must be like mVa
  • 为什么是函数式语言? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在这里看到很多关于函数式语言之类的讨论 为什么要使用一种语言而不是 传统 语言 他们在哪些方面做得更好 他们最差的是什么 理想的函数
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • 学习游戏开发,有什么书推荐吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 客户端语言

    我不是网络程序员 所以请原谅我的无知 当谈到服务器端编程时 我们有很多可用的技术 例如 PHP ASP net JSP 等 然而 说到客户端脚本 我只听说过 JavaScript 和 AJAX 也许您还可以包含 Java Applet 因为
  • 设计模式作为(缺失的)语言功能

    有时人们将设计模式称为缺少的编程语言功能 为了避免关于什么是设计模式的争论 假设我们只考虑原始的 GoF 模式 例如 单例模式在 Scala 中消失了 Scala 使用关键字支持单例对象object 关于这方面的资源很少 特别是设计模式是否
  • 与编程语言/API 相关的常用“语义”的简单定义?

    今天我突然想到 虽然我在提到语言元素和命名约定时已经采用并且不经常使用 语义 一词 但我对正式定义没有任何感觉 我试图在编程领域找到一个正式的定义 http en wikipedia org wiki Formal semantics of
  • 生成 C / C++ 代码时表达式的结合性和优先级?

    我编写了一个生成 AST 的基本编译器 正确考虑了表达式中运算符的优先级 但是 在执行代码生成以生成 C 代码时 我不确定如何处理括号的使用 对于这个表达式 A B c AST如下 A B C 应该正确生成包含括号的前一个表达式 但是如果第
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • 解释型语言的优点和缺点是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我现在正在学习Perl 解释型语言的优点和缺点是什么 公然抄袭维基百科 http en wikipedia org wiki Inte
  • 包含跨语言基准的资源?

    有哪些资源可以使用基准来比较编程语言 我对两者都感兴趣 给定语言的程序执行给定基准测试的速度有多快 给定语言需要多少行代码才能实现给定基准 有一个历史悠久的网站 https benchmarksgame team pages debian
  • Erlang 中的静态类型检查

    我慢慢地爱上了 Erlang 但只有一个很大很大的问题 我非常喜欢 Standard ML 和 ocaml 等语言 它们具有强大的静态类型检查功能 有没有一种好的 干净的方法来在 erlang 中引入某种静态类型检查 我正在看 type a
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip

随机推荐