{"id":19980805,"url":"https://github.com/vasyop/mono","last_synced_at":"2025-05-04T05:32:01.271Z","repository":{"id":253168104,"uuid":"149812416","full_name":"vasyop/mono","owner":"vasyop","description":"A language for learning","archived":false,"fork":false,"pushed_at":"2018-09-28T19:55:35.000Z","size":336,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-08T03:41:38.904Z","etag":null,"topics":["begginers","data-structures","heap","interpreted-programming-language","learning","pointers","stack"],"latest_commit_sha":null,"homepage":"https://vasyop.github.io/mono/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vasyop.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-21T20:06:24.000Z","updated_at":"2021-08-24T19:08:39.000Z","dependencies_parsed_at":"2024-08-14T23:08:27.467Z","dependency_job_id":null,"html_url":"https://github.com/vasyop/mono","commit_stats":null,"previous_names":["vasyop/mono"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasyop%2Fmono","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasyop%2Fmono/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasyop%2Fmono/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasyop%2Fmono/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vasyop","download_url":"https://codeload.github.com/vasyop/mono/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252293082,"owners_count":21724960,"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":["begginers","data-structures","heap","interpreted-programming-language","learning","pointers","stack"],"created_at":"2024-11-13T03:45:05.310Z","updated_at":"2025-05-04T05:32:00.967Z","avatar_url":"https://github.com/vasyop.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Demo [here](https://vasyop.github.io/mono).\n*hit F10...*\n\n# I have no programming knowledge!\n\n- You are in the right place! Tutorial coming soon...\n\n# What is it?\n\n- A language with debugger, editor, and heap vizualizer, made for teaching fudamental programming concepts: statements, functions, stack, heap, pointers, data structures.\n- C teaches you how things work, but you don't have to learn C. Mono is a simpler, friendlier, but still powerful way to learn, without ever leaving the browser (chrome, and firefox with some pain, for now).\n- Inspired by http://www.pythontutor.com/, https://schweigi.github.io/assembler-simulator/ and https://github.com/NeilFraser/JS-Interpreter.\n\n# What do the tools do?\n\n## Editor\n- Common text editor shortcuts: go to definition, renaming, highlighting variable under cursor everywhere in scope, etc... see the full shortcut list.\n- Prettifier.\n- Syntax highlighting.\n- Auto closing brackets \u0026 indentation.\n## Debugger\n- Step over, into, continue, stop.\n- Change variables while debugging (supports any expression).\n## Heap vizualizer\n- Drag \u0026 zoom.\n- Will start from each local variable in the top stackframe and recursively draw a tree as it finds pointers. See the demo. So it shows only the addressed that can be read starting from the top stackframe.\n\n# What's the language like?\n\n## The good\n\n- Like C, but with only one type, number (int), and arrays and strings built on top.\n- Arrays (but, only on the heap). When you write [1,2,3] a number is returned as an address and you get the first element with a[0]. Effectively pointers, but only to arrays.\n- someArray[-1] gets you the last index, and someArray[len(someArray)] get you the first, etc.\n- String literals are equivalent to an array initializer that contains the ASCII code.\n- Pointers to functions and lambdas. \n- Closures.\n- A handful of native functions: push,len,readLine,print,printa(treats the argument as an array address),prints(just like print)\n- A tiny standard library inspired from js: map,reduce,concat...\n\n## The bad\n\n- No enum, union, do-while, switch.\n- No garbage collection and no method to free memory either (subject to change). Don't try to do a big for loop with an array initialization inside.\n- Very, very slow. Probably you won't get out of memory because you'll get bored earlier. (Plan on writing a VM instead of a the current, slow AST walker).\n- L-value expresions are a bit broken for now, you can only do identifier followed by optional indexing operators and one optional paranthesis at the end. See /lang/grammar .\n- Expressions don't behave exactly as they usually do ( '0 \u0026\u0026 callSomeFunction()' will actually call it).\n\n## The ugly\n- No `.` operator / no structs. There's only one data type and arrays will do. I admit you get tired of node[0] instead of node.left after a while.\n\n# Dependencies\n\n- The awesome HyperApp, no JSX, all vanilla ES6.\n- vis.js (for the heap vizualizer).\n- Yup, that's it.\n\n# Full shortcut list\n\n## Debugger\n- f7: stop\n- f8: run/continue\n- f10: step over\n- f11: step into\n\n## Quality of life\n- f2: rename\n- ctrl + f12: go to refinition\n- alt + f: preffify\n- ctrl+g: go to line\n- ctrl+l: delete line\n\n## Basic\n- ctrl+z, ctrl+y: undo/redo\n- arrows (+ shift) + home/end: navgiationA language with debugger, editor, and heap vizualizer, made for teaching fudamental programming concepts without having to go through something like C. \n- ctrl+a, ctrl+c, ctrl+x, ctrl+v: copy-paste stuff\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvasyop%2Fmono","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvasyop%2Fmono","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvasyop%2Fmono/lists"}