{"id":20770436,"url":"https://github.com/dannyvankooten/nederlang","last_synced_at":"2025-04-30T13:44:14.488Z","repository":{"id":62057333,"uuid":"555354315","full_name":"dannyvankooten/nederlang","owner":"dannyvankooten","description":"Nederlandse programmeertaal 🇳🇱. Geïnterpreteerd en met dynamische types. Met bytecode compiler en virtuele machine, in Rust.","archived":false,"fork":false,"pushed_at":"2024-05-29T08:23:13.000Z","size":1321,"stargazers_count":39,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-30T13:43:39.321Z","etag":null,"topics":["bytecode","compiler","interpreter","nederlands","programming-language","rust","virtual-machine"],"latest_commit_sha":null,"homepage":"https://dannyvankooten.github.io/nederlang/playground/","language":"Rust","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dannyvankooten.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-10-21T12:18:23.000Z","updated_at":"2025-03-12T03:08:08.000Z","dependencies_parsed_at":"2023-01-24T02:01:05.981Z","dependency_job_id":null,"html_url":"https://github.com/dannyvankooten/nederlang","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyvankooten%2Fnederlang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyvankooten%2Fnederlang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyvankooten%2Fnederlang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyvankooten%2Fnederlang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dannyvankooten","download_url":"https://codeload.github.com/dannyvankooten/nederlang/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251713962,"owners_count":21631628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bytecode","compiler","interpreter","nederlands","programming-language","rust","virtual-machine"],"created_at":"2024-11-17T12:09:29.133Z","updated_at":"2025-04-30T13:44:14.428Z","avatar_url":"https://github.com/dannyvankooten.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nederlang 🇳🇱\n\nNederlang is een geïnterpreteerde programmeertaal, in het Nederlands! Met als bestandsnaam extensie... `.nl`! Het maakt gebruik van dynamische types en is geïnspireerd door talen als JavaScript, Python en C.  \n\nDe Nederlangcode wordt gecompileerd naar bytecode en dan in een virtuele machine uitgevoerd. De compiler en virtuele machine zijn geschreven in Rust.\n\nDit hele project is natuurlijk een grapje en vooral bedoeld om van te leren. Het doel is om een taal neer te zetten die compleet genoeg is om [Advent of Code](https://adventofcode.com/) mee te kunnen doen.\n\n## Proberen\n\nJe kunt Nederlang direct vanuit je browser proberen in de [Nederlang speeltuin](https://dannyvankooten.github.io/nederlang/playground/). \n\n\n## Installeren\n\nOm Nederlang op je computer te installeren moet je voorlopig nog even zelf builden vanaf de source (met [cargo](https://www.rust-lang.org/learn/get-started)).\n\n```\ngit clone git@github.com:dannyvankooten/nederlang.git\ncd nederlang\ncargo build --release\n```\n\nNa het uitvoeren van bovenstaande stappen staat de executable in `target/release/nederlang`. Om deze op ieder pad beschikbaar te hebben kan je deze (op Unix systemen) kopiëren naar `/usr/local/bin`.\n\n```\ncp target/release/nederlang /usr/local/bin/nederlang\n```\n\n\n### Types\n\nNederlang heeft eersteklas ondersteuning voor de volgende types:\n\n- Null\n- Booleans (`ja` / `nee`)\n- Floats\n- Integers\n- Strings\n- Arrays    \n- ~~Maps~~\n- ~~Sets~~\n\n### Expressies\n\nDe standaard wiskundige rekenregels gelden voor expressies:\n\n```\n1 + 1 * 2 - 3 / 3 % 2   // =\u003e 0\n!ja                     // =\u003e nee\n1 \u003e 5                   // =\u003e nee\n1 \u003e 5 || 5 \u003e 1          // =\u003e ja\n(1 \u003e 2 \u0026\u0026 2 \u003e 1) || ja  // =\u003e ja\n```\n\n### Variabelen\n\nVariabelen worden gedeclareerd met `stel`:\n\n```\nstel x = 100\n```\n\nVerwijzen naar een niet-gedeclareerde variabele resulteert in een fout:\n\n```\nz + 100             // VerwijzingsFout: z is niet gedeclareerd\n```\n\nVariabelen zijn gelimiteerd tot de reikwijdte van het blok of de functie waarin ze worden gedeclareerd.\n\n```\nstel x = 100\n{\n    stel y = 100\n    y + x           // =\u003e 200\n}                   \ny                   // VerwijzingsFout: y is niet gedeclareerd\nx                   // =\u003e 100\n```\n\nEenmaal gedeclareerde variabelen kunnen een nieuwe waarde krijgen toegewezen.\n\n```\nstel x = 1\nx = 2\nx                   // =\u003e 2\n```\n\n#### Syntactische suiker\n\nOm een variabele een nieuwe waarde toe te wijzen in relatie tot zichzelf kan je in plaats van de volledige vorm:\n\n```\na = a + 5\na = a * 100\n// etc..\n```\n\nOok het volgende schrijven:\n\n```\na += 5\na *= 100\n// etc..\n```\n\n\n### Functies\n\nFuncties declareer je in de volgende vorm: `functie \u003cnaam?\u003e (\u003cparameter?\u003e, ...) { \u003ckorpus\u003e }`\n\n```\nfunctie optellen(a, b) { \n    a + b \n}\noptellen(2, 3)      // =\u003e 5\n```\n\nAlternatief kun je functies ook declareren in de volgende vorm:\n\n```\nstel optellen = functie(a, b) { a + b }\noptellen(2, 3)      // =\u003e 5\n```\n\nDe laatste waarde in een functie wordt automatisch als antwoord aan de aanvrager teruggegeven. Alternatief kan je ook eerder antwoorden met `antwoord \u003cexpressie\u003e`.\n\n```\nfunctie fibonacci(n) {\n    als n \u003c 2 {\n        antwoord n\n    }\n\n    fibonacci(n - 1) + fibonacci(n - 2)\n}\n```\n\nFuncties zijn geldige waardes in Nederlang en kan je dus als parameter meegeven aan een andere functie:\n\n```\nfunctie opteller(a, b) {\n    a + b\n}\n\nfunctie bereken(f, a, b) {\n    f(a, b)\n}\n\nbereken(opteller, 2, 3)     // =\u003e 5\n```\n\n#### Voorwaardelijke stellingen\n\n```\nals 1 + 1 == 2 {\n    print(\"Ja, 1 + 1 is echt 2!\")\n} anders {\n    print(\"Mijn hele leven blijkt een grote leugen.\")\n}\n```\n\n#### Lussen\n\n```\nstel aantal = 5\nzolang aantal \u003e 0 {\n    aantal -= 1\n}\n```\n\nOm onder voorwaarde uit een lus te stappen gebruik je `stop`:\n\n```\nstel aantal = 1\nzolang ja {\n    aantal += 1\n\n    als aantal == 100 {\n        stop\n    }\n}\naantal                      // =\u003e 100\n```\n\nOm vroegtijdig naar een volgende iteratie van een lus te gaan gebruik je `volgende`:\n\n```\nstel n = 0\nzolang n \u003c 10 {\n    als n % 2 != 0 {\n        volgende\n    }\n\n    // n is een even getal\n    // print(n)\n\n    n += 1\n}\n```\n\n### Ingebouwde functies\n\nNederlang komt met enkele ingebouwde functies die overal beschikbaar zijn.\n\n`print` om iets naar de standaard uitvoer te schrijven.\n\n```\nprint(\"Hey {}. Je bent nummer {} die dit echt leest.\", \"jij\", 1337)\n``` \n\n`bool` om een object naar een boolean om te zetten:\n\n```\nbool(1)             // ja\n```\n\n`int` om een object naar een geheel getal om te zetten:\n\n```\nint(\"15\")           // 15\n```\n\n`float` om een object naar een decimaal getal om te zetten:\n\n```\nfloat(\"3.1415\")     // 3.1415\n```\n\n`string` om een object naar tekst om te zetten:\n\n```\nstring(1)           // \"1\"\n```\n\n### Lijsten\n\nLijsten creer je met `[]`, bijvoorbeeld:\n\n```\nstel a = [1, 2, 3]\n```\n\nOm het zoveelste element uit een lijst op te vragen gebruik je `lijst[index]`, waar `[0]` verwijst naar het eerste element uit de lijst.\n\n```\na[0]                // =\u003e 1\n```\n\nOm een nieuwe waarde aan het zoveelste element in een lijst toe te schrijven gebruik je `lijst[index] = waarde`:\n\n```\na[0] = 100\n```\n\nJe kunt een negatieve index gebruiken om vanaf het laatste element te beginnen met tellen.\n\n```\na[-1]               // =\u003e 3\n```\n\n\n## Licentie\n\nGPLv3, voor nu.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdannyvankooten%2Fnederlang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdannyvankooten%2Fnederlang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdannyvankooten%2Fnederlang/lists"}