mirror of
https://github.com/kanaka/mal.git
synced 2024-11-11 00:52:44 +03:00
4ef4b17cd0
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.
44 lines
1.0 KiB
Makefile
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]"
|
|
|