Assembly language has been completely phased out by now. Now everybody uses Python, Java and C. The only two general purpose operating systems that were released in the 21st century that were written in assembly language that have any modern support are MenuetOS (released in 2000), KolibriOS (a fork of MenuetOS) and BaremetalOS (released in 2008). Everything else is Unix-like now, with the exception of Windows. You also have TempleOS (released in 2013), but that lacks modern compatibility and isn't general purpose either. Everything else is just a fork of a preexisting legacy operating system that was (like HaikuOS, which is just some BeOS clone or 9Front, which is some fork of Plan 9 From Bell Labs). I wonder if someone autistic enough was able to make one for the mobile platform just as some bizarre experiment?
>>28105You don't debug like that. You optimize like that. Learn C after Rust so you learn why Rust is so fucking annoying with memory shit
>>28106you in fintech? embedded?
>>28125>relies on a UNIX worldview of everything being a fileAny data can be represented in a hierarchical filesystem with symlinks, even if you need to implement your own filesystem/database structure to get reasonable performance with some structures. I think the process model is a far more crippling aspect of the C/UNIX model of computing. Sensible debugging/error recovery, multithreading and message passing are only a few of the casualties.
>we could have a world where every OS is an image/world of objects that the user has complete and immediate access toComing from your blog post about urbit (urbit.org seems to have expired; what a pathetic scam), adopting this model seems to have been one of the few things it got right. While i've continuously failed to get OpenGenera running, i got my hands on a lisp machine manual and data storage seems to be handled similarly to emacs (though defstruct would make obnoxious list structures like in display-buffer-alist superfluous). Except through areas (a more low-level package-like concept controlling allocation/paging) there are no options to discover symbols, so the excellent (or so i've heard) documentation has to bear most of this role. I wonder what's the right approach for storing a large number of disparate symbols: making packages/areas hierachical, reimplementing the hierarchical filesystem (with versioning and something more stateful than inodes mind you) or conceiving of some new tagging system?
>>28103all operative systems released ever have some % of assembly because there are things that most compiled languages can't do. sure, you could write a compiled language capable of representing a 100% of OS code, but in practice it is easier to just use llvm or gcc and embed the assembly you can't achieve with the regular compiled language
I think zig 0.5 could do it, but the newer versions can't, because they removed the compile-time parameters to programmatically manipulate the esp and ebp registers for naked subroutines. still, even if you use a compiled language you have to know assembly to understand what you are doing. it is not like user-space software where you already have some base abstractions so you can
and should focus on higher level concepts, when you write an OS you are implementing the "abstraction" so you have to be familiar with the "concrete"
>>28151Abstractions are only really noticeable when they conflict with some state of the layer below and the logic of the abstraction in question is broken. Most assemblers don't use particularly leaky abstractions, so these cases are few but they do happen.
Consider RISC V, a particularly braindead ISC. Immediate instructions encode on parameter in the instruction itself, that has a size of 16 bits. Now what happens if you specify an integer larger than 2^16-1 for such an opcode and feed it to an assembler. Does it throw an error, warn you about it, inform the programmer in literally any way? No it just happily takes the modulo and makes you wonder why your ANDI instruction produced a zero. The shift instructions also only take unsigned arguments, contrary to every sane ISC, and silently coerces the second source register to unsigned.
Unique IPs: 14