xuanzizhe 最近的时间轴更新
xuanzizhe

xuanzizhe

V2EX 第 530138 号会员,加入于 2021-01-23 23:04:05 +08:00
今日活跃度排名 6918
xuanzizhe 最近回复了
17 天前
回复了 gzf6 创建的主题 Rust [请教] Rust 的跨平台与 wasm 的跨平台
@gzf6 我也没太明白你的问题的核心在哪,还是回归标题,Rust 跨平台是因为它可以将代码交叉编译成支持不同平台的代码,对应的就是 rustc 时的 target 参数,这里有 target 的列表和解释,https://doc.rust-lang.org/nightly/rustc/platform-support.html 看 target 的名称就可以知道,比如 Mac 上的 target 是 x86_64-apple-darwin,最重要的是两部分,首先是对应的是芯片 CPU 的架构(也就对应了二进制机器码指令集),这里是使用的 Intel 的 x86 架构,如果是 ARM 版本的 Mac,对应的 target 就是 aarch64-apple-darwin,使用 ARM64 位架构的指令集;另外就是操作系统名,这里是 darwin,对应也就是 macOs,有了这两部分,就能确定你的程序最终编译的二进制机器码该是怎样的。而 Wasm 跨平台是因为它提供了一套虚拟指令集,说是虚拟指令集是因为它并非像 Intel 的 x86 架构和 ARM 的 arm64 位架构那样,是提供用来制造真正的芯片的,Wasm 的真正执行还是通过对应的宿主环境实现的,然后比如在 mac 里最终的代码执行还是以 x86 或者 arm64 的机器指令来执行的。所以 Wasm 的跨平台是因为它处在比它的宿主环境浏览器或操作系统等更高的层面上,不管是什么平台架构,Wasm 代码都是用它自己的一套指令集编码出来的同一套代码,真正不同的是执行它的宿主环境能将 Wasm 的二进制机器码转译成对应平台架构里的真正机器码指令来执行,可以大致的理解为宿主环境运行了一个虚拟机,可以用来解释运行 wasm 代码,类比到 @hronro 说的那样,这个虚拟机就是 JVM,而 wasm 二进制代码就是 java 字节码~
17 天前
回复了 gzf6 创建的主题 Rust [请教] Rust 的跨平台与 wasm 的跨平台
先得区分下 Wasi 和 Wasm:Wasm 提供了一套栈式虚拟机的指令集,包括二进制(类似机器码)和文本两种表达(类似汇编),因为 Wasm 指令集的定义并不与 WEB 挂钩,因此不止浏览器可以实现它,也可以是其它的运行时程序甚至可以是一个操作系统。我们可以把这些实现了 Wasm 的浏览器、运行时、操作系统等看作是实现 Wasm 的宿主环境,我们也可以通过 Wasm 指令集提供的能力与宿主环境进行交互,比如将浏览器的 console.log 方法导入给 Wasm 内调用(实际可能有点复杂,因为要涉及到数据内存结构的转换等),总之,我们可以通过编写 C/C++/Rust 等语言的代码,借助一些实现了宿主环境代码到 Wasm 代码转换的库,比如针对浏览器环境里 C/C++有 emscripten,Rust 里有 wasm-bindgen,就能实现编译后的 Wasm 代码跑在 Wasm 虚拟机里但还能调用宿主环境提供的方法等能力。而 Wasi,相当于提供了一套标准接口,可以使得 Wasm 也能获得文件访问、网络、标准输入输出等与系统相关的能力,宿主环境如果想要提供这些能力供 Wasm 调用,就可以通过实现这套接口标准,提供给 Wasm 使用(可以大概理解为一套标准的方法集,与前面提到的 console.log 方法相似,由宿主环境实现,供 Wasm 使用,然后就可以将 C/C++/Rust 等代码中对前面提到的文件、网络等的操作转换为标准的 Wasm 代码),当然这些标准代码能否正常执行则有赖于宿主环境是否实现了 Wasi 。我的大概理解是这样的,可能并不完全准确,可以参看[wasi 示例]( https://github.com/bytecodealliance/wasmtime/blob/main/docs/WASI-tutorial.md#running-common-languages-with-wasi) 应该可以有个大概了解~
@ccsulzf0627 可以的,如果是固定的一些类型,可以定制下需要配置的表单,填字段名、字段项数、选择字段类型、配置类型支持的属性参数,大概这样的。最近也在考虑怎么能比较好的把这些类型的属性数据暴露出来,好方便用来提供给生成这种配置表单使用,这样就能动态的根据类型做出各种不同的配置而不用依赖于具体类型定制了。
103 天前
回复了 happyCodings 创建的主题 Vue.js 前端正则校验-小白给大家磕头了
如果是想判断正则表达式字面量是不是个合规的正则表达式,可以简单的验证一下:
```javascript
const isRegExp = (rule) => {
if(/^\/.+?\/[imdsguy]*$/.test(rule)){
try{
return new Function('', `var __rule__ = ${rule}; return __rule__ instanceof RegExp;`)();
}catch(_e){
return false;
}
}
return false;
};
console.log(isRegExp('/a/b')); // false
console.log(isRegExp('/a/i')); // true
console.log(isRegExp('/a/ii')); // false
console.log(isRegExp('/[a-z]/i')); // true
console.log(isRegExp('/[z-a]/i')); // false
```
正常的逻辑判断基本够用了,但上面的还是阻止不了一些特意规避的写法,比如像下面这样写:
```javascript
console.log(isRegExp('/a/;/b/')); // true, 考虑到斜杠 /在字符 sets([/])里是不需要转义的,所以也不能简单的判断 /是否前面有反斜杠\
```
要想完整的判断只能解析正则表达式的语法,但语法层面你还得考虑到浏览器对正则表达式的支持程度,比如是否要支持命名分组、\p unicode category 、负向前瞻等等,要做到完善还是需要考虑很多细节的。
如果不考虑哪种浏览器的话,Firefox 自带的截图功能应该是推出得最早、也最强大完善的~Chrome 插件的话用过 Fireshot,感觉还可以~
@wxsm 👍🏻 是个好办法啊,不过看了下 xpath 里 contains 方法和 jquery 里的:contains 选择器还是有些区别的,如上面所说,xpath 里匹配到的文本必须是在元素的文本子节点里连续存在的,相当于获取到元素后,再遍历元素的所有文本子节点看是否包含,比如『<div>ab<span>c</span></div>』,在 xpath 里是只能匹配到文本『 ab 』而不能匹配到『 abc 』的,所以看实际需求了,如果你的需求就是如 xpath 的处理方式一样,那原生的就能满足了,如果是如 jquery 的处理方式,那就不如直接引下库了~
这个恐怕没有什么好的高效的方式,间接的办法先取到 div/p 元素,然后循环判断 element.textContent 是否包含 abc,但 textContent 是会取到所有子元素的文本的,这表示你的 abc 可能是间隔分布在文本节点和 element 子元素内的,如果这没问题的话,你可能还得去重,因为假如子元素能筛选到的话、父元素也一定能筛选到,这样下来性能应该是不会好到哪去的了~
关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1626 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 17:11 · PVG 01:11 · LAX 10:11 · JFK 13:11
♥ Do have faith in what you're doing.