{"id":26709589,"url":"https://github.com/siriusdemon/rust-one-piece","last_synced_at":"2025-07-01T02:34:04.339Z","repository":{"id":127944534,"uuid":"298229868","full_name":"siriusdemon/Rust-One-Piece","owner":"siriusdemon","description":"Essential of Compilation","archived":false,"fork":false,"pushed_at":"2021-11-29T01:42:33.000Z","size":4934,"stargazers_count":33,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-13T17:41:42.396Z","etag":null,"topics":["compiler","interpreter","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/siriusdemon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-24T09:23:34.000Z","updated_at":"2024-12-25T07:49:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"f451368c-9522-427e-bc00-2e00550b3e7c","html_url":"https://github.com/siriusdemon/Rust-One-Piece","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/siriusdemon/Rust-One-Piece","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siriusdemon%2FRust-One-Piece","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siriusdemon%2FRust-One-Piece/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siriusdemon%2FRust-One-Piece/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siriusdemon%2FRust-One-Piece/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/siriusdemon","download_url":"https://codeload.github.com/siriusdemon/Rust-One-Piece/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siriusdemon%2FRust-One-Piece/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262883918,"owners_count":23379282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","interpreter","rust"],"created_at":"2025-03-27T08:17:29.553Z","updated_at":"2025-07-01T02:34:04.319Z","avatar_url":"https://github.com/siriusdemon.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rust One Piece | 写一个编译器\n\n想写一个编译器。写给那些与我一样，对编译器感兴趣的你，愿你永远不会退失学习的乐趣。\n\n### 教材\n\n我使用的是 eoc (Essential of Compilation)，是 IU 的教授写的，目前还没写完。可以免费下载：官方 [Github](https://github.com/IUCompilerCourse/public-student-support-code) 。这本书也包含在本次教程的 [Gitee](https://gitee.com/siriusdemon/Rust-One-Piece) 中。\n\n### Rust\n\n书中使用的语言是 Racket，官方 Github 提供了许多测试及辅助代码。决定用另一种语言写，意味着你没办法使用那些辅助代码，这相当具有挑战性，但如果你赢了，相信会获得对编译器更全面的理解。\n\n我对 Python 其实更熟悉，C++ 也是候选，但选择 Rust，则是因为 Rust 有 match，而另外两者没有。\n\n你可以选择任意你喜欢的语言来学习 eoc，但是有 match 会愉快很多。\n\n\n### 目前进展\n\n+ [R0](blog/r0.md)\n+ [R1 一](blog/r1.md)\n+ [R1 二](blog/r1_2.md)\n+ [R1 三](blog/r1_3.md)\n+ [R1 四](blog/r1_4.md)\n+ [R1 Plus](blog/r1plus.md)\n+ [R2 一](blog/r2.md)\n+ [R2 二](blog/r2_2.md)\n+ [R2 三](blog/r2_3.md)\n+ [R2 四](blog/r2_4.md)\n+ [R2 五](blog/r2_5.md)\n+ [R3](blog/r3.md)\n+ [R3 一](blog/r3_1.md)\n+ [R3 二](blog/r3_2.md)\n\n### 初心\n\n对编译器的兴趣，来源于王垠。我从他的[博客](http://www.yinwang.org/)中收获了许多宝贝。在知道王垠之前，我也听过 Lisp 语言的大名。原因在于，我大一的时候，在百度上搜索：成为一名黑客要学习什么语言？看到有一个回答说：要学习四种语言，一是 C，二是 Python，三是 Perl，四是 Lisp。这次 EOC 所实现的语言是 Racket，也是一种 Lisp 方言。\n\n有一段时间的工作内容是调研 TVM，现在深度学习编译器的佼佼者，当时便萌生了写编译器的想法。\n\n这次刚好有 EOC 的开源和 Rust，我想写一系列的博客加以解说，但愿对于学习 Rust 和编译器的同行都会有所帮助。\n\n### PS\n\nEoC 本身具有很多不错的优点，但如果你也学习一下 P523，则会对两者的优势劣势有更清楚的认识。现在，P523-Rust 也有自己的一个仓库了，推荐你去看看。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiriusdemon%2Frust-one-piece","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsiriusdemon%2Frust-one-piece","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiriusdemon%2Frust-one-piece/lists"}