benbataille
Joined 14 years ago
Joined 14 years ago
However, libdus is not what people usually talk about when they talk of dbus. The core part of dbus and what could bother server administrator is the message bus daemon which allows any applications to expose their functionalities and talk to any others. Now, systemd can use the message bus to allow applications to ask for service activation. But, it's not required and you can run the init system without it.
The issue of cost and incentive with this kind of revolutionary innovation is real. The problem is simple. When you innovate, you bear alone the fixed cost of development while your competitors can copy and bear only the marginal cost. That's the reason the patent system exists and normally that's fine.
But, for a revolutionary invention, patents might not be feasible. Imagine you find a cure to cancer. Do you really think every governments and public opinion are going to let you be the sole producer for 30 years while people are dying ? Impossible. This creates a disincentive to push money towards a cure for private investor. Now, the idea behind a price is that if you find the cure, the price is going to cover your fixed cost (ideally more) thus investing is competitive again. Technically, as it fosters competition and you will only reimburse the finder, it supposed to generate more research than just spending the price money. Putting money aside for this kind of price was one of the main goal of the Bill and Monica Gates Foundation when it was founded (I think, they went back a bit because people wrongly assume its wasted money).
Theoretically, you have to use the real rate of return of your money and discount it on the time period. Of course, estimating the real rate of return is an art in itself. Considering value of bitcoin has been shown to be highly volatile, doing any semi-long term investment with it is basically gambling.
They made some pretty interesting things in type theory, language design (OCaml), proof (Coq), static analysis and certification (B-method, Frama-C, CompCert).
All of these is useful if you want to do safe embedded softwares for your planes, flight control softwares, automatic metros or nuclear reactor monitoring systems (which they do) but it isn't really easy to explain to the general public.
There is also a supposedly quite strong numerical modelling group working on nuclear deterrence but most of this stuff is classified. Let's also not forget that France still is a major arm dealer so you have some R&D done by private defence companies. Nothing comparable to the USA but you still apparently have some development in targeting, surveillance and interception (well, France has a world covering array network, I hope they at least try to use it).
Now, there is nothing particularly exceptional here. The situation is mostly the same in all publicly founded laboratories around the world. What France doesn't have very much is people doing frivolous stuff like email sorting or social network aka start-ups but that's another problem.
Most of the international rankings are heavily biased in favour of English speaking countries and particularly the USA (especially ARWU). It's mostly fine in sciences where all the important publications are in English. It's clearly dubious in the humanities. Beware this kind of claim.
The jsonline article does quite a lousy job with details.
The definition of an interpreter is generally broader than a main loop running instructions one at a time. For example, everyone seem to agree that Python is an interpreted language while python interpreter transforms the source code into an IR before passing that to its main loop. Truth is the line between what is a VM, an interpreter and a compiler is rather fuzzy.
The implementation of a process virtual machine clearly is an interpreter of a bitcode. Now, it's not entirely absurde to consider the couple JIT and VM taken together as an interpreter. Actually, this is clearly encompassed by the third point of the definition of an interpreter provided by Wikipedia : "explicitly execute stored precompiled code[1] made by a compiler which is part of the interpreter system".
To come back to the article discussion, I agree with the previous poster than the expression "source code VM" is kind of meaningless. Actually, the paragraph following is even plain wrong. The Dart VM executes bitcode not source file and Dart is JITed.
In the same way, I find it quite surprising that forty years after Hindley paper, people still confuse type annotated and statically typed but well, c'est la vie.
If you look at the [Abs] rule, you will see in the premise "x : tau". Here, by definition, tau is non qualified. It represents a unique type. It's necessary monomorphic. Concretely, it means x will be bound to a type variable in the type environment and this type variable will uniquely be unified.
On the other hand, the premise for [Let] is e0 : sigma, x : sigma. Contrary to tau, sigma is qualified (polymorphic). So, it can be unified to a different type variable in different expressions.
I completely understand why it fails you. The way qualifier affects the unification process is quite complicated. I finally understood it only after having to write my own rules when I was implementing a type checker for my master thesis.
If you don't mind the formalism, read carefully the Wikipedia article paying particular attention to how tau and sigma are defined and to the paragraph about free and bound type variables. If you want something more practical, look at the Peyton Jones book I gave a link to in this thread. Part 9.5 is the important part but it's difficult to get without having read the whole chapter (eventually chapter 8 too). It 's still complex but far less abrupt than the Wikipedia article.
On the contrary, the value restriction is a part of the extended rules used for the typing of ML. It was introduced because ML isn't pure, it supports references. The value restriction is there to prevent them having polymorphic type. The rule is simple : syntactic values are the only things receiving a polymorphic type. What is a syntactic value ? To quote Geoffrey Smith notes on SML97 "Basically, a syntactic value is an expression that can be evaluated without doing any computation".
All this iss done in order to ensure type safety. Actually, if references could have a polymorphic type, the type system would accept incorrect programs such as :
let r : 'a list ref = ref [] let r1 : int list ref = r let r2 : string list ref = r r2 := "a" let v : int = 1 + !r1
Which does not work because r, r1 and r2 are references to the same value.
Value restriction is a bit overkill. It rejects program which could be safely typed. Other solution to this problem exists. Actually, Standard ML used a different solution at the beginning (carrying information about the typed hold in a cell along) but it has other drawbacks. MLTon has a really good page about all that : http://mlton.org/ValueRestriction
Some research was done about relaxing value restriction. OCaml type system, for example, has less constraints than SML and MLTon (you can see this paper about that http://caml.inria.fr/pub/papers/garrigue-value_restriction-f...).
This equivalence does not hold in the HM formalisation. It's well explained in the Wikipedia article : http://en.wikipedia.org/wiki/Hindley-Milner#Let-polymorphism
[Abs] is monomorphic while [Let] is polymorphic. Using the Wikipedia article exemple : \f.(f true, f 0) will not be typed while let f = \x.x in (f true, f 0) will be reduced to (bool, int).