Earlier quoted context omitted.
What safer options are there with equal size, overhead (read: none) and not full of layers upon layers of abstractions?
That sounds like you're implying that safety has no value, the only "overhead" worth considering is CPU cycles (what about the programmer's time/effort/sanity?), and that abstractions have negative value. I don't think that's how you're supposed to software.
Ntimed – NTPD replacement
11–20 of 109 posts
Re: Ntimed – NTPD replacement
#12Earlier quoted context omitted.
What safer options are there with equal size, overhead (read: none) and not full of layers upon layers of abstractions?
Rust. Some of it's design goals (as stated on their webpage) are among the exact things you mentioned: zero-cost abstractions, minimal runtime, guaranteed memory safety, threads without data races.
System time is far, far too critical to take chances with.
Re: Ntimed – NTPD replacement
#13Earlier quoted context omitted.
What safer options are there with equal size, overhead (read: none) and not full of layers upon layers of abstractions?
That sounds like you're implying that safety has no value, the only "overhead" worth considering is CPU cycles (what about the programmer's time/effort/sanity?), and that abstractions have negative value. I don't think that's how you're supposed to software.
Overhead is important since Linux is designed to run on a whole spectrum of devices. Abstractions mean you are bringing in more code i.e. greater complexity, space, overhead. And frankly nobody could care less about programmer's time/effort/sanity in this case. It is a tightly focused, specific utility that shouldn't see too many changes after a certain point.
Re: Ntimed – NTPD replacement
#14Earlier quoted context omitted.
What safer options are there with equal size, overhead (read: none) and not full of layers upon layers of abstractions?
That sounds like you're implying that safety has no value, the only "overhead" worth considering is CPU cycles (what about the programmer's time/effort/sanity?), and that abstractions have negative value. I don't think that's how you're supposed to software.
Re: Ntimed – NTPD replacement
#15Earlier quoted context omitted.
What safer options are there with equal size, overhead (read: none) and not full of layers upon layers of abstractions?
Rust. Some of it's design goals (as stated on their webpage) are among the exact things you mentioned: zero-cost abstractions, minimal runtime, guaranteed memory safety, threads without data races.
Re: Ntimed – NTPD replacement
#16Earlier quoted context omitted.
> Why another from-scratch rewrote, And why oh why in C with so many safer options available today ..
What safer options are there with equal size, overhead (read: none) and not full of layers upon layers of abstractions?
Haskell + stream fusion gives better results than well tuned C in some very typical situations http://research.microsoft.com/en-us/um/people/simonpj/papers...
Even just comparing C++/C, C++'s templating mechanisms mean that generic containers can be optimised on a per-type basis.
Abstraction and overhead are not as tightly coupled as they used to be, and not introducing Heartbleed-style bugs is worth a lot in my opinion
Re: Ntimed – NTPD replacement
#17Earlier quoted context omitted.
That sounds like you're implying that safety has no value, the only "overhead" worth considering is CPU cycles (what about the programmer's time/effort/sanity?), and that abstractions have negative value. I don't think that's how you're supposed to software.
It's a core operating system component not some web app. Overhead is important since Linux is designed to run on a whole spectrum of devices. Abstractions mean you are bringing in more code i.e. greater complexity, space, overhead. And frankly nobody could care less about programmer's time/effort/sanity in this case. It is a tightly focused, specific utility that shouldn't see too many changes after a certain point.
Like the difference between a ntpd.c vs ntpd.go is going to matter for anyone...
If you really find yourself stuck with an embedded device small enough that a few megabytes of RAM matter then you can still use the old C implementations, it's not like they are going away.
Abstractions mean you are bringing in more code i.e. greater complexity, space, overhead.
In this case abstractions mean you can probably write the whole thing in under 2 kloc, get memory safety for free, and base it on a network stack that other people actually use and debug independently.
It is a tightly focused, specific utility that shouldn't see too many changes after a certain point.
Umm. Yea. Right. Tell that to the ntpd guys with their 100kloc codebase...
Re: Ntimed – NTPD replacement
#18Earlier quoted context omitted.
That sounds like you're implying that safety has no value, the only "overhead" worth considering is CPU cycles (what about the programmer's time/effort/sanity?), and that abstractions have negative value. I don't think that's how you're supposed to software.
Safety has value it just doesn't imply overhead. Abstractions are a negative, they make reasoning burdensome.
The whole of the Unix philosophy is enforcing this policy of strong abstractions by making each part of a complex overall system its own binary, such that they can only communicate using the file I/O abstraction, possibly via pipes. C was therefore designed for a system which promotes abstractions.
Re: Ntimed – NTPD replacement
#19Earlier quoted context omitted.
Safety has value it just doesn't imply overhead. Abstractions are a negative, they make reasoning burdensome.
Abstractions are what make it possible to reason about complex systems. Being able to ignore parts of your codebase is the only way to make changes to it once it gets beyond a trivial size. The whole of the Unix philosophy is enforcing this policy of strong abstractions by making each part of a complex overall system its own binary, such that they can only communicate using the file I/O abstraction, possibly via pipe…
Re: Ntimed – NTPD replacement
#20Earlier quoted context omitted.
Abstractions are what make it possible to reason about complex systems. Being able to ignore parts of your codebase is the only way to make changes to it once it gets beyond a trivial size. The whole of the Unix philosophy is enforcing this policy of strong abstractions by making each part of a complex overall system its own binary, such that they can only communicate using the file I/O abstraction, possibly via pipe…
[deleted]