Open cisen opened 3 years ago
$ rustc --version --verbose rustc 1.42.0-nightly (859764425 2020-01-07) binary: rustc commit-hash: 85976442558bf2d09cec3aa49c9c9ba86fb15c1f commit-date: 2020-01-07 host: x86_64-unknown-linux-gnu release: 1.42.0-nightly LLVM version: 9.0
(1)“三元组”标注。“榆林神木”、“矿藏”、“镁”三个词语构成了一个三元组(triple)。
(2)实体关系抽取。“榆林神木”、“镁”是两个实体,而“矿藏”表示“榆林神木”地下有大量的“镁”。
(3)SPO三元组抽取。“榆林神木”、“矿藏”、“镁”分别是一个句子的主语(subject)、谓语(predicate)、宾语(object),因此是一个SPO三元组。
(4)实体属性抽取。“榆林神木”是一个实体,它有一个属性,即“矿藏”情况。“榆林神木”的“矿藏”属性取值为“镁”。
对(榆林神木,矿藏,镁)的定义即称呼,是知识图谱建设中的理论基础。我们这个团队在协作的过程中,由于大家对基本概念或定义没有统一而准确的认识,沟通成本、纠错成本很高。事实告诉我,搞明白(榆林神木,矿藏,镁)的定义,是很有价值的。
关系、实体关系、实体属性、三元组、与SPO三元组 语义网、知识图谱等图形结构的知识库,其内容是事物或概念以及它们之间的关系,其结构是一个以事物或概念为节点、关系为边的图(Graph)。“关系”在不同的场景下,以实体关系、实体属性、三元组、SPO三元组等的名目或形态存在。
安装 Rust 时,默认编译后的可执行文件要在本平台上执行,我们可以使用
rustc --version --verbose 来查看 Rust 的默认目标三元组:
在 host 处可以看到默认的目标三元组, cpu 架构为 x86_64 ,供应商为 unknown ,操作系统为 linux ,ABI 为 gnu 。由于我们是在 64 位 ubuntu 上安装的 Rust ,这个默认目标三元组的确描述了本平台。
官方对一些平台提供了默认的目标三元组,我们可以通过以下命令来查看完整列表:
$ rustc --print target-list 目标三元组 JSON 描述文件 除了默认提供的以外,Rust 也允许我们用 JSON 文件定义自己的目标三元组。
首先我们来看一下默认的目标三元组 x86_64-unknown-linux-gnu 的 JSON 文件描述,输入以下命令:
$ rustc -Z unstable-options --print target-spec-json --target x86_64-unknown-linux-gnu
可以得到如下输出:
// x86_64-unknown-linux-gnu.json { "arch": "x86_64", "cpu": "x86-64", "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", "dynamic-linking": true, "env": "gnu", "executables": true, "has-elf-tls": true, "has-rpath": true, "is-builtin": true, "linker-flavor": "gcc", "linker-is-gnu": true, "llvm-target": "x86_64-unknown-linux-gnu", "max-atomic-width": 64, "os": "linux", "position-independent-executables": true, "pre-link-args": { "gcc": ["-Wl,--as-needed", "-Wl,-z,noexecstack", "-m64"] }, "relro-level": "full", "stack-probes": true, "target-c-int-width": "32", "target-endian": "little", "target-family": "unix", "target-pointer-width": "64", "vendor": "unknown" }
可以看到里面描述了架构、 CPU 、操作系统、 ABI 、端序、字长等信息。
我们现在想基于 64 位 RISCV 架构开发内核,就需要一份 riscv64 的目标三元组。幸运的是,目前 Rust 编译器已经内置了一个可用的目标:riscv64imac-unknown-none-elf。
我们查看一下它的 JSON 描述文件:
$ rustc -Z unstable-options --print target-spec-json --target riscv64imac-unknown-none-elf
// riscv64imac-unknown-none-elf.json { "abi-blacklist": [ "cdecl", "stdcall", "fastcall", "vectorcall", "thiscall", "aapcs", "win64", "sysv64", "ptx-kernel", "msp430-interrupt", "x86-interrupt", "amdgpu-kernel" ], "arch": "riscv64", "code-model": "medium", "cpu": "generic-rv64", "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n64-S128", "eliminate-frame-pointer": false, "emit-debug-gdb-scripts": false, "env": "", "executables": true, "features": "+m,+a,+c", "is-builtin": true, "linker": "rust-lld", "linker-flavor": "ld.lld", "llvm-target": "riscv64", "max-atomic-width": 64, "os": "none", "panic-strategy": "abort", "relocation-model": "static", "target-c-int-width": "32", "target-endian": "little", "target-pointer-width": "64", "vendor": "unknown" }
我们来看它与默认的目标三元组有着些许不同的地方:
"panic-strategy": "abort",
这个描述了 panic 时采取的策略。回忆上一章中,我们在 Cargo.toml 中设置程序在 panic 时直接 abort ,从而不必调用堆栈展开处理函数。由于目标三元组中已经包含了这个参数,我们可以将 Cargo.toml 中的设置删除了:
-[profile.dev] -panic = "abort" -[profile.release] -panic = "abort"
总结
知识图谱
(1)“三元组”标注。“榆林神木”、“矿藏”、“镁”三个词语构成了一个三元组(triple)。
(2)实体关系抽取。“榆林神木”、“镁”是两个实体,而“矿藏”表示“榆林神木”地下有大量的“镁”。
(3)SPO三元组抽取。“榆林神木”、“矿藏”、“镁”分别是一个句子的主语(subject)、谓语(predicate)、宾语(object),因此是一个SPO三元组。
(4)实体属性抽取。“榆林神木”是一个实体,它有一个属性,即“矿藏”情况。“榆林神木”的“矿藏”属性取值为“镁”。
对(榆林神木,矿藏,镁)的定义即称呼,是知识图谱建设中的理论基础。我们这个团队在协作的过程中,由于大家对基本概念或定义没有统一而准确的认识,沟通成本、纠错成本很高。事实告诉我,搞明白(榆林神木,矿藏,镁)的定义,是很有价值的。
关系、实体关系、实体属性、三元组、与SPO三元组 语义网、知识图谱等图形结构的知识库,其内容是事物或概念以及它们之间的关系,其结构是一个以事物或概念为节点、关系为边的图(Graph)。“关系”在不同的场景下,以实体关系、实体属性、三元组、SPO三元组等的名目或形态存在。
rust
安装 Rust 时,默认编译后的可执行文件要在本平台上执行,我们可以使用
rustc --version --verbose 来查看 Rust 的默认目标三元组:
在 host 处可以看到默认的目标三元组, cpu 架构为 x86_64 ,供应商为 unknown ,操作系统为 linux ,ABI 为 gnu 。由于我们是在 64 位 ubuntu 上安装的 Rust ,这个默认目标三元组的确描述了本平台。
官方对一些平台提供了默认的目标三元组,我们可以通过以下命令来查看完整列表:
$ rustc --print target-list 目标三元组 JSON 描述文件 除了默认提供的以外,Rust 也允许我们用 JSON 文件定义自己的目标三元组。
首先我们来看一下默认的目标三元组 x86_64-unknown-linux-gnu 的 JSON 文件描述,输入以下命令:
可以得到如下输出:
可以看到里面描述了架构、 CPU 、操作系统、 ABI 、端序、字长等信息。
我们现在想基于 64 位 RISCV 架构开发内核,就需要一份 riscv64 的目标三元组。幸运的是,目前 Rust 编译器已经内置了一个可用的目标:riscv64imac-unknown-none-elf。
我们查看一下它的 JSON 描述文件:
我们来看它与默认的目标三元组有着些许不同的地方:
这个描述了 panic 时采取的策略。回忆上一章中,我们在 Cargo.toml 中设置程序在 panic 时直接 abort ,从而不必调用堆栈展开处理函数。由于目标三元组中已经包含了这个参数,我们可以将 Cargo.toml 中的设置删除了: