summaryrefslogtreecommitdiff
path: root/blog/2022-11-07-programming-language-design.md
diff options
context:
space:
mode:
Diffstat (limited to 'blog/2022-11-07-programming-language-design.md')
-rw-r--r--blog/2022-11-07-programming-language-design.md70
1 files changed, 0 insertions, 70 deletions
diff --git a/blog/2022-11-07-programming-language-design.md b/blog/2022-11-07-programming-language-design.md
deleted file mode 100644
index 674e696..0000000
--- a/blog/2022-11-07-programming-language-design.md
+++ /dev/null
@@ -1,70 +0,0 @@
-# Some Thoughts on Programming Language Design
-
-This is a collection of ideas to look at when inventing new langauges.
-
-## Other Ideas
-
-- The Language pushes abstraction to the limit by not noting any
- hardware-related issues like memory-allocations, parallelism, heterogenous
- computer architecture (CPU, GPU, …)
- - requires a very "intellegent" compiler and a way to describe unknowns like
- possible inputs, etc. in the language itself
-- Start with assembly but add a very flexible macro system
-
-## Type System
-
-```diff
-# Haskell
-data LinkedList a = Nil | Cons a (Box (LinkedList a))
-data Test = Empty | Blub Int | State { x :: Int, y :: Int }
-# Rust
-enum LinkedList<T> { Nil, Cons(T, LinkedList<T>) }
-```
-
-## Memory Management
-
-- **Drop when out-of-scope**
-- Garbage collections
-- Reference counting
-
-## Compile-time logic
-
-- Annotation when calling function to be run as-far-as-possible at comptime
-
-```diff
-fn format(template: String, args: [String]) -> String {
- template.replace("@", (match, i) => args[i])
-}
-
-fun add(x, y) x + y
-
-fun main() print(format!("@ ist @; @", ["1+1", 1+1, x]))
-# should expand to
-fun main() print("1+1 ist 2; " ~ x))
-```
-
-## Examples
-
-### Fizz-Buzz
-
-```diff
-for (n in 0..100) {
- if (n % (3*5) == 0) print("FizzBuzz")
- else if (n % 3 == 0) print("Fizz")
- else if (n % 5 == 0) print("Buzz")
- else print(n)
-}
-
-
-if (true) x = 1
-if (true) { x = 1 }
-```
-
-```
-f(x) = 10 + g(x)
-f x = 10 + g x
-
-main = {
-
-}
-```