Xmake v2.7.7 发布,支持 Haiku 平台,改进 API 检测和 C++ Modules 支持
layout: post.cn
title: “Xmake v2.7.7 发布,支持 Haiku 平台,改进 API 检测和 C++ Modules 支持”
tags: xmake lua C/C++ package modules haiku c++modules
categories: xmake
Xmake 是一个基于 Lua 的轻量级跨平台构建工具。
它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。
它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
我们能够使用它像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,另外它还有内置的包管理系统来帮助用户解决 C/C++ 依赖库的集成使用问题。
目前,Xmake 主要用于 C/C++ 项目的构建,但是同时也支持其他 native 语言的构建,可以实现跟 C/C++ 进行混合编译,同时编译速度也是非常的快,可以跟 Ninja 持平。
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
尽管不是很准确,但我们还是可以把 Xmake 按下面的方式来理解:
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
- 项目源码
- 官方文档
- 入门课程
新特性介绍
支持 Haiku 系统
Xmake 现在已经完全可以在 Haiku 系统 上运行,并且我们对 Xmake 新增了一个 haiku 编译平台,用于在 Haiku 系统上进行代码编译。
效果如下:
改进 C++20 Modules 支持
最新构建的 clang-17 对 C++20 Modules 做了不少改进,因此我们在 Xmake 中也针对性地对其进行了更好的适配,并且修复了一些 std modules 相关的问题。
关于 C++ Modules 的完整工程例子,可以看下 C++ Modules Examples。
现在也有一些实际的 C++ Modules 项目已经使用了 Xmake 来构建,例如:
- async_simple
- StormKit
改进 API 检测
先前的版本,对 xmake.lua 的配置 API 的传参有效性检测比较弱,仅仅针对 add_includedirs, add_files 等几个少数的 API 做了检测。
而新版中,我们新增了一个 xmake check 专门用于检测 API 和代码的插件,可以更好地对用户的配置进行检测,避免用户由于不熟悉 Xmake 导致各种配置值设置不对的问题。
另外,除了手动运行 xmake check 命令来触发检测,Xmake 在编译中,编译失败等各个阶段,
也会及时地自动触发一些常规 API 和配置的检测,毕竟不是所有用户都知道 xmake check 这个命令的存在。
默认检测所有 API
set_lanuages("c91") -- typo
$ xmake check
./xmake.lua:15: warning: unknown language value 'c91', it may be 'c90'
0 notes, 1 warnings, 0 errors
默认也可以指定检测特定组:
$ xmake check api
$ xmake check api.target
显示详细输出
这会额外提供 note 级别的检测信息。
$ xmake check -v
./xmake.lua:15: warning: unknown language value 'cxx91', it may be 'cxx98'
./src/tbox/xmake.lua:43: note: unknown package value 'mbedtls'
./src/tbox/xmake.lua:43: note: unknown package value 'polarssl'
./src/tbox/xmake.lua:43: note: unknown package value 'openssl'
./src/tbox/xmake.lua:43: note: unknown package value 'pcre2'
./src/tbox/xmake.lua:43: note: unknown package value 'pcre'
./src/tbox/xmake.lua:43: note: unknown package value 'zlib'
./src/tbox/xmake.lua:43: note: unknown package value 'mysql'
./src/tbox/xmake.lua:43: note: unknown package value 'sqlite3'
8 notes, 1 warnings, 0 errors
检测指定的 API
$ xmake check api.target.languages
./xmake.lua:15: warning: unknown language value 'cxx91', it may be 'cxx98'
0 notes, 1 warnings, 0 errors
检测编译 flags
$ xmake check
./xmake.lua:10: warning: clang: unknown c compiler flag '-Ox'
0 notes, 1 warnings, 0 errors
检测 includedirs
除了 includedirs,还有 linkdirs 等路径都会去检测。
$ xmake check
./xmake.lua:11: warning: includedir 'xxx' not found
0 notes, 1 warnings, 0 errors
支持检测工程代码(clang-tidy)
显示 clang-tidy 检测列表
$ xmake check clang.tidy --list
Enabled checks:clang-analyzer-apiModeling.StdCLibraryFunctionsclang-analyzer-apiModeling.TrustNonnullclang-analyzer-apiModeling.google.GTestclang-analyzer-apiModeling.llvm.CastValueclang-analyzer-apiModeling.llvm.ReturnValue...
检测所有 targets 中的源码
$ xmake check clang.tidy
1 error generated.
Error while processing /private/tmp/test2/src/main.cpp.
/tmp/test2/src/main.cpp:1:10: error: 'iostr' file not found [clang-diagnostic-error]
#include <iostr>^~~~~~~
Found compiler error(s).
error: execv(/usr/local/opt/llvm/bin/clang-tidy -p compile_commands.json /private/tmp/test2/src
/main.cpp) failed(1)
指定检测类型
我们可以在 --check= 中指定需要检测的类型,具体用法可以参考 clang-tidy 的 --check= 参数,完全一致的。
$ xmake check clang.tidy --checks="*"
6 warnings and 1 error generated.
Error while processing /private/tmp/test2/src/main.cpp.
/tmp/test2/src/main.cpp:1:10: error: 'iostr' file not found [clang-diagnostic-error]
#include <iostr>^~~~~~~
/tmp/test2/src/main.cpp:3:1: warning: do not use namespace using-directives; use using-declarat
ions instead [google-build-using-namespace]
using namespace std;
^
/tmp/test2/src/main.cpp:3:17: warning: declaration must be declared within the '__llvm_libc' na
mespace [llvmlibc-implementation-in-namespace]
using namespace std;^
/tmp/test2/src/main.cpp:5:5: warning: declaration must be declared within the '__llvm_libc' nam
espace [llvmlibc-implementation-in-namespace]
int main(int argc, char **argv) {^
/tmp/test2/src/main.cpp:5:5: warning: use a trailing return type for this function [modernize-u
se-trailing-return-type]
int main(int argc, char **argv) {
~~~ ^
auto -> int
/tmp/test2/src/main.cpp:5:14: warning: parameter 'argc' is unused [misc-unused-parameters]
int main(int argc, char **argv) {^~~~/*argc*/
/tmp/test2/src/main.cpp:5:27: warning: parameter 'argv' is unused [misc-unused-parameters]
int main(int argc, char **argv) {^~~~/*argv*/
Found compiler error(s).
error: execv(/usr/local/opt/llvm/bin/clang-tidy --checks=* -p compile_commands.json /private/tm
p/test2/src/main.cpp) failed(1)
检测指定 target 的代码
$ xmake check clang.tidy [targetname]
检测给定的源文件列表
$ xmake check clang.tidy -f src/main.c
$ xmake check clang.tidy -f 'src/*.c:src/**.cpp'
设置 .clang-tidy 配置文件
$ xmake check clang.tidy --configfile=/tmp/.clang-tidy
创建 .clang-tidy 配置文件
$ xmake check clang.tidy --checks="*" --create
$ cat .clang-tidy
---
Checks: 'clang-diagnostic-*,clang-analyzer-*,*'
WarningsAsErrors: ''
HeaderFilterRegex: ''
AnalyzeTemporaryDtors: false
FormatStyle: none
User: ruki
CheckOptions:- key: readability-suspicious-call-argument.PrefixSimilarAbovevalue: '30'- key: cppcoreguidelines-no-malloc.Reallocationsvalue: '::realloc'
改进 target 配置来源分析
我们改进了 xmake show -t target 命令对 target 信息的展示,新增了配置来源分析,并且精简了一些相对冗余的信息。
我们可以用它更好地排查定位自己配置的一些 flags 实际来自那一行配置。
显示效果如下:
$ xmake show -t tbox
The information of target(tbox):at: /Users/ruki/projects/personal/tbox/src/tbox/xmake.luakind: statictargetfile: build/macosx/x86_64/release/libtbox.arules:-> mode.release -> ./xmake.lua:26-> mode.debug -> ./xmake.lua:26-> utils.install.cmake_importfiles -> ./src/tbox/xmake.lua:15-> utils.install.pkgconfig_importfiles -> ./src/tbox/xmake.lua:16options:-> object -> ./src/tbox/xmake.lua:53-> charset -> ./src/tbox/xmake.lua:53-> database -> ./src/tbox/xmake.lua:53packages:-> mysql -> ./src/tbox/xmake.lua:43-> sqlite3 -> ./src/tbox/xmake.lua:43links:-> pthread -> option(__keyword_thread_local) -> @programdir/includes/check_csnippets.lua:100syslinks:-> pthread -> ./xmake.lua:71-> dl -> ./xmake.lua:71-> m -> ./xmake.lua:71-> c -> ./xmake.lua:71defines:-> __tb_small__ -> ./xmake.lua:42-> __tb_prefix__="tbox" -> ./src/tbox/xmake.lua:19-> _GNU_SOURCE=1 -> option(__systemv_semget) -> @programdir/includes/check_cfuncs.lua:104cxflags:-> -Wno-error=deprecated-declarations -> ./xmake.lua:22-> -fno-strict-aliasing -> ./xmake.lua:22-> -Wno-error=expansion-to-defined -> ./xmake.lua:22-> -fno-stack-protector -> ./xmake.lua:51frameworks:-> CoreFoundation -> ./src/tbox/xmake.lua:38-> CoreServices -> ./src/tbox/xmake.lua:38mxflags:-> -Wno-error=deprecated-declarations -> ./xmake.lua:23-> -fno-strict-aliasing -> ./xmake.lua:23-> -Wno-error=expansion-to-defined -> ./xmake.lua:23includedirs:-> src -> ./src/tbox/xmake.lua:26-> build/macosx/x86_64/release -> ./src/tbox/xmake.lua:27headerfiles:-> src/(tbox/**.h)|**/impl/**.h -> ./src/tbox/xmake.lua:30-> src/(tbox/prefix/**/prefix.S) -> ./src/tbox/xmake.lua:31-> build/macosx/x86_64/release/tbox.config.h -> ./src/tbox/xmake.lua:34files:-> src/tbox/*.c -> ./src/tbox/xmake.lua:56-> src/tbox/hash/bkdr.c -> ./src/tbox/xmake.lua:57-> src/tbox/hash/fnv32.c -> ./src/tbox/xmake.lua:57compiler (cc): /usr/bin/xcrun -sdk macosx clang-> -Qunused-arguments -target x86_64-apple-macos12.6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.0.sdklinker (ar): /usr/bin/xcrun -sdk macosx ar-> -crcompflags (cc):-> -Qunused-arguments -target x86_64-apple-macos12.6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.0.sdk -Wall -Werror -Oz -std=c99 -Isrc -Ibuild/macosx/x86_64/release -D__tb_small__ -D__tb_prefix__=\"tbox\" -D_GNU_SOURCE=1 -framework CoreFoundation -framework CoreServices -Wno-error=deprecated-declarations -fno-strict-aliasing -Wno-error=expansion-to-defined -fno-stack-protectorlinkflags (ar):-> -cr
改进包的下载配置
如果有些包的 url 下载,需要设置特定 http headers 去鉴权后,才能通过下载,可以通过这个策略来指定。
这通常用于一些公司内部的私有仓库包的维护。
package("xxx")set_policy("package.download.http_headers", "TEST1: foo", "TEST2: bar")
我们也可以设置指定的 urls 的 http headers:
package("zlib")add_urls("https://github.com/madler/zlib/archive/$(version).tar.gz", {http_headers = {"TEST1: foo", "TEST2: bar"}})
改进 dlang 工具链支持
先前的版本,Xmake 仅仅提供了 dlang 这一个工具链,内部会自动取查找 dmd, ldc2, gdc 来适配选择能够获取到的 dlang 编译器去编译项目。
但是这种方式,对用户而言,无法更加灵活地去选择指定的编译器,如果同时安装了 dmd, ldc2,那么 Xmake 总是会优先使用 dmd 作为 dlang 的编译器。
因此,新版本中,xmake 额外提供了三个独立的工具链可以单独选择需要的 dlang 编译器。
比如,运行下面的命令,就可以快速切换到 ldc2 编译器去编译项目。
$ xmake f --toolchain=ldc
$ xmake
除了 ldc 工具链,还有 dmd, gdc 这两个工具链可以单独选择使用。
并且,我们还改进了 dmd/ldc2 的编译优化选项配置,使得生产的 dlang 二进制程序更加的小而快。
支持外置构建目录配置
现有的内置构建目录模式
Xmake 目前提供的构建目录模式,属于内置构建目录,也就是如果我们在当前工程根目录下运行 xmake 命令,就会自动生成 build 目录,并且 .xmake 用于存放一些配置缓存。
- projectdir (workdir)- build (generated)- .xmake (generated)- src- xmake.lua
$ cd projectdir
$ xmake
当然,我们可以通过 xmake f -o ../build 去配置修改构建目录,但是 .xmake 目录还是在工程源码目录下。
$ cd projectdir
$ xmake f -o ../build
这对于一些喜欢完全代码目录保持完整干净的用户而言,可能并不喜欢这种方式。
新的外置构建目录模式
因此,新版本中,Xmake 提供了另外一种构建目录配置方式,也就是外置目录构建(类似 CMake)。
比如,我们想使用下面这种目录结构去构建项目,总是保持源码目录干净。
- workdir- build (generated)- .xmake (generated)
- projectdir- src- xmake.lua
我们只需要进入需要存储 build/.xmake 目录的工作目录下,然后使用 xmake f -P [projectdir] 配置命令去指定源码根目录即可。
$ cd workdir
$ xmake f -P ../projectdir
$ xmake
配置完成后,源码根目录就被完全记住了,后面的任何构建命令,都不需要再去设置它,就跟之前一样使用就行。
比如,构建,重建,运行或者安装等命令,跟之前的使用完全一致,用户感觉不到任何差异。
$ xmake
$ xmake run
$ xmake --rebuild
$ xmake clean
$ xmake install
我们同样可以使用 -o/--buildir 参数去单独设置构建目录到其他地方,例如设置成下面这个结构。
- build (generated)
- workdir- .xmake (generated)
- projectdir- src- xmake.lua
$ cd workdir
$ xmake f -P ../projectdir -o ../build
更新内容
新特性
- 添加 Haiku 支持
- #3326: 添加
xmake check去检测工程代码 (clang-tidy) 和 API 参数配置 - #3332: 在包中配置添加自定义 http headers
改进
- #3318: 改进 dlang 工具链
- #2591: 改进 target 配置来源分析
- 为 dmd/ldc2 改进 strip/optimization
- #3342: 改进配置构建目录,支持外置目录构建,保持源码目录更加干净
- #3373: 为 clang-17 改进 std 模块支持
Bugs 修复
- #3317: 针对 Qt 工程,修复 lanuages 设置
- #3321: 修复隔天 configfiles 重新生成导致重编问题
- #3296: 修复 macOS arm64 上构建失败
https://tboox.org/cn/2023/02/23/xmake-update-v2.7.7/
相关文章:
Xmake v2.7.7 发布,支持 Haiku 平台,改进 API 检测和 C++ Modules 支持
layout: post.cn title: “Xmake v2.7.7 发布,支持 Haiku 平台,改进 API 检测和 C Modules 支持” tags: xmake lua C/C package modules haiku cmodules categories: xmake Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量,没…...
苹果ios签名证书的生成方法
在使用hbuilderx打包uniapp或html5应用的时候,假如是打包ios应用,是需要ios签名证书,和证书profile文件的,这个证书要求是p12格式的证书,profile文件又叫描述文件。 这两个文件,需要在苹果开发者中心生成&…...
c++开发配置常用网站记录
1.ubuntu 镜像源: (1) 清华源:https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/ (2) 阿里源:https://developer.aliyun.com/mirror/ubuntu?spma2c6h.13651102.0.0.3e221b11VuM27s 包含了ubuntu各个版本的source源 2.ubuntu iso镜像下载…...
DC-1 靶场学习
以前写过了,有一些忘了,快速的重温一遍。 DC一共九个靶场,目标一天一个。 文章目录环境配置:信息搜集:漏洞复现:FLAG获取环境配置: 最简单的办法莫过于将kali和DC-1同属为一个nat的网络下。 信…...
oracle 不使用索引深入解析
首先,我们要确定数据库运行在何种优化模式下,相应的参数是:optimizer_mode。缺省的设置应是"choose",即如果对已分析的表查询的话选择CBO,否则选择RBO。如果该参数设为“rule”,则不论表是否分析…...
什么是自助式BI工具,有没有推荐
为什么需要自助式BI? 传统的BI采用的是“业务提报表需求,IT进行开发”的模式。决策管理者和业务人员提出用报表等来展示经营管理数据的需求;接着IT响应需求,进行需求沟通、数据处理加工、报表开发等主体工作;最后决策管…...
如何高效管理自己的时间,可以从这几个方向着手
如果你是上班族,天选打工人,你的绝大多数时间都属于老板,能够自己支配的时间其实并不多,所以你可能察觉不到时间管理的重要性。但如果你是自由职业者或者创业者,想要做出点成绩,那你就需要做好时间管理&…...
【PAT甲级题解记录】1014 Waiting in Line (30 分)
【PAT甲级题解记录】1014 Waiting in Line (30 分) 前言 Problem:1014 Waiting in Line (30 分) Tags:模拟 双端队列 Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1014 Waiting in Line (30 分) 问题描述 银行有N个…...
web接入大华摄像头实时视频
目录 一、FFmpeg下载及配置 二、nginx下载及配置 三、摄像rtsp取流 四、ffmpeg推流 五、html前端工作 一、FFmpeg下载及配置 地址:Download FFmpeg 下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容…...
Git代码冲突-不同分支之间的代码冲突
1、解决思路在团队开发中,提交代码到Git仓库时经常会遇到代码冲突的问题。- 原因:多人对相同的文件进行了编辑,造成代码存在差异化- 解决方案:1. 使用工具或git命令对比不同分支代码的差异化2. 把不同分支中有效代码进行保留&…...
KUKA KR C4机器人与S7-1200PLC进行PROFINET通信的具体方法和步骤
KUKA KR C4机器人与S7-1200PLC进行PROFINET通信的具体方法和步骤 首先,从KUKA机器人控制柜中将KOP备选软件包拷贝出来,然后在“WorkVisual Development Environment”安装KUKA备选软件包(版本非常重要,尽量从控制柜中拷贝), 也可以从以下链接中获取: KUKA机器人PROFINET…...
从0到1一步一步玩转openEuler--24 openEuler管理进程-调度启动进程
文章目录24 openEuler管理进程-调度启动进程24.1 定时运行一批程序(at)24.1.1 at命令24.1.2 设置时间24.1.3 执行权限24.2 周期性运行一批程序(cron)24.2.1 运行机制24.2.2 crontab命令24.2.3 crontab文件24.2.4 编辑配置文件操作…...
Servlet笔记(10):Session跟踪
Servlet Session 跟踪 Http是一种“无状态”协议,所以需要保存session会话,维持Web服务器连接。 Cookies 一个Web服务器可以分配一个唯一的session会话ID存储至Web客户端的cookie中,对于客户端的后续请求可以使用接收到的cookie来识别。 但是…...
Hive---分区表和分桶表
分区表和分桶表 文章目录分区表和分桶表分区表语法加载数据增加分区删除分区查看分区表有多少分区查看分区表结构动态分区开启动态分区功能(默认 true,开启)设置为非严格模式在所有执行 MR 的节点上,最大一共可以创建多少个动态分…...
C++ STL
1. 什么是STLSTL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。通俗来说:将常见的数据结构(顺序表、链表、栈、队列、堆。。。…...
java程序员要了解的sql语句优化技巧大全
sql语句规范 MySQL在Linux系统下数据库名,表名,存储过程名,函数名称,触发器名称等区分大小写,列名不区分大小写,原因是这些操作系统下文件名称区分大小写。 MySQL在Windows系统下全部不区分大小写…...
SQL零基础入门学习(十)
SQL零基础入门学习(九) SQL CREATE DATABASE 语句 CREATE DATABASE 语句用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE dbname;SQL CREATE DATABASE 实例 下面的 SQL 语句创建一个名为 “my_db” 的数据库: CREATE DATAB…...
Pytorch从零开始训练模型【识别数字模型】并测试
1 准备数据集 import torch import torchvision # 去网上下载CIFAR10数据集【此数据集为经典的图像数字识别数据集】 # train True 代表取其中得训练数据集; # transform 参数代表将图像转换为Tensor形式 # download 为True时会去网上下载数据集到指定路径【root】…...
Leetcode DAY 44: 完全背包 and 零钱兑换 II and 组合总和 Ⅳ
完全背包518. 零钱兑换 II!!!程序未通过原因: 1、dp数组的初始化没考虑清楚 2、组合问题 dp数组的更新没考虑清楚 修改后: class Solution { public:int change(int amount, vector<int>& coins) {// dp[j…...
谷歌搜索留痕的技术公式【2023年新版】
本文主要分享谷歌搜索留痕的技术公式,让你更简单的去学习谷歌留痕的技术原理 本文由光算创作,有可能会被修改和剽窃,我们佛系对待这样的行为吧。 谷歌搜索留痕的技术公式是什么? 答案是:需要做排名的关键词海量能搜…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
