> Comes with a challenging proposition > will program but at the same time will not program > builds its own system for using the binary > speaks as if he were the smartest antagonist/allied character in the plot explaining an artifact that totally changes the direction of the story > What a determined and badass guy, I subscribe.
@@Kronarkalso would you consider publishing the source code with a proprietary or open source licence? That would be cool. And community posts with screenshots, plans, etc. would be cool too.
Not in the near future. Not sure if I'll ever release the source code of this prototype - but we will re-implement a release build using the prototype, and that node-source-code will be public. Definitely leaning towards proprietary or non-commercial licenses, open source / public domain is to often abused by huge corporations who'll then make even more profit from it. Regarding community posts, they'll come soon. I only started 6 days ago, so I want to get the weekly upload schedule rolling first. But I will make community posts eventually, since I want to update you guys on my behind the scenes progress regarding the computer graphics stuff - the dev-logs will lag behind in content eventually since I develop faster than I upload.
So you’re using a sort of actor model to represent a “primitive” type that is made manifest by clearly separated nodes of logic. Then, using these little actors, you’re stacking functionality. Feels the same conceptually as a lisp, but decomposed a bit where each node would be akin to a list member with the sockets defining how data flows between them. Very unix-like in principle. I made a toy language with similar underlying concepts but a wildly different imagining of implementation than you. Very excited to see this
I'm curios how this project won't just end up being another high level language itself. What i do find interesting though is the idea of programming in a very low level. My thinking has always been that we could perhaps achieve much greater degrees of efficiency like this but it's really hard and maybe impractical to do this for a very large system. This is something I've been thinking that AI might end up doing in the future. Removing the need for abstraction or compilation altogether.
I'd argue that it'll be similar to any high level programming language, but distinct in some key points. The main benefit I find extremely helpful is that the compiled output isn't produced by some black box. All the program does is string a bunch of bytes together - the user controls everything else. So if you want to make something more efficient, you can technically adjust the code at every level of abstraction, which is something you simply can't do with what we have currently. I can't open up my C++ compiler of choice to achieve some specific improvements (at least not without great effort), I'll mostly be at the mercy of the compiler-architect's implementations regarding optimisation. I think a large part of the reason behind the large amount of different programming languages we have right now is, that different developers optimised different things. You have Go for systems programming, R for data science, Python for prototyping and AI stuff etc... I'm honestly just so tired of learning yet another specification. So I'm hoping I can sort of escape all this and just use one frontend for everything - it will be less efficient / optimised in the beginning but I should be able to beat most standard programming languages eventually, since I can add lower level optimisations "on the fly". Regarding practicality, I guess we'll have to wait and see. I'm still very sceptical myself since the project has thrown some pretty annoying design problems at me over the past 2 years - still not 100% sure if my optimisations will keep the low compilation times up once projects grow to standard software sizes. Theoretically they should, but you never know... :D
@Kronark One thing is for sure you'll know a hell of a lot once this is finished. I admire your dedication to something so daunting. I wish you the best of luck!
the interesting thing about this is that as he builds abstractions and it starts feeling more and more high level he always has access to the low level stuff
@christobothma368 geometry is a higher form than the written word, it has been said, but having this direct access is not available in any high level language…
It sounds very cool but all node-based language attempts suffer from graph complexity as program size grows. I recommend prototyping some test projects to see what they'd be like in graph form. Shaders tend to be okay because they're small (although some graphs are still cryptic) but e.g. things like UE Blueprint break down forcing devs to switch to C++. A differ is also needed to make it workable in team environments.
There's already (somewhat) a solution for that in place, but it's difficult to explain or show to be honest - just know this compiler heavily incentivises modular and compact node graph building. I haven't seen super complex graphs during usage yet, they're usually compacted into new custom nodes before that point is reached. It'd probably become most apparent in a dedicated video on that topic, but right now that just isn't a priority for me. Regarding the differ, that's an easy addition - but again, just not relevant at the moment. However I do admit that I didn't see all this exploding like it is right now, so I don't know if some community efforts will arise sooner than later.
@@Kronark imo a graph representation in a text format will help alot. Like how mermaid graph file, but more on what each node connects where. Wait that sounds like VHDL/ Verilog.
Something I've been thinking about for ages as a solution to this problem is being able to make some kind of more complex sub-modules that you then use as nodes to abstract behaviors for other modules. There's this old game called 'Robot Odyssey' where you essentially build real circuits using logic gates to control some simple robots to solve puzzles. The thing I found really fascinating about it is you could build a circuit and then bake it into a tiny microchip to use in other circuits. Since it all took place on a tiny 80s monitor and it was graphical you were basically forced to do this to make anything complex, but since you could go as deep as you want you could still program pretty much anything in theory. So I hope something like that gets into this project lol
No way Seems like I found something really interesting in my recommendations And that "something" is your video :) I just want to thank you for making my day better lol
Looking forward to learning all these things at an extreme level of detail, and to seeing the journey(one of the very few times this word seems warranted). You, my friend, got yourself a sub :) Cheers!
i have been vexed by this problem for years: how to bring the node graph paradigm to the machine instruction level. a byte sequence generator is a fascinating approach. instead of the nodes being a map of the program logic, they are a map of a factory for generating the program file. it is absolutely first principles reworking of the process of creating an executable file.
You don't need to implement floating point arithmetic yourself; if you have all x86-64 processor instructions implemented into your editor, you can simply call the necessary instruction to do your math. Also, a naïve approach to turning each instruction into code would be to represent each node as an address in your program, then, to jump to the address corresponding to the next instruction. However this would use a lot of jump instructions, significantly slowing down the resulting program, so you'll have to implement some logic to reduce jump instructions.
By „implementing floating point arithmetic“ i meant constructing some nodes that output the relevant x87 instructions to do floating point maths. The compiler doesn‘t execute the nodes, it uses them to construct an executable. A hypothetical „addition“ node with the inputs „1“ and „3“ doesn‘t return „4“, it returns „1 + 3“. It appears to be a common pitfall when thinking about node graphs - i fell into that myself about a year ago :)
@@Kronark How do you implement constant folding then? Surely you would want 1 + 3 to be evaluated at compile time in most cases. Are there primitive nodes for compile time math?
Yes, there is a math node that can do addition, subtraction, multiplication, division, modulo, minimum, maximum, logarithm and exponentiation :) Addition, subtraction, multiplication, minimum and maximum operations also are able to take in more than two operands. So you can determine the sum or the max of an array of numbers at compile time for example.
Unfortunately no. This prototype is the only edge I have in the software development industry right now. But we will be implementing a release build using this prototype, which will then be made available for free in my store :)
Super interesting concept what you have described. Can't wait to see how it will turn out! I am especially thrilled that this will be a weekly mini series, because I can witness how you will tackle issues that might come up when developing a tool like finding the balance between feature/function and easy of use^^
Thanks! :) I will be trying to cut down on video length a bit, since these long ones are taking up quite a bit of time, but i‘m committed to keeping it weekly :)
Wow, this is amazing! I find graphic stuff challenging even in high-level languages, and you're tackling it in machine code? That’s beyond impressive. I'm definitely following your series!
Omg I've been thinking about making something like this, for years. But as I suck at coding, and barely passed my bachelor at 40, there was no way I'd ever achieve this. Will watch your series, to see someone with literal mastery level do it in a right way.
Subscribed. 🍿 But mostly because, since the invention of visual programming in the 70s, node based logic always end in “state explosion” as soon you have recursion and switches…. 👀 But “no code” comes back every decade or so… so I tag along 🤗 best of luck, definitely awesome learning experience !
Also congratulations, you have basically built a wrapper around any functional programming language. Not downplaying, i love your idea, and the execution is also pretty cool :)
Thanks! Knowing the programming community, I‘m pretty sure there will be a significant chunk clinging to what worked best for them so far instead of moving to this… but if it helps some people to at least get into coding, that‘s a win for me :)
Damn, this is awesome and a big sounding project. I'm also currently working on a node based programming language. I also had the idea of partial compilation to speed up compilation in total. Also the abstraction nodes i also implemented. I was stupid in making inputs and outputs of an abstraction node individual nodes instead of you combining them into one, wich feels much smarter. Im currently only making the node editor part of the IDE. Making compilation comes when all necessary actions for making changes to the nodes are finished. I wanted to call it Duke (in German Graf, wich sounds the same as Graph, like a graph of nodes and edges).
Subscribed. I’ve been a professional developer for 15+ years but never really got into low level stuff. Really interested to follow along and learn from this series.
You picked the right channel for that! There really isn‘t a lower level than what we‘ll be doing here ^^ We‘ll get back into actual implementations soon though, currently uploading a couple of explainers to help better understand the compiler itself first :)
I’ve been using unreal engine for 10 years and I always wanted visual scripting to build apps! I recently started learning c++ ,, and im glad I found your channel, looking forward to follow your journey brother
Watching a few minutes of this video I really hoped it was a 3 year old video video and the software is out by now, but I guess now I'll be there for the journey.
I see thi as a opportunity for growth bro work extremely hard to deliver thus and the views and subs will deffo grow ❤ youve gotso much potential and time
Hope it works out dude that’s a big project but it’ll be insanely worth if you keep it up. If it’s python level easy to read but with pointers and low level functionality etc I may literally never learn another language again lol
That‘s exactly my intention, actually! We‘ll add support for different targets later on, including source code formats such as javascript, python, etc. - so you‘ll be able to use the same nodes regardless of what your output needs to be :)
Nah, forget making it for a thesis, you should propose this subject to department of education and make everyone in the world learn this concept, period.
Not making it for the thesis, just preparing it for use during the thesis :) First gotta ensure that it actually works for larger projects, before doing anything like that :P
There will be a few/many issues: 1. how will you do system calls? especially anything async which might require threading.. 2. how will you do threading?can one 'lock' a node? if modifying a file is happening like you elude to in the video then you will have to do file sync strategies.also execution might be slow... like really really slow 3. you seem to be choosing the more instructions is more approach, which is valid, but has the same issue in large assembly instruction sets compared to small assembly instruction sets (i.e. lots of fun writing docs for everything) 4. nodes might get very complicated, and I don't just mean the mess of 1000s of nodes on screen that represent some algorithm, I mean just a single node in and of itself might get complicated. For example, if you need atomics ever, then you might need to make a special compare and swap node, or if a node requires multiple inputs that might also be 'fun'. Or if you allow for abstraction of nodes by nodes then you get other problems, like maybe you represent nodes of A..Z with fn(x) node or something. 5. you might want to look at how fpgas work and languages for them, as they are basically just building blocks that allow for specifying inputs and then piecing these set of blocks/functions together. Might find good parallels. 6. since you mention you want to be able to integrate with a gpu then you will have to have some way of using special nodes that do compile shader, submit shader, wait for result, get result from gpu, and whatever other special fns you might need to embed into a node for this to work.
I think you fell into the same trap I fell into a year ago while designing this. The node graph compiler doesn‘t return the result of an operation, it returns the operations needed to get that result. A hypothetical „Addition“ node which recieves the inputs „1“ and „3“ does not return „4“ - it returns „1 + 3“. This compiler simply places instructions into an executable, it doesn‘t execute itself. It‘s exactly like traditional programming in that regard - your source code text editor doesn‘t execute your text, it uses it to build an executable which can then be executed. Once you see the compiler from this perspective, you‘ll see how none of these problems are actually on the horizon. Each problem you mentioned is solved exactly the same way you‘d solve it in traditional source code. For example system calls. They‘re just the syscall instruction (in the case of x64) with some setup required beforehand. They‘re handled by creating a node that returns the syscall opcode together with the necessary register-related operations beforehand - which is then placed into our executable.
@Kronark I see now, that makes the job a lot easier if all you need to do is go from node to instruction set code and then let someone just run an executable afterward instead of having the node actually do an operation. I'm looking forward to seeing what the initial poc looks like!
After i wrote a 800 bytes windows PE exectubal in ahex editor, I once had a similar idea of a universal programming language called binaula (binary authoring language, yeah the name sucks) where you start from bitpatterns and then you can have loops to repeat a pattern, functions to encode a pattern e. g. to write out a file format header, and other structures, basically a hex editor with macros, and with this language you could program sound, images, windows executables (maybe with an instruction encoding function in the stdlib), ELF files, etc. etc. But it was text based, not node based, and it would have probably been impractical and very low level (in some ways lower level than assembly) so it would have required a lot of library functionality to be useful, so I never really spent much time on it, maybe I will get back to it,
Thank you! To be fair, this is not my first attempt at making youtube videos and I did work in the visual effects industry a bit... But man, I did not expect all this right now... after 2 god damn days...
Seems closely related, in concept, to a low-code tool like outsystems, but much broader in scope and flexibility. Looking foward to the following devlogs, excelente video quality and production, and the concept itself is pretty interesting as well!
The moment you can create a node as a defined input and output of a group/map of sub nodes, which would implementing fractal abstraction, this is be amazing
I've also planned on doing a project like this, but apart from the obvious, a big problem of all node-based languages is that there is no easy way to efficiently solve merge conflicts.
I‘ve gotten that quite a bit now and I honestly don‘t see the problem… could you maybe elaborate on which issues you‘d expect to encounter when implementing a merge-conflict resolution approach?
This is very cool and I'm excited to follow your progress! I've done something similiar this year in my free time, or rather I started it. It's far from done and has a limited scope. I made a very rudimentary programming language from scratch, also setting every byte of the exe file myself, not using any compiler framework or assembler. Just a simple programm written in C++ that reads my language files and outputs an exe file byte by byte. It's a textual language, not a node based, but I think that's not that much of a difference for the lower layers. I do it just for fun and to learn the fundamentals. A toy language not supposed to be published or anything. I thought I might share some of my experience here, maybe it's helpful for someone. So far my language is still very limited. Only basic math with integers and some control structures, but more will come when I have the time for it. My goal was to have someting that can run as early as possible wihtout having to support many types of machine code instructions yet. Understanding the PE format of exe files is hard enough for the beginning. A good hex editor that shows the structure of the PE format and that can show all the bytes along with the corresponding instructions in assembler notation is very helpful for this. So far in my language I can basically add and multiply some numbers, have some control structures, and return a value as an exit code which I can print in a command line using $LastExitCode. That's not much, but I have something running that has barely any dependencies and I can go on from here. Writing the PE format myself works and I have a growing understanding of how all the machine code instructions work and what the difference to assembler code is (which is similiar but has more differences than I previously thought). Since I also wanted to learn how debuggers work, I implemented one for my language as early as possible, and this turned out to be a good idea because seeing what my program is doing helps a lot when working on the compiler. I could have used an existing debugger (which would have also been a good approach) but that still would have needed debug information about the addresses of the code and the variables, and it expects them in an existing complicated format that is made to fit existing languages, and I just didn't want that. So I made my own debug file format, wrote my own debugger (including UI) and can now start my program from it and step through my code, looking at all the registers, memory and variables. And I learned a lot about debuggers. Stepping through my code with an existing kind of a hex-editor-level debugger was also helpful in the beginning, but slows development down as the complexity growth. For a node based approach like yours I think existing debuggers don't fit well so you might consider writing your own one as well. Not so much because of the structure of the generated code (shouldn't be that different), but because you may want to step through it visually and show that in your editor. There might be libraries or command line style debuggers you can call for that so you don't have to implement every aspect of it yourself. But I haven't looked into it since my goal was to do it from scratch, so I can't tell much about that. There are many ways to approach such a task as yours, and many of them are good. But this worked well for me: Doing an extremly narrow slice of my end goal first but getting it to run very early. Having as much control as possible over what the code does is key, and being able to debug very early helps a lot for that. Sorry for this wall of text 😄 Good luck with your project and thanks for sharing your journey with us!
"Writing software by first building my own programming language." I presume you're familiar with what are sometimes called "4GLs," or Fourth-Generation programming languages? Node-based programmatic logic environments are fairly commonplace, as you mention, but most tend to focus on specialized contexts like the Blender/Unity node graphs for shaders or National Instruments LabVIEW for data acquisition and signal processing. Creating one that is general purpose tends to explode in complexity, necessitate abstraction, and end up being a flowchart of a fairly traditional text-token programming language in the end. Should be fun. I'll be watching.
Damn bro i didn't even notice this was from a channel which barely had 1k subs The quality is phenomenal 👍🏻 Yt is weird the brain rot is on rise and then there's this peak hidden beneath shit 😅
Call me a wimp, but this seems like a lot of work to do in one year, let alone 4 months. Maybe getting hello world to print to a serial terminal would be more achievable. Either way, you've hooked me.
Eh, it's doable once I'm done with instruction encoding and registers - those are the two topics that are a bit heavy complexity wise. once those are done it's really just building new instructions and then programming as usual. :) To be fair, I don't have to be capable of full on light simulation in 4 months using this compiler - that's just when the thesis officially starts. so I still have some time to get vulkan and shaders etc working in january and febuary. But I'm just as curious as you are! Not super sure if this will work out either :D
What most non-technical people and non-programmers fail to realize is that, programming is not about the language you use, but about your ability to turn something abstract like "automate this task" to actual working code.
GOD!! I'm having goosebumps rn, bro please please please read my comment, Just yesterday I was thinking about this stuff that for sure it could be a way to write serious programming software with something like Scratch, because in machine learning there's many tools just focus in building the architecture of the models with no need to complexe programming and coding, So the problem is not here the problem is that everytime i think of something i just find it next in social media or youtube or even just while navigating the websites with no attention of looking for it, it happened with me many times i really start hating it, it happened for things have no meaning and was just personal inner experience and ideas for me, that day i was working for a design thing and idk how i just accidentally mistaken an 'r' and an 'n' with 'm' because i was zooming out, and that was just like something i didn't really think about for not than 5 seconds, then after exactly 1 day , a meme post on instagram appeared suddenly talking about the same thing exactly the same thing (for sure it was in a different context, but it was talking exactly about the same thing). It happend a lot, i start believing that the world isn't what we think it is, im thinking now that ideas are floating and traveling alway and for real shapes our world some how even in things we think they are independent like the internet and technology, I really start hating it, and no one is talking about it, it really needs to get talked about. bro please please read my comment
I've often thought that the future of software development would follow a similar node-based interface. Especially when dealing with hardware I/O... I've tried a few, but have always been disappointed with the implementations. I'm curious to see what you come up with!
I wanted to build a node graph editor for something that can run at the kernel level for a raspberry pi for embedded applications. It would make the raspberry pi a lot more powerful making it easier to develop real time applications like a flight controller on a drone or a rocket
Sounds sick! My plan for now is to keep this prototype private, but I'll eventually reimplement the node compiler properly using the prototype itself and then release that software for free - maybe build a little node-network sharing platform on my website. I definitely want to get into embedded software some time after uni, so maybe we'll work together then :D But that's all still very much in the future for now, want to take a break from compiler design once I get it 100% bug-free, do some more artistic stuff (like simulations and video games) for a bit.
I had a similar thought yesterday, it could definitely make a relaxing little dev stream. But that'll have to wait until the prototype is 100% stable and we're doing some more interesting stuff - something like graphics programming where you see some visual feedback intermittently
So you are making a visual programming lang from some of the lowest level langs available? Imo visual programming langs are superior to text based but lack tooling/refinment and are often specialized to an application space (like shaders) it will be interesting to watch. From a language architectural perspective, functional programming will be the ideal paradim to aim for, i recomend Rust for a low level example or haskell for an even more functional programing lang
Already somewhat aiming for that, but those decisions aren‘t super relevant yet, since we gotta get the basic instructions working first - we‘ll design that once we get to functions :)
@@Kronark what I would like to see imho is a tool that can take in a lang and convert all its node graph stuff to that lang, or at the very least support a lang in its entirity including crates/packages.
An exciting and inpsiring proposition for a project! What I think you failed to justify is why you wish to write a node-based language compiler. What's wrong with using an existing programming language or writing your own? What is it about the visuals of node-based stuff that makes you prefer it?
I left that entire section out on purpose, actually. No matter how I spun it, it always felt a bit arrogant to talk about why I want to move away from existing approaches. It didn't really add much to the introduction and may have caused some controversy - so I just cut it out. But my main gripe with the current state of the art is lack of control over my output. It's related to the current state of compilers, build tools and bundlers (in the case of web development) - I've dealt with so many CLIs for processing my source code in various different languages and every single one of them wastes so much of my time, I just decided to build my own and start from absolute zero. I've literally found myself screaming at my laptop while trying to bundle a website with webpack... Programming with text files in general has its downsides - in my opinion it's way to easy to make mistakes that take hours to debug + the compilation speeds for large projects are abyssmal to be honest (not the fault of the compiler developers, just the nature of text based source code processing). The main benefit I really appreciate about my compiler is, besides the decent compilation times, that I control every level of abstraction. If I want to optimise something on a machine code / assembly level, I can do that without needing some fancy compiler macros or some special syntax. And on top of that, I'll be able to use the same "syntax" (the nodes) for multiple targets - I could build an application natively for my x86 windows device, and then output the same functionality in optimised javascript with the flip of a switch. And if a certain target hasn't been implemented, I can then do so retroactively without waiting on a third party - since all compilation targets are completely in user control by design. But there's still a lot to explore for now, so we'll have to see where it all goes I suppose :)
So... you say millisecond compile times, but are they? Compile time optimization need to consider large sections of a program to give the best results is this still true for your approach? If you compartmentalize to much with your node approach you might loose some of those optimization options.
Yes, that‘s still possible with this approach. No matter how large a chunk of code is that needs to be considered for an optimisation, a node graph can be built that performs that optimisation. Compile time should stay in the millisecond range. There is no way for me to have tested that for sure yet though, since we‘re only building things from the ground up right now - so there just isn‘t enough complexity to see any significant compile time increase. But it‘s holding up pretty nicely so far!
This is what happens when programmers let intrusive thoughts win
You cannot escape God's Temple - Terry Davis prob
I wrote my own Transformer Neural Network from scratch in C++ and thought I'm good, but this guy is really pushing my limits.
Seems like a win for the rest of us most of the time
> Comes with a challenging proposition
> will program but at the same time will not program
> builds its own system for using the binary
> speaks as if he were the smartest antagonist/allied character in the plot explaining an artifact that totally changes the direction of the story
> What a determined and badass guy, I subscribe.
💀
@@Kronarkngl, this seems much like fiction, but so what, I say embrace it, full send 🎉
@@Kronarkalso would you consider publishing the source code with a proprietary or open source licence? That would be cool. And community posts with screenshots, plans, etc. would be cool too.
Not in the near future. Not sure if I'll ever release the source code of this prototype - but we will re-implement a release build using the prototype, and that node-source-code will be public. Definitely leaning towards proprietary or non-commercial licenses, open source / public domain is to often abused by huge corporations who'll then make even more profit from it.
Regarding community posts, they'll come soon. I only started 6 days ago, so I want to get the weekly upload schedule rolling first. But I will make community posts eventually, since I want to update you guys on my behind the scenes progress regarding the computer graphics stuff - the dev-logs will lag behind in content eventually since I develop faster than I upload.
bro made scratch for adults
A visual dataflow programming language.
kind of, with a little bit of magic sprinkled on
@@Kronark Sounds a lot like G to me, used in LabVIEW.
I think I just found the coolest channel ever…
Cheers mate! That just made my day :)
Agreed. This looks incredible
Real!!!
I think you might be right
yes
WOOW DUDE!
YOU SOLVED A LOT OF PROBLEMS!
I NEED YOUR KNOWLEDGE!
THANK YOU TO EXISTS, LEARN AND PUBLISH SUCH HIGH KEVEL KNOWLEDGE!
JUST WOW!
So you’re using a sort of actor model to represent a “primitive” type that is made manifest by clearly separated nodes of logic. Then, using these little actors, you’re stacking functionality.
Feels the same conceptually as a lisp, but decomposed a bit where each node would be akin to a list member with the sockets defining how data flows between them. Very unix-like in principle. I made a toy language with similar underlying concepts but a wildly different imagining of implementation than you.
Very excited to see this
Essentially, yes.
I'm just as excited as you are! :)
I'm curios how this project won't just end up being another high level language itself. What i do find interesting though is the idea of programming in a very low level. My thinking has always been that we could perhaps achieve much greater degrees of efficiency like this but it's really hard and maybe impractical to do this for a very large system. This is something I've been thinking that AI might end up doing in the future. Removing the need for abstraction or compilation altogether.
I'd argue that it'll be similar to any high level programming language, but distinct in some key points. The main benefit I find extremely helpful is that the compiled output isn't produced by some black box. All the program does is string a bunch of bytes together - the user controls everything else. So if you want to make something more efficient, you can technically adjust the code at every level of abstraction, which is something you simply can't do with what we have currently. I can't open up my C++ compiler of choice to achieve some specific improvements (at least not without great effort), I'll mostly be at the mercy of the compiler-architect's implementations regarding optimisation.
I think a large part of the reason behind the large amount of different programming languages we have right now is, that different developers optimised different things. You have Go for systems programming, R for data science, Python for prototyping and AI stuff etc... I'm honestly just so tired of learning yet another specification. So I'm hoping I can sort of escape all this and just use one frontend for everything - it will be less efficient / optimised in the beginning but I should be able to beat most standard programming languages eventually, since I can add lower level optimisations "on the fly".
Regarding practicality, I guess we'll have to wait and see. I'm still very sceptical myself since the project has thrown some pretty annoying design problems at me over the past 2 years - still not 100% sure if my optimisations will keep the low compilation times up once projects grow to standard software sizes. Theoretically they should, but you never know... :D
@Kronark One thing is for sure you'll know a hell of a lot once this is finished. I admire your dedication to something so daunting. I wish you the best of luck!
Thanks man! Appreciate it :)
the interesting thing about this is that as he builds abstractions and it starts feeling more and more high level he always has access to the low level stuff
@christobothma368 geometry is a higher form than the written word, it has been said, but having this direct access is not available in any high level language…
It sounds very cool but all node-based language attempts suffer from graph complexity as program size grows. I recommend prototyping some test projects to see what they'd be like in graph form. Shaders tend to be okay because they're small (although some graphs are still cryptic) but e.g. things like UE Blueprint break down forcing devs to switch to C++. A differ is also needed to make it workable in team environments.
There's already (somewhat) a solution for that in place, but it's difficult to explain or show to be honest - just know this compiler heavily incentivises modular and compact node graph building. I haven't seen super complex graphs during usage yet, they're usually compacted into new custom nodes before that point is reached. It'd probably become most apparent in a dedicated video on that topic, but right now that just isn't a priority for me.
Regarding the differ, that's an easy addition - but again, just not relevant at the moment. However I do admit that I didn't see all this exploding like it is right now, so I don't know if some community efforts will arise sooner than later.
@@Kronark imo a graph representation in a text format will help alot. Like how mermaid graph file, but more on what each node connects where.
Wait that sounds like VHDL/ Verilog.
Something I've been thinking about for ages as a solution to this problem is being able to make some kind of more complex sub-modules that you then use as nodes to abstract behaviors for other modules.
There's this old game called 'Robot Odyssey' where you essentially build real circuits using logic gates to control some simple robots to solve puzzles. The thing I found really fascinating about it is you could build a circuit and then bake it into a tiny microchip to use in other circuits. Since it all took place on a tiny 80s monitor and it was graphical you were basically forced to do this to make anything complex, but since you could go as deep as you want you could still program pretty much anything in theory.
So I hope something like that gets into this project lol
your channel feels like i've been just exposed to another world of dev youtube this is pure gold i cant wait to see how this all turns out in the end
thank you! can't wait to see myself :D
me too
No way
Seems like I found something really interesting in my recommendations
And that "something" is your video :)
I just want to thank you for making my day better lol
And I thank you for the kind comment! :D
I'll definitely try again next wednesday ;)
This channel is the ScienceClic of Computer Science and that’s exactly what we all were craving for.
Truly humbled you think so!
@@Kronark❤
mark my words, this channel is going to the moon. Really great content!
Thank you! This is all going so fast right now, I'm not even sure I'm ready to go to the moon lol
@@Kronarklet's go to Andromeda
We‘ll do rockrt science a bit further down the road!
Looking forward to learning all these things at an extreme level of detail, and to seeing the journey(one of the very few times this word seems warranted).
You, my friend, got yourself a sub :) Cheers!
Thanks man!
I do hope I'll not go into TO MUCH detail, the next video script is already quite long ^^ x64 instruction encoding is a bit of a beast :S
Wow! The sounds and visuals are superb!
I'm really excited to see more of what you make.
That "intro" sound I especially like!
Thank you, I did put some effort into those!
@@Kronark deff gonna have to search those up later
i have been vexed by this problem for years: how to bring the node graph paradigm to the machine instruction level. a byte sequence generator is a fascinating approach. instead of the nodes being a map of the program logic, they are a map of a factory for generating the program file. it is absolutely first principles reworking of the process of creating an executable file.
It act the same as erd
We're better at spatial (thus visual) thinking than abstract thinking. Making our tools more visual can help us solve problems
Spatial yes. That is why the interface should be for a spatial computing platform like Vision Pro
You don't need to implement floating point arithmetic yourself; if you have all x86-64 processor instructions implemented into your editor, you can simply call the necessary instruction to do your math.
Also, a naïve approach to turning each instruction into code would be to represent each node as an address in your program, then, to jump to the address corresponding to the next instruction. However this would use a lot of jump instructions, significantly slowing down the resulting program, so you'll have to implement some logic to reduce jump instructions.
By „implementing floating point arithmetic“ i meant constructing some nodes that output the relevant x87 instructions to do floating point maths.
The compiler doesn‘t execute the nodes, it uses them to construct an executable. A hypothetical „addition“ node with the inputs „1“ and „3“ doesn‘t return „4“, it returns „1 + 3“.
It appears to be a common pitfall when thinking about node graphs - i fell into that myself about a year ago :)
@@Kronark How do you implement constant folding then? Surely you would want 1 + 3 to be evaluated at compile time in most cases. Are there primitive nodes for compile time math?
Yes, there is a math node that can do addition, subtraction, multiplication, division, modulo, minimum, maximum, logarithm and exponentiation :)
Addition, subtraction, multiplication, minimum and maximum operations also are able to take in more than two operands.
So you can determine the sum or the max of an array of numbers at compile time for example.
@@Kronark Very cool. Do you plan on open sourcing this at some point? This project seems like a breath of fresh air in the systems programming space.
Unfortunately no. This prototype is the only edge I have in the software development industry right now. But we will be implementing a release build using this prototype, which will then be made available for free in my store :)
impressive work, phenomenal production. this is awesome!
Thank you!
3:00 "this.. is a node". Reminded of a ToadPond.
What's ToadPond if you don't mind me asking? ^^
@@Kronark ruclips.net/video/Q4OIcwt8vcE/видео.htmlsi=-eXARwaG6sP2kH_2
what in the artistic expression is this?! :D thanks for sharing :)
Such a complex topic, packed in a nice format. This is gold my man, can't wait for the next videos!
Hope the next video doesn't disappoint! It's some heavy sh*t
Super interesting concept what you have described. Can't wait to see how it will turn out! I am especially thrilled that this will be a weekly mini series, because I can witness how you will tackle issues that might come up when developing a tool like finding the balance between feature/function and easy of use^^
Thanks! :)
I will be trying to cut down on video length a bit, since these long ones are taking up quite a bit of time, but i‘m committed to keeping it weekly :)
Wow, this is amazing! I find graphic stuff challenging even in high-level languages, and you're tackling it in machine code? That’s beyond impressive. I'm definitely following your series!
Well I haven't started with the graphics stuff yet using this compiler - so don't jinx it :D Glad you're on board!
Omg
I've been thinking about making something like this, for years. But as I suck at coding, and barely passed my bachelor at 40, there was no way I'd ever achieve this.
Will watch your series, to see someone with literal mastery level do it in a right way.
Dude, that's not a programming video. That's ART
WOW!
Thanks! :)
good luck, this seems like it's gonna be quite a ride
thanks!
Subscribed. 🍿 But mostly because, since the invention of visual programming in the 70s, node based logic always end in “state explosion” as soon you have recursion and switches…. 👀 But “no code” comes back every decade or so… so I tag along 🤗 best of luck, definitely awesome learning experience !
We'll see how this one turns out :D
Also congratulations, you have basically built a wrapper around any functional programming language. Not downplaying, i love your idea, and the execution is also pretty cool :)
Thanks ^^ the neat part is, that it‘s not limited to programming languages in any way :p
I am making something similar to that project and it is cool. So good luck!
Thank you!
This is really well done. I wouldn't be surprised to see this becoming the new norm for coding especially for people new to coding
Thanks! Knowing the programming community, I‘m pretty sure there will be a significant chunk clinging to what worked best for them so far instead of moving to this… but if it helps some people to at least get into coding, that‘s a win for me :)
Oh boy, this is extremely interesting, good luck.
thanks! I'll need it ^^
All the best for your project! I am glad youtube recommended this video to me
Glad you‘re here! :)
Damn, this is awesome and a big sounding project. I'm also currently working on a node based programming language. I also had the idea of partial compilation to speed up compilation in total. Also the abstraction nodes i also implemented. I was stupid in making inputs and outputs of an abstraction node individual nodes instead of you combining them into one, wich feels much smarter.
Im currently only making the node editor part of the IDE. Making compilation comes when all necessary actions for making changes to the nodes are finished.
I wanted to call it Duke (in German Graf, wich sounds the same as Graph, like a graph of nodes and edges).
Good luck with your approach! :)
this is really interesting, cant wait to see more
Thanks! Gonna be a wild ride :D
Subscribed. I’ve been a professional developer for 15+ years but never really got into low level stuff. Really interested to follow along and learn from this series.
You picked the right channel for that! There really isn‘t a lower level than what we‘ll be doing here ^^
We‘ll get back into actual implementations soon though, currently uploading a couple of explainers to help better understand the compiler itself first :)
@@Kronark Good! I need the explainers. It’s been 20 years since I studied CPU architecture at university 😆
I’ve been using unreal engine for 10 years and I always wanted visual scripting to build apps! I recently started learning c++ ,, and im glad I found your channel, looking forward to follow your journey brother
Thanks mate! Hope I don‘t disappoint :)
Okay, this is pretty cool! 😎
Thankyou!
@@Kronark :D
Wow u just blew my mind look forward to see how this goes!!
I'm eager to find out myself :D
This is such high production. You've earned a sub
Thank you! :)
Watching a few minutes of this video I really hoped it was a 3 year old video video and the software is out by now, but I guess now I'll be there for the journey.
Glad you‘re here anyway! :P
Man u make me click this video because i know this technology sounds cool
I am pretty proud of the thumnail + title tbh :D
I'm here for it, King. Let's go.
I’m interested to see how you progress. Another reference is NI’s LabVIEW graphical data-flow programming language.
Yet another node editor with limited applicability :D
I wasn't hooked with the title. Clicked anyway and was not disappointed!
Glad you liked it anyway :D
I‘m not touching this title and thumbnail, this is the only video that got some significant attention so far ^^
very interesting, I'd be watching
Welcome aboard!
Mad ambitious, I am here for what ever comes of it. Good luck bro.
Thanks mate!
I see thi as a opportunity for growth bro work extremely hard to deliver thus and the views and subs will deffo grow ❤ youve gotso much potential and time
Yeah, the pressure is getting real - hope the next video doesn't bore everyone to bits ^^ x64 instruction encoding is... very dry.
Hope it works out dude that’s a big project but it’ll be insanely worth if you keep it up.
If it’s python level easy to read but with pointers and low level functionality etc I may literally never learn another language again lol
That‘s exactly my intention, actually! We‘ll add support for different targets later on, including source code formats such as javascript, python, etc. - so you‘ll be able to use the same nodes regardless of what your output needs to be :)
WOAH THIS VIDEO FEELS SO SUPERVILLAIN SCI-FI KEEP IT COMING
I‘ll try! :)
Hell yeah dude! Extremely excited to see this come along!
Me too! :)
what an inspiration you are man, love your content.
Thank you! :)
You're insane. Good luck! I'm exited to see how this unfolds.
You and me both mate!
Thanks :)
this looks so cool! best of luck!
Thank you!
Nah, forget making it for a thesis, you should propose this subject to department of education and make everyone in the world learn this concept, period.
Not making it for the thesis, just preparing it for use during the thesis :)
First gotta ensure that it actually works for larger projects, before doing anything like that :P
Dude, you must have massive nerd cojones. Godspeed.
There will be a few/many issues:
1. how will you do system calls? especially anything async which might require threading..
2. how will you do threading?can one 'lock' a node? if modifying a file is happening like you elude to in the video then you will have to do file sync strategies.also execution might be slow... like really really slow
3. you seem to be choosing the more instructions is more approach, which is valid, but has the same issue in large assembly instruction sets compared to small assembly instruction sets (i.e. lots of fun writing docs for everything)
4. nodes might get very complicated, and I don't just mean the mess of 1000s of nodes on screen that represent some algorithm, I mean just a single node in and of itself might get complicated. For example, if you need atomics ever, then you might need to make a special compare and swap node, or if a node requires multiple inputs that might also be 'fun'. Or if you allow for abstraction of nodes by nodes then you get other problems, like maybe you represent nodes of A..Z with fn(x) node or something.
5. you might want to look at how fpgas work and languages for them, as they are basically just building blocks that allow for specifying inputs and then piecing these set of blocks/functions together. Might find good parallels.
6. since you mention you want to be able to integrate with a gpu then you will have to have some way of using special nodes that do compile shader, submit shader, wait for result, get result from gpu, and whatever other special fns you might need to embed into a node for this to work.
I think you fell into the same trap I fell into a year ago while designing this. The node graph compiler doesn‘t return the result of an operation, it returns the operations needed to get that result. A hypothetical „Addition“ node which recieves the inputs „1“ and „3“ does not return „4“ - it returns „1 + 3“. This compiler simply places instructions into an executable, it doesn‘t execute itself. It‘s exactly like traditional programming in that regard - your source code text editor doesn‘t execute your text, it uses it to build an executable which can then be executed.
Once you see the compiler from this perspective, you‘ll see how none of these problems are actually on the horizon. Each problem you mentioned is solved exactly the same way you‘d solve it in traditional source code.
For example system calls. They‘re just the syscall instruction (in the case of x64) with some setup required beforehand. They‘re handled by creating a node that returns the syscall opcode together with the necessary register-related operations beforehand - which is then placed into our executable.
@Kronark I see now, that makes the job a lot easier if all you need to do is go from node to instruction set code and then let someone just run an executable afterward instead of having the node actually do an operation. I'm looking forward to seeing what the initial poc looks like!
Me too man, me too
After i wrote a 800 bytes windows PE exectubal in ahex editor, I once had a similar idea of a universal programming language called binaula (binary authoring language, yeah the name sucks) where you start from bitpatterns and then you can have loops to repeat a pattern, functions to encode a pattern e. g. to write out a file format header, and other structures, basically a hex editor with macros, and with this language you could program sound, images, windows executables (maybe with an instruction encoding function in the stdlib), ELF files, etc. etc. But it was text based, not node based, and it would have probably been impractical and very low level (in some ways lower level than assembly) so it would have required a lot of library functionality to be useful, so I never really spent much time on it, maybe I will get back to it,
Wooooow! Very exiting stuff, and great aesthetics too :D
Thank you! :D glad you like it :)
This is awesome.
Thank you! :)
Brooo it gonna be amazing and motivating!! Watching for futher videos:)
Most interesting thing YT has served up in a while.
Can't wait to see where you go with this.
Thank you! Super excited to get into some heavy sh*t next week :D
Any nerd who cites the work of inigo quilez has my immediate attention
iq is the best!
as a beginner i enjoyed this video quite a lot
glad you liked it! :)
Such a quality content with less than 1000 views. Man...
Thank you!
To be fair, this is not my first attempt at making youtube videos and I did work in the visual effects industry a bit... But man, I did not expect all this right now... after 2 god damn days...
This is some peak content gonna turn on the notifications for this one
Thanks! Welcome aboard :)
Seems closely related, in concept, to a low-code tool like outsystems, but much broader in scope and flexibility. Looking foward to the following devlogs, excelente video quality and production, and the concept itself is pretty interesting as well!
Thank you! I hope the next video won't disappoint :D
It's a cool video. You are going to become the next Steve Ozniak.
Thanks!
Starting a new revolution I see...
The moment you can create a node as a defined input and output of a group/map of sub nodes, which would implementing fractal abstraction, this is be amazing
Is it me or does this video feel mysterious....?
Good luck! Will wait for updates.
Welcome aboard! :) looking forward to uploading more
I've also planned on doing a project like this, but apart from the obvious, a big problem of all node-based languages is that there is no easy way to efficiently solve merge conflicts.
I‘ve gotten that quite a bit now and I honestly don‘t see the problem… could you maybe elaborate on which issues you‘d expect to encounter when implementing a merge-conflict resolution approach?
Bro is trying to make his own game engine, not from scratch, but from scratch scratch
😎
looks really interesting
thank you!
I must be old, back when I was in high school a generation of kids wrote actual machine code everyday.. but yeah seems interesting
Must‘ve been some exciting times back then :)
This is very cool and I'm excited to follow your progress!
I've done something similiar this year in my free time, or rather I started it. It's far from done and has a limited scope. I made a very rudimentary programming language from scratch, also setting every byte of the exe file myself, not using any compiler framework or assembler. Just a simple programm written in C++ that reads my language files and outputs an exe file byte by byte. It's a textual language, not a node based, but I think that's not that much of a difference for the lower layers.
I do it just for fun and to learn the fundamentals. A toy language not supposed to be published or anything. I thought I might share some of my experience here, maybe it's helpful for someone.
So far my language is still very limited. Only basic math with integers and some control structures, but more will come when I have the time for it. My goal was to have someting that can run as early as possible wihtout having to support many types of machine code instructions yet. Understanding the PE format of exe files is hard enough for the beginning. A good hex editor that shows the structure of the PE format and that can show all the bytes along with the corresponding instructions in assembler notation is very helpful for this.
So far in my language I can basically add and multiply some numbers, have some control structures, and return a value as an exit code which I can print in a command line using $LastExitCode. That's not much, but I have something running that has barely any dependencies and I can go on from here. Writing the PE format myself works and I have a growing understanding of how all the machine code instructions work and what the difference to assembler code is (which is similiar but has more differences than I previously thought).
Since I also wanted to learn how debuggers work, I implemented one for my language as early as possible, and this turned out to be a good idea because seeing what my program is doing helps a lot when working on the compiler. I could have used an existing debugger (which would have also been a good approach) but that still would have needed debug information about the addresses of the code and the variables, and it expects them in an existing complicated format that is made to fit existing languages, and I just didn't want that. So I made my own debug file format, wrote my own debugger (including UI) and can now start my program from it and step through my code, looking at all the registers, memory and variables. And I learned a lot about debuggers.
Stepping through my code with an existing kind of a hex-editor-level debugger was also helpful in the beginning, but slows development down as the complexity growth.
For a node based approach like yours I think existing debuggers don't fit well so you might consider writing your own one as well. Not so much because of the structure of the generated code (shouldn't be that different), but because you may want to step through it visually and show that in your editor. There might be libraries or command line style debuggers you can call for that so you don't have to implement every aspect of it yourself. But I haven't looked into it since my goal was to do it from scratch, so I can't tell much about that.
There are many ways to approach such a task as yours, and many of them are good. But this worked well for me: Doing an extremly narrow slice of my end goal first but getting it to run very early. Having as much control as possible over what the code does is key, and being able to debug very early helps a lot for that.
Sorry for this wall of text 😄
Good luck with your project and thanks for sharing your journey with us!
Good luck with your master's degree. Looks like a really big project
Definitely, it‘s gonna be a wild ride the next months ^^
"Writing software by first building my own programming language." I presume you're familiar with what are sometimes called "4GLs," or Fourth-Generation programming languages? Node-based programmatic logic environments are fairly commonplace, as you mention, but most tend to focus on specialized contexts like the Blender/Unity node graphs for shaders or National Instruments LabVIEW for data acquisition and signal processing. Creating one that is general purpose tends to explode in complexity, necessitate abstraction, and end up being a flowchart of a fairly traditional text-token programming language in the end.
Should be fun. I'll be watching.
Guess we'll have to find out how this attempt goes! :)
And you took some time out to do some really great sound design too!
Glad you think so! :)
Somehow looking for information about ScratchJr has led me here. Cool project, understood none of it
Yeah, I've had multiple comments about scratch already... RUclips took this concept and thought "this looks like scratch to me" ^^
Damn bro i didn't even notice this was from a channel which barely had 1k subs
The quality is phenomenal 👍🏻
Yt is weird the brain rot is on rise and then there's this peak hidden beneath shit 😅
Bro, I have no idea how I got here… I wanted to start slow…
Thank you!
Bruv, you might as well be coding in assembly 💀
Ur incredible man, please keep this series up
Thanks! Jep, the pressure to continue is getting pretty real right now ^^
My man I think you're getting famous soon
This is the kind of fundamental understanding of systems and reinvention of technologies I love, best of luck!
I really don't want to be famous though hahahaha
But thanks man! Hope this all goes as planned this year :)
A true 100x developer
Call me a wimp, but this seems like a lot of work to do in one year, let alone 4 months. Maybe getting hello world to print to a serial terminal would be more achievable. Either way, you've hooked me.
Eh, it's doable once I'm done with instruction encoding and registers - those are the two topics that are a bit heavy complexity wise. once those are done it's really just building new instructions and then programming as usual. :)
To be fair, I don't have to be capable of full on light simulation in 4 months using this compiler - that's just when the thesis officially starts. so I still have some time to get vulkan and shaders etc working in january and febuary.
But I'm just as curious as you are! Not super sure if this will work out either :D
What most non-technical people and non-programmers fail to realize is that, programming is not about the language you use, but about your ability to turn something abstract like "automate this task" to actual working code.
I also want to learn all this cool shit, hope you succeed in this 😊
Hope i‘ll be able to teach you some of it with the next videos! :)
@@Kronark looking forward to it
GOD!! I'm having goosebumps rn, bro please please please read my comment, Just yesterday I was thinking about this stuff that for sure it could be a way to write serious programming software with something like Scratch, because in machine learning there's many tools just focus in building the architecture of the models with no need to complexe programming and coding, So the problem is not here the problem is that everytime i think of something i just find it next in social media or youtube or even just while navigating the websites with no attention of looking for it, it happened with me many times i really start hating it, it happened for things have no meaning and was just personal inner experience and ideas for me, that day i was working for a design thing and idk how i just accidentally mistaken an 'r' and an 'n' with 'm' because i was zooming out, and that was just like something i didn't really think about for not than 5 seconds, then after exactly 1 day , a meme post on instagram appeared suddenly talking about the same thing exactly the same thing (for sure it was in a different context, but it was talking exactly about the same thing). It happend a lot, i start believing that the world isn't what we think it is, im thinking now that ideas are floating and traveling alway and for real shapes our world some how even in things we think they are independent like the internet and technology, I really start hating it, and no one is talking about it, it really needs to get talked about. bro please please read my comment
This idea isn't new :)
I’m all in
Welcome aboard!
Lets see how this youtuber turns out
I‘ll try to not disappoint ^^
Why do you have a Drakensang avatar image?!?! :D
@@ewerybodyhurray another one noticed :)
because of memories, the good old 40 level days
dammnn, badass programmers r back, im in lov with this
Thanks! :)
WOW. huge if possible.
girl.. good luck
Thanks, i‘ll need it :D
I am excited about this, imagine being able to adapt it to any other instruction set
I've often thought that the future of software development would follow a similar node-based interface. Especially when dealing with hardware I/O... I've tried a few, but have always been disappointed with the implementations. I'm curious to see what you come up with!
I wanted to build a node graph editor for something that can run at the kernel level for a raspberry pi for embedded applications. It would make the raspberry pi a lot more powerful making it easier to develop real time applications like a flight controller on a drone or a rocket
Sounds sick!
My plan for now is to keep this prototype private, but I'll eventually reimplement the node compiler properly using the prototype itself and then release that software for free - maybe build a little node-network sharing platform on my website. I definitely want to get into embedded software some time after uni, so maybe we'll work together then :D
But that's all still very much in the future for now, want to take a break from compiler design once I get it 100% bug-free, do some more artistic stuff (like simulations and video games) for a bit.
Would love to watch a livestream of you building this project.
I had a similar thought yesterday, it could definitely make a relaxing little dev stream. But that'll have to wait until the prototype is 100% stable and we're doing some more interesting stuff - something like graphics programming where you see some visual feedback intermittently
cheers! :)
So you are making a visual programming lang from some of the lowest level langs available?
Imo visual programming langs are superior to text based but lack tooling/refinment and are often specialized to an application space (like shaders) it will be interesting to watch.
From a language architectural perspective, functional programming will be the ideal paradim to aim for, i recomend Rust for a low level example or haskell for an even more functional programing lang
Already somewhat aiming for that, but those decisions aren‘t super relevant yet, since we gotta get the basic instructions working first - we‘ll design that once we get to functions :)
@@Kronark what I would like to see imho is a tool that can take in a lang and convert all its node graph stuff to that lang, or at the very least support a lang in its entirity including crates/packages.
An exciting and inpsiring proposition for a project! What I think you failed to justify is why you wish to write a node-based language compiler. What's wrong with using an existing programming language or writing your own? What is it about the visuals of node-based stuff that makes you prefer it?
I left that entire section out on purpose, actually. No matter how I spun it, it always felt a bit arrogant to talk about why I want to move away from existing approaches. It didn't really add much to the introduction and may have caused some controversy - so I just cut it out.
But my main gripe with the current state of the art is lack of control over my output. It's related to the current state of compilers, build tools and bundlers (in the case of web development) - I've dealt with so many CLIs for processing my source code in various different languages and every single one of them wastes so much of my time, I just decided to build my own and start from absolute zero. I've literally found myself screaming at my laptop while trying to bundle a website with webpack...
Programming with text files in general has its downsides - in my opinion it's way to easy to make mistakes that take hours to debug + the compilation speeds for large projects are abyssmal to be honest (not the fault of the compiler developers, just the nature of text based source code processing).
The main benefit I really appreciate about my compiler is, besides the decent compilation times, that I control every level of abstraction. If I want to optimise something on a machine code / assembly level, I can do that without needing some fancy compiler macros or some special syntax. And on top of that, I'll be able to use the same "syntax" (the nodes) for multiple targets - I could build an application natively for my x86 windows device, and then output the same functionality in optimised javascript with the flip of a switch. And if a certain target hasn't been implemented, I can then do so retroactively without waiting on a third party - since all compilation targets are completely in user control by design.
But there's still a lot to explore for now, so we'll have to see where it all goes I suppose :)
So... you say millisecond compile times, but are they?
Compile time optimization need to consider large sections of a program to give the best results is this still true for your approach?
If you compartmentalize to much with your node approach you might loose some of those optimization options.
Yes, that‘s still possible with this approach. No matter how large a chunk of code is that needs to be considered for an optimisation, a node graph can be built that performs that optimisation.
Compile time should stay in the millisecond range. There is no way for me to have tested that for sure yet though, since we‘re only building things from the ground up right now - so there just isn‘t enough complexity to see any significant compile time increase. But it‘s holding up pretty nicely so far!