There are more people who think for a living today than ever before; and yet there are remarkably few analytical voices focused on exploring brain work as a business.
Go is a C-derived language which implements a lot of modern programming language features in a clean and straightforward way.
Developed at Google by a team that includes Rob Pike and Ken Thompson.
Go allows for the creation of composite types and supports the notion of interfaces. It implements the typical array of low-level types including byte, int, int64 and a native string type that is immutable as well as array and map types. This allows compile time type checking and makes defining complex types straightforward.
Packages declare their name and functions, variables and types can all be either private or exported so as to be available to other packages, this is declared by the capitalization of the objects name.
Functions can return more than one value. This is declared as part of the function definition and is checked by the compiler. This allows for very clean treatment of errors and flags, and potentially a much more clean and readable way to write complex code.
Interfaces can be declared and functions can be defined which operate on arguments of any type that implements a given interface. This allows for relatively straightforward polymorphism of functions. In some respects similar to C++ templates, only much simpler.
The format string syntax was mostly ported directly from C with the addition of the %T operator which prints the type of the object handed to it, and the %v operator which prints the contents of a variable regardles of it’s type (recursively for composite types).
There is a type channel which provides a message box style interface to concurrent routines, known as goroutines. Any function call can be called in a concurrent fashion. This means that expensive computations can be run in parallel or in the background. The unified thread model looks like it could be a real winner in making powerful concurrency primitives available in a clean straightforward syntax, so that they can be reasoned about with the minimal effort required. This will probably be the hardest part of the language for most programmers to understand, but most of the difficulty lies in understanding concurrency, not in the syntax of the language.
This is a very clean and powerful language. It’s a direct descendant of C with elements of Haskell, OCaml, python and erlang visible as influences. It seems like yet another attempt to make a “better C than C”, and from a first shallow glance it seems like a clear winner. Objective-C fans (mac programmers) will probably sniff that it’s nothing new, and that clean message passing semantics have been available to programmers for decades. In many respeccts Go is not a new language, it will seem very familiar to anyone who has used C or C descended languages; and most of the advanced features that it adds to C are implemented in other languages. Go strikes a good balance between legibility, low-level functionality and high-level programming features. It will have a strong appeal to programmmers who are interested in the type safety and concurrency friendly features of Haskell, but want to access them in a more familiar C-like syntax.
Events happen in the world. Results of events are sensed by sensor and communicated to processors, processors create records of sensor readings in memory. And those records are what is fixed in permanent storage media.
Is there such a thing as too founder friendly?
This is very interesting to me. One of the things I have thought a lot about recently is the disconnect between the effectiveness of cryptography and the ease with which it can be misused and misunderstood. It seems to me that productive work on the user interface to cryptographic operations could produce widespread benefits.
I’m glad to see that low level steps in this direction are happening.
Must look for creating cool visualizations of lots of data.
(via kanbe)
I saw Jigdesh give his presentation at East and was very impressed by his thoroughness and scientific approach to measuring performance for Postgresql. He describes the different conditions under which SSDs can improve performance, and covers the areas where they are irrelevant to performance.
This is another instance of a QR code; encoding the URL of this blog. QR Codes are but one instance of embedding computation in the physical world.