类型稳定性如何让 Julia 如此之快?

2024-04-05

我听说类型稳定性使 Julia 如此之快,同时仍然与其他解释语言(例如 Python)一样具有表达能力。


类型稳定性允许编译器在编译时直接根据输入类型确定函数的输出类型。因为 Julia 专门针对每种输入类型进行编译,这意味着如果所有函数都是类型稳定的,则编译器可以推断出函数调用内每个值的类型。当发生这种情况时,Julia 的 JIT 编译器本质上会创建该方法的静态类型版本,并构建 LLVM IR 来编译该静态版本,其中该静态版本本质上与使用 clang (LLVM) 编译的 C 汇编代码相同。

这意味着,如果编译器可以推导每个变量的基本类型,它将发出强制这些类型保持不变的代码,就像它是完全注释的 C 代码一样。 Julia 的动态方式是,当这不成立时,它将“装箱”变量,本质上是创建一个新类型,表示“我不知道该类型是什么”,并添加用于强制类型检查的代码并在运行时调度计算以处理动态性。因此,如果所有类型信息都已知,那么 Julia 的动态性就会消失,甚至不再存在于运行的代码中。

这也是为什么多重分派对于该语言如此重要,因为多重分派意味着f(x)有一个不同的方法f(x::Float64)(即使您没有指定具体版本,编译器也会推断并使用它,称为自动类型专业化),现在具体版本比通用版本更有可能稳定。将多重分派作为一项功能公开实际上只是允许您拦截编译的此阶段并允许更改类型->代码关系。

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

类型稳定性如何让 Julia 如此之快? 的相关文章

随机推荐

  • 如何使用OpenGL模拟OpenCV的warpPerspective功能(透视变换)

    我在 Python 和 C 中使用 OpenCV 完成了图像变形 看到可口可乐徽标在我选择的角落变形 使用以下图像 和这个 完整专辑 包含过渡图片和说明 https i stack imgur com 40pdD jpg 我确实需要这样做
  • ASP.NET Identity EF 中的动态用户声明

    我正在开发一个使用 ASP NET Identity 和 Entity Framework 的身份验证系统 并且我希望有一些声明是计算值 而不是硬编码到声明表中 当用户登录时 如何将动态声明添加到该登录会话而不实际将其添加到声明表中 例如
  • Hadoop put 命令抛出 - 只能复制到 0 个节点,而不是 1 个

    我是 Hadoop 新手 我正在尝试在我的 ubuntu 机器上进行伪分布式模式设置 并面临以下问题hadoop put命令 我的配置详细信息可以在这篇文章中找到 gt 命令 hadoop namenode format 会做什么 http
  • 使用 Gulp Notify 和 Plumber 的全局错误消息

    是否可以创建一个全局 OnError 函数 我可以将标题和错误消息传递给该函数 我希望对与管道工一起运行的所有任务执行类似的操作 onError function error notify onError title Error subti
  • PhoneGap 应用程序被拒绝 10.6

    我们的 PhoneGap 应用程序刚刚被拒绝 二进制被拒绝 10 6 Apple 和我们的客户高度重视简单 精致 有创意 经过深思熟虑的界面 他们需要更多的工作 但 值得 苹果设定了很高的标准 如果您的用户界面很复杂或者 不太好 可能会被拒
  • 如何在 Eclipse 中为托管 ARM C 项目添加单元测试?

    我有一个托管 Eclipse 项目 它使用 GNU ARM 嵌入式工具链为 ST 微控制器进行编译 我现在想做的是 对该项目中的代码进行单元测试 我想用于单元测试的框架是Google Test 我尝试为单元测试创 建第二个 Eclipse
  • C++ for-each 语句触发“向量迭代器不兼容”断言失败:this->_Getcont() == 0

    这是使用 Visual Studio 2012 static void func const std vector
  • Oracle 数据更改通知超时和工作流程

    美好时光 我们在 Java 应用程序中配置了 Oracle DCN 功能 一切工作正常 但应用程序关闭时出现一些问题 如果应用程序意外关闭 例如 tomcat 进程通过kill 9命令 DCN 订阅者被挂在数据库中 select from
  • SQL服务器重复连接问题

    任何人都可以帮忙 我尝试加入重复的值 但它没有按我想要的方式出现 CREATE TABLE TestTable1 No varchar 50 Value1 float Desc varchar 50 insert into TestTabl
  • 使用 p/invoke 和 win-api 监控音频线路输入 (C#)

    在过去的几天里 我试图编写一个小程序来使用 win api winmm dll 来监视音频线路输入 我可以 pinvoke api 函数 例如 waveInOpen 但我不知道如何使用这些函数来实现我的目标 问题是 有人可以简单地告诉我如何
  • 动画 UITextView 时打字

    我试图拥有一个可变高度的 UITextView 它可以更改大小以适应其内容 但是当尺寸更改动画中的框架发生变化时 UITextView 中不会捕获一两次击键 动画持续时间为 0 1 秒 通常当您打字速度相当快时 它只会漏掉一个字母 然而 当
  • Python:相对导入是否意味着您无法单独执行子包?

    我最近将我的 Python 项目移植到 Python 3 1 上运行 为此 我必须在项目的子模块和子包中采用相对导入的策略 我没有这样做 现在项目本身可以工作 但我注意到我无法执行其中的任何子包或子模块 如果我尝试 我会收到 builtin
  • Highcharts 有“趋势线”功能吗?

    基本上 我试图让 Highcharts 自动绘制从第一个数据点到最后一个数据点的直线 以便我可以更轻松地看到 总体趋势 我相信这被称为 趋势线 或其他东西 但我在文档中没有找到与之相关的任何内容 不过 它很可能仍然具有此功能 可以 据我所知
  • iPhone - 保存 URL,无需 setURL:forKey: 和 NSURL

    无论如何 是否可以使用 NSUserDefaults 保存没有 setURL forKey 的 URL 这仅适用于 iOS 4 0 及更高版本 我使用 fileURLWithPath 在本地加载 HTML 文件 它从介绍页面开始 用户可以点
  • 如何从 onPress on Alert 函数调用方法 [React-Native]

    如何从 onPress on Alert 函数调用方法 React Native
  • java中特定货币的货币符号的位置

    我知道如何使用 locale 和 NumberFormat 类获取 java 中货币的货币对象和其他详细信息 但我无法在 API 中找到任何内容来了解 货币符号是在开始还是结束时显示 例如 在美国 10 表示 10 美元 其中 位于数字开头
  • 如何在 Trigger.io 上禁用“ipad 兼容性”?

    我需要我的应用程序只能在 iPhone 上运行 而不能在 iPAD 上运行 这个要怎么设置呢 我们在平台 v1 4 16 中提供了对此的支持 http docs trigger io en v1 4 release notes html v
  • 我可以检测 Android 设备上是否存在“LED 通知”吗?

    背景 我有一个带有通知的应用程序 我想支持 LED 通知 并且它运行良好 在我的偏好中 我允许用户自定义 LED 通知 问题 如果设备不支持 LED 自定义选项 我不想显示这些选项 因为这可能会让用户感到困惑 如果您拥有的只是廉价的 And
  • 为嵌套的 ScriptableObjects 构建编辑器以在纸牌游戏中组合能力

    我正在构建一款纸牌游戏 我希望有一个干净的纸牌能力架构 我有一个带有卡片属性的 CardData ScriptableObject 我希望卡牌能力组合在一起来描述卡牌的作用 比如一张名为绘制和治疗卡抽 2 张牌并在玩时恢复 5 点生命值 我
  • 类型稳定性如何让 Julia 如此之快?

    我听说类型稳定性使 Julia 如此之快 同时仍然与其他解释语言 例如 Python 一样具有表达能力 类型稳定性允许编译器在编译时直接根据输入类型确定函数的输出类型 因为 Julia 专门针对每种输入类型进行编译 这意味着如果所有函数都是