aboutsummaryrefslogtreecommitdiff
path: root/source/00_content/commits/slang
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-04-13 00:36:45 +0200
committerAdrian Kummerlaender2019-04-13 00:49:11 +0200
commit6e5e71882d9d9969e0ffe3013e656cac8fa4f115 (patch)
treeb25460980bf2a9a172c7c7872f0468e05261c2bc /source/00_content/commits/slang
parentcd9463e572f31b82a73cdab6db6b53f3a1237b3e (diff)
downloadOverview-6e5e71882d9d9969e0ffe3013e656cac8fa4f115.tar
Overview-6e5e71882d9d9969e0ffe3013e656cac8fa4f115.tar.gz
Overview-6e5e71882d9d9969e0ffe3013e656cac8fa4f115.tar.bz2
Overview-6e5e71882d9d9969e0ffe3013e656cac8fa4f115.tar.lz
Overview-6e5e71882d9d9969e0ffe3013e656cac8fa4f115.tar.xz
Overview-6e5e71882d9d9969e0ffe3013e656cac8fa4f115.tar.zst
Overview-6e5e71882d9d9969e0ffe3013e656cac8fa4f115.zip
Replace commit feed aggregation with manual import
This is the starting point for extending _Overview_ to support various types of recent updates (i.e. not just blog articles and commits over a certain message size). While direct fetching and rendering of markdown-formatted Git commit messages is an attractive concept, this new approach should be much more flexible. As a side benefit commit entries can now be edited and expanded compared to their fixed Git reference. e.g. retroactively expanding upon older commits or adding example media that doesn't strictly belong inside the actual commit message.
Diffstat (limited to 'source/00_content/commits/slang')
-rw-r--r--source/00_content/commits/slang/2017_04_13_21_51_d2126fe52fd3c002631e66fa7d6e2d5cd8862bea.md21
1 files changed, 21 insertions, 0 deletions
diff --git a/source/00_content/commits/slang/2017_04_13_21_51_d2126fe52fd3c002631e66fa7d6e2d5cd8862bea.md b/source/00_content/commits/slang/2017_04_13_21_51_d2126fe52fd3c002631e66fa7d6e2d5cd8862bea.md
new file mode 100644
index 0000000..ad39eee
--- /dev/null
+++ b/source/00_content/commits/slang/2017_04_13_21_51_d2126fe52fd3c002631e66fa7d6e2d5cd8862bea.md
@@ -0,0 +1,21 @@
+# Implement deferred word, conditional resolution
+
+Due to the non-trivial way tokens were previously processed the compiler could not safely perform tail-call elimination. Thus the _slang_ evaluation depth was restricted by the maximum call stack size.
+
+This issue is mitigated by introducing deferred word resolution - i.e. pushing expanded tokens onto a buffer stack and processing them in an explicit loop.
+
+This change ties into the implementation of the language's conditional primitive. The previous implementation did implicitly not support direct nesting of conditional expressions such as:
+
+ truthA if
+ mainBranch
+ truthB if
+ secondaryMainBranch
+ then else
+ then
+ alternativeBranch
+ else
+
+This issue is now made explicit by disallowing direct nesting of conditionals as depicted above. Appropriate exceptions are generated when required and the conditional primitive is reimplemented in a more robust fashion under the assumption that this rule holds. Note that nesting is still fully supported iff. the nested conditional is contained in a deferredly evaluated word. As a positive side effect this will make it slightly harder to generate unreadable code by forcing developers to write simpler words.
+
+The main change of the conditional primitive lies in deferring branch token processing until the conditional expression is concluded by `else`. This is achieved by capturing non-dropped tokens in an internal buffer akin to how the word definition operator `ยง` is implemented.
+The branch buffer is discharged after `else` is evaluated. Discharging is triggered via the newly introduced `result` method of the primitive evaluation module. This avenue for injecting tokens into the processing stream may be used by further primitives in the future.