{"id":45020,"date":"2023-07-30T08:06:55","date_gmt":"2023-12-11T09:57:02","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/"},"modified":"2024-04-30T16:04:35","modified_gmt":"2024-04-30T08:04:35","slug":"45020-2","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/","title":{"rendered":""},"content":{"rendered":"<p>\u3053\u306e\u8a18\u4e8b\u306f Rust Advent Calendar 2022 14\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/p>\n<div>\n<p>\u8a18\u4e8b\u3092\u66f8\u3044\u3066\u3044\u308b\u3046\u3061\u306b\u3001GCC Rust \u30d1\u30c3\u30c1\u30bb\u30c3\u30c8\u7b2c\uff11\u5f3e\u304c\u30e1\u30a4\u30f3\u30e9\u30a4\u30f3\u306b\u30de\u30fc\u30b8\u3055\u308c\u3066\u3044\u305f\u306e\u3067\u3001\u30bf\u30a4\u30c8\u30eb\u3082\u542b\u3081\u3001\u3044\u304f\u3064\u304b\u4fee\u6b63\uff06\u8ffd\u8a18\u3057\u3066\u304a\u304d\u307e\u3057\u305f\u3002\uff082022\/12\/15\uff09<\/p>\n<\/div>\n<h1>\u306f\u3058\u3081\u306b<\/h1>\n<p>2022\u5e7412\u670811\u65e5\u3001\u3064\u3044\u306b Rust support \u7b2c\uff11\u5f3e\u304c\u30de\u30fc\u30b8\u3055\u308c\u305f Linux Kernel 6.1 \u304c\u6b63\u5f0f\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\u3002\u4eca\u56de\u306f\u3001\u9577\u3044\u30ab\u30fc\u30cd\u30eb\u30b7\u30f3\u30dc\u30eb\u540d\u306e\u30b5\u30dd\u30fc\u30c8\u3001Rust \u30b3\u30fc\u30c9\u306e\u30d3\u30eb\u30c9\u30eb\u30fc\u30eb\u3084\u30b9\u30af\u30ea\u30d7\u30c8\u3001Rust\u30ab\u30fc\u30cd\u30eb\u30a2\u30ed\u30b1\u30fc\u30bf\u3084printk\u5468\u308a\u306e\u30b5\u30dd\u30fc\u30c8\u3001Rust\u3067\u66f8\u304b\u308c\u305f\u30ab\u30fc\u30cd\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b5\u30dd\u30fc\u30c8\u306a\u3069\u3001\u6700\u5c0f\u9650\u306e\u57fa\u76e4\u7684\u306a\u30b3\u30fc\u30c9\u304c\u30de\u30fc\u30b8\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u65e2\u306b Rust support \u7b2c\uff12\u5f3e\u304c\u63d0\u6848\u3055\u308c\u3066\u304a\u308a\u3001Rust \u3067\u306e Linux \u30ab\u30fc\u30cd\u30eb\u306e\u958b\u767a\u304c\u73fe\u5b9f\u7684\u306a\u3082\u306e\u3068\u306a\u308a\u3001\u4f4e\u30ec\u30a4\u30e4\u597d\u304d\u306e Rustecean \u306e\u6d3b\u8e8d\u306e\u5834\u304c\u5927\u304d\u304f\u62e1\u304c\u308a\u307e\u3059\u3001\u305f\u3076\u3093\u306d\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u305d\u308c\u3068\u540c\u3058\u304f\u3089\u3044\u306b\u671f\u5f85\u3057\u3066\u3044\u308b\u306e\u304c\u3001GCC Front-End for Rust (GCC Rust; \u30b3\u30de\u30f3\u30c9\u540d gccrs) \u306e GCC\uff08Gnu Compiler Collection\uff09\u3078\u306e\u30de\u30fc\u30b8\u306e\u65b9\u91dd\u304c GCC Steering Committee \u306b\u3088\u3063\u3066\u627f\u8a8d\u3055\u308c\u3001\u30d1\u30c3\u30c1\u30bb\u30c3\u30c8\u7b2c\uff11\u5f3e\u304c GCC \u306e\u30e1\u30a4\u30f3\u30e9\u30a4\u30f3\u3078\u30de\u30fc\u30b8\u3055\u308c\u305f\u3068\u3044\u3046\u30cb\u30e5\u30fc\u30b9\u3067\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u5c06\u6765\u7684\u306b Rust-for-Linux \u304c LLVM \u30d9\u30fc\u30b9\u306e clang + rustc \u3060\u3051\u3067\u306f\u306a\u304f\u3001GCC \u30d9\u30fc\u30b9\u306e gcc + gccrs \u3067\u3082\u30d3\u30eb\u30c9\u3067\u304d\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001OSS \u306e\u5b89\u5168\u4fdd\u969c\u4e0a\u304b\u3089\u3082\uff08\u3061\u3087\u3063\u3068\u304a\u304a\u3052\u3055\uff1f\uff09\u91cd\u8981\u306a\u55b6\u307f\u3067\u3057\u3087\u3046\u3002\u307e\u305f\u3001\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304c LLVM \u304b\u3089 GCC \u306b\u306a\u308b\u3053\u3068\u3067\u3001GCC \u304c\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u8c4a\u5bcc\u306a CPU \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3078\u306e\u5bfe\u5fdc\u304c\u53ef\u80fd\u3068\u306a\u308b\u306a\u3069\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>GCC Rust \u306f C++ \u3067\u8a18\u8ff0\u3055\u308c\u3066\u304a\u308a\u3001\u307e\u3060\u307e\u3060\u5b9f\u9a13\u7684\u306a\u30b3\u30f3\u30d1\u30a4\u30e9\u3067\u3001\u4eca\u5f8c\u591a\u304f\u306e\u5909\u66f4\u304c\u52a0\u3048\u3089\u308c\u308b\u3067\u3057\u3087\u3046\u3057\u3001\u5b9f\u969b\u306e Rust \u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u3059\u308b\u306b\u306f\u6642\u671f\u5c1a\u65e9\u3068\u3044\u3046\u3068\u3053\u308d\u3067\u3059\u3002\u3067\u3059\u304c\u3001Rust \u3082 Swift \u3082 Go \u3082\u3001\u8a00\u8a9e\u51e6\u7406\u7cfb\u3067\u958b\u767a\u3057\u3066\u697d\u3057\u3044\u90e8\u5206\u306f\u6b8b\u3063\u3066\u306a\u3044\u3088\u306d\u3001\u3068\u304a\u5606\u304d\u306e\u3042\u306a\u305f\u3001\u3044\u304b\u304c\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u3061\u3087\u3063\u3068\u3060\u3051\u89e6\u3063\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<h1>GCC Rust \u306e\u30d3\u30eb\u30c9<\/h1>\n<p>\u958b\u767a\u74b0\u5883\u3068\u3057\u3066\u306f Ubuntu \u304c\u304a\u3059\u3059\u3081\u3067\u3059\u300222.04 LTS \u3067\u826f\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u307e\u305a\u306f\u3001\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3057\u3087\u3046\u3002\u57fa\u672c\u7684\u306b\u306f GNU C Compiler \u3092\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u7fa4\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt install build-essential libgmp3-dev libmpfr-dev libmpc-dev flex bison autogen dejagnu\r\n<\/code><\/pre>\n<p>\u6b21\u306b\u3001\u30ec\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u307e\u3059\u3002GCC \u306e\u3088\u3046\u306a\u5927\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u30d5\u30eb\u30af\u30ed\u30fc\u30f3\u3059\u308b\u3068\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u5727\u8feb\u3059\u308b\u306e\u3067\u3001\u30d1\u30fc\u30b7\u30e3\u30eb\u30af\u30ed\u30fc\u30f3\uff08\u30d6\u30ed\u30d6\u30ec\u30b9\u30af\u30ed\u30fc\u30f3\uff09\u3067\u3084\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ git clone --filter=blob:none https:\/\/github.com\/Rust-GCC\/gccrs.git\r\n<\/code><\/pre>\n<div>\n<p>GCC\u306e\u30e1\u30a4\u30f3\u30e9\u30a4\u30f3\u304b\u3089\u30d3\u30eb\u30c9\u3059\u308b\u5834\u5408\u306b\u306f\u3001https:\/\/gcc.gnu.org\/git\/gcc.git \u3084 https:\/\/github.com\/gcc-mirror\/gcc.git \u304b\u3089\u30af\u30ed\u30fc\u30f3\u3057\u3066\u4e0b\u3055\u3044\u3002<\/p>\n<\/div>\n<p>\u30d3\u30eb\u30c9\u306f\u30bd\u30fc\u30b9\u30c4\u30ea\u30fc\u306e\u5916\u3067\u884c\u3044\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code>$ mkdir gccrs-build\r\n$ cd gccrs-build\r\n$ ..\/gccrs\/configure --prefix=$HOME\/gccrs-install --disable-bootstrap --enable-multilib --enable-languages=rust\r\n$ make -j6\r\n<\/code><\/pre>\n<p>-j6 \u306e\u3068\u3053\u308d\u306f\u30de\u30b7\u30f3\u306e\u30b3\u30a2\u6570\u3084\u30e1\u30e2\u30ea\u30b5\u30a4\u30ba\u306b\u5408\u308f\u305b\u3066\u9069\u5f53\u306b\u3002make check-rust \u3067\u30c6\u30b9\u30c8\u304c\u3060\u3044\u305f\u3044\u901a\u308c\u3070 OK \u3067\u3059\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3001\u30d1\u30b9\u3092\u901a\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code>$ make install\r\n$ export PATH=\"$HOME\/gccrs-install\/bin:$PATH\"\r\n<\/code><\/pre>\n<p>\u307e\u305a\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3001\u52d5\u4f5c\u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{}<\/span>\r\n<\/code><\/pre>\n<p>\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ gccrs -O2 test.rs -o test\r\nrust1: fatal error: gccrs is not yet able to compile Rust code properly. Most of the errors produced will be gccrs' fault and not the crate you are trying to compile. Because of this, please reports issues to us directly instead of opening issues on said crate's repository.\r\n\r\nOur github repository: https:\/\/github.com\/rust-gcc\/gccrs\r\nOur bugzilla tracker: https:\/\/gcc.gnu.org\/bugzilla\/buglist.cgi?bug_status=__open__&amp;component=rust&amp;product=gcc\r\n\r\nIf you understand this, and understand that the binaries produced might not behave accordingly, you may attempt to use gccrs in an experimental manner by passing the following flag:\r\n\r\n`-frust-incomplete-and-experimental-compiler-do-not-use`\r\n\r\nor by defining the following environment variable (any value will do)\r\n\r\nGCCRS_INCOMPLETE_AND_EXPERIMENTAL_COMPILER_DO_NOT_USE\r\n\r\nForcargo-gccrs, this means passing\r\n\r\nGCCRS_EXTRA_FLAGS=\"-frust-incomplete-and-experimental-compiler-do-not-use\"\r\n\r\nas an environment variable.\r\ncompilation terminated.\r\n<\/code><\/pre>\n<p>\u304a\u3084\u304a\u3084\u3001\u6012\u3089\u308c\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002\u4e0d\u5177\u5408\u306e\u5831\u544a\u5148\u3068\u30ea\u30b9\u30af\u3092\u7406\u89e3\u3057\u3066\u304b\u3089\u3001<\/p>\n<pre class=\"post-pre\"><code>$ export GCCRS_INCOMPLETE_AND_EXPERIMENTAL_COMPILER_DO_NOT_USE=\r\n<\/code><\/pre>\n<p>\u3068\u3057\u3066\u304b\u3089\u4f7f\u3063\u3066\u4e0b\u3055\u3044\u3001\u3068\u3044\u3046\u3053\u3068\u3060\u305d\u3046\u3067\u3059\u3002\u3053\u306e\u304a\u307e\u3058\u306a\u3044\u3067\u3001Rust \u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u666e\u901a\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h1>cargo-gccrs \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h1>\n<p>Rust \u5358\u72ec\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308c\u3070\u3001\u3084\u306f\u308a cargo \u3092\u4f7f\u3044\u305f\u304f\u306a\u308a\u307e\u3059\u3002cargo-gccrs \u3092\u4f7f\u3046\u3068\u3001rustc \u306e\u4ee3\u308f\u308a\u306b gccrs \u3067 build, run, test \u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u3064\u307e\u308a\u3001<\/p>\n<pre class=\"post-pre\"><code>$ cargo gccrs run --release\r\n<\/code><\/pre>\n<p>\u3068\u3059\u308b\u3053\u3068\u3067\u3001gccrs \u3092\u4f7f\u3063\u3066\u3001\u6700\u9069\u5316\u30d5\u30e9\u30b0\u3092\u30aa\u30f3\u306b\u3057\u3066\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30d3\u30eb\u30c9\u3057\u3066\u30e9\u30f3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u306a\u304a\u3001\u6700\u65b0\u306e gccrs \u3078\u8ffd\u5f93\u3057\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u3001\u30d1\u30c3\u30c1\u3092\u30d7\u30eb\u30ea\u30af\u3057\u305f\u3089\u3001\u65e9\u901f\u30de\u30fc\u30b8\u3057\u3066\u3044\u305f\u3060\u3051\u307e\u3057\u305f\u3002\u3053\u308c\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u305f\u3081\u306b\u3001GitHub \u304b\u3089\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002cargo-gccrs \u306f Rust \u3067\u66f8\u304b\u308c\u3066\u3044\u3066\u3001\u73fe\u6642\u70b9\u3067\u306f rustc \u3092\u4f7f\u308f\u306a\u3044\u3068\u30d3\u30eb\u30c9\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cargo install --git https:\/\/github.com\/Rust-GCC\/cargo-gccrs cargo-gccrs\r\n<\/code><\/pre>\n<h1>Rust \u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30b3\u30f3\u30d1\u30a4\u30eb<\/h1>\n<p>GCC Rust \u306b\u306f std \u30e9\u30a4\u30d6\u30e9\u30ea\u3084 core \u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u307e\u3060\u540c\u68b1\u3055\u308c\u3066\u304a\u3089\u305a\u3001no_std, no_core \u306e\u72b6\u614b\u3068\u306a\u308a\u307e\u3059\u306e\u3067\u3001C\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u529b\u3092\u501f\u308a\u3064\u3064\u3001core \u30e9\u30a4\u30d6\u30e9\u30ea\u76f8\u5f53\u3082\u66f8\u3044\u3066\u3084\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002main() \u306f i32 \u3092\u8fd4\u3059\u3088\u3046\u3067\u3059\u306e\u3067\u3001\u3044\u3064\u3082\u306e\u30b3\u30fc\u30c9\u306f\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">mod<\/span> <span class=\"n\">core<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">extern<\/span> <span class=\"s\">\"C\"<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">fn<\/span> <span class=\"nf\">write<\/span><span class=\"p\">(<\/span><span class=\"n\">fd<\/span><span class=\"p\">:<\/span> <span class=\"nb\">usize<\/span><span class=\"p\">,<\/span> <span class=\"n\">buf<\/span><span class=\"p\">:<\/span> <span class=\"o\">*<\/span><span class=\"k\">const<\/span> <span class=\"nb\">u8<\/span><span class=\"p\">,<\/span> <span class=\"n\">len<\/span><span class=\"p\">:<\/span> <span class=\"nb\">usize<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">i32<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">unsafe<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">let<\/span> <span class=\"n\">msg<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"Hello, World!<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">let<\/span> <span class=\"n\">buf<\/span> <span class=\"o\">=<\/span> <span class=\"n\">msg<\/span><span class=\"nf\">.as_ptr<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"k\">let<\/span> <span class=\"n\">len<\/span> <span class=\"o\">=<\/span> <span class=\"n\">msg<\/span><span class=\"nf\">.len<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"nf\">write<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">buf<\/span><span class=\"p\">,<\/span> <span class=\"n\">len<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"mi\">0<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>no_core \u306a\u74b0\u5883\u3067\u57fa\u672c\u30c7\u30fc\u30bf\u578b str \u306e\u30e1\u30bd\u30c3\u30c9\u3055\u3048\u3082\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u3053\u308c\u3089\u306e\u30e1\u30bd\u30c3\u30c9\u3092 GCC Rust \u306e\u30c6\u30b9\u30c8\u30d7\u30ed\u30b0\u30e9\u30e01\u304b\u3089\u62dd\u501f\u3057\u3066\u66f8\u3044\u3066\u307f\u307e\u3059\u3002\u3068\u308a\u3042\u3048\u305a\u5fc5\u8981\u306b\u306a\u308b\u306e\u306f as_ptr() \u3068 len() \u3060\u3051\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u305d\u308c\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306b\u306f\u30d5\u30a1\u30c3\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u5b9a\u7fa9\u306a\u3069\u304c\u5fc5\u8981\u306b\u306a\u3063\u305f\u308a\u3001&#8230;\u3001\u7d50\u5c40\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">mod<\/span> <span class=\"n\">mem<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">extern<\/span> <span class=\"s\">\"rust-intrinsic\"<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nd\">#[rustc_const_stable(feature<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"const_transmute\"<\/span><span class=\"nd\">)]<\/span>\r\n        <span class=\"k\">fn<\/span> <span class=\"n\">transmute<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">,<\/span> <span class=\"n\">U<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"n\">_<\/span><span class=\"p\">:<\/span> <span class=\"n\">T<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"n\">U<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">struct<\/span> <span class=\"n\">FatPtr<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">data<\/span><span class=\"p\">:<\/span> <span class=\"o\">*<\/span><span class=\"k\">const<\/span> <span class=\"n\">T<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"n\">len<\/span><span class=\"p\">:<\/span> <span class=\"nb\">usize<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">pub<\/span> <span class=\"k\">union<\/span> <span class=\"n\">Repr<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">rust<\/span><span class=\"p\">:<\/span> <span class=\"o\">*<\/span><span class=\"k\">const<\/span> <span class=\"p\">[<\/span><span class=\"n\">T<\/span><span class=\"p\">],<\/span>\r\n    <span class=\"n\">rust_mut<\/span><span class=\"p\">:<\/span> <span class=\"o\">*<\/span><span class=\"k\">mut<\/span> <span class=\"p\">[<\/span><span class=\"n\">T<\/span><span class=\"p\">],<\/span>\r\n    <span class=\"n\">raw<\/span><span class=\"p\">:<\/span> <span class=\"n\">FatPtr<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">impl<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">[<\/span><span class=\"n\">T<\/span><span class=\"p\">]<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">pub<\/span> <span class=\"k\">const<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">usize<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">unsafe<\/span> <span class=\"p\">{<\/span> <span class=\"n\">Repr<\/span> <span class=\"p\">{<\/span> <span class=\"n\">rust<\/span><span class=\"p\">:<\/span> <span class=\"k\">self<\/span> <span class=\"p\">}<\/span><span class=\"py\">.raw.len<\/span> <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">impl<\/span> <span class=\"nb\">str<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">pub<\/span> <span class=\"k\">const<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">as_ptr<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"o\">*<\/span><span class=\"k\">const<\/span> <span class=\"nb\">u8<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">self<\/span> <span class=\"k\">as<\/span> <span class=\"o\">*<\/span><span class=\"k\">const<\/span> <span class=\"nb\">str<\/span> <span class=\"k\">as<\/span> <span class=\"o\">*<\/span><span class=\"k\">const<\/span> <span class=\"nb\">u8<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"k\">pub<\/span> <span class=\"k\">const<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">as_bytes<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"o\">&amp;<\/span><span class=\"p\">[<\/span><span class=\"nb\">u8<\/span><span class=\"p\">]<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">unsafe<\/span> <span class=\"p\">{<\/span> <span class=\"nn\">mem<\/span><span class=\"p\">::<\/span><span class=\"nf\">transmute<\/span><span class=\"p\">(<\/span><span class=\"k\">self<\/span><span class=\"p\">)<\/span> <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"k\">pub<\/span> <span class=\"k\">const<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">len<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">usize<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">self<\/span><span class=\"nf\">.as_bytes<\/span><span class=\"p\">()<\/span><span class=\"nf\">.len<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u3042\u3068\u306f\u3001Cargo.toml \u3092\u3055\u3089\u3063\u3068\u66f8\u3044\u3066\u3001run \u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cargo gccrs run\r\n   Compiling hello v0.1.0 (\/home\/xxx\/Misc\/hello)\r\nsrc\/core.rs:8:1: warning: struct is never constructed: \u2018FatPtr\u2019\r\n    8 | struct FatPtr&lt;T&gt; {\r\n      | ^\r\n    Finished dev [unoptimized + debuginfo] target(s) in 0.14s\r\n     Running `target\/debug\/hello`\r\nHello, World!\r\n<\/code><\/pre>\n<p>\u3061\u3087\u3063\u3068 warning \u304c\u51fa\u3066\u3044\u307e\u3059\u304c\u3001\u7121\u4e8b\u306b\u52d5\u304d\u307e\u3057\u305f\u3002<\/p>\n<h1>GCC Rust \u306e\u73fe\u72b6<\/h1>\n<p>\u3053\u3061\u3089\u3092\u898b\u308b\u3068\u3001monthly \u3068 weekly \u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u9032\u6357\u30ec\u30dd\u30fc\u30c82\u3092\u307f\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>2022\u5e7412\u670812\u65e5\u306e weekly \u30ec\u30dd\u30fc\u30c8\u3092\u3061\u3089\u3063\u3068\u8997\u3044\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30de\u30a4\u30eb\u30b9\u30c8\u30f3\u5148\u9031\u4eca\u9031\u5dee\u5206\u958b\u59cb\u65e5\u7d42\u4e86\u65e5\u76ee\u6a19Data Structures 1 &#8211; Core100%100%-2020\/11\/302021\/1\/272021\/1\/29Control Flow 1 &#8211; Core100%100%-2021\/1\/282021\/2\/102021\/2\/26Data Structures 2 &#8211; Generics100%100%-2021\/2\/112021\/3\/142021\/5\/28Data Structures 3 &#8211; Traits100%100%-2021\/5\/202021\/9\/172021\/8\/27Control Flow 2 &#8211; Pattern Matching100%100%-2021\/9\/202021\/12\/92021\/11\/29Macros and cfg expansion100%100%-2021\/12\/12022\/3\/312022\/3\/28Imports and Visibility100%100%-2022\/3\/292022\/7\/132022\/5\/27Const Generics100%100%-2022\/5\/302022\/10\/102022\/10\/17Initial upstream patches100%100%-2022\/10\/102022\/11\/132022\/11\/13Upstream initial patchset78%79%+1%2022\/11\/13-2022\/12\/19Final set of upstream patches20%21%+1%2022\/11\/16-2023\/4\/30Intrinsics and builtins18%18%-2022\/9\/6-TBDBorrow checking0%0%-TBD-TBDConst Generics 20%0%-TBD-TBDRust-for-Linux compilation0%0%-TBD-TBD<\/div>\n<\/div>\n<p>\u3053\u306e\u3068\u3053\u308d\u306f\u3001GCC 13 \u306e\u30de\u30fc\u30b8\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u5411\u3051\u305f\u30d1\u30c3\u30c1\u30bb\u30c3\u30c8\u306e\u958b\u767a\u306b\u6ce8\u529b\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u304c\u3001\u30e1\u30a4\u30f3\u30e9\u30a4\u30f3\u306b\u30de\u30fc\u30b8\u3055\u308c\u305f\u3088\u3046\u3067\u3059\u306e\u3067\u3001Upstream initial patchset \u306e\u30de\u30a4\u30eb\u30b9\u30c8\u30f3\u306f\u6b21\u9031\u306f\u5b8c\u4e86\u30d5\u30e9\u30b0\u3068\u306a\u308b\u3068\u601d\u308f\u308c\u307e\u3059\u3002\u500b\u4eba\u7684\u306b\u6c17\u306b\u306a\u308b Rust-for-Linux compilation \u3068\u3044\u3046\u30de\u30a4\u30eb\u30b9\u30c8\u30f3\u3082\u3042\u308a\u307e\u3059\u306d\u3002Borrow checking \u304c\u3053\u308c\u304b\u3089\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u30b3\u30f3\u30d1\u30a4\u30e9\u672c\u4f53\u306e\u958b\u767a\u306b\u5927\u304d\u306a\u30de\u30a4\u30eb\u30b9\u30c8\u30f3\u304c\u6b8b\u3063\u3066\u3044\u307e\u3059\u3057\u3001core \u3084 std \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u958b\u767a\u3068\u3044\u3046\u5927\u304d\u306a\u5c71\u3082\u6b8b\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h1>\u304a\u308f\u308a\u306b<\/h1>\n<p>GCC \u7528\u306e Rust \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306b\u3064\u3044\u3066\u3001\u8efd\u304f\u7d39\u4ecb\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u5b9f\u7528\u306b\u306f\u307e\u3060\u307e\u3060\u3067\u3059\u304c\u3001\u9006\u306b\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30c8\u306e\u4f59\u5730\u304c\u5e83\u304f\u6b8b\u3055\u308c\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u300c\u6211\u3053\u305d\u306f\u300d\u3068\u3044\u3046\u65b9\u3001\u305c\u3072\u3001\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059\u3002\u4eba\u306b\u3088\u3063\u3066\u306f\u3001\u30af\u30ea\u30b9\u30de\u30b9\u304b\u308917\u9023\u4f11\u3068\u3044\u3046\u5642\u3082\u3042\u308a&#8230;<\/p>\n<p>\u306a\u304a\u3001GCC \u306b\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30c8\u3059\u308b\u5834\u5408\u306b\u306f\u3001\u307e\u305a\u521d\u3081\u306b\u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3057\u3063\u304b\u308a\u3068\u8aad\u3093\u3067\u304b\u3089\u3002<\/p>\n<h1>\u88dc\u8db3: macOS \u3067\u306e\u30d3\u30eb\u30c9<\/h1>\n<p>macOS Big Sur on x86_64 \u3067\u30d3\u30eb\u30c9\u3059\u308b\u305f\u3081\u306b\u306f\u3001Homebrew \u306a\u3069\u3067\u30d3\u30eb\u30c9\u306b\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304b\u3089\u3001\u3044\u304f\u3064\u304b\u5f15\u6570\u3092\u8ffd\u52a0\u3057\u3066 configure \u3092\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002macOS \u306e clang++ \u3067\u306f GCC Rust \u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u306b\u5931\u6557\u3059\u308b\u306e\u3067\u3001g++-12 \u304c\u5fc5\u8981\u3067\u3059\u3002\u4e0b\u8a18\u306e\u4f8b\u3067\u306f\u3001Homebrew \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5148\u3092 \/usr\/local \u3068\u3057\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u305d\u308c\u305e\u308c\u306e\u74b0\u5883\u306b\u5408\u308f\u305b\u3066\u4fee\u6b63\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>$ brew update\r\n$ brew install gcc-12 gmp mpfr libmpc autogen dejagnu\r\n$ CC=gcc-12 CXX=g++-12 ..\/gccrs\/configure \\\r\n--build=x86_64-apple-darwin20 \\\r\n--prefix=$HOME\/Work\/gccrs-install \\\r\n--disable-bootstrap \\\r\n--enable-languages=rust \\\r\n--enable-multilib \\\r\n--with-native-system-header-dir=\/usr\/include \\\r\n--with-sysroot=\/Library\/Developer\/CommandLineTools\/SDKs\/MacOSX.sdk \\\r\n--with-gmp=\/usr\/local \\\r\n--with-mpfr=\/usr\/local \\\r\n--with-mpc=\/usr\/local\r\n...\r\n...\r\n$ make -j6\r\n...\r\n...\r\n$ make install\r\n...\r\n...\r\n\r\n<\/code><\/pre>\n<p>\u3061\u306a\u307f\u306b\u3001AArch64 (Arm64) on Darwin \u306e\u30d6\u30e9\u30f3\u30c1\u304c\u307e\u3060\u30de\u30fc\u30b8\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001aarch64-apple-darwin21 \u306f not supported \u3068\u8a00\u308f\u308c\u3066\u3057\u307e\u3044\u307e\u3059\u3002<\/p>\n<section>Copyright (C) 1998-2022 Free Software Foundation, Inc.<br \/>\nCopying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. \u21a9<\/p>\n<p>Creative Commons Zero v1.0 Universal \u21a9<\/p>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u306e\u8a18\u4e8b\u306f Rust Advent Calendar 2022 14\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002 \u8a18\u4e8b\u3092\u66f8\u3044\u3066\u3044\u308b\u3046\u3061\u306b\u3001 [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-45020","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>- Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:description\" content=\"\u3053\u306e\u8a18\u4e8b\u306f Rust Advent Calendar 2022 14\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002 \u8a18\u4e8b\u3092\u66f8\u3044\u3066\u3044\u308b\u3046\u3061\u306b\u3001 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-11T09:57:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T08:04:35+00:00\" \/>\n<meta name=\"author\" content=\"\u65b0, \u97f5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u65b0, \u97f5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/\",\"name\":\"- Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-11T09:57:02+00:00\",\"dateModified\":\"2024-04-30T08:04:35+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\",\"name\":\"\u65b0, \u97f5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"caption\":\"\u65b0, \u97f5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"- Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/","og_locale":"zh_CN","og_type":"article","og_description":"\u3053\u306e\u8a18\u4e8b\u306f Rust Advent Calendar 2022 14\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002 \u8a18\u4e8b\u3092\u66f8\u3044\u3066\u3044\u308b\u3046\u3061\u306b\u3001 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-11T09:57:02+00:00","article_modified_time":"2024-04-30T08:04:35+00:00","author":"\u65b0, \u97f5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u65b0, \u97f5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"4 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/","name":"- Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-11T09:57:02+00:00","dateModified":"2024-04-30T08:04:35+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/"]}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9","name":"\u65b0, \u97f5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","caption":"\u65b0, \u97f5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/45020-2\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/45020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=45020"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/45020\/revisions"}],"predecessor-version":[{"id":92895,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/45020\/revisions\/92895"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=45020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=45020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=45020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}