【问题标题】:Looking for strong/explicit-typed language without GIL [closed]寻找没有 GIL 的强/显式类型语言 [关闭]
【发布时间】:2010-08-18 12:15:13
【问题描述】:

是否有任何语言具有像 C++ 中的静态类型检查和 Python 中的现代语法,并且没有 GIL?

我相信,能够显式声明每个变量类型的 Python 3 将“几乎存在”,但 GIL 让我感到难过。

Java 很好,但我需要一些更“可嵌入”的东西,而不需要笨重的 JRE。

更新:任何与 .NET 相关或非开源的东西都是不可行的。

更新2:我需要显式+强类型来编写更安全的代码,但会牺牲开发速度。 GIL 很重要,因为代码的计算量非常大,并且将在多核服务器上运行,因此它必须有效地使用多个 CPU。

Update3:目标平台是 x86 上的 Linux(Debian)

【问题讨论】:

  • 为什么“静态类型检查”如此重要?你有什么问题实际上是通过这个解决的?你能具体谈谈你遇到的问题吗? Python 是非常非常强类型的,并且类型是每个对象的显式部分。没有转换能力,也没有模糊对象的类型。
  • 缺乏静态类型是 Python 优势的一部分。此外,在 99% 的情况下,GIL 是最不值得关注的。 +1 否则,我喜欢使用一种没有讨厌的 {}; 语法的语言,这些对于现代语言来说几乎不是必需的。
  • @S.Lott:他确实说过静态类型,而不是强类型。
  • @Matt Joiner:什么?他两个都说。标题说“强”。问题是“静态的”。
  • @rubber:因为它不是。绕过类型检查的方法有很多,大多与指针有关,有些很容易意外遇到。将其与某些函数式语言进行比较:标准 ML 在形式上是 100% 类型安全的(有些实现允许不安全的操作)。

标签: java python gil


【解决方案1】:

Boo

Boo 是面向对象的,静态的 类型化的编程语言 使用通用语言 基础设施对 Unicode 的支持, 国际化和网络 应用程序,同时使用 受 Python 启发的语法和 特别关注语言和编译器 可扩展性。一些注意事项 包括类型推断、生成器、 多种方法,可选的鸭子类型, 宏、真正的闭包、柯里化和 一流的功能。嘘已经 自 2003 年以来积极开发。

cython

Cython 是一种使 为 Python 编写 C 扩展 像 Python 本身一样简单的语言。 Cython 基于众所周知的 Pyrex,但支持更多前沿 功能和优化。

Cython 语言非常接近于 Python 语言,但 Cython 另外支持调用C 函数和声明 C 类型 变量和类属性。这 允许编译器生成非常 来自 Cython 代码的高效 C 代码。

【讨论】:

  • +1 我也想推荐 Boo。它看起来像 Python,并且具有令人难以置信的许多特性,包括可扩展的语法。虽然它使用虚拟机,而且是“.NET”,但它是免费软件。
  • 我无法锁定窗口,我还没有准备好依赖单声道。
【解决方案2】:

ML 系列中的任何东西都可能适合您。 Ocaml 是一个很好的起点,但我上次查看它确实有一个 stop-the-world GC。 Haskell 以创新并发模型的实验室而闻名。 Python 的理解来自 Haskell,它们为一些非常基本的想法提供了方便的语法。 Erlang 是强动态类型的,编写起来很有趣,并且比其他任何人都更好地执行并发性。

【讨论】:

  • +1 用于 ML/Haskell,如果并发性如此重要,您最好使用函数式语言。他们的类型系统是静态的/强大的,但同时也极具表现力。
  • OCaml 确实有 GIL。
【解决方案3】:

Ada 是一种强类型的编译语言,具有现代、易于阅读的语法和经过验证的多核计算可靠性。 Ada 设计用于软件必须不惜一切代价运行的大型、关键、实时系统。

“Ada 支持运行时检查以防止访问未分配的内存、缓冲区溢出错误、off-by-one 错误、数组访问错误和其他可检测的错误。为了提高运行时效率,可以禁用这些检查,但通常可以高效编译。它还包括帮助程序验证的工具。由于这些原因,Ada 广泛用于关键系统中,任何异常都可能导致非常严重的后果,即意外死亡或受伤。Ada 系统示例使用的包括航空电子设备、武器系统(包括热核武器)和航天器。” (引用上面链接的维基百科文章)。

Ada 作为 GCC / GNAT 的一部分免费提供,在 Debian 上应该是一个简单的“apt-get install”。您还可以在 http://libre.adacore.com/libre/

找到最新的编译器和库(社区支持的 GPL 许可和商业支持的软件包)

Ada 可以编译为 Java 字节码以在 JVM 中使用,也可以编译为二进制以用于裸机或嵌入式使用。

【讨论】:

    【解决方案4】:

    我认为GO 符合您的要求。

    这是我个人的感觉,但是 go 代码看起来很像 python 代码。

    它仍然有经典的编译方法,但谷歌肯定会开发一些解释器。

    来自谷歌网站:

    Go 是一种通用语言 用系统编程设计 头脑。它是强类型的,并且 垃圾收集并具有明确的 支持并发编程。 程序由 包,其属性允许 有效管理依赖关系。 现有的实现使用 传统的编译/链接模型 生成可执行的二进制文件。

    【讨论】:

    • GO 是实验性的,它可能会像 Google Wave 一样被杀死。此外,它缺乏对 WINdows 的支持,因为开发主要是在 windows 平台上。
    • 有windows的端口项目code.google.com/p/go-windows
    【解决方案5】:

    阅读您更新的规范后:

    我需要显式+强类型来编写更安全的代码,但会牺牲开发速度。 GIL 很重要,因为代码的计算量很大,并且将在多核服务器上运行,因此它必须有效地使用多个 CPU

    “广泛计算”究竟是什么意思?什么问题域?在这个问题领域工作的其他人使用什么?如果您认真对待本规范,除了将 C++ 与经过良好测试的多线程和数值计算库结合使用之外,您无能为力。

    我的 0.02 美元

    rbo

    【讨论】:

    • 这是一个有 1000 个客户端的客户端-服务器应用程序,我将在客户端和服务器之间共享部分业务逻辑代码。这一切都应该可以即时更新。性能主要在服务器端至关重要。我无法即时交付和/或更新 C++ 二进制文件或从客户端上的源代码构建它们。但是我需要提供更新的字节码模块并即时替换它。
    • 具有多处理功能的 Python?无论如何,您不应该在单个进程中执行繁重的 I/O,操作系统中存在瓶颈,您无法通过用户空间中的线程来解决这些瓶颈。
    猜你喜欢
    • 2010-11-12
    • 2012-04-13
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2010-11-14
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多