tango-demo

所属分类:开发工具
开发工具:Rust
文件大小:0KB
下载次数:0
上传日期:2022-02-13 09:28:21
上 传 者sh-1993
说明:  探戈识字编程工具的演示箱。,
(Demonstration crate for the tango literate programming tool.,)

文件列表:
Cargo.toml (850, 2017-09-04)
src/ (0, 2017-09-04)
src/lib.md (2206, 2017-09-04)
src/submod_two.rs (80, 2017-09-04)
tango-build.rs (66, 2017-09-04)

`tango-demo` is a demonstration of how to use the `tango` crate for literate programming. You should be able to jump to [lib.md] and see some nicely rendered text. [lib.md]: src/lib.md ## Tangling with Tango. The crucial thing is that you should also be able to clone this repo and `cargo build` (and `cargo test`, etc) will work right out of the box, even though much of the Rust code is stored within Markdown files. Here is a demonstration of `tango` in action: ``` % git clone git@github.com:pnkfelix/tango-demo.git show-the-demo Cloning into 'show-the-demo'... remote: Counting objects: 14, done. remote: Compressing objects: 100% (11/11), done. remote: Total 14 (delta 3), reused 12 (delta 1), pack-reused 0 Receiving objects: 100% (14/14), done. Resolving deltas: 100% (3/3), done. Checking connectivity... done. % cd show-the-demo/ ``` Nothing unusual so far. But if we do a directory listing, we see something interesting: ``` % ls -F . src .: Cargo.toml README.md src/ tango-build.rs src: lib.md % ``` Namely, there are no Rust files in `src/`! And yet, when we run `cargo test`: ``` % cargo test Updating git repository `https://github.com/pnkfelix/tango` Compiling tango v0.1.0 (https://github.com/pnkfelix/tango#4186d664) Compiling tango-demo v0.1.0 (file:///Users/fklock/Dev/Rust/show-the-demo) Running target/debug/lib-9873d647e6dc0781 running 1 test test it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured Doc-tests lib running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured ``` And we can see that now `tango` has generated the Rust source we needed, based on the `lib.md` file in `src/`: ``` % ls -F . src .: Cargo.lock Cargo.toml README.md src/ tango-build.rs tango.stamp target/ src: lib.md lib.rs % ``` ## Learning to Tango. The secret sauce is that the [Cargo.toml] file specifies that we need to preprocess the `src` tree via the `tango` library to turn the `.md` files into `.rs` files; it does this via a trivial build-script ([tango-build.rs]), that just calls out to `tango`. [Cargo.toml]: Cargo.toml [tango-build.rs]: tango-build.rs As a convenience, the `tango` library also converts `.rs` files into `.md` files. As you develop your code, you work in whichever file that needs editing at that moment. * This is useful for example when resolving compilation errors -- in such situations, the error messages report line numbers with respect to the `.rs` source file, and so it is often easiest to fix one's code directly withinin the `.rs` source file. As long as you re-run `cargo build` before switching between which kind of file you are editting for a given (`rs`,`md`) pair, everything should work out. * Even if you forget to re-run `cargo build` before editting both a `.rs` file and its corresponding `.md`, `tango` tries hard to avoid blindly overwriting files that the developer has touched. * In particular, if you make edits to both a `.rs` file and its corresponding `.md` file and then run `tango`, the `tango` will detect that both timestamps have been updated since the last time it was run, and refuse to overwrite either of the files. * (I hope in the future to extend `tango` so that it will actually report some sort of `diff` between each of the generated products, so that the developer can then attempt to manually port the necessary change into whichever single target file makes sense and remove its partner from the filesystem.)

近期下载者

相关文件


收藏者