首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-3-代码生成

    相反,如果我们使用Sitofp instruction,则根据输入值的不同,Kaleidoscope‘\<’运算符将返回0.0和-1.0。 到目前为止,我们对Kaleidoscope中的四个基本表达式的处理到此结束。请随意进去,再加一些。 因为Kaleidoscope中的所有函数参数都是DOUBLE类型,所以第一行创建了一个”N”LLVM DOUBLE类型的向量。 对于Kaleidoscope中的外部(extern)语句,这就是我们需要做的。然而,对于函数定义,我们需要编码生成并附加一个函数体。 这结束了Kaleidoscope教程的第三章。接下来,我们将描述如何添加JIT代码生成和优化器支持,这样我们就可以真正开始运行代码了!

    1.7K20编辑于 2021-12-09
  • 来自专栏老高的技术博客

    为SourceTree添加Kaleidoscope的external diff支持

    编辑 ~/.gitconfig # add [difftool "sourcetree"] cmd = /usr/local/bin/ksdiff -- \"$LOCAL\" \"$REMOTE\" path = [mergetool "sourcetree"] cmd = /usr/local/bin/ksdiff --merge --output \"$MERGED\" --base \"$BASE\" -- \"$LOCAL\" \"$REMOTE\" trustEx

    55630编辑于 2022-12-28
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-10-总结

    例如,尝试添加以下内容: 全局变量-虽然全局变量在现代软件工程中的价值值得怀疑,但在组合像Kaleidoscope编译器本身这样的快速小样例,它们通常很有用。 类型化变量-Kaleidoscope目前只支持双精度类型的变量。这使该语言非常优雅,因为只支持一种类型意味着您永远不需要指定类型。不同的语言有不同的处理方式。 内存管理-目前只能在Kaleidoscope中访问堆栈。能够通过调用标准libc malloc/free接口或垃圾收集器来分配堆内存也很有用。 目标独立性 Kaleidoscope是“可移植语言”的一个例子:用Kaleidoscope编写的任何程序都可以在它运行的任何目标上以相同的方式工作。 您可以很容易地看出,Kaleidoscope编译器生成与目标无关的代码,因为它在生成代码时从不查询任何特定于目标的信息。

    1.4K10编辑于 2021-12-09
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-5-控制流

    Kaleidoscope:扩展语言:控制流 第五章绪论 欢迎阅读“使用LLVM实现语言”教程的第5章。 第1-4部分描述了简单Kaleidoscope语言的实现,包括对生成LLVM IR的支持,随后是优化和JIT编译器。 在“构建编译器”的这一集中,我们将扩展Kaleidoscope,使其有一个if/Then/Else表达式和一个简单的‘for’循环。 总体而言,我们现在能够在Kaleidoscope中执行条件代码。有了这个扩展,Kaleidoscope是一种相当完整的语言,可以计算各种各样的数值函数。 像以前一样,让我们来讨论一下我们需要对Kaleidoscope进行哪些更改来支持这一点。

    1.2K30编辑于 2021-12-09
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-9-添加调试信息

    (PS:初步翻译文档放在github上了,需要可自取,也欢迎提PR共同完善) Kaleidoscope:添加调试信息 第九章引言 欢迎阅读“使用LLVM实现语言”教程的第9章。 这意味着我们将有一个源文件,其中包含一个用Kaleidoscope而不是交互式JIT编写的简单程序。它确实涉及一个限制,即我们一次只能有一个“顶层”命令,以减少必要的更改次数。 这组相对较小的更改使我们可以通过以下命令行将我们的一段Kaleidoscope语言编译成可执行程序: Kaleidoscope-Ch9 < fib.ks | & clang -x ir - 这将在当前工作目录中提供 这是默认的硬编码值,因为我们使用shell重定向将源代码放入Kaleidoscope编译器。在通常的前端,您会有一个输入文件名,它会放在那里。 但是我们有一个问题,Kaleidoscope在词法分析器或解析器中确实没有任何源位置信息,所以我们需要添加它。

    1K40编辑于 2021-12-09
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-8-编译目标代码

    (PS:初步翻译文档放在github上了,需要可自取,也欢迎提PR共同完善) Kaleidoscope:编译成目标代码 第八章引言 欢迎阅读“使用LLVM实现语言”教程的第8章。

    74510编辑于 2021-12-09
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-7-可变变量

    虽然Kaleidoscope作为一种函数式语言很有趣,但它是函数式的这一事实使得为它生成LLVMIR“太容易”了。 现在让我们用可变变量来扩展KaleidoscopeKaleidoscope中的可变变量 现在我们知道了我们想要解决的问题类型,让我们看看这在我们的Kaleidoscope语言的上下文中是什么样子。 完成后,我们将添加新的运算符,然后扩展Kaleidoscope以支持新的变量定义。 调整现有变量以进行改变 Kaleidoscope中的符号表在代码生成时由‘NamedValues’映射管理。 所有这些更改都隔离在Kaleidoscope代码生成器中。 在Kaleidoscope开发的这一点上,它只支持两件事的变量:函数的传入参数和‘for’循环的推导变量。 要开始转换Kaleidoscope,我们将更改NamedValues映射,使其映射到AllocaInst*而不是Value*。

    1.9K10编辑于 2021-12-09
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-6-用户定义运算符

    Kaleidoscope:扩展语言:用户定义运算符 第六章绪论 欢迎阅读“使用LLVM实现语言”教程的第6章。在本教程进行到现在,我们已经有了一种功能齐全的语言,它相当简单,但也很有用。 在本教程的最后,我们将介绍一个示例的Kaleidoscope应用程序,该应用程序渲染Mandelbrot集。这给出了一个使用Kaleidoscope及其功能集可以构建的示例。 用户定义运算符:理念 我们将添加到Kaleidoscope中的“运算符重载”比在C++等语言中的“运算符重载”更通用。 在Kaleidoscope中,我们可以在库中实现语言的重要部分! 我们将把这些功能的实现分为两部分:实现对用户定义的二元运算符的支持和添加一元运算符。 在这一点上,Kaleidoscope可以构建各种功能齐全的应用程序,并且可以调用有side effect的函数,但是它不能实际定义和改变变量本身。

    1.6K20编辑于 2021-12-09
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-4-JIT和优化器支持

    对于Kaleidoscope来说,我们目前正在动态(on the fly)生成函数,随着用户输入函数,一次生成一个函数。 如果我们想要创建一个“静态Kaleidoscope编译器”,我们将完全使用现在拥有的代码,只是我们将推迟运行优化器,直到解析完整个文件。 仅凭这两个变化,让我们看看Kaleidoscope现在是如何工作的! 如果在JIT中找不到定义,它将退回到在Kaleidoscope进程本身上调用“dlsym(”sin“)”。 类似的代码可用于在Kaleidoscope中实现文件I/O、控制台输入和许多其他功能。 这就完成了Kaleidoscope教程的JIT和优化器一章。

    1.2K30编辑于 2021-12-09
  • 来自专栏编译器开发

    llvm入门教程-Kaleidoscope前端-2-解析器和AST

    Kaleidoscope:实现解析器和AST 第二章绪论 欢迎阅读“使用LLVM实现语言”教程的第2章。 我们将构建的解析器结合使用递归下降Parsing]和运算符优先Parsing]来解析Kaleidoscope语言(后者用于二进制表达式,前者用于其他所有内容)。 在Kaleidoscope中,我们有表达式、原型和函数对象。 在Kaleidoscope中,它们既用于‘extern’函数声明,也用于函数体定义。 完成此操作后,可执行文件将验证Kaleidoscope代码,并告诉我们它在语法上是否无效。例如,下面是一个交互示例: $ .

    2.2K30编辑于 2021-12-09
  • 来自专栏IT杂谈学习

    Python实现万花筒效果:创造炫目的动态图案

    pygame.display.set_caption("万花筒效果") clock = pygame.time.Clock() 定义绘制万花筒图案的函数 我们定义一个函数来绘制动态的万花筒图案: def draw_kaleidoscope if event.type == pygame.QUIT: running = False screen.fill((0, 0, 0)) draw_kaleidoscope ((800, 800)) pygame.display.set_caption("万花筒效果") clock = pygame.time.Clock() # 绘制万花筒图案的函数 def draw_kaleidoscope if event.type == pygame.QUIT: running = False screen.fill((0, 0, 0)) draw_kaleidoscope

    33010编辑于 2025-05-23
  • 来自专栏深度学习与python

    爱奇艺RN低代码引擎:千变万化、快速搭建的万花筒

    为实现以上需求,我们对比了 H5、RN 和当时爱奇艺已有的自研的原生 DSL 方案的优缺点,综合成本、性能、动态性等多方面的考虑,决定自研一个结合 RN 和 DSL 的新方案:Kaleidoscope 2 二、Kaleidoscope DSL 设计思想 这个引擎之所以被命名为 Kaleidoscope(万花筒),是因为其灵感来自真正的万花筒。 Kaleidoscope 采取了相通的设计思路。 Kaleidoscope 层次结构分为四层,App、Page、Item、Element。 3 三、整体方案的架构设计 Kaleidoscope 整体架构图分为前端、后端和低代码平台三部分。前端面向内容消费者,后端和低代码平台面向内容生产者以及部分开发人员。 前端架构中 Kaleidoscope 引擎处于下面架构图的第二层,主要负责数据的下载、缓存和解析,依赖于 QYRN 框架。

    1.1K30编辑于 2022-06-11
  • 来自专栏VRPinea

    6.30 VR扫描:Kaleidoscope新项目集资300万美元;三星磁性手持控制器专利曝光

    Kaleidoscope新项目集资300万美元 有消息称,Kaleidoscope启动了新项目用作资助优质VR内容,并且通过各方确保了至少三百万美元的项目资金。

    67750发布于 2018-05-15
  • 来自专栏前端达人

    分享 13 个可以在线制作 360 度全景视图的网站

    09、Kaleidoscope 地址:https://github.com/thiagopnts/kaleidoscope Kaleidoscope 是一个开源的 Javascript 库,它可以轻松地为照片或视频构建

    10.8K50发布于 2021-11-16
  • 来自专栏Web前端

    【CodeBuddy】三分钟开发一个实用小功能之:万花筒图案生成器

    link rel="stylesheet" href="style.css"> </head> <body>

    <canvas id="<em>kaleidoscope</em> max-width: 1000px; height: 95vh; display: flex; flex-direction: column; gap: 20px; } #<em>kaleidoscope</em> align-items: flex-start; } } script.js // 初始化Canvas和上下文 const canvas = document.getElementById('<em>kaleidoscope</em>

    39321编辑于 2025-05-25
  • 来自专栏【腾讯云开发者】

    LLVM极简教程:9个步骤!实现一个简单编译器

    一、目标 这个系列来自LLVM的Kaleidoscope教程,增加了我对代码的注释以及一些理解,修改了部分代码。 ,从代码可以看出,Kaleidoscope支持函数、条件分支、数值计算等语言特性。 为了方便,Kaleidoscope唯一支持的数据类型为float64,所以示例中的所有数值都是float64。 七、SSA 继续给我们的Kaleidoscope添加功能之前,需要先介绍SSA,Static Single Assignment。 在这里,我们将给Kaleidoscope增加一个功能,让用户可以增加二元操作符。

    6.3K30发布于 2021-09-30
  • 来自专栏编译器开发

    MLIR入门教程1-Toy语言以及AST

    本教程基于LLVM Kaleidoscope Tutorial的模型 本教程假定您已经克隆并构建了MLIR;如果您还没有这样做,请参阅MLIR入门. 如果您不熟悉这样的词法分析器/解析器,它们与Kaleidcope Tutorial的前两章中详细介绍的LLVM Kaleidoscope非常相似. 下一章将演示如何将此AST转换为MLIR。

    2.7K10编辑于 2021-12-09
  • [C++][opencv]基于opencv实现photoshop算法高反差保留

    src, OutputArray dst, float amount = 0.5, Point center = Point(0,0), float radius = 0.6 ); /** * Kaleidoscope @param dst [out] OutputArray * * @return 0 if success, else return error code */ static int Kaleidoscope 0.5) { return 2 * temp_r; } else { return 2 * (1 - temp_r); } } int Filter::Kaleidoscope

    14500编辑于 2025-07-21
  • 来自专栏AIGC新知

    智谱AI发布了类GPT4o的视频通话功能,现在可以和AI无缝交流了

    A garden comes to life as a kaleidoscope of butterflies flutters amidst the blossoms, their delicate

    34510编辑于 2024-10-08
  • 来自专栏腾讯技术工程官方号的专栏

    使用 LLVM 实现一个简单编译器

    目标 这个系列来自 LLVM 的Kaleidoscope 教程,增加了我对代码的注释以及一些理解,修改了部分代码。现在开始我们要使用 LLVM 实现一个编译器,完成对如下代码的编译运行。 extern sin(arg) extern cos(arg) extern atan2(arg1 arg2) # 声明后的函数可调用 atan2(sin(.4), cos(42)) 这个语言称为 Kaleidoscope , 从代码可以看出,Kaleidoscope 支持函数、条件分支、数值计算等语言特性。 为了方便,Kaleidoscope 唯一支持的数据类型为 float64, 所以示例中的所有数值都是 float64。 2. 在这里,我们将给 Kaleidoscope 增加一个功能,让用户可以增加二元操作符。

    3.5K41发布于 2021-09-18
领券