about summary refs log tree commit diff
path: root/docs/dev
diff options
context:
space:
mode:
authorEdwin Cheng <edwin0cheng@gmail.com>2021-02-07 12:49:02 +0800
committerEdwin Cheng <edwin0cheng@gmail.com>2021-02-07 12:51:30 +0800
commit542e35e39789d45756c4483f07c831ebbb352ebe (patch)
treef9e2f343b08a7e90a3e0306bd0b9fda487a68cca /docs/dev
parent504a54b222553a096c8eaa0cd9efca33d916c275 (diff)
downloadrust-542e35e39789d45756c4483f07c831ebbb352ebe.tar.gz
rust-542e35e39789d45756c4483f07c831ebbb352ebe.zip
More information for mbe
Diffstat (limited to 'docs/dev')
-rw-r--r--docs/dev/architecture.md9
1 files changed, 7 insertions, 2 deletions
diff --git a/docs/dev/architecture.md b/docs/dev/architecture.md
index 1c892e13ab7..c5e4acea31e 100644
--- a/docs/dev/architecture.md
+++ b/docs/dev/architecture.md
@@ -258,8 +258,13 @@ They are independent from the rest of the code.
 `mbe` crate contains tools for transforming between syntax trees and token tree.
 And it also handles the actual parsing and expansion of declarative macro (a-la "Macros By Example" or mbe).
 
-For proc macros, we pass the token trees by loading the corresponding dynamic library (which built by `cargo`).
-That's why the client (`proc_macro_api`) and server (`proc_macro_srv`) model are used to run proc-macro in separate process in background.
+For proc macros, the client-server model are used to run proc-macro.
+We pass an argument `--proc-macro` to `rust-analyzer` binary to start a separate process  (`proc_macro_srv`).
+And the client (`proc_macro_api`) provides an interface to talk to that server separately.
+
+And then token trees are passed from client, and the server will load the corresponding dynamic library (which built by `cargo`).
+And due to the fact the api for getting result from proc macro are always unstable in `rustc`,
+we maintain our own copy (and paste) of that part of code to allow us to build the whole thing in stable rust.
  
  **Architecture Invariant:**
 Bad proc macros may panic or segfault accidentally. So we run it in another process and recover it from fatal error.