Awelon Blue
awelonblue.wordpress.com · Personal blog · on HN since 2011
David Barbour writes about programming language design, covering reactive demand programming, state, and the Awelon and Wikilon projects.
What HN saysHN commenters call it a long-time source of inspiration and cite its "Local State Is Poison" post in debates over global versus local state.
27HN people shared it
11linked it in comments
26stories submitted
95story points
2 years agolast shared
2011people per year2026
Most-shared posts
- 1Local State Is Poison (2012)9 people · 62 points · first shared 2012 · 38 comments on HN
- 2Why Not Events4 people · 4 points · first shared 2012 · discussion on HN
- 3Exponential decay as an alternative to circular buffers3 people · 4 points · first shared 2013 · discussion on HN
- 4About3 people · first shared 2013
- 5Ubiquitous Programming with Pen and Paper (2012)2 people · 7 points · first shared 2012 · discussion on HN
- 6Functional vs. Imperative Performance1 people · 6 points · first shared 2015 · discussion on HN
- 7Freedom and Crutches in Language Design e.g. keyword and default parameters1 people · 2 points · first shared 2011 · 1 comments on HN
- 8The Social Aspects of Programming Language Design1 people · 1 points · first shared 2012 · discussion on HN
- 9Yield for Effects1 people · 1 points · first shared 2017 · discussion on HN
- 10Monadic RDP1 people · 1 points · first shared 2018 · discussion on HN
- 11Lightweight Staged Programming for Awelon1 people · 1 points · first shared 2017 · discussion on HN
- 12Program Rewriting1 people · 1 points · first shared 2017 · discussion on HN
- 13Static Resource Programming Language1 people · 1 points · first shared 2019 · discussion on HN
- 14Awelon Dictionary1 people · 1 points · first shared 2018 · discussion on HN
- 15Wikilon Performance Strategy1 people · 1 points · first shared 2017 · 1 comments on HN
What HN people wrote when they linked it
jamii · 2013-12-27
While David Barbour does tend towards thinking about loud a great deal before coding (which is certainly sensible), he has also previously implemented these ideas in Sirea (https://github.com/dmbarbour/Sirea) and has just released a spec and interpreter for his Awelon language - http://awelonblue.wordpress.com/2013/12/25/awelon-project-progress-rep…
enugu · 2025-01-02
There have been proposals to have global state in programming languages which function like databases with the advantages of monitoring/persistence/naming etc, but also retain the modularity of local state.
https://www.scattered-thoughts.net/writing/local-state-is-harmful/
https://awelonblue.wordpress.com/2012/10/21/local-state-is-poison/
CuriousSkeptic · 2018-07-19
Make sure to checkout the blog https://awelonblue.wordpress.com/about/
It has been a source of much inspiration to me for many years.
CMCDragonkai · 2018-04-11
https://en.wikipedia.org/wiki/Data_lineage
I see a similar idea about this with things like self-adjusting computations, excel and https://awelonblue.wordpress.com/category/language-design/reactive-dem…
Should help the debugging process a lot.
Mathnerd314 · 2017-07-24
Global state is actually a good model, see https://awelonblue.wordpress.com/2012/10/21/local-state-is-poison/.
The issue is more one of fragmentation; figuring out which file(s) / method(s) are responsible for some item of state can get to be impossible without a powerful debugger, and constantly changing frameworks / libraries don't help.
lliamander · 2017-02-10
The thing that distinguishes genuine "declarative" or "goal-based" programming is that the order of expressions in the source language doesn't affect the order of execution[0].
On the other hand, I see the level of abstraction as (roughly) the average number of machine instructions executed for every statement or expression in the source language.
With these two definitions, its clear that while "declarative" languages will almost necessarily be at a high-level of abstraction, you can also have languages that operate at a high-level of abstraction without being declarative.
caveat: the original link wouldn't load for me, so I don't know if my response makes sense in light of the original article.
[0]a more technically correct definition is provided by David Barbour https://awelonblue.wordpress.com/2012/01/12/defining-declarative/
arethuza · 2013-12-27
To be fair, there is an "About RDP" link on the page:
http://awelonblue.wordpress.com/about/
RivieraKid · 2013-02-27
Exactly. There are loads of people with much more interesting ideas, for example the author of this article: http://awelonblue.wordpress.com/2012/07/01/why-not-events/.
wslh · 2012-12-16
I've not seen these ones on any list here:
http://blog.databigbang.com
http://blog.nektra.com
http://www.yosefk.com/blog
http://www.cocos2d-iphone.org/
http://blogs.southworks.net
http://awelonblue.wordpress.com/
andrewcooke · 2012-12-03
obvious q is how this differs from frp. the same author (i think?) addresses that here - http://awelonblue.wordpress.com/2011/05/21/comparing-frp-to-rdp/
polytypic · 2017-05-09
> I have yet to see a FRP library that allows you to just use a component without introducing boilerplate.
I'm the author of https://github.com/calmm-js.
I wouldn't necessarily describe it as (pure) FRP, but the combination of techniques used in Calmm pretty much eliminates all boilerplate: in the limit, a truly useful component can be just a single function with a body of a single line of code. Using that component then is just a matter of instantiating the component with desired parameters (no boilerplate). The lack of boilerplate makes it practical to eliminate even small scale repetition with local components.
Parameters to components in Calmm can represent read-only (Observable) or read-write (Atom :> Observable) state. RW state can be sliced with lenses and be used as RO state without glue. RO state can be arbitrarily combined to compute desired properties. Thanks to being able to effortlessly slice RW state, components can be easily made independent of the application state as a whole (IOW, a component can be made to take only just the state it needs as parameters) and be made truly reusable.
Calmm also makes it simple and easy to create both stateless components (consider #1) and components that can optionally use local state so that the user of the component can actually choose whether the component uses local state or a slice of global state.
Calmm also primarily guides you to use stateless, time independent, continuous, observable properties (combine)…