aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Justfile4
-rw-r--r--flake.nix2
-rw-r--r--thesis/biblio.bib88
-rw-r--r--thesis/main.tex6
5 files changed, 84 insertions, 18 deletions
diff --git a/.gitignore b/.gitignore
index 030c854..ccf2d4a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,5 @@
*.fls
*.log
*.toc
+/thesis/*.bcf
+/thesis/main.run.xml
diff --git a/Justfile b/Justfile
index 6a36f5f..8896c6f 100644
--- a/Justfile
+++ b/Justfile
@@ -5,11 +5,11 @@ clean: thesis-clean
alias t := thesis
thesis:
- cd thesis/; latexmk -pdf
+ cd thesis/; latexmk -bibtex -pdf
alias tw := thesis-watch
thesis-watch:
- cd thesis/; latexmk -pdf -pvc
+ cd thesis/; latexmk -bibtex -pdf -pvc
alias tc := thesis-clean
thesis-clean:
diff --git a/flake.nix b/flake.nix
index b79f2a3..9d6c859 100644
--- a/flake.nix
+++ b/flake.nix
@@ -19,6 +19,7 @@
psnfss
helvetic
courier
+ biblatex
latex-bin
latexmk
;
@@ -28,6 +29,7 @@
buildInputs = [
pkgs.just # command runner
tex # latex environment
+ pkgs.biber # bibliography backend
pkgs.racket-minimal
pkgs.z3
diff --git a/thesis/biblio.bib b/thesis/biblio.bib
index 60e0903..7d8fa6b 100644
--- a/thesis/biblio.bib
+++ b/thesis/biblio.bib
@@ -1,17 +1,77 @@
-@Book{P2,
- author = "Chen-Chung Chang and H. Jerome Keisler",
- title = "Model Theory",
- publisher = "North-Holland",
- edition = {Third},
- year = 1990,
+
+@article{jung_brainy_2011,
+ title = {Brainy: effective selection of data structures},
+ volume = {46},
+ issn = {0362-1340, 1558-1160},
+ url = {https://dl.acm.org/doi/10.1145/1993316.1993509},
+ doi = {10.1145/1993316.1993509},
+ shorttitle = {Brainy},
+ abstract = {Data structure selection is one of the most critical aspects of developing effective applications. By analyzing data structures' behavior and their interaction with the rest of the application on the underlying architecture, tools can make suggestions for alternative data structures better suited for the program input on which the application runs. Consequently, developers can optimize their data structure usage to make the application conscious of an underlying architecture and a particular program input.
+ This paper presents the design and evaluation of Brainy, a new program analysis tool that automatically selects the best data structure for a given program and its input on a specific microarchitecture. The data structure's interface functions are instrumented to dynamically monitor how the data structure interacts with the application for a given input. The instrumentation records traces of various runtime characteristics including underlying architecture-specific events. These generated traces are analyzed and fed into an offline model, constructed using machine learning, to select the best data structure. That is, Brainy exploits runtime feedback of data structures to model the situation an application runs on, and selects the best data structure for a given application/input/architecture combination based on the constructed model. The empirical evaluation shows that this technique is highly accurate across several real-world applications with various program input sets on two different state-of-the-art microarchitectures. Consequently, Brainy achieved an average performance improvement of 27\% and 33\% on both microarchitectures, respectively.},
+ pages = {86--97},
+ number = {6},
+ journaltitle = {{ACM} {SIGPLAN} Notices},
+ shortjournal = {{SIGPLAN} Not.},
+ author = {Jung, Changhee and Rus, Silvius and Railing, Brian P. and Clark, Nathan and Pande, Santosh},
+ urldate = {2023-09-21},
+ date = {2011-06-04},
+ langid = {english},
+ file = {Jung et al. - 2011 - Brainy effective selection of data structures.pdf:/home/aria/Zotero/storage/DPJPURT8/Jung et al. - 2011 - Brainy effective selection of data structures.pdf:application/pdf},
+}
+
+@inproceedings{costa_collectionswitch_2018,
+ location = {Vienna Austria},
+ title = {{CollectionSwitch}: a framework for efficient and dynamic collection selection},
+ isbn = {978-1-4503-5617-6},
+ url = {https://dl.acm.org/doi/10.1145/3168825},
+ doi = {10.1145/3168825},
+ shorttitle = {{CollectionSwitch}},
+ eventtitle = {{CGO} '18: 16th Annual {IEEE}/{ACM} International Symposium on Code Generation and Optimization},
+ pages = {16--26},
+ booktitle = {Proceedings of the 2018 International Symposium on Code Generation and Optimization},
+ publisher = {{ACM}},
+ author = {Costa, Diego and Andrzejak, Artur},
+ urldate = {2023-09-21},
+ date = {2018-02-24},
+ langid = {english},
+ file = {Costa and Andrzejak - 2018 - CollectionSwitch a framework for efficient and dy:/home/aria/Zotero/storage/7B8QMVRU/Costa and Andrzejak - 2018 - CollectionSwitch a framework for efficient and dy:application/pdf},
+}
+
+@inproceedings{shacham_chameleon_2009,
+ location = {Dublin Ireland},
+ title = {Chameleon: adaptive selection of collections},
+ isbn = {978-1-60558-392-1},
+ url = {https://dl.acm.org/doi/10.1145/1542476.1542522},
+ doi = {10.1145/1542476.1542522},
+ shorttitle = {Chameleon},
+ eventtitle = {{PLDI} '09: {ACM} {SIGPLAN} Conference on Programming Language Design and Implementation},
+ pages = {408--418},
+ booktitle = {Proceedings of the 30th {ACM} {SIGPLAN} Conference on Programming Language Design and Implementation},
+ publisher = {{ACM}},
+ author = {Shacham, Ohad and Vechev, Martin and Yahav, Eran},
+ urldate = {2023-09-21},
+ date = {2009-06-15},
+ langid = {english},
+ file = {Shacham et al. - 2009 - Chameleon adaptive selection of collections.pdf:/home/aria/Zotero/storage/75CS9CWY/Shacham et al. - 2009 - Chameleon adaptive selection of collections.pdf:application/pdf},
}
-@inproceedings{P1,
- author = {Hiroki Arimura},
- title = {Learning Acyclic First-Order Horn Sentences from Entailment},
- booktitle = {Proc. of the 8th Intl. Conf. on Algorithmic Learning Theory, ALT '97},
- year = {1997},
- pages = {432-445},
- ee = {http://dx.doi.org/10.1007/3-540-63577-7_59},
- bibsource = {DBLP, http://dblp.uni-trier.de}
+@article{qin_primrose_2023,
+ title = {Primrose: Selecting Container Data Types by Their Properties},
+ volume = {7},
+ issn = {2473-7321},
+ url = {http://arxiv.org/abs/2205.09655},
+ doi = {10.22152/programming-journal.org/2023/7/11},
+ shorttitle = {Primrose},
+ abstract = {Context: Container data types are ubiquitous in computer programming, enabling developers to efficiently store and process collections of data with an easy-to-use programming interface. Many programming languages offer a variety of container implementations in their standard libraries based on data structures offering different capabilities and performance characteristics. Inquiry: Choosing the *best* container for an application is not always straightforward, as performance characteristics can change drastically in different scenarios, and as real-world performance is not always correlated to theoretical complexity. Approach: We present Primrose, a language-agnostic tool for selecting the best performing valid container implementation from a set of container data types that satisfy *properties* given by application developers. Primrose automatically selects the set of valid container implementations for which the *library specifications*, written by the developers of container libraries, satisfies the specified properties. Finally, Primrose ranks the valid library implementations based on their runtime performance. Knowledge: With Primrose, application developers can specify the expected behaviour of a container as a type refinement with *semantic properties*, e.g., if the container should only contain unique values (such as a `set`) or should satisfy the {LIFO} property of a `stack`. Semantic properties nicely complement *syntactic properties* (i.e., traits, interfaces, or type classes), together allowing developers to specify a container's programming interface *and* behaviour without committing to a concrete implementation. Grounding: We present our prototype implementation of Primrose that preprocesses annotated Rust code, selects valid container implementations and ranks them on their performance. The design of Primrose is, however, language-agnostic, and is easy to integrate into other programming languages that support container data types and traits, interfaces, or type classes. Our implementation encodes properties and library specifications into verification conditions in Rosette, an interface for {SMT} solvers, which determines the set of valid container implementations. We evaluate Primrose by specifying several container implementations, and measuring the time taken to select valid implementations for various combinations of properties with the solver. We automatically validate that container implementations conform to their library specifications via property-based testing. Importance: This work provides a novel approach to bring abstract modelling and specification of container types directly into the programmer's workflow. Instead of selecting concrete container implementations, application programmers can now work on the level of specification, merely stating the behaviours they require from their container types, and the best implementation can be selected automatically.},
+ pages = {11},
+ number = {3},
+ journaltitle = {The Art, Science, and Engineering of Programming},
+ shortjournal = {Programming},
+ author = {Qin, Xueying and O'Connor, Liam and Steuwer, Michel},
+ urldate = {2023-09-25},
+ date = {2023-02-15},
+ eprinttype = {arxiv},
+ eprint = {2205.09655 [cs]},
+ keywords = {Computer Science - Data Structures and Algorithms, Computer Science - Programming Languages},
+ file = {arXiv Fulltext PDF:/home/aria/Zotero/storage/IL59NESA/Qin et al. - 2023 - Primrose Selecting Container Data Types by Their .pdf:application/pdf;arXiv.org Snapshot:/home/aria/Zotero/storage/DCIW4XE4/2205.html:text/html},
}
diff --git a/thesis/main.tex b/thesis/main.tex
index 4024cd5..61b46b9 100644
--- a/thesis/main.tex
+++ b/thesis/main.tex
@@ -6,6 +6,9 @@
\usepackage{microtype}
+\usepackage[style=numeric]{biblatex}
+\addbibresource{biblio.bib}
+
%% Convenience macros
\newcommand{\code}{\texttt}
@@ -129,8 +132,7 @@ from the Informatics Research Ethics committee.
%% after the deadline to conform to the page and style requirements you will be
%% subject to the usual late penalties based on your final submission time.
-\bibliographystyle{plain}
-\bibliography{biblio}
+\printbibliography
% You may delete everything from \appendix up to \end{document} if you don't need it.