On Tue, Jul 26, 2011 at 11:14 PM, BGB <cr88...@gmail.com> wrote: > one can support ifdef blocks in the IL, no real problem there. >
Those seem like a problem all by themselves. Definitions are inflexible, lacking in domain of language types and lack effective support for complex ad-hoc decisions that would normally enter 'if' conditionals. Definitions are typically rigid, i.e. you cannot choose some definitions to be constant (and specialize on those) while others are mutable like regular variables. The scope of a definition is not controlled by semantics in the language, like a regular variable is. With separate compilation, definitions are often inconsistent across modules, and configuration management easily becomes a problem. > Forth and PostScript are not "unnecessarily powerful". > Sure they are. We might in the general case need Turing power, at the topmost level of a service or application, but the vast majority of a program does not need that power. By definition, any power you don't need is unnecessary. Consider PostScript: here's a language that can spend an infinite amount of time drawing in minute detail on the upper-left square inch of your document. Now, reasonable people won't write programs that do that, but they can. You should say: if they have this power and they aren't using it, they clearly have more power than they need. For developing a zoomable UI, a very nice property would be a language that always draws 'big' details before small ones (level of detail), and that allows you to draw just the visible portions or nearly so (culling). Through a lot of careful design efforts, you can create a language that has these properties - but, in turn, you will need to sacrifice some power. Now, that zoomable UI language could still be capable of drawing arbitrary images if given enough resources (time, resolution, et cetera) but the decision on how many resources to provide is external - which is as it should be. Really, unnecessary power is just a currency you should recognize and trade for useful features. > > if the HLL is somewhere along C or C++ lines (with pointers and OOP and so > on), then the IL being powerful is not the issue. > Agreed. If your alleged 'high' level language happens to be unsafe and undefined for many operations, then you have much bigger issues than the quality of your IL. > > a language much weaker than [Java or C#] is probably too weak to > be really usable in any non-trivial context. > It does seem that way, at least to someone who is only familiar with the C++ idioms. > > dataflow languages currently lack mainstream acceptance as > application-development languages. > Yet, synchronous reactive systems are widely accepted for real-time mission-critical applications. And dataflow systems are the basis for some of the most popular user-programmable application software ever (spreadsheets). Dataflow UIs are not inherently difficult to develop (though legacy integration is a pain, e.g. OpenGL strongly assumes procedural expression). But I think you skipped the point. The issue of non-algorithmic software still strongly favors distributing a higher level language. > > Procedural + OOP is probably a much better bet. > Well, they're the popular bet anyway. And today, we have a lot of buggy application software that takes too long to develop. I wonder if there's a causal relationship in there somewhere. You won't be at any risk of improving things by betting on Procedural + OOP. (4) The web model today is *extremely* constrained [...] > > can't really make sense of the above. > I'll rephrase and summarize: The web is seriously 'gimped'. There is a lot of low-hanging fruit for code-distribution. The barrier is security - authority, resource control, composition - people have reason not to trust the distribution programs. A secure, composable language can reach further and support valuable new features you've never thought about because they seem impossible today. > > doesn't matter much for applications, as you don't generally want the user > to know how it works. > normally, the program is expected to be a sort of sealed black-box for the > creators' eyes only. > > granted, this is not to say that FOSS people/... can't distribute in source > form, but not everyone > should *have* to distribute in source form. > In most cases - business apps, for example, or apps tied to a particular service - developers don't care whether the user looks under the hood. For applications, users are starting to prefer support for alternative UIs, e.g. an app might be a service with a small web-server on a configured port. The path of least resistance should be distribution in source form. > > it is like, the children peek behind the curtain, start messing with > things, ..., and find themselves in the world of copyright infringement and > IP law, and/or find themselves or their parents being faced with a lawsuit > as a result. > > keeping proprietary code hidden away thus also serves the purpose of > helping to prevent these "innocent little children" from unintentionally > committing criminal acts, ... You do have quite an imagination when it comes to protecting your status quo. Obfuscators are easily available to those companies interested in protecting innocent children. > Any good distribution language *will be* high level, though not *because* it's > high level. There are quite a few desiderata for a web language. > however, a lower-level language will be more abstracted from the high-level > language, and more opaque-looking for prying eyes (likely more important for > commercial people, one wants the code as difficult to get at as can > reasonably be done). > The most effective solution to protect code is also one of the best: write a server, don't put those 'trade-secret' algorithms on the client. A second effective solution is to use an obfuscator. But your words do suggest another option: a high-level program can model an abstract machine and 'interpret' a lower-level program. I've seen this done before: a website compiles apps to bytecode, and a developer wrote a JavaScript library to interpret the bytecode. Or, similarly, there's an x86 interpreter in JavaScript, and an example involving the Linux kernel running in JavaScript.
_______________________________________________ fonc mailing list fonc@vpri.org http://vpri.org/mailman/listinfo/fonc