An open API service indexing awesome lists of open source software.

https://github.com/acutmore/typescriptvm

Compile-time emulation of a 4-bit Virtual Machine using TypeScript's Type System
https://github.com/acutmore/typescriptvm

compile-time fizzbuzz typescript virtual-machine

Last synced: 11 months ago
JSON representation

Compile-time emulation of a 4-bit Virtual Machine using TypeScript's Type System

Awesome Lists containing this project

README

          

Original gist: https://gist.github.com/acutmore/9d2ce837f019608f26ff54e0b1c23d6e

A 4-Bit Virtual Machine implemented in TypeScript's type system. Capable of running a sample 'FizzBuzz' program.

Syntax emits zero JavaScript.

```ts
type RESULT = VM<
[
["push", N_1], // 1
["push", False], // 2
["peek", _], // 3
["mod", N_3], // 4
["ifNZero", Line<8>], // 5
["replace", True], // 6
["print", "fizz"], // 7
["peek", _], // 8
["mod", N_5], // 9
["ifNZero", Line<13>], // 10
["replace", True], // 11
["print", "buzz"], // 12
["ifNZero", Line<15>], // 13
["printHead", _], // 14
["eq", N_15], // 15
["ifNZero", Line<19>], // 16
["inc", _], // 17
["jump", Line<2>], // 18
["pop", _], // 19
["stop", _] // 20
]
>;
// RESULT['stdOut'] ==
// [1, 2, "fizz", 4, "buzz", "fizz", 7, 8, "fizz", "buzz", 11, "fizz", 13, 14, "fizz", "buzz"];
```

[Demo](http://www.typescriptlang.org/play/?alwaysStrict=false#code/C4TwDgpgBAcg9gfQIICcDmUC8UCGA7EAbgChRIoBJPAZ2BQFcBjYASzj2QBNOUJrqsuAgG0AuoSgB6SVHrU+uFChwhhAcgA2EPGmAALNaKjA4UFnk4QAHmbwmoABRRw0ygLZqB52g2ZsapODQAEKCAIxQAD5QAAwkZCEUACoAyggALILCwQA0ULn5ecHigeQw9G6Cwclp6SSl0AiCamr10gDEvGj+UADCcPR2EChS0mPjE5NT0zOzk8QNfQNDI9gAagCyADzCxFD7UOpgcgZ5MAhhonkHN6NQYXsHRyjmwAASEDicankIV7d3ABMj326ggAEcfrALgBWf4Ag7SKAAZhBhzULAAZjAAFrDOBQgAy5ggWwA7AA+eFI9Jo9TmRhQv7XBGImQwulqABWFTARJJW0BVJZ+yRADZObQ4HzfkZWWyoGTHqIKfVXsNMThGNAknxgP1BsBhlAAN5o6yQZgQTgALlNaJutE4AHl6MA7cIAERhT15T2A31QT3IwOe9KhmGhsWhsmhgAcoYAnKGwjEUz6-WEA5mQ5nw5nI6I0QBfNFa4D0HAaO262gGlZgqyWo3fIul9UoTXaqC1-XLI0jM03cuV6tLQ3DYil4gdbQ8CDddjjlajOZr9cb+YzySdBc9ABiLAAXkfgvQT6vN1frzMFgkoIeT2eL+ttrsbkcTlDzpcRbckQ8H5qMc1CnA+VbyPC-4yMCQGQBAADWTJQaySKokBbhwN8ZwIMiKEAjSnJYri+L8ngpJxsKorspyvBgBoWoQFCSQMBA+HipyYAvHYUJqJix5HoYf5IkqcEQIhyF-gRMhxpymHYdCcJSTcSKJkR2J4s4ZGkmEyJUQBMS0RA9GMcxrHsTIYSAU8wHccAvEAEbnoJFn3LBNnEZpBJ5MS5FbGEML6ZZ6E2VxrwfF8knSfctJARC36wvh0H3ByQGeaRPkCmEiZBfcEppXgjKyspyVhKJNk8m4MpQL5pJCq5YSyXB0pRfK1H3GpQFStVfxte1gKGfsKpqisXY6nqj6ns59o3BaEBWraM0Ik6rruuiYS8YCvH8SevHpI5znbQJvFkrxcZHbteRqE5l1QGoVkXYJV26bxYT7VdO1PXdN0uSWZbMKONYTQJz5Ho2zbWoYU7EB2Y09sDT7TUOBwjlWdqTaD0Pbu0c5dAeIPTTeRPE3eQSUDQdBMKw7ACJgjzRF6IF6IG5RuHKfUIkiwh6HkAB0-PAOz+wALQUqCODoHkPNQPzvOC-ThyemA0os4gqBoELHPtdzfMC5rougrL8v7AznqcPQYCq8g6Ca1rXPS0b+ti4c0sO3rCuM+JCFW+rtt9fbUtu3LRgGy7ruB7rwce56dEMdqLMVH7bUBzLeu3KHwgS2gkfG1EisMj7Nta8lOup8H6fO8IADUVdB7npvyQnbPF5zMil47FegnoUAAKSKNnZf14rEJN0nxcpx3NwZ93mDYFnUs50WJuK5Vlt5FQPhU-4XDzvwQtIqvUBcS47jGKY3iU34S44MA-fR+lziBhvl-UxwSDcLwe93MrYBQHonycDyFiKAABCbAMQoCH2Pq4HAlR7AX18K-XAt8s7RzCnYCKnBC4aw5kiRg0oQB-wAXkfBAA3YYt97A+HMBgfQ2hcDcDPlAJ0AxgBoLsoGahOgx6twYZwfuTCWFumjt1bB4gW53D0FWYAICoC8ArCgGgUB8FDDsAIOAmJmHAE4KwhYkgABU+i9j6J7HoFgXgBB0KgG4HA5goDaDoIQ5WrwmEMDwMYf+UA1gsBQBWKsUANhajMeRYxUAAACYAJawMcM4GBlRhamOgBLZQhCNG2E3lfJR9hrDzTdBAUJYT5H0EUQIE0WiXRujtFwtAYgoCligPoyQixNhbEeE4E+0TrBGgsAIZ+iD-DUDEDkR4BioCkIliwHADktDUDtI0x4AAlPg9ANC3y6XOAQ+BCHYCoORFALT2lxIpMQMW2BkZIgAKryFwMYdwysNAkiYesiwPYggpEYC8MA9kBBJDJs-fArAb49EsF87uDy3AsFvmkmEg17h2gObE9w688B7IRR0tweQhlQCWdQFZwAKSqkeDEO0OK8VeloDfCAnoSjFmEKS1ZXpgA4DQNS+xVhumcAEJ6Byyx45QAAPz3CgHaGIJRFi7OGC0tpiLOnso2eTDJr9BlXEeMEXlChnmcqEKoIw2AhmLOWastlHLNkEEEEkFgjAEJbEOe4Y5pylqXOucAAA7qYOgsD7kkksaYTExS6EjAZLwHA1zwWQtlo8MIdoJX7O2La2BeQnDGTnFsLZRR1XUApMMhEFqrVbHpcAclTKjTUuEKKvIBai2UtLb+bFhrC2egpSW0QwhAT-ErY24tVKW14WObcQl+xiV1txaskgtKO1MpZUYTVXKeWDHjo8QVAAKNV86+DqC0DofQhhjXytSgcQVsL9h2jCAASkeCKsVSIACiVhclGg8dAci7L0kv38IsXN1rpXot3T0hVb6ab6v2A4Xov6tVbNqXq-4SJoHuGFvgicIwEmbt0N3NJySVC2EsHerwdhTB9K3jTR4KQmVWrAwIVmkHDgqv2CRipay5V-uqVRsQJzBDnJkAAEQgPxciuANAaEfV4jYr7+lEf2MBL8NZLXWvjRimJyaLCpoIIm3oWaFOQCU3J4QIGvQof0NSlttaSNagQupujq0B13R-moaTea5OJroimtNjg1N5CSLYjQWwTNWvM9oyzJAJPmz5HZ2TMr5NJs05wZTIBVPqciymzB3nSNmbyD51LUALNuis8BL2tmewyZteFxzinosuZA-FpzSmkseZYF59LBK0spb8-RnLsdTKhaK+ikrUWYtxZ6ym7TunPT6eZqIIz-xav1eay1gLjwMSFXy5+rrcSBtKfK25jTKakCcc4xkLYSWGs4TCOpqbyXTONcy-57LgW7rySW4VhzW31sqdc5V0rWwNjOj2+kA7ADzu+cc+inTvQ9PaFQ4Z4QlxTueYB2Z2bN35vxU609hLL3YtvbW9F69ABFfbh3mtA7iSDsHW6xsTb8xdprrXbtIm5LyNQzDxJuE2QINAcAsI3LwDfYp-jWBuGgPYOdhVoBLisR6qqcAHkhIk6vfLZTJ12m5eqz0Egm0QA9Kj8LJORvg4M+NqH-x0vU9WkYYst2MQaVInaAnF3yPQiPQKgr9nivPbK69ir7nYdHau61tEKPXdDdB7rsnkPa1nZ91l-FFv0HvAAQ9l33W3d9cx1d0zWOtjnCSHAEj3E0B-a+HDy7UeCUx7sgnsLSe0fu4x57tPVqM9B9JxDg3xnrv4py91eXxhmVK8-ni1XWjKV2jKStSpdbyEoHkMl1rdS6m05kEkf+7jzDYdsPYKx+ClDzVvggwj7iHIhutFAMXnjGDFN4HYI+4X4P9mNEukD57aVN5Dy3ltoqr0yHSMLYIkKoCoEhT0AF1YEYBqhcEtSgAuTwD-yXSQEJAuXPSRASSkQsC0CgDwAqAcmGAEAgXsACm3CgASQgEnxAH0BoWURphfmP0xGcEqDCGFgcj-w0HANALQEpWoFJjKAQAgT1RiDyD4NiH4JKHvB-CyDCH4IkNiGELJnOEBCyAEPEMEKkPiBkNwjELyEUIENFRUK4MyF4MkM0OkK4JhHUKUMMJ0OgHODFHkI0NsOUMWHODJFMMUPMIcIQDjBsKUIUKMMsIQETFMK0I0J8OhFTE8M0KCIsJCIiD1RcIMOCJ-DkP0LMIiLcN0gCLsMuEiJ-D0MOAUIyPiNhGcPyMiP3AgmgGwHODiA-VYkEB-HqHvC+x+1aX2AwIF2UBMBGBnVgAqGzSgE4BYFIXMTgE6MYy1VZmGQdSQGoGqFSH204woDWH21aOGBvmGLyH6MGOoGGIpHUF4BsVX2GEMEJUWE4wGJYEsBQGaLkQgH2IsGNC6JmNqF6I2KGJGJNXyBqAyF6IQyvweM+NpAdV6GdA2AcH2z2NsTuJQHWLOK2JQB2N134FZS6OskFWEB+OADyHBIOJQCXmFUOB2yaJ-BIX7HMwuWCDBJuIhIuOhM2O2LFXvCmMeP2xgAdRgHtyZMyEFTZLtHIkn3qLJnmMWN+0eGWPaOGPZP+OeJhPFL+NmPSF6NGXGReCmRmTmSaX2HRIlLlNqO4N6KxMhK1NqEEFFNWJQDY2wCXUeFOMGIuK2H1OpL6OlKhIoMNDFi6OEHMExGNF6CATwC9JGAWVxMFWtPOOGC2EZP+PzXUxeNhLyAjLlK2DUzdNGIEA9L9O9N9P9OxSDKgBDNtPjNqCjJpNeLjOmMjKTPtzTKzJ9NsCzMDMXVzLOPzLLITIWWjKdNLI5MTIJUrM9IzNrONHrP2GDKbLDILP2zbOLNjP-xbMLIrPdL7JGBrMXOzIbLzLHNnInPbNpOdPHN+3nJTMOBXOXPTIDJzPXMuL3KLMdJ3M7PLJ7IXNPL6EzMHPPNHMvM3N+0nJvJLJnK7IPPeKrP7JXKHKdwvPDM-OvJjLWL-PvOTMAuPJfLPLXPfIgq7O-Ogt3MgoAvlSAqXKQtXOHMbJtI3PQu3N-KvJwr-TwufIHOQqIvAqvIwo7NgoTKoq1RopPLrLfJIo-LIqnJgsoofMPM4oItApHN4rQsjOYtvNYrnOEoQqfK4tfJQskqYvIunKEvgtwsQrosIrAtQvUoEqwv-IUp0qUrEpzLKXRLtF6AkHtOGBJTqQvXQOIONB5LcpGA8snzxN5Pctcp8u8v8r8q8oCsnGPTCtCpCt8s8pisCsiriuCtiqCrNNPX5PIA2AuUJH20eC6CQENK+NyoXFCFlKeJGRMSVMmWmT4DVMeFxTcAgVKoyCqGSAAHUKAUhr1kAYBOMdg8qy1-h+ry1ri0AkABrMSFwxqP8Jq0Bggs06qKgIgmqciCScqPwBCkAeq7TJrDcZrggBr1NNrer+ra0uh9roc4ytqTrBrirW0VQaMDh6rYV5r9h6q5DlrBBVrhT1rJCjrtrRq7q9qDrLrjqdq20gbocHrXrFrHgXrmEKhkQCqVrdt9sy1JCNqrqdq8IgbRUqI3r7VBB6rkR0roAUgyS1qRr8rlq9TiqkaFSKqJkVSaqGl1SbkuiybggkgFkkBegkgEAFlr0ybCQkhBB9wsrsqOauaeakhnQFktgBChqbrZrgbHgHJ7dJbubeb+bBasqRbsAxbCQJaySpbebZbU0vQeUlA4AXVqUZqxrTrbqLrHhQD2bjbNa+aBaha9aHxxaEANbpazaHILbhjnAbalaxrwaRr9q204b+FXbOb3btavbRbfb-bTa5bGBg6raw67bhBsao686VRzS5LUacAvR+jMRMRbaoAg6zYsQq7-hM667K7q7OBy767DNjiGSUbvrKa6airZr+7RQGblTqrZkWbHgcB7cCTr0Fkk7daU7DbkBdtZ75bc7hqzqVb9g1auiZ657PaF79bfa97zbPRGBkkQBq7rqIaVRvjp6V796dbhbF7sqT7a7z6lBL7w7AaC6Y7nj77ONZ757n6j6l6T6m6P6UAv7c787N7e1i6rzM5yUKhq7a76rq6m70H-g27G0UHxsu6yYDajaE6A65bVaQ7rb2Teip6Hjeid7DzchyqxlGax7aroaHIPVmBhilrDy06Pan7va3g4D9w-a3bSHU08gHI4bcUOHlAuGUB3reGxGtaD6QGoAhHCQRG+Gza0QZHOGOiwh26W6oaa6KGXVYbi7kYK7MQql6BZHyxhjAQjGG7btLbQ67Qza9G5GDGs7Q7q6vGHGFHfHrbqVCVzdODoAiHl7AGyGNSL6qHJ6Ent6kmpAR6qrVSJ79gvgLieH3i97gHBHhHonV6cBJG4bsnhhFG8mH6CnBANGRHwGL68gKmUBDHcG3BQnLGFq3A7QWmnH2nqVbtIGQAPG5a+mvRhnq6Wm2nJnhopwSbMtlH+Hk6zlHTK67RggJA3HraNn59Fh8nVHvbR8KgNmJBhndnwnFh6nRGSH07U0qGa72SHUrH667QAANM20pmuqzbZl1O0P6mAZ0JIVNdTKRsdBZ65k+mhhhyRp59jbp95z5spoZi+-5rar5sF+ZiJj4pIdqzq7q3q6F94jk2F5ah1d8f-dF8amureylwl3amlp2-YP6suyOoOv+x4FlwuyRwu45eksmIEkEimol+VEl1Woe1J5h0ejJ+ZDUxqw8wV0Ew5wQRV824aoO3G743J+VRV2p7AVVsu2tIOpl5RKpnV4EpVgRlVi182tlu6uGxgRGro3V5V-Vm1su-OoO+B55x4GZce2WimjU5EL0VwYAW2tEP6x1r0EeRu-p0N0J3o5lnq-bRQqNz0GNkhfpjN5RNp+N2+iN5N37NN7NxgLN8EDBtpktmIEN3xTp-YKzCENFpoxgat9N8txuyt9tzN6Nrt5RYNtt0J27UN0ZwNvtsHREkxyN-tkt-pv1hNgtpo1N6d3t0tntit8d6gedm4I6-bYtldst9dgdxu1tudou+t8F7Fl1q11Zv105+xcEO94d-IPZxYVVxJ2h8Vj94eqV9JhQWV3AQkPgagJffAEqhhz6rawF4FqR5p8pgAcWDQHBA7wDA+JYg96ocjOCBZBbhohFHHZNqM+cA-4GQ4KBwAQ8+CQ5QLmssagFvYA6A9I4kEbfvdHAkCffI8Q+GFI5ffvFx2FYlfoeJclKYcqqZoEH-YhHlbQ4qI+bGepY1fzf2AhG1b-VCFk8+YZeNaU-vbNbU9qLk9tf+HZZ04hCdfA40-k89d5YmKyB3d+yk7yBU6c-BEBBc70nRqEIWZgEM5FbU9JYYZ9f2CjSWmC5PVu0HRFVu3Cci9C7hViAi9iBPUeFLFpRwBbQcn5fIF84eaE9FaC-i+RjC4S7RCHTCGi9uyHSK-i-K9K5FRS6nEzgy6y+gHs-udoceY65dphb6LhewD+s5fRbKd6MjfWPtQWZZdy766WhC+q5C9q5uCHSqP2Bi6S7i5C+W4OCW4a7S+a+88+am4eIK9m7RA28S6W4q6JRH1O6i7q-uGi8a-S+EEy4WYDd+z861QKDy-8+UQebjsC8EB0f2CRe+d6LNsYDG5OVe7GcO4B7OUjWu5uHm-O-C5S8q8R4OGR7u829S6a+e5a9gGw4+4EDmvheK827K8e8-0oEsCrA0EITp5PwDSgDYKNAEDdRWX4SwJrvoDq1vgckIXwUl2oHIJgCOuoGGSRD0GttirIIEA+Uo4UCnt+UgHeU+VvmAjgH4BYGqtrPMEhWgGYJansStrNJEMm46++8++O4x-J5R-u7R6u-W9R8W5d72d2-x7aEMSWEn1vm-0YNvlaKwJGHsCnuqSgExHFNj3IPmREIQGz1zxoS2HcS6NZj7WNPt0qKd09DTBcpT8PNEMFW9E9Dz8z4QDkKL4DFL9T7UKL5DGr4L+aqL-DAb-ePOBMKL8jFb-lSsOz+jG77-UcOz9jAH7GPcOz4TFH4oz8Oz+TCn5CIgSL9TBL4ivz7b4uAiCX59Hn4SOz6zBX98rL7SKX-r9X6P85KDDegP55KP478v674is9G5zwFVz0W97g4GPoSnulyfUwONCKUURCB-0YmN+B-CA77BY+ZMWqFsB-724g+wwX4AgGyafwBAXRAjJkh3goCsgKoMnmt2gE-8M8LmBAEgLAH8BS8CPHsLDmIHICgOYTYQNQNIGDJX8+ue3LAMFQRBL09QAglxFKxQAAAZEQi+D8Ce8dWYQbwEnzOocACEehDQTgBuACCegYAMADACzJpA3QfQHY15hC9JAYAHxCwCsDCw0AegSQALn6IVBJA0yOAA5BMEhoBwkgBINQHgwX4QAwsdwJwBwCSBqAKARgJIAOJWA5YHBRYNXi2BrB7cLmVAG8XlQQYcBFpS0vsFITwpeissHAP8yUDEBT0WAMWFsgyFdEl0yQu0CuXVjUAMhmALIQQAbJFCXKYgCFv9hFpdFohDqOoSJRczJCRA42J3EkAGqJUUACzM7E0PeINDBAS6PIQLBrAlCyhIAHIYeWGGPAEAvTFTI8CNieYChT5JIEkHSGZDtU56IimsKqEE8lkEg0kI8H6FRC2hvRBZGELaHYDeiFAS4TqmwFdNYuBw7AqSCSAZ5OhFAZvPrnbTvZesLmCgOQOK4LIx0wgT4cwLGz25Oh4I1lOwLxLaFiAQAA)

Inspired by
- [TypeScripts Type System is Turing Complete](https://github.com/Microsoft/TypeScript/issues/14833)
- [How to master advanced TypeScript patterns](https://github.com/pirix-gh/medium/blob/master/types-curry-ramda/src/index.ts)

Notes:
- requires Typescript >= v3.3.3
- requires `"strict": true` in _tsconfig.json_