aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorfaiface <faiface2202@gmail.com>2019-05-05 15:12:45 +0200
committerfaiface <faiface2202@gmail.com>2019-05-05 15:12:45 +0200
commit9bb7ad60a7d32f981f9aa1405e4ec6d1db928424 (patch)
treea545677eaee4e7546eac6dfb21816b4bc952579c /README.md
parent4714ebefece2d0d22b5dec2a42e062bb8ab2536f (diff)
downloadgui-9bb7ad60a7d32f981f9aa1405e4ec6d1db928424.zip
README: add 'Why concurrent GUI?' paragraph
Diffstat (limited to 'README.md')
-rw-r--r--README.md16
1 files changed, 16 insertions, 0 deletions
diff --git a/README.md b/README.md
index 12b22e3..c162019 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,22 @@ go get -u github.com/faiface/gui
Currently uses [GLFW](https://www.glfw.org/) under the hood, so have [these dependencies](https://github.com/go-gl/glfw#installation).
+## Why concurrent GUI?
+
+GUI is concurrent by nature. Elements like buttons, text fields, or canvases are conceptually independent. Conventional GUI frameworks solve this by implementing huge architectures: the event
+loop, call-backs, tickers, you name it.
+
+In a concurrent GUI, the story is different. Each element is actually handled by its own goroutine,
+or event multiple ones. Elements communicate with each other via channels.
+
+This has several advantages:
+
+- Make a new element at any time just by spawning a goroutine.
+- Implement animations using simple for-loops.
+- An intenstive computation in one element won't block the whole app.
+- Enables decentralized design - since elements communicate via channels, multiple communications
+ may be going on at once, without any central entity.
+
## What needs getting done?
This package is solid, but not complete. Here are some of the things that I'd love to get done with your help: