Linked by Thom Holwerda on Thu 21st Nov 2013 18:48 UTC, submitted by Rohan Pearce
OSNews, Generic OSes

MenuetOS sits in an interesting nexus between astonishing technical achievement and computerised work of art. The super-speedy, pre-emptive multitasking operating system is still, despite adding more driver support, more included applications, an improved GUI and digital TV support over the years, capable of fitting on a floppy disk (assuming you can find one).

MenuetOS is a technical marvel. Not only is it written entirely in assembly, it also shoves a fully capable multitasking operating system on a single floppy disk.

Thread beginning with comment 577336
To view parent comment, click here.
To read all comments associated with this story, please click here.
RE[3]: Comment by MOS6510
by Alfman on Fri 22nd Nov 2013 23:29 UTC in reply to "RE[2]: Comment by MOS6510"
Alfman
Member since:
2011-01-28

twitterfire,

"And I have to ad that modern compilers optimize better than a programmer can optimize the ASM by hand."

"There's really no reason why you should use ASM instead of C or C++ on a PC."

Sounds like something a C programmer would say ;) Joking aside, it depends. The compilers might do better in a great many cases with average programmers, however it's still possible to find edge cases where they still do worse.

I absolutely prefer using C over Asm for all the usual reasons, I wince when I think about maintaining and porting large amounts of assembly code. However code that benefits from direct access to special CPU features like arithmetic flags will be at a disadvantage in C because they are completely unrecognized in the C language.

It's complicated to fix this aspect of C in any kind of portable way because some architectures do not have the same semantics or even implement flags. Rather than define a C standard for flags (and force all architectures to emulate them), the C language just ignores that flags exist, which forces programmers to use more complex flagless algorithms instead. In some cases the compiler can reverse engineer these algorithms and optimize them to use flags, other times it cannot.

Unfortunately it's not always just a matter of making the compiler more intelligent. Even if it could recognize that flag based algorithm A (which cannot be expressed directly in C) is similar to algorithm B (which can be expressed in C), it still doesn't necessarily imply algorithm B can be converted back to algorithm A. For example, B might produce different results for certain numerical boundary conditions that aren't important to the programmer, but the compiler cannot make the assumption that the algorithms boundary conditions were unintentional. It's forced to generate machine code with equivalent semantics as algorithm B was expressed.


So, while I'd agree with you in general that developing at a higher level is preferable, there are still times when C code can be more difficult to optimize because the optimal code for the platform cannot be expressed in it. Although I think it would be hard for inexperienced assembly developers to be able to recognize these cases.

Reply Parent Score: 3

RE[4]: Comment by MOS6510
by gass on Sun 24th Nov 2013 17:44 in reply to "RE[3]: Comment by MOS6510"
gass Member since:
2006-11-29

For general OS: Just forget scripting and middle frameworks and use something like vala, that compile to C code.

The main issue in general OSses, mainly windows and linux (distributions), is that they abuse of scripting (or java, or C#, or javascript) to get the feature X and Y.
So ... instead of moving to the low level ASM ... maybe, we could just pass it to the less lower level C to get them improved.
Writting ASM code is only worth it in base OS or ultra complex optimized application (one in millions).

Reply Parent Score: 1

RE[5]: Comment by MOS6510
by Alfman on Mon 25th Nov 2013 05:58 in reply to "RE[4]: Comment by MOS6510"
Alfman Member since:
2011-01-28

gass,

"The main issue in general OSses, mainly windows and linux (distributions), is that they abuse of scripting (or java, or C#, or javascript) to get the feature X and Y."

I wouldn't actually consider java or c# to be scripting languages. They compile down to bytecode and then to native code before running, whereas a scripting language gets parsed/emulated the whole way through. Java and C# can have high computational performance, but often their use of garbage collected objects are far less efficient memory-wise. It's disappointing when a .net/Java program needs the better part of a gig of ram to open up a 500K data file.


"Writting ASM code is only worth it in base OS or ultra complex optimized application (one in millions)."

Of course MenuetOS has done that, however I don't think anyone else is advocating moving higher level code to ASM, for most of us the costs would outweigh the benefits.

"So ... instead of moving to the low level ASM ... maybe, we could just pass it to the less lower level C to get them improved."

Most of the core OS stuff for windows and linux is already written in C. I guess the new trend it to make more use of scripting in desktop environments, and to be honest I don't know the extent to which these effect performance.


"It is better to use Windows XP then windows 7. even without 64 bit support. Because it is simply faster and gets the job done."

I agree with you there, many of us would still be happily using it if it were available & supported because most of the changes were microsoft (and others) pushing "features" rather than customers demanding them. Never the less, it's difficult to keep selling an OS with static goals, even if those goals were perfect for what 95% of the market wants. Change isn't always for us consumers, sometimes it's to advance corporate agendas.


"Linux distributions have been doing the same. But maybe can have this note better than me, but it seems that the main cause is the abusive use of scripted languages like bash, python, javascript."

I think it's very unlikely that bash interpreter itself is responsible for slow performance so much as what the scripts were instructing the system to do; the exact same process written in C would probably not perform any noticeably better. The scripts give linux a great deal of flexibility.


Consider a simple bash test that does nothing but launch another bash process:

#test.sh
for i in {1..1000}
do
./test2.sh
done

#test2.sh
echo x
time ./test.sh > /dev/null
real 0m1.889s
user 0m0.024s
sys 0m0.124s


Here the userspace time for 1001 invocations of bash was a mere 0.024s. I don't know how many times bash gets invoked while booting linux, but I think it's less than 1000. A real script can obviously be more complex, however note that the overwhelming majority of time was lost to system overhead in spawning new processes rather than running inside the bash script. I'm just trying to put it into perspective. I encourage you to create more complex tests if you remain skeptical.

Reply Parent Score: 2