%3Ch1%3ERust%20%E5%AE%8F%E7%B3%BB%E7%BB%9F%E6%B7%B1%E5%BA%A6%E5%AE%9E%E6%88%98%EF%BC%9A%E4%BB%8E%E5%A3%B0%E6%98%8E%E5%AE%8F%E5%88%B0%E8%BF%87%E7%A8%8B%E5%AE%8F%E6%9E%84%E5%BB%BA%E7%94%9F%E4%BA%A7%E7%BA%A7%20DSL%3C/h1%3E%0A%0A%3Cblockquote%3E%0A%3Cp%3E%E5%AE%8F%E6%98%AF%20Rust%20%E5%8C%BA%E5%88%AB%E4%BA%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F%E7%BA%A7%E8%AF%AD%E8%A8%80%E7%9A%84%E6%A0%B8%E5%BF%83%E6%AD%A6%E5%99%A8%E3%80%82%E6%9C%AC%E6%96%87%E4%BB%8E%E9%9B%B6%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9F%A5%E8%AF%A2%20DSL%EF%BC%8C%E5%AE%8C%E6%95%B4%E5%B1%95%E7%A4%BA%20%60macro_rules%21%60%20%E5%A3%B0%E6%98%8E%E5%AE%8F%E3%80%81%60proc_macro%60%20%E8%BF%87%E7%A8%8B%E5%AE%8F%E3%80%81%E5%B1%9E%E6%80%A7%E5%AE%8F%E5%92%8C%E7%B1%BB%E5%87%BD%E6%95%B0%E5%AE%8F%E7%9A%84%E5%B7%AE%E5%BC%82%E4%B8%8E%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF%EF%BC%8C%E5%B9%B6%E6%B7%B1%E5%85%A5%E5%88%86%E6%9E%90%E5%8D%AB%E7%94%9F%E5%AE%8F%E3%80%81%60Span%60%20%E8%BF%BD%E8%B8%AA%E3%80%81%60syn/quote%60%20%E7%94%9F%E6%80%81%E4%BB%A5%E5%8F%8A%E6%9D%A1%E4%BB%B6%E7%BC%96%E8%AF%91%E7%AD%89%E5%B7%A5%E7%A8%8B%E5%8C%96%E6%8A%80%E5%B7%A7%E3%80%82%3C/p%3E%0A%3C/blockquote%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%B8%80%E3%80%81%E4%B8%BA%E4%BB%80%E4%B9%88%20Rust%20%E9%9C%80%E8%A6%81%E5%AE%8F%3C/h2%3E%0A%0A%3Cp%3ERust%20%E7%9A%84%E8%A1%A8%E8%BE%BE%E5%8A%9B%E5%BE%88%E5%A4%A7%E7%A8%8B%E5%BA%A6%E4%B8%8A%E4%BE%9D%E8%B5%96%E5%AE%8F%E8%80%8C%E9%9D%9E%20runtime%20%E5%8F%8D%E5%B0%84%E3%80%82%E4%B8%8E%20C%2B%2B%20%E6%A8%A1%E6%9D%BF%E5%85%83%E7%BC%96%E7%A8%8B%E4%B8%8D%E5%90%8C%EF%BC%8CRust%20%E5%AE%8F%E6%93%8D%E4%BD%9C%E7%9A%84%E6%98%AF%3Cstrong%3E%E8%AF%AD%E6%B3%95%E6%A0%91%E6%9C%AC%E8%BA%AB%3C/strong%3E%EF%BC%8C%E8%83%BD%E5%9C%A8%E7%BC%96%E8%AF%91%E6%9C%9F%E7%94%9F%E6%88%90%E9%9B%B6%E6%88%90%E6%9C%AC%E6%8A%BD%E8%B1%A1%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E6%A0%B8%E5%BF%83%E4%BC%98%E5%8A%BF%EF%BC%9A%3C/p%3E%0A%3Col%3E%0A%3Cli%3E%3Cstrong%3E%E6%B6%88%E9%99%A4%E6%A0%B7%E6%9D%BF%E4%BB%A3%E7%A0%81%3C/strong%3E%20%E2%80%94%20%3Ccode%3E%23%5Bderive%28Serialize%29%5D%3C/code%3E%20vs%20%E6%89%8B%E5%86%99%20impl%3C/li%3E%0A%3Cli%3E%3Cstrong%3E%E9%A2%86%E5%9F%9F%E7%89%B9%E5%AE%9A%E8%AF%AD%E8%A8%80%EF%BC%88DSL%EF%BC%89%3C/strong%3E%20%E2%80%94%20%E5%9C%A8%20Rust%20%E5%AE%BF%E4%B8%BB%E8%AF%AD%E6%B3%95%E5%86%85%E5%88%9B%E5%BB%BA%E6%96%B0%E8%AF%AD%E6%B3%95%3C/li%3E%0A%3Cli%3E%3Cstrong%3E%E7%BC%96%E8%AF%91%E6%9C%9F%E8%AE%A1%E7%AE%97%3C/strong%3E%20%E2%80%94%20const%20eval%20%E5%B0%9A%E6%9C%AA%E8%A6%86%E7%9B%96%E7%9A%84%E5%9C%BA%E6%99%AF%3C/li%3E%0A%3Cli%3E%3Cstrong%3E%E5%85%83%E7%BC%96%E7%A8%8B%3C/strong%3E%20%E2%80%94%20%E6%A0%B9%E6%8D%AE%E7%B1%BB%E5%9E%8B%E7%AD%BE%E5%90%8D%E5%8A%A8%E6%80%81%E7%94%9F%E6%88%90%20trait%20%E5%AE%9E%E7%8E%B0%3C/li%3E%0A%3C/ul%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%BA%8C%E3%80%81%E5%A3%B0%E6%98%8E%E5%AE%8F%EF%BC%9A%60macro_rules%21%60%3C/h2%3E%0A%0A%3Cp%3E%E5%A3%B0%E6%98%8E%E5%AE%8F%E6%98%AF%E5%A4%A7%E5%A4%9A%E6%95%B0%E5%9C%BA%E6%99%AF%E7%9A%84%E9%A6%96%E9%80%89%E3%80%82%E5%AE%83%E9%80%9A%E8%BF%87%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%B1%95%E5%BC%80%E4%BB%A3%E7%A0%81%EF%BC%8C%E9%9B%B6%E9%A2%9D%E5%A4%96%E4%BE%9D%E8%B5%96%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E2.1%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%9A%60macro_rules%21%60%20%E7%9A%84%E6%A0%B8%E5%BF%83%E6%9C%BA%E5%88%B6%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A//%20%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E6%94%AF%E6%8C%81%E5%A4%9A%E5%8F%82%E6%95%B0%E7%9A%84%20log%20%E5%AE%8F%0Amacro_rules%21%20log%20%7B%0A%20%20%20%20//%20%E5%8C%B9%E9%85%8D%E5%B8%A6%E7%BA%A7%E5%88%AB%E7%9A%84%E6%97%A5%E5%BF%97%E8%B0%83%E7%94%A8%EF%BC%9Alog%21%28Level%3A%3AInfo%2C%20%22msg%22%2C%20args...%29%0A%20%20%20%20%28%24level%3Aexpr%2C%20%24%28%24arg%3Att%29%2A%29%20%3D%26gt%3B%20%7B%7B%0A%20%20%20%20%20%20%20%20//%20%E5%B1%95%E5%BC%80%E4%B8%BA%E5%B8%A6%E6%97%B6%E9%97%B4%E6%88%B3%E5%92%8C%E7%BA%A7%E5%88%AB%E7%9A%84%E6%97%A5%E5%BF%97%E5%86%99%E5%85%A5%0A%20%20%20%20%20%20%20%20let%20timestamp%20%3D%20chrono%3A%3AUtc%3A%3Anow%28%29.format%28%22%25Y-%25m-%25d%20%25H%3A%25M%3A%25S%22%29%3B%0A%20%20%20%20%20%20%20%20println%21%28%22%5B%7B%7D%5D%20%5B%7Btimestamp%7D%5D%20%7B%7D%22%2C%20%24level%2C%20format%21%28%24%28%24arg%29%2A%29%29%3B%0A%20%20%20%20%7D%7D%3B%0A%7D%0A%0A//%20%E8%B0%83%E7%94%A8%0Alog%21%28Level%3A%3AError%2C%20%22%E8%BF%9E%E6%8E%A5%20%7B%7D%20%E5%A4%B1%E8%B4%A5%3A%20%7B%7D%22%2C%20addr%2C%20err%29%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E5%85%B3%E9%94%AE%E8%AF%AD%E6%B3%95%EF%BC%9A%3C/p%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E7%89%87%E6%AE%B5%E5%88%86%E7%B1%BB%E7%AC%A6%3C/th%3E%0A%3Cth%3E%E5%90%AB%E4%B9%89%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3Eexpr%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E8%A1%A8%E8%BE%BE%E5%BC%8F%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3Ety%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E7%B1%BB%E5%9E%8B%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3Estmt%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E8%AF%AD%E5%8F%A5%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3Epath%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E8%B7%AF%E5%BE%84%EF%BC%88%E5%A6%82%20%3Ccode%3Ea%3A%3Ab%3A%3Ac%3C/code%3E%EF%BC%89%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3Ett%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E5%8D%95%E4%B8%AA%20token%20tree%EF%BC%88%E4%B8%87%E8%83%BD%E5%8C%B9%E9%85%8D%EF%BC%89%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3E%24%28...%29%2C%2A%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E9%87%8D%E5%A4%8D%E9%9B%B6%E6%AC%A1%E6%88%96%E5%A4%9A%E6%AC%A1%3C/td%3E%0A%3C/tr%3E%0A%3C/table%3E%0A%0A%3Ch3%3E2.2%20DSL%20%E6%9E%84%E5%BB%BA%E7%A4%BA%E4%BE%8B%EF%BC%9ASQL%20WHERE%20%E5%AD%90%E5%8F%A5%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Amacro_rules%21%20query_where%20%7B%0A%20%20%20%20//%20%E7%BB%88%E7%BB%93%E6%A8%A1%E5%BC%8F%EF%BC%9A%E6%97%A0%E6%9B%B4%E5%A4%9A%E6%9D%A1%E4%BB%B6%0A%20%20%20%20%28%24base%3Aexpr%29%20%3D%26gt%3B%20%7B%20%24base.to_string%28%29%20%7D%3B%0A%0A%20%20%20%20//%20%E8%A7%A3%E6%9E%84%EF%BC%9Acolumn%20%3D%20value%0A%20%20%20%20%28%24base%3Aexpr%2C%20%24col%3Aident%20%3D%20%24val%3Aexpr%20%24%28%2C%20%24%28%24rest%3Att%29%2A%29%3F%29%20%3D%26gt%3B%20%7B%7B%0A%20%20%20%20%20%20%20%20let%20cond%20%3D%20format%21%28%22%7B%7D%20%3D%20%27%7B%7D%27%22%2C%20stringify%21%28%24col%29%2C%20%24val%29%3B%0A%20%20%20%20%20%20%20%20let%20sql%20%3D%20format%21%28%22%7B%7D%20AND%20%7B%7D%22%2C%20%24base%2C%20cond%29%3B%0A%20%20%20%20%20%20%20%20query_where%21%28sql%20%24%28%2C%20%24%28%24rest%29%2A%29%3F%0A%20%20%20%20%7D%7D%3B%0A%0A%20%20%20%20//%20%E8%A7%A3%E6%9E%84%EF%BC%9Acolumn%20IN%20%28v1%2C%20v2%2C%20...%29%0A%20%20%20%20%28%24base%3Aexpr%2C%20%24col%3Aident%20IN%20%28%24%28%24val%3Aexpr%29%2C%2B%29%20%24%28%2C%20%24%28%24rest%3Att%29%2A%29%3F%29%20%3D%26gt%3B%20%7B%7B%0A%20%20%20%20%20%20%20%20let%20list%20%3D%20vec%21%5B%24%28%24val.to_string%28%29%29%2C%2B%5D.join%28%22%27%2C%20%27%22%29%3B%0A%20%20%20%20%20%20%20%20let%20cond%20%3D%20format%21%28%22%7B%7D%20IN%20%28%27%7B%7D%27%29%22%2C%20stringify%21%28%24col%29%2C%20%24list%29%3B%0A%20%20%20%20%20%20%20%20let%20sql%20%3D%20format%21%28%22%7B%7D%20AND%20%7B%7D%22%2C%20%24base%2C%20cond%29%3B%0A%20%20%20%20%20%20%20%20query_where%21%28sql%20%24%28%2C%20%24%28%24rest%29%2A%29%3F%0A%20%20%20%20%7D%7D%3B%0A%7D%0A%0A//%20%E8%B0%83%E7%94%A8%0Alet%20sql%20%3D%20query_where%21%28%0A%20%20%20%20%22SELECT%20%2A%20FROM%20users%20WHERE%201%3D1%22%2C%0A%20%20%20%20status%20%3D%20%22active%22%2C%0A%20%20%20%20role%20IN%20%28%22admin%22%2C%20%22moderator%22%29%2C%0A%20%20%20%20created_at%20%26gt%3B%20%222024-01-01%22%0A%29%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E2.3%20%E5%8D%AB%E7%94%9F%E5%AE%8F%EF%BC%88Hygienic%20Macro%EF%BC%89%E9%99%B7%E9%98%B1%3C/h3%3E%0A%0A%3Cp%3ERust%20%E5%A3%B0%E6%98%8E%E5%AE%8F%E9%BB%98%E8%AE%A4%E6%98%AF%E5%8D%8A%E5%8D%AB%E7%94%9F%E7%9A%84%EF%BC%8C%E6%84%8F%E5%91%B3%E7%9D%80%E5%AE%8F%E5%86%85%E5%AE%9A%E4%B9%89%E7%9A%84%E5%8F%98%E9%87%8F%E4%B8%8D%E4%BC%9A%E6%B3%84%E6%BC%8F%E5%88%B0%E8%B0%83%E7%94%A8%E4%BE%A7%E3%80%82%E4%BD%86%E6%9C%89%E4%B8%80%E4%B8%AA%E5%85%B3%E9%94%AE%E4%BE%8B%E5%A4%96%EF%BC%9A%3Ccode%3E%24crate%3C/code%3E%20%E8%B7%A8%20crate%20%E7%9A%84%E8%B7%AF%E5%BE%84%E7%BB%91%E5%AE%9A%E9%9C%80%E8%A6%81%E6%98%BE%E5%BC%8F%E6%A0%87%E8%AE%B0%E3%80%82%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A//%20%E6%AD%A3%E7%A1%AE%E5%81%9A%E6%B3%95%EF%BC%9A%E4%BD%BF%E7%94%A8%20%24crate%20%E4%BF%9D%E8%AF%81%E5%AE%8F%E5%9C%A8%E5%A4%96%E9%83%A8%20crate%20%E4%B8%AD%E5%8F%AF%E7%94%A8%0A%23%5Bmacro_export%5D%0Amacro_rules%21%20my_vec%20%7B%0A%20%20%20%20%28%24%28%24x%3Aexpr%29%2C%2A%29%20%3D%26gt%3B%20%7B%7B%0A%20%20%20%20%20%20%20%20let%20mut%20v%20%3D%20%24crate%3A%3AVec%3A%3Anew%28%29%3B%0A%20%20%20%20%20%20%20%20%24%28v.push%28%24x%29%3B%29%2A%0A%20%20%20%20%20%20%20%20v%0A%20%20%20%20%7D%7D%3B%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E5%A6%82%E6%9E%9C%E6%98%AF%20%3Cstrong%3Eproc_macro%3C/strong%3E%EF%BC%8C%E5%8D%AB%E7%94%9F%E6%80%A7%E6%9B%B4%E4%B8%A5%E6%A0%BC%EF%BC%8C%E4%B8%94%E9%9C%80%E8%A6%81%E6%89%8B%E5%8A%A8%E9%80%9A%E8%BF%87%20%3Ccode%3Equote%21%3C/code%3E%20%E6%B3%A8%E5%85%A5%E6%A0%87%E8%AF%86%E7%AC%A6%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%B8%89%E3%80%81%E8%BF%87%E7%A8%8B%E5%AE%8F%EF%BC%9A%E8%BF%9B%E5%85%A5%20TokenStream%20%E7%9A%84%E4%B8%96%E7%95%8C%3C/h2%3E%0A%0A%3Cp%3E%E5%BD%93%E5%A3%B0%E6%98%8E%E5%AE%8F%E7%9A%84%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E6%97%A0%E6%B3%95%E8%A1%A8%E8%BE%BE%E6%97%B6%EF%BC%8C%E8%BF%87%E7%A8%8B%E5%AE%8F%E6%8F%90%E4%BE%9B%E4%BA%86%E5%9B%BE%E7%81%B5%E5%AE%8C%E5%A4%87%E7%9A%84%E7%BC%96%E8%AF%91%E6%9C%9F%E8%AE%A1%E7%AE%97%E8%83%BD%E5%8A%9B%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E3.1%20%E4%B8%89%E7%A7%8D%E8%BF%87%E7%A8%8B%E5%AE%8F%3C/h3%3E%0A%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E7%B1%BB%E5%9E%8B%3C/th%3E%0A%3Cth%3E%E8%AF%AD%E6%B3%95%E4%BD%8D%E7%BD%AE%3C/th%3E%0A%3Cth%3E%E7%94%A8%E9%80%94%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3E%23%5Bderive%28Foo%29%5D%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E7%BB%93%E6%9E%84%E4%BD%93/%E6%9E%9A%E4%B8%BE%E4%B8%8A%E6%96%B9%3C/td%3E%0A%3Ctd%3E%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%20trait%20%E5%AE%9E%E7%8E%B0%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3E%23%5Bmy_attribute%5D%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E4%BB%BB%E6%84%8F%20item%3C/td%3E%0A%3Ctd%3E%E4%BF%AE%E6%94%B9%E6%88%96%E6%A0%87%E6%B3%A8%E7%9B%AE%E6%A0%87%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%3Ccode%3Emy_macro%21%28...%29%3C/code%3E%3C/td%3E%0A%3Ctd%3E%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%BD%8D%E7%BD%AE%3C/td%3E%0A%3Ctd%3E%E7%B1%BB%E4%BC%BC%20%3Ccode%3Emacro_rules%21%3C/code%3E%20%E4%BD%86%E6%9B%B4%E5%BC%BA%3C/td%3E%0A%3C/tr%3E%0A%3C/table%3E%0A%0A%3Ch3%3E3.2%20%E5%B1%9E%E6%80%A7%E5%AE%8F%E5%AE%9E%E6%88%98%EF%BC%9A%E4%B8%BA%E5%87%BD%E6%95%B0%E6%B3%A8%E5%85%A5%E6%80%A7%E8%83%BD%E6%8E%A2%E9%92%88%3C/h3%3E%0A%0A%3Cp%3E%E5%81%87%E8%AE%BE%E6%88%91%E4%BB%AC%E8%A6%81%E4%B8%BA%E4%BB%BB%E6%84%8F%E5%87%BD%E6%95%B0%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E7%BB%9F%E8%AE%A1%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E6%89%8B%E5%8A%A8%20decorator%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%3Cstrong%3ECargo.toml%20%E5%AE%9A%E4%B9%89%E8%BF%87%E7%A8%8B%E5%AE%8F%20crate%EF%BC%9A%3C/strong%3E%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-toml%22%3E%0A%5Blib%5D%0Aproc-macro%20%3D%20true%0A%0A%5Bdependencies%5D%0Asyn%20%3D%20%7B%20version%20%3D%20%222%22%2C%20features%20%3D%20%5B%22full%22%5D%20%7D%0Aquote%20%3D%20%221%22%0Aproc-macro2%20%3D%20%221%22%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%3Cstrong%3E%E5%AE%8F%E5%AE%9E%E7%8E%B0%EF%BC%9A%3C/strong%3E%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Ause%20proc_macro%3A%3ATokenStream%3B%0Ause%20quote%3A%3Aquote%3B%0Ause%20syn%3A%3A%7Bparse_macro_input%2C%20ItemFn%7D%3B%0A%0A%23%5Bproc_macro_attribute%5D%0Apub%20fn%20timed%28_attr%3A%20TokenStream%2C%20item%3A%20TokenStream%29%20-%26gt%3B%20TokenStream%20%7B%0A%20%20%20%20let%20input_fn%20%3D%20parse_macro_input%21%28item%20as%20ItemFn%29%3B%0A%20%20%20%20let%20fn_name%20%3D%20%26input_fn.sig.ident%3B%0A%20%20%20%20let%20fn_vis%20%3D%20%26input_fn.vis%3B%0A%20%20%20%20let%20fn_sig%20%3D%20%26input_fn.sig%3B%0A%20%20%20%20let%20fn_block%20%3D%20%26input_fn.block%3B%0A%20%20%20%20let%20fn_attrs%20%3D%20%26input_fn.attrs%3B%0A%0A%20%20%20%20let%20expanded%20%3D%20quote%21%20%7B%0A%20%20%20%20%20%20%20%20%23%28%23fn_attrs%29%2A%0A%20%20%20%20%20%20%20%20%23fn_vis%20%23fn_sig%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20__start%20%3D%20std%3A%3Atime%3A%3AInstant%3A%3Anow%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20__result%20%3D%20%28%7C%7C%20%23fn_block%29%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20__elapsed%20%3D%20__start.elapsed%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20eprintln%21%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5Btimed%5D%20%7B%7D%20took%20%7B%3A%3F%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stringify%21%28%23fn_name%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20__elapsed%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20__result%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20TokenStream%3A%3Afrom%28expanded%29%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%3Cstrong%3E%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F%EF%BC%9A%3C/strong%3E%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A%23%5Btimed%5D%0Afn%20process_batch%28items%3A%20%26%5BRecord%5D%29%20-%26gt%3B%20Result%26lt%3BVec%26lt%3BOutput%26gt%3B%26gt%3B%20%7B%0A%20%20%20%20items.par_iter%28%29.map%28transform%29.collect%28%29%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%E7%BC%96%E8%AF%91%E5%99%A8%E5%B1%95%E5%BC%80%E5%90%8E%EF%BC%8C%E5%87%BD%E6%95%B0%E8%A2%AB%E5%8C%85%E8%A3%85%E4%B8%BA%E8%87%AA%E5%8A%A8%E8%AE%A1%E6%97%B6%E7%89%88%E6%9C%AC%E3%80%82%E8%B0%83%E7%94%A8%E8%80%85%E7%9C%8B%E5%88%B0%E7%9A%84%E6%98%AF%E5%8E%9F%E5%A7%8B%E7%AD%BE%E5%90%8D%EF%BC%8C%E8%BF%99%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84%E9%9B%B6%E4%BE%B5%E5%85%A5%E6%8A%BD%E8%B1%A1%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E3.3%20%E7%B1%BB%E5%87%BD%E6%95%B0%E5%AE%8F%E5%AE%9E%E6%88%98%EF%BC%9A%E7%BC%96%E8%AF%91%E6%9C%9F%E6%9E%84%E5%BB%BA%E6%9F%A5%E8%AF%A2%20AST%3C/h3%3E%0A%0A%3Cp%3E%E7%B1%BB%E5%87%BD%E6%95%B0%E5%AE%8F%20%3Ccode%3Emy_macro%21%28...%29%3C/code%3E%20%E5%9C%A8%3Cstrong%3E%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%BD%8D%E7%BD%AE%3C/strong%3E%E8%A2%AB%E8%B0%83%E7%94%A8%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%A7%A3%E6%9E%90%E4%BB%BB%E6%84%8F%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AF%AD%E6%B3%95%E3%80%82%E6%88%91%E4%BB%AC%E6%9D%A5%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%BC%96%E8%AF%91%E6%9C%9F%20SQL%20%E6%A0%A1%E9%AA%8C%E5%99%A8%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Ause%20proc_macro%3A%3ATokenStream%3B%0Ause%20quote%3A%3Aquote%3B%0A%0A%23%5Bproc_macro%5D%0Apub%20fn%20validate_schema%28input%3A%20TokenStream%29%20-%26gt%3B%20TokenStream%20%7B%0A%20%20%20%20let%20schema_text%20%3D%20input.to_string%28%29%3B%0A%20%20%20%20%0A%20%20%20%20//%20%E7%BC%96%E8%AF%91%E6%9C%9F%E8%A7%A3%E6%9E%90%E7%AE%80%E5%8D%95%20schema%20%E8%AF%AD%E6%B3%95%0A%20%20%20%20//%20%E5%AE%9E%E9%99%85%E9%A1%B9%E7%9B%AE%E4%B8%AD%E5%BA%94%E4%BD%BF%E7%94%A8%E5%AE%8C%E6%95%B4%E7%9A%84%20SQL%20parser%20%E5%A6%82%20sqlparser%0A%20%20%20%20let%20table_defs%20%3D%20parse_table_schema%28%26schema_text%29%3B%0A%20%20%20%20%0A%20%20%20%20//%20%E8%AF%AD%E4%B9%89%E6%A3%80%E6%9F%A5%EF%BC%9A%E7%A6%81%E6%AD%A2%E6%97%A0%E4%B8%BB%E9%94%AE%E8%A1%A8%0A%20%20%20%20for%20table%20in%20%26table_defs%20%7B%0A%20%20%20%20%20%20%20%20if%20%21table.columns.iter%28%29.any%28%7Cc%7C%20c.is_pk%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20syn%3A%3AError%3A%3Anew%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20proc_macro2%3A%3ASpan%3A%3Acall_site%28%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20format%21%28%22Table%20%27%7B%7D%27%20must%20have%20a%20primary%20key%22%2C%20table.name%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%29.to_compile_error%28%29.into%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20//%20%E8%BF%94%E5%9B%9E%E7%94%9F%E6%88%90%E7%9A%84%20schema%20%E9%AA%8C%E8%AF%81%E5%87%BD%E6%95%B0%0A%20%20%20%20let%20table_count%20%3D%20table_defs.len%28%29%3B%0A%20%20%20%20quote%21%20%7B%0A%20%20%20%20%20%20%20%20fn%20__ensure_schema_valid%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20_%3A%20%28%29%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20assert%21%28%23table_count%20%26gt%3B%200%2C%20%22schema%20must%20define%20at%20least%20one%20table%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D.into%28%29%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E3.4%20derive%20%E5%AE%8F%E7%9A%84%E5%AE%9E%E6%88%98%E6%8A%80%E5%B7%A7%3C/h3%3E%0A%0A%3Cp%3Ederive%20%E5%AE%8F%E6%98%AF%E6%9C%80%E5%B8%B8%E7%94%A8%E7%9A%84%E8%BF%87%E7%A8%8B%E5%AE%8F%E3%80%82%E4%BB%A5%E4%B8%8B%E5%B1%95%E7%A4%BA%E4%B8%80%E4%B8%AA%E8%87%AA%E5%AE%9A%E4%B9%89%20%3Ccode%3E%23%5Bderive%28Builder%29%5D%3C/code%3E%EF%BC%8C%E6%AF%94%E6%89%8B%E5%8A%A8%E5%AE%9E%E7%8E%B0%E6%9B%B4%E5%A4%8D%E6%9D%82%E4%B8%94%E6%9B%B4%E5%BC%BA%E5%A4%A7%E7%9A%84%E7%89%88%E6%9C%AC%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Ause%20proc_macro%3A%3ATokenStream%3B%0Ause%20quote%3A%3Aquote%3B%0Ause%20syn%3A%3A%7Bparse_macro_input%2C%20DeriveInput%2C%20Data%2C%20Fields%7D%3B%0A%0A%23%5Bproc_macro_derive%28Builder%29%29%5D%0Apub%20fn%20derive_builder%28input%3A%20TokenStream%29%20-%26gt%3B%20TokenStream%20%7B%0A%20%20%20%20let%20input%20%3D%20parse_macro_input%21%28input%20as%20DeriveInput%29%3B%0A%20%20%20%20let%20name%20%3D%20%26input.ident%3B%0A%20%20%20%20let%20builder_name%20%3D%20format%21%28%22%7B%7DBuilder%22%2C%20name%29%3B%0A%20%20%20%20let%20builder_ident%20%3D%20syn%3A%3AIdent%3A%3Anew%28%26builder_name%2C%20name.span%28%29%29%3B%0A%0A%20%20%20%20let%20fields%20%3D%20match%20%26input.data%20%7B%0A%20%20%20%20%20%20%20%20Data%3A%3AStruct%28data%29%20%3D%26gt%3B%20match%20%26data.fields%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Fields%3A%3ANamed%28fields%29%20%3D%26gt%3B%20%26fields.named%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_%20%3D%26gt%3B%20panic%21%28%22Builder%20only%20supports%20named%20fields%22%29%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20_%20%3D%26gt%3B%20panic%21%28%22Builder%20only%20supports%20structs%22%29%2C%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20//%20%E4%B8%BA%E6%AF%8F%E4%B8%AA%E5%AD%97%E6%AE%B5%E7%94%9F%E6%88%90%20setter%20%E6%96%B9%E6%B3%95%E5%92%8C%20Option%20%E5%8C%85%E8%A3%85%0A%20%20%20%20let%20builder_fields%20%3D%20fields.iter%28%29.map%28%7Cf%7C%20%7B%0A%20%20%20%20%20%20%20%20let%20name%20%3D%20%26f.ident%3B%0A%20%20%20%20%20%20%20%20let%20ty%20%3D%20%26f.ty%3B%0A%20%20%20%20%20%20%20%20quote%21%20%7B%20%23name%3A%20Option%26lt%3B%23ty%26gt%3B%20%7D%0A%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20let%20setters%20%3D%20fields.iter%28%29.map%28%7Cf%7C%20%7B%0A%20%20%20%20%20%20%20%20let%20name%20%3D%20%26f.ident%3B%0A%20%20%20%20%20%20%20%20let%20ty%20%3D%20%26f.ty%3B%0A%20%20%20%20%20%20%20%20quote%21%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pub%20fn%20%23name%28mut%20self%2C%20value%3A%20%23ty%29%20-%26gt%3B%20Self%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self.%23name%20%3D%20Some%28value%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20let%20build_fields%20%3D%20fields.iter%28%29.map%28%7Cf%7C%20%7B%0A%20%20%20%20%20%20%20%20let%20name%20%3D%20%26f.ident%3B%0A%20%20%20%20%20%20%20%20quote%21%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%23name%3A%20self.%23name%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.ok_or%28format%21%28%22field%20%27%7B%7D%27%20was%20not%20set%22%2C%20stringify%21%28%23name%29%29%29%3F%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20let%20expanded%20%3D%20quote%21%20%7B%0A%20%20%20%20%20%20%20%20pub%20struct%20%23builder_ident%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%28%23builder_fields%2C%29%2A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20impl%20%23name%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pub%20fn%20builder%28%29%20-%26gt%3B%20%23builder_ident%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23builder_ident%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%28%23fields%3A%20None%2C%29%2A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20impl%20%23builder_ident%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%28%23setters%29%2A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20pub%20fn%20build%28self%29%20-%26gt%3B%20Result%26lt%3B%23name%2C%20String%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Ok%28%23name%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%28%23build_fields%2C%29%2A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20TokenStream%3A%3Afrom%28expanded%29%0A%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3E%3Cstrong%3E%E4%BD%BF%E7%94%A8%E6%96%B9%E4%BB%A3%E7%A0%81%E6%9E%81%E5%85%B6%E5%B9%B2%E5%87%80%EF%BC%9A%3C/strong%3E%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A%23%5Bderive%28Builder%29%5D%0Astruct%20DatabaseConfig%20%7B%0A%20%20%20%20host%3A%20String%2C%0A%20%20%20%20port%3A%20u16%2C%0A%20%20%20%20max_connections%3A%20usize%2C%0A%7D%0A%0Alet%20config%20%3D%20DatabaseConfig%3A%3Abuilder%28%29%0A%20%20%20%20.host%28%22localhost%22.to_string%28%29%29%0A%20%20%20%20.port%285432%29%0A%20%20%20%20.max_connections%28100%29%0A%20%20%20%20.build%28%29%3F%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E5%9B%9B%E3%80%81%E5%B7%A5%E7%A8%8B%E5%8C%96%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%3C/h2%3E%0A%0A%3Ch3%3E4.1%20Span%20%E8%BF%BD%E8%B8%AA%E4%B8%8E%E7%B2%BE%E5%87%86%E6%8A%A5%E9%94%99%3C/h3%3E%0A%0A%3Cp%3E%E8%BF%87%E7%A8%8B%E5%AE%8F%E7%9A%84%E6%8A%A5%E9%94%99%E5%BF%85%E9%A1%BB%E6%8C%87%E5%90%91%3Cstrong%3E%E6%BA%90%E7%A0%81%E4%BD%8D%E7%BD%AE%3C/strong%3E%E8%80%8C%E9%9D%9E%E5%AE%8F%E5%AE%9A%E4%B9%89%E4%BD%8D%E7%BD%AE%E3%80%82%E4%BD%BF%E7%94%A8%20%3Ccode%3Eproc_macro2%3A%3ASpan%3C/code%3E%20%E6%B3%A8%E5%85%A5%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Alet%20ty_span%20%3D%20field.ty.span%28%29%3B%0Areturn%20syn%3A%3AError%3A%3Anew%28ty_span%2C%20%22unsupported%20field%20type%22%29%0A%20%20%20%20.to_compile_error%28%29%0A%20%20%20%20.into%28%29%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Cp%3EIDE%20%E4%B8%AD%E5%8D%B3%E5%8F%AF%E7%9C%8B%E5%88%B0%E7%BA%A2%E8%89%B2%E6%B3%A2%E6%B5%AA%E7%BA%BF%E7%9B%B4%E6%8E%A5%E6%A0%87%E6%B3%A8%E5%87%BA%E9%94%99%E7%9A%84%E5%AD%97%E6%AE%B5%E7%B1%BB%E5%9E%8B%E3%80%82%3C/p%3E%0A%0A%3Ch3%3E4.2%20%E6%9D%A1%E4%BB%B6%E7%BC%96%E8%AF%91%E4%B8%8E%20feature%20gate%3C/h3%3E%0A%0A%3Cp%3E%E5%AE%8F%E5%B1%95%E5%BC%80%E6%97%B6%E5%8F%AF%E4%BB%A5%E8%AF%BB%E5%8F%96%20Cargo%20feature%EF%BC%9A%3C/p%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A//%20build.rs%0Afn%20main%28%29%20%7B%0A%20%20%20%20println%21%28%22cargo%3Arustc-cfg%3Dfeature%3D%5C%22%7B%7D%5C%22%22%2C%20%0A%20%20%20%20%20%20%20%20std%3A%3Aenv%3A%3Avar%28%22CARGO_CFG_FEATURE%22%29.unwrap_or_default%28%29%29%3B%0A%7D%0A%0A//%20%E5%AE%8F%E5%86%85%E9%83%A8%0A%23%5Bcfg%28feature%20%3D%20%22async%22%29%5D%0Aquote%21%20%7B%20async%20fn%20%23name%28%29%20%7B%20...%20%7D%20%7D%0A%0A%23%5Bcfg%28not%28feature%20%3D%20%22async%22%29%29%5D%0Aquote%21%20%7B%20fn%20%23name%28%29%20%7B%20...%20%7D%20%7D%0A%3C/code%3E%3C/pre%3E%0A%0A%3Ch3%3E4.3%20%E9%80%92%E5%BD%92%E5%B1%95%E5%BC%80%E7%9A%84%E8%BF%87%E7%A8%8B%E5%AE%8F%E6%80%A7%E8%83%BD%3C/h3%3E%0A%0A%3Cp%3E%E6%B7%B1%E5%BA%A6%E5%B5%8C%E5%A5%97%E7%9A%84%E5%9C%BA%E6%99%AF%E4%B8%8B%E8%BF%87%E7%A8%8B%E5%AE%8F%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E6%8C%87%E6%95%B0%E7%BA%A7%20token%20%E8%86%A8%E8%83%80%E3%80%82%E5%BA%94%E5%AF%B9%E7%AD%96%E7%95%A5%EF%BC%9A%3C/p%3E%0A%3Cul%3E%0A%3Cli%3E%E4%BD%BF%E7%94%A8%20%3Ccode%3Emacro_rules%21%3C/code%3E%20%E5%A4%84%E7%90%86%2090%25%20%E7%9A%84%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%3C/li%3E%0A%3Cli%3E%E5%B0%86%20heavy%20%E9%80%BB%E8%BE%91%E7%A7%BB%E8%87%B3%20build.rs%EF%BC%88%E4%B8%80%E6%AC%A1%E6%80%A7%E8%AE%A1%E7%AE%97%EF%BC%89%3C/li%3E%0A%3Cli%3E%E4%BD%BF%E7%94%A8%E5%A2%9E%E9%87%8F%E7%BC%96%E8%AF%91%E7%BC%93%E5%AD%98%3C/li%3E%0A%3C/ul%3E%0A%0A%3Ch3%3E4.4%20%E8%B0%83%E8%AF%95%E6%8A%80%E5%B7%A7%3C/h3%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-bash%22%3E%0A%23%20%E5%B1%95%E5%BC%80%E5%AE%8F%E6%9F%A5%E7%9C%8B%E7%94%9F%E6%88%90%E4%BB%A3%E7%A0%81%0Acargo%20expand%0A%23%20%E6%88%96%0Acargo%20rustc%20--%20-Zunpretty%3Dexpanded%0A%0A%23%20%E8%BF%87%E7%A8%8B%E5%AE%8F%20crate%20%E5%86%85%E9%83%A8%20eprintln%20%E8%B0%83%E8%AF%95%EF%BC%88%E4%BB%85%E5%9C%A8%20cargo%20build%20%E6%97%B6%E8%BE%93%E5%87%BA%EF%BC%89%0Aeprintln%21%28%22Expanded%3A%20%7B%7D%22%2C%20ts%29%3B%0A%3C/code%3E%3C/pre%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E4%BA%94%E3%80%81%E5%AE%8F%20vs%20Generics%EF%BC%9A%E4%BD%95%E6%97%B6%E9%80%89%E6%8B%A9%E4%BB%80%E4%B9%88%3C/h2%3E%0A%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E5%9C%BA%E6%99%AF%3C/th%3E%0A%3Cth%3E%E6%8E%A8%E8%8D%90%E6%96%B9%E6%A1%88%3C/th%3E%0A%3Cth%3E%E5%8E%9F%E5%9B%A0%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctr%3E%0A%3Ctd%3E%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%20trait%20impl%3C/td%3E%0A%3Ctd%3E%E5%AE%8F%3C/td%3E%0A%3Ctd%3E%E6%9B%B4%E7%AE%80%E6%B4%81%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%E4%BE%9D%E8%B5%96%E5%85%B7%E4%BD%93%E7%B1%BB%E5%9E%8B%E9%80%BB%E8%BE%91%3C/td%3E%0A%3Ctd%3EGenerics%3C/td%3E%0A%3Ctd%3E%E7%B1%BB%E5%9E%8B%E5%AE%89%E5%85%A8%E3%80%81%E6%98%93%E8%B0%83%E8%AF%95%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%E8%B7%A8%E7%B1%BB%E5%9E%8B%E6%8A%BD%E8%B1%A1%E5%AE%B9%E5%99%A8%3C/td%3E%0A%3Ctd%3EGenerics%3C/td%3E%0A%3Ctd%3E%E7%BC%96%E8%AF%91%E6%9C%9F%E5%8D%95%E6%80%81%E5%8C%96%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%E7%BC%96%E8%AF%91%E6%9C%9F%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%A4%84%E7%90%86%3C/td%3E%0A%3Ctd%3E%E8%BF%87%E7%A8%8B%E5%AE%8F%3C/td%3E%0A%3Ctd%3E%E5%8F%AA%E6%9C%89%E5%AE%8F%E8%83%BD%E6%93%8D%E4%BD%9C%20token%3C/td%3E%0A%3C/tr%3E%0A%3Ctr%3E%0A%3Ctd%3E%E5%87%8F%E5%B0%91%E9%87%8D%E5%A4%8D%E6%A0%B7%E6%9D%BF%E4%BB%A3%E7%A0%81%3C/td%3E%0A%3Ctd%3Ederive%20%E5%AE%8F%3C/td%3E%0A%3Ctd%3E%E9%9B%B6%E5%AD%A6%E4%B9%A0%E6%88%90%E6%9C%AC%3C/td%3E%0A%3C/tr%3E%0A%3C/table%3E%0A%0A%3Cp%3E%3Cstrong%3E%E9%BB%84%E9%87%91%E6%B3%95%E5%88%99%EF%BC%9A%E8%83%BD%E7%94%A8%E6%B3%9B%E5%9E%8B%E8%A7%A3%E5%86%B3%E7%9A%84%E5%9D%9A%E5%86%B3%E4%B8%8D%E7%94%A8%E5%AE%8F%EF%BC%9B%E5%BF%85%E9%A1%BB%E6%93%8D%E4%BD%9C%20AST%20%E6%97%B6%E6%89%8D%E7%94%A8%E5%AE%8F%E3%80%82%3C/strong%3E%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Ch2%3E%E5%85%AD%E3%80%81%E6%80%BB%E7%BB%93%3C/h2%3E%0A%0A%3Cp%3ERust%20%E5%AE%8F%E7%B3%BB%E7%BB%9F%E6%98%AF%E8%BF%9E%E6%8E%A5%E6%8A%BD%E8%B1%A1%E5%B1%82%E4%B8%8E%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0%E7%9A%84%E5%85%B3%E9%94%AE%E6%A1%A5%E6%A2%81%E3%80%82%E5%AE%9E%E9%99%85%E5%B7%A5%E7%A8%8B%E4%B8%AD%E7%9A%84%E6%A8%A1%E5%BC%8F%E6%98%AF%EF%BC%9A%3Ccode%3Emacro_rules%21%3C/code%3E%20%E5%A4%84%E7%90%86%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%EF%BC%8C%3Ccode%3Eproc_macro_attribute%3C/code%3E%20%E5%81%9A%20AOP%20%E6%B3%A8%E5%85%A5%EF%BC%8C%3Ccode%3Eproc_macro_derive%3C/code%3E%20%E6%B6%88%E9%99%A4%E6%A0%B7%E6%9D%BF%E4%BB%A3%E7%A0%81%E3%80%82%3C/p%3E%0A%0A%3Cp%3E%E5%85%B3%E9%94%AE%E6%98%AF%3Cstrong%3E%E4%BD%BF%E7%94%A8%E5%AE%8F%E8%80%8C%E9%9D%9E%E4%BE%9D%E8%B5%96%E5%AE%8F%3C/strong%3E%E2%80%94%E2%80%94%E8%BF%87%E5%BA%A6%E5%AE%8F%E5%8C%96%E4%BC%9A%E8%AE%A9%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF%E6%99%A6%E6%B6%A9%EF%BC%8C%E4%B8%94%20IDE%20%E6%94%AF%E6%8C%81%E9%80%80%E5%8C%96%E3%80%82%E6%9C%AC%E6%96%87%E5%88%86%E4%BA%AB%E7%9A%84%20Builder%20%E6%A8%A1%E5%BC%8F%E5%92%8C%E7%94%9F%E4%BA%A7%E7%BA%A7%20DSL%20%E6%98%AF%E7%BB%8F%E8%BF%87%E5%AE%9E%E6%88%98%E9%AA%8C%E8%AF%81%E7%9A%84%E6%A8%A1%E5%BC%8F%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%AE%89%E5%85%A8%E5%BC%95%E5%85%A5%E5%88%B0%E4%BB%BB%E6%84%8F%20Rust%20%E9%A1%B9%E7%9B%AE%E4%B8%AD%E3%80%82%3C/p%3E%0A%0A%3Chr/%3E%0A%0A%3Cp%3E%3Cstrong%3E%E5%BB%B6%E4%BC%B8%E9%98%85%E8%AF%BB%EF%BC%9A%3C/strong%3E%3C/p%3E%0A%3Cul%3E%0A%3Cli%3E%5BThe%20Rust%20Reference%3A%20Macros%5D%28https%3A//doc.rust-lang.org/reference/macros.html%29%3C/li%3E%0A%3Cli%3E%5Bdtolnay/proc-macro-workshop%5D%28https%3A//github.com/dtolnay/proc-macro-workshop%29%20%E2%80%94%20%E5%AE%98%E6%96%B9%E7%BA%A7%E8%BF%87%E7%A8%8B%E5%AE%8F%E5%AE%9E%E6%88%98%E6%95%99%E7%A8%8B%3C/li%3E%0A%3Cli%3E%5Bsyn%20crate%20%E6%96%87%E6%A1%A3%5D%28https%3A//docs.rs/syn/latest/syn/%29%20%E2%80%94%20TokenStream%20%E8%A7%A3%E6%9E%90%E9%A6%96%E9%80%89%E5%BA%93%3C/li%3E%0A%3C/ul%3E%0A

发表评论 取消回复