archives

quite "old" books discussion

Hi,

many of you probably do not know me (and vice versa), I'm quite "new" in the field of computer programming (and LtU) and basically self-taught.
I live in South America (Argentina) and, of course, I speak spanish. In my view of the "arena" of computer science here, we're are pretty "late". I think that the reason is mostly due to the lack of translations of books in spanish (considering the overwhelming amount of publications of computer science in english).
To make a little absurd example, in our universities are still using the first edition of the Dragon's book (isnt a REALLY good example, but it makes the point). Anyway, I'm a big fan of "old" books, I dont know, I have a certain kind of appeal for them, I feel in the "new" publications a more present presence of the "industry" or "what the industry wants" than real concerning about "true knowledge".
To make the story short (maybe its pretty late for that!) I have come across in my search of certain "oldies" which I bought but did not read yet. I'll list them here and I'll appreciate any comments from people who read them or know them about if they are useless or good things can come from them.

Harlan D. Mills - Principles of computer programming: A mathematical approach (1986)

PJ Brown - Software portability, an advanced course (1979)

Perlis, Biggerstaff - Software reusability, Vol. I concepts and models (1989)

and currently reading, Richard Bornat - Programming from first principles (1987)

they are pretty old, yes, and you may think that I'm a little crazy, that's true too (lol), but, I don't know, thay caught my eye !

Best regards,
Sebastian.

PS: I'm sorry for any mistake that you might encounter in my english !

Side effect tracking in Haskell and D

A readable blog post, and a good Reddit-Programming discussion about the management of side effects in Haskell.

In the Reddit thread there are two answers (first and second) that discuss why Haskell is not so good after all, and suggest possible ways to improve it.

Haskell allows you use the built-in ways to control side-effects, or to design your own ways, with monads. The D language too offers you several ways to control side-effects, but they are more hard-coded (its single-inherintance OOP and struct RAII offer other ways to build your own ways to control effects). There is a strict module system with nested imports too, static/nonstatic nested functions, static/nonstatic nested structs and classes, a modifier to require the access to global names, transitive const/immutable attributes, compile-time constants computed with a kind of staged compilation, transitive const methods for structs and classes, the transitive nothrow attribute to specify function trees that can't raise exceptions, errors, tunable floating point exceptions, the stack memory is thread-local on default plus there are the shared and __gshared attributes, there are protection attributes like protected, public, private both for methods and module-level names, there is both GC-managed memory and C-heap memory, there are the transitive @safe, @system and @trusted attributes that help avoid certain unwanted interactions like memory corruptions, there is the transitive pure attribute that allows to specify strongly-pure or weakly-pure or const-pure functions. At compile-time there are template constraints that use compile-time-function-evaluation too to enforce arbitrary complex properties about template types avoiding unwanted usages too. This is a large amount of built-in ways to control access and side effects. Some D users have proposed other ideas, like linear types, a refined ownership system, @noheap to control heap activity, head-const for reference types, etc.

Language design is a matter of trade-offs. I wonder if in practical programming all such hard-coded things are able to replace part of the flexibility Haskell offers in controlling side effects.

Clusterken

Some day I would like to have the time and access to experiment with Clusterken, an offshoot of Waterken, since they all purport to make distributed fu easier to grok and implement, and safer to boot.

Clusterken provides object-level virtual cluster management, exactly-once message processing, composable reliability, output validity, and authorization based access control. Together, these features simplify programming and improve productivity on distributed applications by enabling arbitrary interaction patterns.