User loginNavigation |
LtU ForumDependencies as first class entitiesWhen thinking about what pains are worst when writing code, it seems like it all boils down to dependencies. Even as a user, the problem seems to be the same. Ehrm, correction, as a user I get frequently insanely mad at dependency problems. As a programmer, it is more of the moaning kind. My first thought was to do a better make language, since this was where most of my pains were. Then I realized, it is bigger than this. Just building the thing isn't all there is, installing it, remember what was installed and why, be able to remove some of it that seems to be in the way, and so on. Not to mention configuration problems. Now, why was that configuration set in that way, who depends on it? What would happen if I changed it? Sometimes I don't even know how to find the answers. My current thought is to deal with this once and for all. Let's make dependencies a first class entity in the programming language, make it externally visible and then watch what would happen. The questions I haven't been able to figure out any answers to yet are:
Has anyone been there before me, as usual, and written some vice word on the subject? Anyone having similar ideas? The Pooh language / Learnable programming in action
I would like to present my project; it might be interesting in light of the 'Learnable programming' discussion.
The Pooh language lives here
It has the following features:
What will programming look like in 2020?Things are too quiet lately, so maybe its time to start a fun thread. I used this question as a lead in to a presentation on live programming I recently gave at a working group, but I thought it would be fun to gather a bunch of predictions if anyone is willing. What will programming look like in 2020? Keep in mind that programming in 2012 mostly resembles programming in 2004, so could we even expect any significant changes 8 years from now in the programmer experience? Consider the entire programming stack of language, environment, process, libraries, search technology, and so on. REBOL 3 released under Apache 2 licenseThe source for the REBOL 3 system has been released under an Apache 2.0 license. The github repository is at: https://github.com/rebol/r3 By Greg Buchholz at 2012-12-13 00:58 | LtU Forum | login or register to post comments | other blogs | 4759 reads
how to learn DSLs?tl dr - how does one learn to do DSLs as good as how STEPS people apparently do them? So the STEPS progress report indicates that knowing how to make really good concise DSLs is a super power for programmers who want to avoid having too many lines of code. I have perused things like Fowler's DSL book, and am wondering if that is pretty much close enough, or if there's some other things one would have to know and practice in order to get STEPS quality/style magic bullet DSLs? Frankly, the times I've seen people make their own language in industry, they've almost all inevitably been a train wreck. "When faced with a problem, some people say, 'I know! I'll create a DSL!' Now they're faced with two problems." Eighth draft of Scheme R7RS-small publishedThe eighth draft of the Scheme R7RS-small standard has just been published. This draft contains editorial corrections to the seventh draft, as well as changing the definition of eqv? on inexact numbers to the style of R6RS operational equivalence. This draft will be used for the ratification vote by the Scheme community, though we will continue to correct mistakes before the final draft. Details on the ratification vote will be published at scheme-reports.org and on the scheme-reports@scheme-reports.org mailing list. Eventually consistent distributed STMAn implementation based on a paper I posted on LtU a couple years ago. It turned out to offer a great programming model, which looks like REST but dynamic, like Google Docs vs. a static Web site. The eventual consistency aspect allows server scalability and offline modification of data for clients. Versions merge later when connectivity is back, like distributed source control. link Entanglement and Import by specification.I've been thinking. Sorry, I can't help it. There is no 'off' switch on this thing. A ubiquitous problem in programming is Entanglement. We want clean, documented, specified interfaces, but it is all too easy to create an inadvertent reliance on undocumented, unspecified features of a particular implementation, which may or may not be correct according to the actual intended/specified interface and which may or may not be carried forward or repeated in future implementations of that intended interface. This is a problem because it means code breaks later, when a new implementation comes along. Another Entanglement problem is that when we import a given library, we implicitly import all of that library's dependencies, and all of their dependencies, ad nauseam; often the transitive closure of stuff that gets imported contains a lot of duplicated functionality where subcomponents relied on "similar" services by importing different libraries where they could reasonably have imported the same library. Finally, it is all too easy to create an implementation of some specification which fails to actually fully meet that specification, and not realize the fact because it works for the particular instance of our program. This is a related problem, because use of the library then causes bugs in other programs. It seems to me that we don't really want to import ephemeral, overspecific, and possibly buggy implementations of functionality; we want to import hopefully less-ephemeral _specifications_ of functionality. Instead of saying "give me library foobar, located at /path/to/foobar" we should be saying "import a library which implements the foobar specification, where the specification file is located at /path/to/foobar." The distinction is admittedly small from the programmer's POV, but this would allow the linker to pick an implementation (where multiple implementations meeting the spec are available) to optimize performance, or size, or other considerations. It would also provide for an executable specification that tests all (and only) the functionality guaranteed by the specification when some programmer asserts that their library meets the spec. Where different subcomponents import similar functionality from different sources implementing the same spec, the linker could simply relink them all to a shared source, eliminating redundant branches of their dependency trees. And finally, we should be testing our libraries anyway, right? Why not build the test suite directly into the standard library, along with more than one implementation of each? In using them, surely we'd discover bugs a lot faster. If code breaks when a different library implementation is swapped in, then it means the specification test suite is failing to test some property that the code relies on. That means that either the specification test suite is incomplete, or the code that purports to rely on an import meeting exactly that specification is wrong. This would make detecting inadvertent Entanglement issues very much easier. Likewise, an executable test suite for each library being part of a language's standard would make a huge contribution to bug testing all new or updated versions of the standard library, allow providing multiple library versions optimized for different constraints and purposes transparently, and make it absolutely clear what a specification does and does not guarantee. Parameterized modules have been discussed here before. Gilad Bracha has blogged about it. dmBarbour has posted here about linkers as constraint solvers. I imagine providing a debugging version of each standard library, created specifically to protect against Entanglement. These should implement all of the spec -- and, where possible, do absolutely nothing else reliably. Where the spec doesn't specify, for example, which element of a set is returned or what order things are evaluated in, the debug library versions should deliberately randomize these things. Where the spec says an error may be thrown in the library, the debugging version should occasionally do so for no reason at all, exposing code that has no error recovery capabilities. Once your program runs correctly in debug mode (using the debugging versions of all libraries), you can simply relink in performance mode. So, anyway, I'm just throwing this out there for your consideration and feedback. Ray Uniqueness and Reference Immutability for Safe Parallelism(As seen posted on an Obj Cap list today) Uniqueness and Reference Immutability for Safe Parallelism. 2012.
By raould at 2012-12-04 22:00 | LtU Forum | login or register to post comments | other blogs | 3836 reads
The Programming Language Tag CloudsHi there. Not a very serious project, but I'm currently building tag clouds describing various programming languages at http://plwords.herokuapp.com/. In case some of you want to contribute their feeling / knowledge about common programming language, some tag clouds really need more contributions! |
Browse archives
Active forum topics |
Recent comments
9 weeks 5 days ago
9 weeks 6 days ago
9 weeks 6 days ago
10 weeks 2 hours ago
10 weeks 3 days ago
10 weeks 3 days ago
10 weeks 4 days ago
10 weeks 4 days ago
10 weeks 4 days ago
10 weeks 4 days ago