diff options
author | metamuffin <metamuffin@disroot.org> | 2023-02-13 20:25:04 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-02-13 20:25:04 +0100 |
commit | c19adca147d38562b3f4a06cb2205e043bc24856 (patch) | |
tree | 808ceebd163294cc66ed8882885348b914ab1125 /content/articles/2022-11-07-programming-language-design.md | |
parent | 77eef59404acaed6faa636239bd18010e34a91de (diff) | |
download | metamuffin-blog-c19adca147d38562b3f4a06cb2205e043bc24856.tar metamuffin-blog-c19adca147d38562b3f4a06cb2205e043bc24856.tar.bz2 metamuffin-blog-c19adca147d38562b3f4a06cb2205e043bc24856.tar.zst |
restructure for embedding into my website
Diffstat (limited to 'content/articles/2022-11-07-programming-language-design.md')
-rw-r--r-- | content/articles/2022-11-07-programming-language-design.md | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/content/articles/2022-11-07-programming-language-design.md b/content/articles/2022-11-07-programming-language-design.md deleted file mode 100644 index 674e696..0000000 --- a/content/articles/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 = { - -} -``` |