HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
damelang
gezira
C2015–2019
damelang / gezira

gezira

Discover this repository through its Hacker News conversations.

2Distinct people
3Mentions
0Explicit recommenders
169GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A public description has not been verified.

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year3 dated mentions

Observed mentions: 2015-11-10 15:25:37 UTC to 2019-05-06 21:30:21 UTC.

0122015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC202
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC000
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC101

What Hacker News says

3 sources
Since Alan Kay mentioned Nile, I'm gonna dump here the list of relevant resources on Nile and its derivative works that I've found over time: Ohm, the successor to the parser (Ometa) used by Nile: https://github.com/harc/ohm Maru, Nile's compiler/interpreter/whatever: https://www.reddit.com/r/programming/comments/157xdz/maru_is... Nile itself: https://github.com/damelang/nile (pdf presentation in README) https://programmingmadecomplicated.wordpress.com/2017/10/11/... Gezira, svg drawing lib on top of Nile: https://github.com/damelang/gezira/blob/master/nl/stroke.nl http://web.archive.org/web/20160310162228/http://www.vpri.or... https://www.youtube.com/watch?v=P97O8osukZ0 https://news.ycombinator.com/item?id=8085728 (check the demo video) https://www.youtube.com/watch?v=ubaX1Smg6pY (live demo on stage later on) https://github.com/damelang
Read the rest
/gezira/tree/master/js/demos (downloadable and runnable in browser) KScript, UI building on top of Nile: https://www.freudenbergs.de/bert/publications/Ohshima-2013-K... http://tinlizzie.org/dbjr/KSWorld.ks/ Final Viewpoint Research Institute report, where the entire system (antialiasing, font rendering, svg, etc) was rendered using Nile into Frank, the word/excel/powerpoint equivalent written completely in Nile + Gezira + KScript): http://www.vpri.org/pdf/tr2012001_steps.pdf VPRI wiki restored from archive.org: https://web.archive.org/web/20171121105004/http://www.vpri.o... Shadama, which the Nile author (Dan Amelang) worked on too: https://2017.splashcon.org/event/live-2017-shadama-a-particl... Partial DOM reimplementation on top of Gezira: https://github.com/damelang/mico/blob/master/gezira/svg.js Partial reimplementation of Gezira: https://github.com/Twinside/Rasterific And the famous Nile Viewer itself (everything interactive): http://tinlizzie.org/dbjr/high_contrast.html https://github.com/damelang/nile/tree/master/viz/NileViewer Commentary: http://lambda-the-ultimate.org/node/4325#comment-66502 https://fonc.vpri.narkive.com/rtIMYQdk/nile-gezira-was-re-1-... http://forum.world.st/Vector-Graphics-was-Pi-performance-fun... Since Alan Kay himself is on Hacker News, maybe he can comment with more links I couldn't find. It's hard to fire up the live Frank environment, though understandably reproducing the working env might not have been a top goal. Maybe someone more cunning can merge these into a single executable repo or whatever so that I can stop playing archaeologist =)
In Alan Kay on “What Made APL Programming So Revolutionary?”
Alan Kay talks about Gezira, a library built with Nile (and the motivation for making Nile, althoug Nile is much more general purpose). There's a JS version of Nile/Gezira which was used for Brett Victor's demonstrations, which can be found here [1] The main Nile compiler here is written in Maru, a programming language of Ian Piumata's which is another awesome project on it's own. It's essentially a Lisp where you can define how the evaluator behaves for a given type.[2] The version of Maru used is included in the Nile repo though. It can be built with GCC or MinGW. The compiler translates Nile to either Maru or C code. There's a squeak version which can be found at [3] And also a Haskell vector library which exposes a similar interface to Cairo, but is modeled as Gezira under the hood (used for purely functional image generation). Althou
Read the rest
gh this implementation is function based and doesn't really provide a proper streaming abstraction as provided by Nile. [4] [1]: https://github.com/damelang/gezira/tree/master/js [2]: http://piumarta.com/software/maru/ [3]: http://tinlizzie.org/updates/exploratory/packages/ [4]: https://hackage.haskell.org/package/Rasterific
In The Nile Programming Language
Here's a small comparison of Nile and (manually translated) JS code. Nile[1]: DecomposeBeziers : Bezier >> EdgeSample ∀ (A, B, C) inside = (⌊ A ⌋ = ⌊ C ⌋ ∨ ⌈ A ⌉ = ⌈ C ⌉) if inside.x ∧ inside.y P = ⌊ A ⌋ ◁ ⌊ C ⌋ w = P.x + 1 - (C.x ~ A.x) h = C.y - A.y >> (P.x + 1/2, P.y + 1/2, w × h, h) else ABBC = (A ~ B) ~ (B ~ C) min = ⌊ ABBC ⌋ max = ⌈ ABBC ⌉ nearmin = | ABBC - min | < 0.1 nearmax = | ABBC - max | < 0.1 M = {min if nearmin, max if nearmax, ABBC} << (M, B ~ C, C) << (A, A ~ B, M) JS[2]: gezira.DecomposeBezier = function(downstream) { return function(input) { var output = [];
Read the rest
while (input.length) { var a_x = input.shift(); var a_y = input.shift(); var b_x = input.shift(); var b_y = input.shift(); var c_x = input.shift(); var c_y = input.shift(); var _1_x = Math.floor(a_x); var _1_y = Math.floor(a_y); var _2_x = Math.floor(c_x); var _2_y = Math.floor(c_y); var _3_x = Math.ceil(a_x); var _3_y = Math.ceil(a_y); var _4_x = Math.ceil(c_x); var _4_y = Math.ceil(c_y); var _5_0 = _1_x == _2_x; var _5_1 = _1_y == _2_y; var _6_0 = _3_x == _4_x; var _6_1 = _3_y == _4_y; var _7_0 = _5_0 || _6_0; var _7_1 = _5_1 || _6_1; var _8 = _7_0 && _7_1; if (_8) { var p_x = _1_x < _2_x ? _1_x : _2_x; var p_y = _1_y < _2_y ? _1_y : _2_y; var w = p_x + 1 - ((c_x + a_x) / 2); var h = c_y - a_y; output.push(p_x, p_y, w, h); } else { var abbc_x = (((a_x + b_x) / 2) + ((b_x + c_x) / 2)) / 2; var abbc_y = (((a_y + b_y) / 2) + ((b_y + c_y) / 2)) / 2; var min_x = Math.floor(abbc_x); var min_y = Math.floor(abbc_y); var max_x = Math.ceil(abbc_x); var max_y = Math.ceil(abbc_y); var _9_x = Math.abs(abbc_x - min_x); var _9_y = Math.abs(abbc_y - min_y); var nearmin_0 = _9_x < 0.1; var nearmin_1 = _9_y < 0.1; var _11_x = Math.abs(abbc_x - max_x); var _11_y = Math.abs(abbc_y - max_y); var nearmax_0 = _11_x < 0.1; var nearmax_1 = _11_y < 0.1; var m_x = nearmin_0 ? min_x : (nearmax_0 ? max_x : abbc_x); var m_y = nearmin_1 ? min_y : (nearmax_1 ? max_y : abbc_y); input.unshift(a_x, a_y, (a_x + b_x) / 2, (a_y + b_y) / 2, m_x, m_y, m_x, m_y, (b_x + c_x) / 2, (b_y + c_y) / 2, c_x, c_y); } } downstream(output); }; }; Should be obvious why a DSL is preferred in this case. Although there are obviously some more succinct ways one could write it in the JS version, the constraints of trying to fit it into javascript syntax are probably not worth the effort, and it's unlikely you could ever get the same amount of information per character as an eDSL. Conventional language don't really overlook streaming because there's not really any one solution that fits all when it comes to it, so it's typically left as a library problem. [1]:https://github.com/damelang/gezira/blob/master/nl/rasterize.... [2]:https://github.com/damelang/gezira/blob/master/js/gezira.js#...
In The Nile Programming Language

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.