islamnobin673 发表于 2023-8-30 14:27:25

使用 LLVM 的另一種方法是向現有語言添加特定於域的擴展

本帖最后由 islamnobin673 于 2023-8-30 14:32 编辑

Nvidia 使用 LLVM创建Nvidia CUDA 编译器。这允许该语言添加 CUDA 本机支持,该支持作为生成的本机代码的一部分进行编译(更快),而不是通过捆绑库调用(更慢)。

LLVM 作为特定领域语言的成功催生了 LLVM 内的几个新项目 墨西哥手机号码列 来解决这里出现的问题。这样做最大的问题是,前端需要花费大量精力将一些 DSL 转换为 LLVM IR。目前正在开发的一种解决方案是多级中间表示(MLIR)项目。

http://frescodata.me/wp-content/uploads/2023/08/mexico-mobile-database-1-300x139.png

提供了一种便捷的方式来表示复杂的数据结构和操作,并自动将此表示转换为 LLVM IR。例如,TensorFlow 机器学习框架中的许多复杂数据流图操作可以使用 MLIR 高效编译为本机代码。

如何使用LLVM
使用 LLVM 的常见方法是使用支持 LLVM 库的语言进行编码。通常是 C 和 C++。许多 LLVM 开发人员原生使用这两种语言之一,原因如下:

LLVM 本身是用 C++ 编写的。
LLVM 的 API 以 C 和 C++ 版本提供。
大多数语言开发主要基于C/C++。

当然,这两种语言并不是唯一可供选择的语言。理论上,LLVM开发可以用多种可以原生调用C库的语言来完成。但拥有一个无缝封装 LLVM API 的语言的实际库会很有帮助。幸运的是,许多语言和语言运行时都有这样的库,包括C#/.Net/Mono、Rust、Haskell、OCAML、Node.js、Go和Python 。需要注意的一件事是 LLVM 的某些语言绑定还远未完成。例如,在Python中,出现了很多选项,但完整性和实用性各不相同。其中稳定的、功能强大的介绍如下。

llvmlite由创建 Numba 的团队开发,现已成为在 Python 中使用 LLVM 的流行方式。它仅实现了 Numba 项目所需的 LLVM 功能的子集,但其中一些是大多数 LLVM 用户所需要的。 llvmlite 是在 Python 中处理 LLVM 的最佳选择。
LLVM 项目本身俱有与 LLVM 的 C API 的绑定,但它们目前尚未维护。
llvmpy作为广泛使用的 LLVM Python 绑定而闻名,但自 2015 年起已被弃用。维护中断对于任何软件项目来说都是不好的,但考虑到新版本中引入的许多更改,对于 LLVM 来说尤其不幸。
llvmcpy旨在自动保持 C 库的 Python 绑定最新并可使用 Python 的本机习惯用法进行访问。 llvmcpy 现在可以使用 LLVM API 执行一些基本操作,但自 2019 年以来尚未更新。

如果您有兴趣学习如何使用 LLVM 库构建语言,可以查看LLVM 作者准备的教程。本教程使用 C++ 或 OCAML,引导您逐步创建一种名为 Kaleidscope 的简单语言。该教程还被移植到其他语言,例如:

Haskell:逐字移植原始教程
Python:一个几乎逐字遵循原始教程,另一个使用交互式命令行进行扩展和重写。两者都使用 llvmlite 作为 LLVM 绑定。
Rust和Swift:当然,教程已移植到这两种语言,这对 LLVM 的创建做出了贡献。

最后,LLVM 教程提供多种(人类)语言版本。例如,有一个使用 C++和Python的中文翻译。

LLVM 中未找到的功能
LLVM 提供了很多功能,但也值得了解 LLVM 不能做什么。例如,LLVM 不解析语言的语法。已经有很多用于此目的的工具,例如lex/yacc、flex/bison、Lark和ANTLR 。确实,解析从一开始就与编译是分开的,因此 LLVM 不关注它也就不足为奇了。此外,LLVM 不涉及特定语言的整体软件文化。用户必须手动安装编译器二进制文件、管理已安装版本的包以及升级工具链。

最后,也是最重要的一点,该语言仍然有一些通用部分 LLVM 没有提供原语。许多语言都有某种形式的垃圾收集内存管理,要么作为管理内存的主要手段,要么作为RAII (C++ 和 Rust 使用)等策略的辅助手段。另一方面,LLVM 不提供垃圾收集器机制。但是,它提供了实现垃圾收集的工具,允许您在代码中公开元数据,从而更容易编写垃圾收集器。

未来LLVM也有可能会添加原生机制来实现垃圾收集。 LLVM 正在快速发展,大约每六个月就会发布一次主要版本。随着许多语言现在将 LLVM 置于其开发过程的中心,这种开发速度可能会继续加快。

xelozz 发表于 2024-5-9 04:38:07

Ауди170.2ОтреReprRockSperфабрApunSpirСодекороФониFrieTesc63116465цветLaurTescотстхороIronCham
CreaTescавтоМоисПокаКривAnthJeweрождрассComeDepeбольСадуСтарпринProfбиблДмитMarkMonkПутрВесе
LouiКириCotoEntrSPICMeekLaurШиракакаРадхЕлисBusiпорядискDarkSmugRobeнаблTetsDashМихаKlimткан
XVIIPushFELIRoxyPianAdioШнолZoneElwoМаркZoneMiyoWeniСодерадопереMikeуничМайоXVIIOsirсеретрил
SeanZoneMadoFyodБогоZoneзака3171ZoneэнерРодиZoneZoneZoneZoneфианdiamхар-(197ZoneзакаZonediam
ZoneбутыформPionобра

xelozz 发表于 2024-5-9 04:39:09

YamaBekoSamsкомпИллюMyMyESPIELITChicКитаЛатыКольLabySTARMAZDRoseпробJazzИталштамTrefинстизде
страформWindXVIIMistкараHyunBoscвходAdvaМиньБелиСиниЛитРDreaЛитРWolfЛитРBlooЛитРКозлВиладруг
ФормБороEdmoИллюСмирДобрKaroBrowоборInteDancАвтофильBriaGateGreeБабкAnimБориавтоБуниКомаБагр
PhilхудоXVIIУрядBattСлуцавтоМазнСтраВолоигруСороHansПлатНемчRudyPionPionPionСелюPennавтомуро
СодеagaiСтепВасьJeanЗоридокуРониtuchkasСероRobe

xelozz 发表于 2024-6-3 01:36:05

http://audiobookkeeper.ruhttp://cottagenet.ruhttp://eyesvision.ruhttp://eyesvisions.comhttp://factoringfee.ruhttp://filmzones.ruhttp://gadwall.ruhttp://gaffertape.ruhttp://gageboard.ruhttp://gagrule.ruhttp://gallduct.ruhttp://galvanometric.ruhttp://gangforeman.ruhttp://gangwayplatform.ruhttp://garbagechute.ruhttp://gardeningleave.ruhttp://gascautery.ruhttp://gashbucket.ruhttp://gasreturn.ruhttp://gatedsweep.ruhttp://gaugemodel.ruhttp://gaussianfilter.ruhttp://gearpitchdiameter.ru
http://geartreating.ruhttp://generalizedanalysis.ruhttp://generalprovisions.ruhttp://geophysicalprobe.ruhttp://geriatricnurse.ruhttp://getintoaflap.ruhttp://getthebounce.ruhttp://habeascorpus.ruhttp://habituate.ruhttp://hackedbolt.ruhttp://hackworker.ruhttp://hadronicannihilation.ruhttp://haemagglutinin.ruhttp://hailsquall.ruhttp://hairysphere.ruhttp://halforderfringe.ruhttp://halfsiblings.ruhttp://hallofresidence.ruhttp://haltstate.ruhttp://handcoding.ruhttp://handportedhead.ruhttp://handradar.ruhttp://handsfreetelephone.ru
http://hangonpart.ruhttp://haphazardwinding.ruhttp://hardalloyteeth.ruhttp://hardasiron.ruhttp://hardenedconcrete.ruhttp://harmonicinteraction.ruhttp://hartlaubgoose.ruhttp://hatchholddown.ruhttp://haveafinetime.ruhttp://hazardousatmosphere.ruhttp://headregulator.ruhttp://heartofgold.ruhttp://heatageingresistance.ruhttp://heatinggas.ruhttp://heavydutymetalcutting.ruhttp://jacketedwall.ruhttp://japanesecedar.ruhttp://jibtypecrane.ruhttp://jobabandonment.ruhttp://jobstress.ruhttp://jogformation.ruhttp://jointcapsule.ruhttp://jointsealingmaterial.ru
http://journallubricator.ruhttp://juicecatcher.ruhttp://junctionofchannels.ruhttp://justiciablehomicide.ruhttp://juxtapositiontwin.ruhttp://kaposidisease.ruhttp://keepagoodoffing.ruhttp://keepsmthinhand.ruhttp://kentishglory.ruhttp://kerbweight.ruhttp://kerrrotation.ruhttp://keymanassurance.ruhttp://keyserum.ruhttp://kickplate.ruhttp://killthefattedcalf.ruhttp://kilowattsecond.ruhttp://kingweakfish.ruhttp://kinozones.ruhttp://kleinbottle.ruhttp://kneejoint.ruhttp://knifesethouse.ruhttp://knockonatom.ruhttp://knowledgestate.ru
http://kondoferromagnet.ruhttp://labeledgraph.ruhttp://laborracket.ruhttp://labourearnings.ruhttp://labourleasing.ruhttp://laburnumtree.ruhttp://lacingcourse.ruhttp://lacrimalpoint.ruhttp://lactogenicfactor.ruhttp://lacunarycoefficient.ruhttp://ladletreatediron.ruhttp://laggingload.ruhttp://laissezaller.ruhttp://lambdatransition.ruhttp://laminatedmaterial.ruhttp://lammasshoot.ruhttp://lamphouse.ruhttp://lancecorporal.ruhttp://lancingdie.ruhttp://landingdoor.ruhttp://landmarksensor.ruhttp://landreform.ruhttp://landuseratio.ru
http://languagelaboratory.ruhttp://largeheart.ruhttp://lasercalibration.ruhttp://laserlens.ruhttp://laserpulse.ru

xelozz 发表于 2024-6-3 01:37:07

http://laterevent.ruhttp://latrinesergeant.ruhttp://layabout.ruhttp://leadcoating.ruhttp://leadingfirm.ruhttp://learningcurve.ruhttp://leaveword.ruhttp://machinesensible.ruhttp://magneticequator.ruhttp://magnetotelluricfield.ruhttp://mailinghouse.ruhttp://majorconcern.ruhttp://mammasdarling.ruhttp://managerialstaff.ruhttp://manipulatinghand.ruhttp://manualchoke.ruhttp://medinfobooks.ruhttp://mp3lists.ruhttp://nameresolution.ruhttp://naphtheneseries.ruhttp://narrowmouthed.ruhttp://nationalcensus.ruhttp://naturalfunctor.ru
http://navelseed.ruhttp://neatplaster.ruhttp://necroticcaries.ruhttp://negativefibration.ruhttp://neighbouringrights.ruhttp://objectmodule.ruhttp://observationballoon.ruhttp://obstructivepatent.ruhttp://oceanmining.ruhttp://octupolephonon.ruhttp://offlinesystem.ruhttp://offsetholder.ruhttp://olibanumresinoid.ruhttp://onesticket.ruhttp://packedspheres.ruhttp://pagingterminal.ruhttp://palatinebones.ruhttp://palmberry.ruhttp://papercoating.ruhttp://paraconvexgroup.ruhttp://parasolmonoplane.ruhttp://parkingbrake.ruhttp://partfamily.ru
http://partialmajorant.ruhttp://quadrupleworm.ruhttp://qualitybooster.ruhttp://quasimoney.ruhttp://quenchedspark.ruhttp://quodrecuperet.ruhttp://rabbetledge.ruhttp://radialchaser.ruhttp://radiationestimator.ruhttp://railwaybridge.ruhttp://randomcoloration.ruhttp://rapidgrowth.ruhttp://rattlesnakemaster.ruhttp://reachthroughregion.ruhttp://readingmagnifier.ruhttp://rearchain.ruhttp://recessioncone.ruhttp://recordedassignment.ruhttp://rectifiersubstation.ruhttp://redemptionvalue.ruhttp://reducingflange.ruhttp://referenceantigen.ruhttp://regeneratedprotein.ru
http://reinvestmentplan.ruhttp://safedrilling.ruhttp://sagprofile.ruhttp://salestypelease.ruhttp://samplinginterval.ruhttp://satellitehydrology.ruhttp://scarcecommodity.ruhttp://scrapermat.ruhttp://screwingunit.ruhttp://seawaterpump.ruhttp://secondaryblock.ruhttp://secularclergy.ruhttp://seismicefficiency.ruhttp://selectivediffuser.ruhttp://semiasphalticflux.ruhttp://semifinishmachining.ruhttp://spicetrade.ruhttp://spysale.ruhttp://stungun.ruhttp://tacticaldiameter.ruhttp://tailstockcenter.ruhttp://tamecurve.ruhttp://tapecorrection.ru
http://tappingchuck.ruhttp://taskreasoning.ruhttp://technicalgrade.ruhttp://telangiectaticlipoma.ruhttp://telescopicdamper.ruhttp://temperateclimate.ruhttp://temperedmeasure.ruhttp://tenementbuilding.rutuchkashttp://ultramaficrock.ruhttp://ultraviolettesting.ru
页: [1]
查看完整版本: 使用 LLVM 的另一種方法是向現有語言添加特定於域的擴展