1
1
mirror of https://github.com/kanaka/mal.git synced 2024-11-11 00:52:44 +03:00
mal/rust/Makefile
Joel Martin 4ef4b17cd0 rust: Update rust and update/refactor implementation
This rewrites the rust implementation to use many new features of the
current version of rust.

The refactor is much more concise (only 2/3rds the size) and switches
to using a lot of the more functional features (iterators, closures,
etc) that have been added or improved in rust.

Unfortunately, the implementation is a fair bit slower (about 30% on
perf3). It's not clear why this is the case but concision and being
more idiomatic wins over performance.
2018-07-13 17:21:00 -05:00

44 lines
1.0 KiB
Makefile

UPPER_STEPS = step4_if_fn_do step5_tco step6_file step7_quote step8_macros step9_try stepA_mal
STEPS = step0_repl step1_read_print step2_eval step3_env $(UPPER_STEPS)
SOURCES_BASE = types.rs reader.rs printer.rs
SOURCES_LISP = env.rs core.rs stepA_mal.rs
SOURCES = $(SOURCES_BASE) $(SOURCES_LISP)
all: $(STEPS)
dist: mal
mal: stepA_mal
cp $< $@
%: %.rs
cargo build --release --bin $*
cp target/release/$* $@
STEP0_DEPS = readline.rs
STEP1_DEPS = $(STEP0_DEPS) types.rs reader.rs printer.rs
STEP3_DEPS = $(STEP1_DEPS) env.rs
STEP4_DEPS = $(STEP3_DEPS) core.rs
step0_repl: $(STEP0_DEPS)
step1_read_print step2_eval: $(STEP1_DEPS)
step3_env: $(STEP3_DEPS)
$(UPPER_STEPS): $(STEP4_DEPS)
.PHONY: clean stats stats-lisp
clean:
cargo clean
rm -f $(STEPS)
rm -f mal
stats: $(SOURCES)
@wc $^
@printf "%5s %5s %5s %s\n" `grep -E "^[[:space:]]*//|^[[:space:]]*$$" $^ | wc` "[comments/blanks]"
stats-lisp: $(SOURCES_LISP)
@wc $^
@printf "%5s %5s %5s %s\n" `grep -E "^[[:space:]]*//|^[[:space:]]*$$" $^ | wc` "[comments/blanks]"