PRL Blog
prl.ccs.neu.edu · Company blog · on HN since 2016
The Programming Research Laboratory at Northeastern University posts on programming languages, Racket, types, and language implementation.
What HN saysHN links it for programming language and computing history material, including a Guy Steele poem. One commenter finds the historical references in a post weak and anachronistic.
24HN people shared it
10linked it in comments
19stories submitted
396story points
4 years agolast shared
2016people per year2026
Most-shared posts
- 1P tr 1971.pdf5 people · first shared 2020
- 2Measuring GC latencies in Haskell, OCaml, Racket4 people · 146 points · first shared 2016 · 57 comments on HN
- 3The Typed Racket Optimizer vs. Transient2 people · 33 points · first shared 2020 · 11 comments on HN
- 4Visual and Interactive-Syntax Realized (VISr) for ClojureScript (and JavaScript)2 people · 4 points · first shared 2022 · discussion on HN
- 5Lexical and Dynamic Scope (2019)2 people · 3 points · first shared 2019 · discussion on HN
- 6Monotonicity Types: Towards a Type System for Eventual Consistency1 people · 101 points · first shared 2017 · 8 comments on HN
- 7Tutorial: Zero to Sixty in Racket1 people · 91 points · first shared 2016 · 10 comments on HN
- 8What Is Soft Typing?1 people · 5 points · first shared 2020 · discussion on HN
- 9Tutorial: Using Racket’s FFI1 people · 3 points · first shared 2016 · discussion on HN
- 10Gradual Typing Across the Spectrum1 people · 2 points · first shared 2016 · discussion on HN
- 11Schizophrenia in Contemporary Mathematics [pdf]1 people · 2 points · first shared 2020 · discussion on HN
- 12Building a Website with Scribble1 people · 2 points · first shared 2017 · discussion on HN
- 13The Behavior of Gradual Types: A User Study1 people · 2 points · first shared 2018 · 1 comments on HN
- 14Four Kinds of Scoping in R1 people · 2 points · first shared 2019 · discussion on HN
- 15Type inference in stack based programming languages1 people · first shared 2018
What HN people wrote when they linked it
bobbiechen · 2020-12-04
Another great example of this is Key Word In Context [1], which is described in this paper [2] as being possible to implement in a week or two.
My professor (Josh Bloch, in his API design class at CMU) showed us this paper, then showed us his quick implementation using standard Java APIs in less time than the rest of the lecture.
[1] https://en.wikipedia.org/wiki/Key_Word_in_Context
[2] https://prl.ccs.neu.edu/img/p-tr-1971.pdf
bravogamma · 2022-06-13
I like to refer to computing history as much as the next person, but the references in this post [0][1][2] came across as rather weak and mostly anachronistic.
Computer hardware, networking, and server software has evolved by leaps and bounds over the last 5-10 years, let alone 50!
[0] https://prl.ccs.neu.edu/img/p-tr-1971.pdf (1971)
[1] https://en.wikipedia.org/wiki/The_Mythical_Man-Month (1975)
[2] https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing (1997?)
mpweiher · 2021-09-04
"The expected benefits of modular programming fall into three classes: (1) managerial -- development time could be shortened because separate groups would work on each module with little need for communication (and little regret afterward that there had not been more communication);"
-- D. L. Parnas, ON THE CRITERIA TO BE USED IN DECOMPOSING SYSTEMS INTO MODULES, 1971, https://prl.ccs.neu.edu/img/p-tr-1971.pdf
cessor · 2020-05-29
The term information hiding used in this thread is very confusing (to me, at least).
I believe David Parnas introduced it in 1971 to mean that a program's design was sliced along shared units of concerns (things that vary together) rather than "steps in a flowchart".
https://prl.ccs.neu.edu/img/p-tr-1971.pdf
I believe what you are trying to convey is called "data abstraction", as for example used by Reynolds, 1975;
mentioned here:
https://www.cs.utexas.edu/~wcook/papers/OOPvsADT/CookOOPvsADT90.pdf
explained here:
https://link.springer.com/chapter/10.1007%2F978-1-4612-6315-9_22
jecel · 2020-05-01
Guy Steele's "Tree" poem:
http://prl.ccs.neu.edu/img/gls-trees-poem-1979.pdf
cmeiklejohn · 2017-11-22
Related work:
PPDP '17 paper on scaling:
http://christophermeiklejohn.com/publications/ppdp-2017-preprint.pdf
Ensuring monotonicity via types:
http://prl.ccs.neu.edu/blog/2017/10/22/monotonicity-types-towards-a-ty…
sitkack · 2017-10-29
Do they really insert extra dynamic checks?
Is Sound Gradual Typing Dead?
https://news.ycombinator.com/item?id=11041272
http://prl.ccs.neu.edu/gtp/research.html
It was my understanding that MyPy was purely compile time with no runtime checks. But I could be wrong. Gradual Typing as implemented in the original paper would lead to much much slower code. The weight of a static language bolted onto a dynamic runtime for the worst of both possible worlds. Sufficiently abstract Python code is almost un-typable.
I think eventually we will get there, where one can explore a program in a dynamic language and ship a correctly statically typed one. Types are only the beginning.
carapace · 2018-08-13
Replying to you and vanderZwan.
People have investigated typing for stack-based languages before, [1] is a good overview. I've been implementing a dialect of Joy in Python and it turns out that it is pretty straight forward to implement type-inference and -checking.[2]
However, I recently realized that I was doing waaaay too much work. I reimplemented Joy in Prolog and got typing for free. Several pages of Python became two pages of Prolog and the interpreter is more powerful, I could go on. It's really weird being so excited on the one hand and so rueful on the other. This is so cool but I wasted so much time!
Anyhow, going by what you're saying the_grue about passing variables in the wrong order, I think you may have been going at it in the wrong way.
Using Joy and deriving new definitions with it I've only very occasionally had bugs related to "typos" in argument order of stack items. If you start with little pieces and build up stable conceptual interfaces as you go the process seems to flow and lead to correct code. It's like playing with Legos, or deriving a mathematical theorem.
[1] http://prl.ccs.neu.edu/blog/2017/03/10/type-inference-in-stack-based-p…
[1] http://joypy.osdn.io/notebooks/Types.html
rbehrends · 2018-01-02
Note that I was specifically talking about the sequential case, not multi-threaded languages.
OCaml has had one since the 1990s [1]; it's a fairly standard generational, compacting collector with incremental collection for the old generation. Lua has had an incremental GC since version 5.1 (in 2006); as it's frequently used as a scripting language for video games, it's safe to assume that pause times aren't much of an issue.
The problem is that virtually every language since then has pretty much decided to have all threads use a global shared heap. Once you do that, you run into all kinds of challenges, such as root discovery from thread stacks without stopping the world. That said, there are plenty of languages that have this option, anyway; it's simply more challenging, not impossible.
Languages that are single-threaded maintain thread-local heaps don't have the problem. Python and Ruby (unlike Lua) have issues for historical reasons (they started out with basic reference counting and mark-and-sweep collection, respectively, and then had to maintain backwards compatibility [2]).
Intermediate designs (having both thread-local heaps and shared heaps at the same time) are also possible, but that design space hasn't been explored much.
[1] http://prl.ccs.neu.edu/blog/2016/05/24/measuring-gc-latencies-in-haske…
[2] I think that in principle one could make the cycle detector in Python incremental (it's basically a form of trial deletion); Ruby…
brianzelip · 2021-07-20
01. [On the criteria to be used in decomposing systems into modules – David Parnas](https://prl.ccs.neu.edu/img/p-tr-1971.pdf)
02. [A Note On Distributed Computing – Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall](https://www.cc.gatech.edu/classes/AY2010/cs4210_fall/papers/smli_tr-94…
03. [The Next 700 Programming Languages – P. J. Landin](http://thecorememory.com/Next_700.pdf)
04. [Can Programming Be Liberated from the von Neumann Style? – John Backus](http://www.csc.villanova.edu/~beck/csc8310/BackusFP.pdf)
05. [Reflections on Trusting Trust – Ken Thompson](http://users.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf)
06. [Lisp: Good News, Bad News, How to Win Big – Richard Gabriel](https://www.dreamsongs.com/Files/LispGoodNewsBadNews.pdf)
07. [An experimental evaluation of the assumption of independence in multiversion programming – John Knight and Nancy Leveson](http://sunnyday.mit.edu/papers/nver-tse.pdf)
08. [Arguments and Results – James Noble](http://www.laputan.org/pub/patterns/noble/noble.pdf)
09. [A Laboratory For Teaching Object-Oriented Thinking – Kent Beck, Ward Cunningham](http://c2.com/doc/oopsla89/paper.html)
10. [Programming as an Experience: the inspiration for Self – David Ungar, Randall B. Smith](https://suif.stanford.edu/~lam/cs343/programming-as-experience.pdf)