你好,这是 JavaGuide 的「优质 Java 开源项目推荐」第 13 期,每月一期,每一期我都会精选 5 个高质量的 Java 开源项目。
导语 | 本文尝试在系统级的编译软件层面,挖掘云应用的性能提升空间。以C/C++应用的反馈优化技术为例,介绍业务和编译技术深度整合后产生的收益和价值,希望给相关业务的探索提供参考。 一、现代云应用特征 云应用特征梳理是一个非常庞大的系统工程,只有云厂商才有机会做全局剖析。一些特征沉淀成专用芯片或专用指令,比如AI芯片和新一代ARM64 CPU中的Matrix乘累加指令,或者一些RISC-V中的Protobuf加速尝试,一些特征驱动系统级的OS/编译软件优化获得普适收益。本次我们主要以典型C/C++应用展开分
汉化作者官网:Cxxdroid汉化官网 蓝奏云下载地址:Cxxdroid蓝奏云下载
近日,华为的方舟编译器终于迎来了开源,而且开源代码还是承载在自家的官网上。面对这样一个肩负「出于安卓,胜于安卓」使命的编译器,自问世以来就备受大家的关注;此次开源,更是吸引了大众的目光。
作者 | Ben Evans 译者 | 张卫滨 策划 | 丁晓昀 OpenJDK提出了一个新的项目 ,代号为 Galahad,以便于将 GraalVM 社区版代码库中的一部分功能合并到 OpenJDK 中。 这是一项长期努力的最新进展,也就是在程序执行之前将 Java 应用编译为机器码的能力。乍看上去,这似乎有些奇怪,毕竟,一位新的 Java 开发人员最先了解到的一点就是“Java 不会编译成机器码,而是编译成 JVM 字节码”。 这句简单的格言有着深远的影响,其中最基础的就是,Java 平台依赖一个强大的
语言处理程序基础是指语言处理程序设计与实现的基本原理和技术方法。它包括了以下几个关键方面:
对于没有计算机科学基础知识的程序员或初学者来说 一上来就看龙书 虎书是行不通的 全是理论知识 看得想睡觉 我还试过看网易云大学计算机专业的编译原理课程 也是看得一头雾水 看到80多讲就看不下去了
JIT和AOT 这个名词是指两种不同的编译方式,这两种编译方式的主要区别在于是否在“运行时”进行编译
机器之心报道 机器之心编辑部 这个高性能 Python 编译器具有支持 Python 众多语法、完美互通其他框架等优点。 众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具,以更好的服务于这门语言。 编译器充当着高级语言与机器之间的翻译官,不同版本的 Python 编译器已被开发出来,下面我们将为大家介绍一款新的高性能 Python 编译器:Codon。该项目上线短短几天,已收获 2.2k 星。 项目地
GraalVM 是 Oracle 发布的下世代 Java 虚拟机,2019.05 才发布了第一个 release 版本,分别有社区版和企业版
区块链的安全性保证了代码不可被任何人篡改,代码正确执行(有bug的另说),执行结果不可篡改,并可以予以公开透明的展示。
三年前,在第四届华为全联接大会上,华为联合绿色计算产业联盟、中国电子技术标准化研究院、安谋科技(中国)、IDC 以及产业伙伴共同发布了《鲲鹏计算产业发展白皮书》,拉开了鲲鹏计算产业崛起的大幕。据悉,鲲鹏计算产业是基于 Kunpeng 处理器构建的全栈 IT 基础设施、行业应用及服务,包括 PC、服务器、存储、操作系统、中间件、虚拟化、数据库、云服务、行业应用以及咨询管理服务等。 三年后,“鲲鹏”已经从一个单纯的处理器代号,演变成跨越基础设施软硬件、应用服务的全栈计算产业品牌: 基于鲲鹏处理器创新和主板开放,
以操作系统、数据库、中间件和编程语言(含编译器等)等为代表的软件和以芯片为代表的硬件构成了 IT 行业的两大核心,而数字经济的“万丈高楼”起于基础软件。 但关于作为数字经济“底座”的基础软件,我们有很多的疑问。 基础软件行业开发技术水平如何?有哪些典型应用?中国基础软件在国际市场上有什么优势?各细分市场情况如何?竞争程度怎样?基础软件行业面临哪些困境?有哪些扶持政策?未来会有什么样的变化趋势?投资机会在哪里? 面对行业的种种未知,InfoQ 将在 2022 年 3 月举办首届 DIVE 全球基础软件创新大会
过去的几年里推动机器学习技术稳步发展的根本性改变之一是训练和优化机器学习模型的巨大计算力。许多技术都是很年前就已经提出,唯有近几年提升的计算力可以为现实世界的问题提供足够优质的解决方案。这些计算能力的很大一部分是通过 GPU 获取的,其针对向量的计算能力最初是为图形而设计的,但机器学习模型通常需要执行复杂的矩阵运算,因此 GPU 同样表现出了非常好的性能。
与DAPP浏览器相辅相成的是其底层网络架构Web 3.0,这是和信息互联网时代传统浏览器基于的Web 2.0完全不同的体系架构。区块链技术,尤其是ETH的出现使Web 3.0成为基于区块链进行价值传递的基础网络。
学习Python,那么配置Python环境变量一定是必不可少的,本人小白,就以小白的身份说一下如何安装和配置环境变量吧!(相信不会有大佬看这个的…)
首先回答第2个问题,分配在栈上还是堆上是由编译器决定的,编译器会做逃逸分析(escape analysis),当发现变量的作用域没有超出函数范围,就可以在栈上,反之则必须分配在堆上。
Protocol Buffers(protobuf)是一个强大的序列化工具,它需要一个编译器来将其接口定义语言转换为特定的开发语言。在本文中,我们将根据官方发布页面的指导,分别介绍如何在Windows、Linux和Mac系统上安装protobuf编译器。
conan是个包管理工具,不仅仅支持cmake编译,还支持很多常用的构建工具如configure/make,msbuild,VisualStudo,meson,本文以NXP的Embedded RPC为例说明conan中如何使用make来构建项目。
机器之心报道 机器之心编辑部 正是编译器的存在,才让人类语言转换为计算机可以理解的 0 和 1。 Jeffrey Ullman(左)和 Alfred Aho(右)是创建「编译器」的先驱。 1963 年,当阿尔弗雷德 · 艾侯(Alfred Aho)和杰弗里 · 乌尔曼(Jeffrey Ullman)在普林斯顿大学研究生院开学第一天一同登记排队的时候,计算机科学仍然是一个陌生的新世界。 如今因为这两位学者的努力,几乎任何人都可以使用计算机并对计算机进行编程以执行新任务。 北京时间 3 月 31 日,ACM
Python官方网站:www.python.org 这个是Python的官方网站,Python下载以及相关文档都能在里面找到
微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览。此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cloud-first)的新战略思想。Scott Hanselman发布博客对ASP.NET vNext进行了简要介绍。而且ASP.NET入驻Github 下一代ASP.NET将全部开源,写下本文记录下这个时刻。 微软在今年的Build大会上成立.NET开源基金会和以下这些产品的发布: .NET Native -
MLGO 使用强化学习训练神经网络来作决策,是一种用机器学习策略取代复杂的启发式方法。作为一个通用的工业级框架,它将更深入、更广泛应用于更多环境,不仅仅在内联和寄存器分配。 作者 | 钱云迪、Mircea Trofin 编译 | 刘冰一 编辑 | 陈彩娴 现代计算机诞生,如何编译更快、更小的代码问题随之出现。 编译优化是成本收益比最高的优化手段,更好的代码优化可以显著降低大型数据中心应用程序的操作成本。编译代码的大小对于部署在安全引导分区上的移动和嵌入式系统或软件来说是至关重要的,因为编译后的二进制文件必须
在Xcode上运行腾讯云Demo或者开发者自己的项目,编译过程中有时会报错。最常见的是两种:
可能是大规模企业级的应用,大都是Java编写、并且Java提供了方便的API,可以在不修改Java代码的情况下,直接运行时编辑Java字节码,实现运行时改变程序的默认行为,达到在具体的Java函数上实现延迟、错误等效果。
在软件的世界里,有32位软件和64位软件,那么你是否想过32位和64位软件有什么区别吗?下面我就带领大家来看看32位和64位的区别。
这是第 102 篇不掺水的原创,想要了解更多,请戳上方蓝色字体:政采云前端团队 关注我们吧~ 本文首发于政采云前端团队博客:V8 执行 JavaScript 的过程 https://www.zo
虽然许多人对Rust编程语言的神奇之处赞不绝口,但一个持续存在的抱怨仍然层出不穷:编译Rust程序需要很长时间。
运行时(Runtime Environment,简称Runtime ),是指那些支持在特定的平台上,用于运行特定编程语言编写的软件的库和程序集,它一般要处理软件和操作系统之间的接口细节。例如,系统调用、程序的启动和终止、内存管理等。 运行时分3种:纯静态环境(如Fortran)、基于堆栈环境(如C、C++、Pascal)、纯动态环境(如SmallTak、Java)。
作者 | 马春辉 策划 | 王一鹏 审校 | 叙缘 在 DIVE 全球基础软件创新大会 2022 上,阿里云程序语言与编译器团队负责人李三红出品了《DIVE 编程语言新风向专场》专题。本文整理自字节跳动高级工程师马春辉在 DIVE 全球基础软件创新大会 2022 的演讲分享,主题为“字节大规模微服务语言发展之路”。 以下为演讲整理内容。 Golang 现状 Golang(Go 语言)从 09 年开源到现在,短短十多年时间,已经快速成为编程领域非常热门的一门语言,根据 2019 年的 JetBr
作者 | Matt Butcher, Radu Matei 译者 | 马可薇 策划 | 丁晓昀 简称为 Wasm 的 WebAssembly 是一种二进制格式,包括 Rust、C、JavaScript、Python、Ruby、.NET 在内等诸多语言都可通过 Wasm 执行。此外,Wasm 也可运行在各种硬件和操作系统之上,其规范的设计快速且紧凑,以及重中之重的安全。 在 2022 年,最初仅为浏览器设计的 Wasm 已经在其他领域大放异彩,实践证明,Wasm 在嵌入式编程、插件、云、边缘计算等领
链接: https://pan.baidu.com/s/1wtec1_UlBA1wxwNeMyFBOw 密码: 7j1l
合约是代码(它的功能)和数据(它的状态)的集合,存在于以太坊区块链的特定地址。合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约依靠被称作以太坊虚拟机(EVM)字节代码(以太坊特有的二进制格式)上的区块链运行。
「我们的团队来自世界上最大、最尖端的科技公司。我们相信世界级的人才应该少担心,专注于为世界重建人工智能基础设施。」
http://m.blog.csdn.net/blog/yhc13429826359/37735865
GraalVM是 Oracle 开源的一款通用虚拟机产品,官方称之为 Universal GraalVM,是新一代的通用多语言高性能虚拟机。它可以运行多种编程语言,如Java、JavaScript、Python等,并提供了即时编译(JIT)和AOT编译(AOT)的支持。GraalVM还支持在不同语言之间互相调用,以及嵌入到其他应用程序中使用。这使得GraalVM成为一个非常强大和灵活的工具,可以满足不同应用场景的需求。
Notepad++是一款文本编辑器,软件小巧高效,支持多种编程语言,如C、C++、Java、 C#、XML、HTML、PHP> JavaScript 等。
最近看了一本书,今天打算和大家聊聊 Graal VM 和 Java静态编译这个东西:
两个指针a和b有可能互为别名(俩指针指向同一数据),所以clang在编译该代码的时候,会在寄存器中存储两次(%rsi),%eax来防止这种情况。当然也可以使用restrict关键字来对参数进行约束,显式地告诉编译器这俩指针不可能互为别名(但在C语言中,restrict关键字仅仅是告诉编译器可以优化,它不会帮助开发者进行检查,也就是说,很可能因为开发者没有遵循此契约而引发未定义行为)。从而生成的优化代码中只存储一次寄存器。
Microsoft在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。
sudo apt-get update 3. 输入以下命令,安装g++的最新版本:
Visual Studio Code(简称 VSCode)是由微软开发的一款免费、开源、跨平台的文本编辑器。它具有许多强大的功能,比如内置的调试器、Git 控制、语法高亮、代码提示和补全等。VSCode 可以运行在 Windows、Linux 和 macOS 上,并支持多种编程语言,包括 C++、Java、Python、JavaScript 等。
Tech 导读 Java虽然在市场份额占比巨大,但是在万物云原生下,因它启动时长,资源消耗较大,不易水平扩展等方面都成为了明显的短板,导致市场份额也逐渐减少。而GraalVM弥补了这些缺陷,本文将从实战方向带你打开,原生镜像之路。
编译原理几乎是计算机专业中最晦涩难懂的课程。很多学生学这门课只不过是为了通过考试,学完后对编译原理之精妙仍然是摸不着头脑。而很多教这门课的老师,也只不过是混口饭吃,他自己未必对编译原理有多少深入的了解和把握,于是与其昏昏,使人昭昭。毕业多年后,回过头来反省我所承受的教育,我发现我们的教育总是流于表面的肤浅,给学生展示的始终是冰山的一角,对冰山下的巨大形体置若罔闻,于是整个系统虽然培养出大量的计算机专业人员,但有能力对计算机知识具备深入见解的人凤毛麟角,很多人其实是走上工作岗位后,通过大量的生产实践才开始对计
11月19日,在软件绿色联盟开发者大会开源与跨平台开发分论坛上,史宁宁发表了主题为《拥抱方舟开源编译器:Maple IR 分析及 Toy Runtime 介绍》的演讲,基于方舟编译器已经开源的代码和文档,对方舟编译器的IR的设计以及具体实现做介绍和分析,并将其设计与LLVM、Open64做简要的横向对比。同时,对基于方舟编译器IR的Phase体系做分析,展示其针对IR的转换和优化。除此以外,还对Toy runtime的基本情况进行介绍。本文内容主要有五个部分:
导语 机器学习领域最重要的两个问题是机器学习模型的生产(模型训练)和机器学习模型的部署(模型推理)。其中,模型的部署关注两个方面: 模型推理的性能问题:目标是通过计算图层面的优化,算子层面的优化等方式,在保证模型效果的前提之下,提升模型计算(模型推理)的性能。 模型部署的工程问题:主要着眼于对模型部署过程中的整个模型的生命周期进行管理,降低模型部署的工程量。 目前常见的推理优化框架有侧重于推理性能提升的 TensorRT、NVIDIA 基于 TensorRT 的 Triton、Tensorflow 社区的
但在微服务时代是提倡服务围绕业务能力(不同的语言适合不同的业务场景)而非技术来构建应用,不再追求实现上的一致,一个系统由不同语言、不同技术框架所实现的服务来组成是完全合理的。服务化拆分后,很可能单个微服务不再需要再面对数十、数百 GB 乃至 TB 的内存。有了高可用的服务集群,也无须追求单个服务要 7×24 小时不可间断地运行,它们随时可以中断和更新。不仅如此,微服务对镜像体积、内存消耗、启动速度,以及达到最高性能的时间等方面提出了新的要求。这两年的网红概念 Serverless(以及衍生出来的Faas) 也进一步增加这些因素的考虑权重,而这些却正好都是 Java 的弱项:哪怕再小的 Java 程序也要带着厚重的Rumtime(Vm和StandLibrary)——基于 Java 虚拟机的执行机制,使得任何 Java 的程序都会有固定的内存开销与启动时间,而且 Java 生态中广泛采用的依赖注入进一步将启动时间拉长,使得容器的冷启动时间很难缩短。 举两个例子。软件工业中已经出现过不止一起因 Java 这些弱点而导致失败的案例。如 JRuby 编写的 Logstash,原本是同时承担部署在节点上的收集端(Shipper)和专门转换处理的服务端(Master)的职责,后来因为资源占用的原因,被 Elstaic.co 用 Golang 的 Filebeat 代替了 Shipper 部分的职能。又如 Scala 语言编写的边车代理 Linkerd,作为服务网格概念的提出者,却最终被 Envoy 所取代,其主要弱点之一也是由于 Java 虚拟机的资源消耗所带来的劣势。 1.变革之火 1.1 Complie Native Code 显然,如果将字节码直接编译成可以脱离 Java 虚拟机的原生代码则可以解决所有问题。 如果真的能够生成脱离 Java 虚拟机运行的原生程序,将意味着启动时间长的问题能够彻底解决,因为此时已经不存在初始化虚拟机和类加载的过程。也意味着程序马上就能达到最佳的性能,因为此时已经不存在即时编译器运行时编译,所有代码都是在编译期编译和优化好的。同理,厚重的Runtime也不会出现在镜像中。 Java 并非没有尝试走过这条路。从GCJ到 Excelsior JET再到 GraalVM 中的 SubstrateVM 模块再到 2020 年中期建立的 Leyden 项目,都在朝着提前编译(Ahead-of-Time Compilation,AOT)生成原生程序这个目标迈进。Java 支持提前编译最大的困难在于它是一门动态链接的语言,它假设程序的代码空间是开放的(Open World),允许在程序的任何时候通过类加载器去加载新的类,作为程序的一部分运行。要进行提前编译,就必须放弃这部分动态性,假设程序的代码空间是封闭的(Closed World),所有要运行的代码都必须在编译期全部可知。 这一点不仅仅影响到了类加载器的正常运作,除了无法再动态加载外,反射(通过反射可以调用在编译期不可知的方法)、动态代理、字节码生成库(如 CGLib)等一切会运行时产生新代码的功能都不再可用——如果将这些基础能力直接抽离掉,Hello world 还是能跑起来,大部分的生产力工具都跑不起来,整个 Java 生态中绝大多数上层建筑都会轰然崩塌。随便列两个Case:Flink的SQL API会解析SQL并生成执行计划,这个时候会通过JavaCC动态生成类加载到代码空间中去;Spring也有类似的情况,当AOP通过动态代理的方式去生成相关逻辑时,本质还是在Runtime时生成代码并加载进去。 要获得有实用价值的提前编译能力,只有依靠提前编译器、组件类库和开发者三方一起协同才可能办到——可以参考Quarkus。 Quarkus和我们上述的方法如出一辙,以Dependency Inject为例:所有要运行的代码都必须在编译期全部可知,在编译期就推导出来相关的Bean,最后交给 GraalVM来运行。 1.2 Memory Access Efficiency Improvement Java 即时编译器的优化效果拔群,但是由于 Java“一切皆为对象”的前提假设,导致它在处理一系列不同类型的小对象时,内存访问性能很差。这点是 Java 在游戏、图形处理等领域一直难有建树的重要制约因素,也是 Java 建立 Valhalla 项目的目标初衷。 这里举个例子来说明此问题,如果我想描述空间里面若干条线段的集合,在 Java 中定义的代码会是这样的: public record Point(float x, float y, float z) {} public record Line(Point start, Point end) {} Line[] lines; 面向对象的内存布局中,对象标识符(Object Ident
编译 | 核子可乐、Tina “Mojo 可能是近几十年来最大的编程语言进步。” 近日,由 LLVM 和 Swift 编程语言的联合创始人 Chris Lattner 创办的新公司 Modular AI 发布了一种名为 Mojo 的新编程语言。 Mojo 将大家喜爱的 Python 特性,同 C、C++ 和 CUDA 的系统编程功能结合了起来,并通过其所谓“极限加速”与其他 Python 速度增强方案区分了开来。凭借着硬件加速,它在运行 Mandelbrot 等数字算法时比原始 Python 快上 3
近日谷歌宣布,向非盈利性 LLVM 基金会提供今年 4 月开源的 Multi-Level Intermediate Representation(MLIR)架构,一个与 TensorFlow 紧密结合的表示格式和编译器实用工具库,该架构介于模型表示和低级编译器/执行器(二者皆可生成硬件特定代码)之间。谷歌希望通过向社会提供该架构来激励更多的创新,从而进一步加速 AI 领域发展。我们将 MLIR 的详细内容及谷歌相关报道整理编译如下。
一些刚开始接触C语言编译的网友想下载一款C语言编译器来使用,不过,网络上有不少C语言编译器相关的软件,让人很难抉择。那么,C语言编译器哪个好?今天的文章里,我给大家整理了6款好用的C语言编译器推荐给大家,需要下载C语言编译器的盆友,不妨了解一下! 📷 一、Dev-C++ 📷 Dev-C++ Dev-C++ 是一个C++ 开发工具。它包括多页面窗口、工程编辑器,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序。它也提供高亮度语法显示的,以减少编辑错误。Dev-C++是一个Windows下的C和C++程序
领取专属 10元无门槛券
手把手带您无忧上云