Skip to content

Commit 9ac6973

Browse files
authored
more efficient int vector/ efficient partition support (#1043)
* more efficient int vector implementation * more efficient int vector with partition capability * more tests * add a layered topsort algorithm
1 parent 2187c01 commit 9ac6973

20 files changed

+3000
-1444
lines changed

docs/Manual.html

+6-23
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ <h1><a href="https://github.com/bloomberg/bucklescript">BuckleScript</a> User Ma
502502
<li><a href="#_installation">Installation</a>
503503
<ul class="sectlevel2">
504504
<li><a href="#_windows_installation">Windows Installation</a></li>
505-
<li><a href="#_minimal_installation_from_npm">Minimal installation from NPM</a></li>
505+
<li><a href="#__nix_installation">*nix installation</a></li>
506506
<li><a href="#__strong_recommended_strong_installation_with_opam"><strong>Recommended</strong> installation with OPAM</a></li>
507507
<li><a href="#_install_from_source">Install from source</a>
508508
<ul class="sectlevel3">
@@ -846,34 +846,14 @@ <h2 id="_installation"><a class="anchor" href="#_installation"></a>Installation<
846846
</div>
847847
<div class="sect2">
848848
<h3 id="_windows_installation"><a class="anchor" href="#_windows_installation"></a>Windows Installation</h3>
849-
<div class="admonitionblock note">
850-
<table>
851-
<tr>
852-
<td class="icon">
853-
<div class="title">Note</div>
854-
</td>
855-
<td class="content">
856-
<div class="title">WINDOWS prerequisite</div>
857-
<div class="paragraph">
858-
<p>BuckleScript works natively on Windows, currently users have to install
859-
<a href="http://protz.github.io/ocaml-installer/">OCaml Cygwin</a> first,
860-
make sure that <code>ocamlopt</code> is in <code>PATH</code>.</p>
861-
</div>
862849
<div class="listingblock">
863850
<div class="content">
864851
<pre class="pygments highlight"><code data-lang="sh">npm install bs-platform</code></pre>
865852
</div>
866853
</div>
867-
<div class="paragraph">
868-
<p>After installation, BuckleScript does not rely on Cygwin anymore.</p>
869-
</div>
870-
</td>
871-
</tr>
872-
</table>
873-
</div>
874854
</div>
875855
<div class="sect2">
876-
<h3 id="_minimal_installation_from_npm"><a class="anchor" href="#_minimal_installation_from_npm"></a>Minimal installation from NPM</h3>
856+
<h3 id="__nix_installation"><a class="anchor" href="#__nix_installation"></a>*nix installation</h3>
877857
<div class="ulist">
878858
<div class="title">Prerequisites</div>
879859
<ul>
@@ -883,6 +863,9 @@ <h3 id="_minimal_installation_from_npm"><a class="anchor" href="#_minimal_instal
883863
<li>
884864
<p><code>npm</code> (should be installed with Node)</p>
885865
</li>
866+
<li>
867+
<p><a href="https://github.com/ninja-build/ninja/releases">ninja</a> (version &gt;= 1.7)</p>
868+
</li>
886869
</ul>
887870
</div>
888871
<div class="paragraph">
@@ -902,7 +885,7 @@ <h3 id="_minimal_installation_from_npm"><a class="anchor" href="#_minimal_instal
902885
</div>
903886
<div class="listingblock">
904887
<div class="content">
905-
<pre class="pygments highlight"><code data-lang="shh">npm install -g bs-platform</code></pre>
888+
<pre class="pygments highlight"><code data-lang="sh">npm install -g bs-platform</code></pre>
906889
</div>
907890
</div>
908891
</div>

jscomp/.ocamlinit

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#require "compiler-libs.common";;
2+
#load "bs_hash.cma";;
3+
#load "ext.cma";;
4+
#directory "./ext";;

jscomp/Makefile

+12-5
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ CAMLDEP=ocamldep.opt$(EXE)
1313
COMPFLAGS= -g -w +6-40-30-23 -warn-error +a-40-30-23
1414

1515

16-
.SUFFIXES: .mli .ml .cmi .cmx .mll .c .o
16+
.SUFFIXES: .mli .ml .cmi .cmx .mll .c .o .cmo
1717

1818
print-% : ; @echo $* = $($*)
1919

2020
INCLUDES= -I +compiler-libs -I stubs -I ext -I common -I syntax -I depends -I core -I bsb -I ounit -I ounit_tests
2121

2222
.mli.cmi:
2323
$(NATIVE) $(INCLUDES) $(COMPFLAGS) -c $<
24+
.ml.cmo:
25+
ocamlc.opt $(INCLUDES) $(COMPFLAGS) -c $<
2426

2527
.ml.cmx:
2628
$(NATIVE) $(INCLUDES) $(COMPFLAGS) -c $<
@@ -44,7 +46,7 @@ ext/int_vec.ml: ext/vec.cppo.ml
4446
ext/resize_array.ml: ext/vec.cppo.ml
4547
cppo -D TYPE_FUNCTOR $< -o $@
4648
ext/string_set.ml : ext/set.cppo.ml
47-
cppo -D TYPE_STRING $< -o $@
49+
cppo -D TYPE_STRING $< -o $@
4850
ext/set_int.ml : ext/set.cppo.ml
4951
cppo -D TYPE_INT $< -o $@
5052
ext/ident_set.ml : ext/set.cppo.ml
@@ -134,6 +136,7 @@ OUNIT_TESTS_SRCS = ounit_tests_util \
134136
ounit_ordered_hash_set_tests \
135137
ounit_vec_test \
136138
ounit_string_tests\
139+
ounit_topsort_tests\
137140
ounit_tests_main
138141
OUNIT_TESTS_CMXS = $(addprefix ounit_tests/, $(addsuffix .cmx, $(OUNIT_TESTS_SRCS)))
139142

@@ -173,7 +176,9 @@ EXT_SRCS = ext_util\
173176
string_set\
174177
set_int\
175178
set_poly\
176-
ext_scc ext_pp_scope\
179+
ext_scc \
180+
ext_topsort\
181+
ext_pp_scope\
177182
ext_io\
178183
ident_hash_set\
179184
hash_set_poly\
@@ -182,6 +187,7 @@ EXT_SRCS = ext_util\
182187
ext_filename
183188

184189
EXT_CMXS=$(addprefix ext/, $(addsuffix .cmx, $(EXT_SRCS)))
190+
EXT_CMOS=$(addprefix ext/, $(addsuffix .cmo, $(EXT_SRCS)))
185191
COMMON_SRCS= bs_version js_config bs_pkg ext_log bs_loc bs_warnings lam_methname binary_cache
186192
COMMON_CMXS= $(addprefix common/, $(addsuffix .cmx, $(COMMON_SRCS)))
187193
SYNTAX_SRCS=ast_derive_constructor ast_derive_util ast_exp ast_external ast_lift \
@@ -226,7 +232,8 @@ MAINS_CMXS=$(addsuffix .cmx, $(MAIN_SRCS))
226232

227233
ounit.cmxa: $(OUNIT_CMXS)
228234
ocamlopt.opt -a $^ -o $@
229-
235+
ext.cma: $(EXT_CMOS)
236+
ocamlc.opt -a $^ -o $@
230237
ext.cmxa: $(EXT_CMXS)
231238
ocamlopt.opt -a $^ -o $@
232239
common.cmxa:$(COMMON_CMXS)
@@ -370,7 +377,7 @@ bin/all_ounit_tests.ml:./bin/bspack.exe
370377

371378

372379
bin/all_ounit_tests.exe: stubs/ext_basic_hash_stubs.c bin/all_ounit_tests.mli bin/all_ounit_tests.ml
373-
ocamloptp -g -I bin -w -a unix.cmxa $^ -o $@
380+
ocamloptp -P a -g -I bin -w -a unix.cmxa $^ -o $@
374381

375382
test:bin/all_ounit_tests.exe
376383
$^ && ocamlprof bin/all_ounit_tests.ml > bin/all_ounit_tests.i.ml && rm ocamlprof.dump

jscomp/all.depend

+11-5
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@ ext/int_map.cmx : ext/map_gen.cmx ext/ext_int.cmx ext/int_map.cmi
5656
ext/literals.cmx : ext/literals.cmi
5757
ext/string_map.cmx : ext/map_gen.cmx ext/string_map.cmi
5858
ext/string_set.cmx : ext/set_gen.cmx ext/string_set.cmi
59-
ext/set_int.cmx : ext/set_gen.cmx ext/ext_int.cmx
59+
ext/set_int.cmx : ext/set_gen.cmx ext/ext_int.cmx ext/set_int.cmi
6060
ext/set_poly.cmx : ext/set_gen.cmx ext/set_poly.cmi
6161
ext/ext_scc.cmx : ext/int_vec_vec.cmx ext/int_vec.cmx ext/ext_scc.cmi
62+
ext/ext_topsort.cmx : ext/set_int.cmx ext/resize_array.cmx ext/int_vec.cmx \
63+
ext/ext_topsort.cmi
6264
ext/ext_pp_scope.cmx : ext/string_map.cmx ext/int_map.cmx ext/ident_set.cmx \
6365
ext/ext_pp_scope.cmi
6466
ext/ext_io.cmx : ext/ext_pervasives.cmx ext/ext_io.cmi
@@ -108,8 +110,10 @@ ext/int_map.cmi : ext/map_gen.cmx
108110
ext/literals.cmi :
109111
ext/string_map.cmi : ext/map_gen.cmx
110112
ext/string_set.cmi :
113+
ext/set_int.cmi : ext/set_gen.cmx
111114
ext/set_poly.cmi :
112115
ext/ext_scc.cmi : ext/int_vec_vec.cmi ext/int_vec.cmi
116+
ext/ext_topsort.cmi : ext/vec_gen.cmx ext/set_int.cmi ext/int_vec.cmi
113117
ext/ext_pp_scope.cmi : ext/ident_set.cmi
114118
ext/ext_io.cmi :
115119
ext/ident_hash_set.cmi : ext/hash_set_gen.cmx
@@ -590,13 +594,15 @@ ounit_tests/ounit_json_tests.cmx : ext/string_map.cmx ounit/oUnit.cmx \
590594
ounit_tests/ounit_map_tests.cmx : ounit/oUnit.cmx ext/int_map.cmx
591595
ounit_tests/ounit_ordered_hash_set_tests.cmx : \
592596
ext/ordered_hash_set_string.cmx ounit/oUnit.cmx ext/ext_util.cmx
593-
ounit_tests/ounit_vec_test.cmx : ounit/oUnit.cmx ext/int_vec.cmx \
594-
bsb/bsb_json.cmx
597+
ounit_tests/ounit_vec_test.cmx : ext/set_int.cmx ounit/oUnit.cmx \
598+
ext/int_vec.cmx bsb/bsb_json.cmx
595599
ounit_tests/ounit_string_tests.cmx : ounit/oUnit.cmx ext/ext_string.cmx
600+
ounit_tests/ounit_topsort_tests.cmx : ext/set_int.cmx ounit/oUnit.cmx \
601+
ext/int_vec.cmx ext/ext_topsort.cmx
596602
ounit_tests/ounit_tests_main.cmx : ext/resize_array.cmx \
597603
ounit_tests/ounit_vec_test.cmx ounit_tests/ounit_union_find_tests.cmx \
598-
ounit_tests/ounit_string_tests.cmx ounit_tests/ounit_scc_tests.cmx \
599-
ounit_tests/ounit_path_tests.cmx \
604+
ounit_tests/ounit_topsort_tests.cmx ounit_tests/ounit_string_tests.cmx \
605+
ounit_tests/ounit_scc_tests.cmx ounit_tests/ounit_path_tests.cmx \
600606
ounit_tests/ounit_ordered_hash_set_tests.cmx \
601607
ounit_tests/ounit_map_tests.cmx ounit_tests/ounit_list_test.cmx \
602608
ounit_tests/ounit_json_tests.cmx ounit_tests/ounit_hashtbl_tests.cmx \

jscomp/bin/all_ounit_tests.d

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ bin/all_ounit_tests.ml : ext/set_gen.ml
1616
bin/all_ounit_tests.ml : ext/ext_int.ml
1717
bin/all_ounit_tests.ml : ext/ext_int.mli
1818
bin/all_ounit_tests.ml : ext/set_int.ml
19+
bin/all_ounit_tests.ml : ext/set_int.mli
1920
bin/all_ounit_tests.ml : ext/set_poly.ml
2021
bin/all_ounit_tests.ml : ext/set_poly.mli
2122
bin/all_ounit_tests.ml : ounit_tests/ounit_bal_tree_tests.ml
@@ -71,6 +72,9 @@ bin/all_ounit_tests.ml : ext/ext_scc.ml
7172
bin/all_ounit_tests.ml : ext/ext_scc.mli
7273
bin/all_ounit_tests.ml : ounit_tests/ounit_scc_tests.ml
7374
bin/all_ounit_tests.ml : ounit_tests/ounit_string_tests.ml
75+
bin/all_ounit_tests.ml : ext/ext_topsort.ml
76+
bin/all_ounit_tests.ml : ext/ext_topsort.mli
77+
bin/all_ounit_tests.ml : ounit_tests/ounit_topsort_tests.ml
7478
bin/all_ounit_tests.ml : ext/union_find.ml
7579
bin/all_ounit_tests.ml : ext/union_find.mli
7680
bin/all_ounit_tests.ml : ounit_tests/ounit_union_find_tests.ml

0 commit comments

Comments
 (0)