Monday, October 30, 2006

Channel9 Wiki: ConcurrencyRuntime: "An Asynchronous Messaging Library for C# 2.0

The Concurrency and Coordination Runtime (CCR) is a lightweight port-based concurrency library for C# 2.0 developed by George Chrysanthakopoulos in the Advanced Strategies group at Microsoft. Here are some of our design constraints for the CCR:

* We want to support coordination programming constructs as a library rather than by modifying an existing language or inventing a new language. Eventually the best way to add concurrency constructs is through language level support. We believe that it may too early now to freeze the coordination patterns(including joins, choice, etc) into a language because we do not yet have enough experience of their use. For the purpose of experimentation a library based approach seems more suitable. The arbiter architecture described below also allows us to experiment with new constructs in an extensible, composable way.

* We wish to support port-based programming where message passing is used not just at the interface of the program to communicate with external entities but as a software engineering mechanism to help structure our programs. Our desire is to use message passing to help provide isolation between different components for reliability and parallelism.

* We wish to support scenarios in which there is a very large amount of message-passing (e.g. "

Saturday, October 28, 2006

The self-management one seems particularly interesting, with its talk of feedback loops and so on. Of particular interest is that fact that a although the classic negative feedback loop converges back to stability, interacting negative feedback loops may diverge into instability! This is called "stigmergy" (link, link) Very interesting to think about.

If two loops interact via changing their mutual environment, this is called passive stigmergy, and may result in unstable, divergent behavior. (The tribesman and the air conditioner; or when one agent tries to fill a container while another tries to empty it.) Active stigmergy, on the other hand, is when one loop manages the other loop directly, by altering its input. It's the tribesman adjusting the thermostat; it's working with the system, not around it.

Future of software design? Lambda the Ultimate: "Future of software design?

It's been a while since I submitted a is some food for thought!

What will programming look like in 20 years? Maybe it will be based on a 'definitive language' like the speculations of the article Convergence in language design: a case of lightning striking four times in the same place (FLOPS 2006). Such a language will have a layered structure and its handling of concurrency is important. (Whether it is dynamically or statically typed is of absolutely no importance, BTW.)

How will we program with such a language? Maybe we will program with feedback loops, as explained in Self management and the future of software design (FACS 06). This seems to be one way to handle complexity, the inevitability of software and hardware faults, and managing global behavior of a system. I am coordinating a new project, SELFMAN, that is looking at this.

Thursday, October 19, 2006

StringTemplate Template Engine: "What is StringTemplate?
StringTemplate is a java template engine (with ports for C# and Python) for generating source code, web pages, emails, or any other formatted text output. StringTemplate is particularly good at multi-targeted code generators, multiple site skins, and internationalization/localization. It evolved over years of effort developing StringTemplate also generates this website and powers the ANTLR v3 code generator. Its distinguishing characteristic is that it strictly enforces model-view separation unlike other engines. There are currently about 600 StringTemplate source downloads a month.

Terence Parr is the maniac behind both StringTemplate and ANTLR. He is a professor of computer science at the University of San Francisco. "
IKVM.NET Home Page: "Introduction

IKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework. It includes the following components:

* A Java Virtual Machine implemented in .NET
* A .NET implementation of the Java class libraries
* Tools that enable Java and .NET interoperability

Read more about what you can do with IKVM.NET."

Monday, October 09, 2006

From the comments section of the NLog article:

Introduction to NLog - The Code Project - C# Programming: "Take a look at the Microsoft Enterprise Instrumentation Framework"
Introduction to NLog - The Code Project - C# Programming: "What is NLog?

NLog is a .NET library which enables you to add sophisticated tracing code to your application, delivering the functionality mentioned above and much, much more.

NLog lets you write rules which control the flow of diagnostic traces from their sources to targets, which could be:

* a file
* text console
* email message
* database
* another machine on the network (using TCP/UDP)
* MSMQ-based message queue
* Event Log
* and others, described here

In addition, each tracing message can be augmented with pieces of contextual information, which will be sent with it to the target. The contextual information can include:

* current date and time (in various formats)
* log level
* source name
* stack trace/information about the method that emitted the tracing message
* values of environment variables
* information about exceptions
* machine, process, and thread names
* and many more, as described here"