On the Design, Implementation, and Use of Laziness in R
Abstract
The R programming language has been lazy for over twenty-five years. This paper presents a review of the design and implementation of call-by-need in R, and a data-driven study of how generations of programmers have put laziness to use in their code. We analyze 16,707 packages and observe the creation of 270.9 B promises. Our data suggests that there is little supporting evidence to assert that programmers use laziness to avoid unnecessary computation or to operate over infinite data structures. For the most part R code appears to have been written without reliance on, and in many cases even knowledge of, delayed argument evaluation. The only significant exception is a small number of packages which leverage call-by-need for meta-programming.
- Publication:
-
arXiv e-prints
- Pub Date:
- September 2019
- DOI:
- 10.48550/arXiv.1909.08958
- arXiv:
- arXiv:1909.08958
- Bibcode:
- 2019arXiv190908958G
- Keywords:
-
- Computer Science - Programming Languages;
- D.3
- E-Print:
- 27 pages, 4 tables, 21 figures