Thinking on the opposite direction, wouldn't it be interesting to have unmanned drones to eliminate locusts with ballistic impacts?
379 karma · joined August 4, 2011
Thinking on the opposite direction, wouldn't it be interesting to have unmanned drones to eliminate locusts with ballistic impacts?
You must realize that self confidence is not about thinking you are the best on what you do, but making sure that you are trying to do your best at every opportunity that you are given.
Once you assimilate that, you will understand that asking for help is sometimes the best way to do your best. And you will grow as a person with that.
Premature optimization, or at least one of its manifestations, is failing to consider the opposite.
By no means I want to sound inquisitive, but, if it is different, how is it? Is one of these models (OOP and functional) a subset of the other? If so, do they represent levels in a given hierarchy? If not, do they even intersect? Are dissimilar properties complementary?
And, in those very same computer implementations, data cannot possibly contain methods. The compiler is going to treat them as ordinary function implementations, not any different from functions generated by the compilers of non-OO languages.
So I would love to see a mathematical proof of the isomorphisms you mentioned but, especially, a proof that your proposal is actually non-isomorphic to the other examples. I don't believe that holds true.
“Abrupt typing” would describe this approach more precisely, if there was such jargon. A program module has no types while it is a prototype, but it must be completely typed (which is just another term for “having its correctness proved with the best tools available at this day and age”) before it goes into production.
(If you should first understand your problem before you write some code or if you should use code to help you understand the problem and then write more code is up to debate, of course. Typing is an invaluable tool of thought to help you understand your problem, yes, but it is just one more tool in the toolbox.)
The sad thing I noticed though is that, having hacked a mostly untyped Python code base during the last few days, making sure that all typing annotations you add to the code base are sound is a big PITA, to put it bluntly, and I would pretty much prefer to work with a statically typed language in this particular case. If your typing discipline is uncoupled from the ability to run code, people simply remove that obstacle from their way. It starts to be treated pretty much like tests and documentation: indispensable in theory, relegated to second plan in practice.
So my impression is that gradual typing almost got it right, but it may do a great disservice to overall code quality as well. I am now inclined to think that some kind of barbell strategy on typing will render better results: use both a completely untyped dynamic language such as Tcl, where everything is a string, and a static, strongly typed programming language (ideally a proof assistant with dependent types). You prototype with the former and move into production after translating your solution to the latter. If you ever need to push untyped code into production, it will be obvious to everyone involved and, since it is so decoupled, it cannot affect the quality of the statically typed codebase by any chance.
My personal take on the book is that the kernel was meant to be a portable virtual machine, extensible through processes, and that those would be the building blocks of user applications for which the shell would act as glue.
In other words, the shell and the OS are separate because most of what we commonly call "the OS" may be interpreted as mere encapsulation of less versatile hardware architectures.
If you consider hardware is a commodity and the cost of opportunity for replacing hardware instead of optimizing software is worth it, then formulate it better.
One may object by saying that the burden on hardware resources is higher because we consume more data, which is partially right. Although I don't intend to give a thorough objection here, please consider those two points:
- The payload fraction is larger in multimedia applications, for sure, but I can't see a reason why the "propellant mass fraction" equivalent in software should be bigger than it was, for example, 10 years ago. If we consider text-only data as an example, we notice that the propellant mass fraction increased as well.
- Higher level languages undeniably consume more resources by orders of magnitude; hardware frequencies must keep up by orders of magnitude as well.
Execution environments, on the other hand, are tailored for a class of problems, incorporating useful abstractions. Yes, I know it is not so evident in a world where we have general-purpose programming environments by the dozen; when we talk about domain-specific languages, this makes a lot of sense. They can only gain expressiveness if they can represent bigger abstractions with fewer words.
A system is distributed if the message transmission delay is not negligible compared to the time between events in a single process.
If link transmission rates continue to drop and latency to get lower with time, some dull distributed programming problems we have today will disappear, as another ones will raise and become feasible. On the day this happens, maybe a local network will be considered a single piece of hardware.
It's mostly systems programming research (IMO, at its best, given the poor state of the art nowadays), but at that intersection area with programming languages.
It reminded me of languages like Lucid[1] and Quil[2], which treat non-von Neumann models of computation; Escher, though, seems to focus at the IPC level.
[1] https://en.wikipedia.org/wiki/Lucid_%28programming_language%...
The first thing to ask is what differentiates Wikipedia content from the rest of the 'net so that it would be OK to break net neutrality principles towards the implementation of this project.
So, even if this breakage is somewhat worth the bending of the rules, companies must support the idea. Once they do it, what would be the moral ground to rightfully deny another proposals from content providers that offer them money to do that?
Well, this problem is not something really new. Net neutrality is already broken, though almost everybody agrees on its importance. There must be some kind of consistency if we want it to survive.
Not that I see this project as something inherently bad, it is just the contrary, but it can give rise to some bad moral precedents.
It looks like people forgot how to develop simple protocols for this sort of thing. A simple protocol for remote named pipes, a client and a server, and a wrapper/gateway for dotCloud/HTTP wouldn't take a (very) long time to develop, wouldn't be completely dependent on an external service, and would probably develop into something bigger --- even for anonymous file sharing!
I really would like to know why programmers, in general, seem not to be doing this sort of thing anymore. Sorry if it looks like some sort of misplaced criticism, I'm posing all of it genuinely as a question to the community.