Skip to content

History

Randall O'Reilly edited this page Nov 17, 2018 · 6 revisions

History

This page provides a brief history of emergent

11/2018: Emergent transitions to Go

The new version is much more open and general-purpose, allowing interoperation of many different frameworks and languages, including PyTorch and Python, and Go is fast, clean, and elegant.

8/2007 - 11/2018: Emergent in C++ and Qt

This version of emergent is written in C++, building on the PDP++ foundation from 1995, with a completely revamped GUI developed by Brad Aisa using the Qt GUI toolkit, and the Coin3D version of the SGI's original OpenInventor 3D toolkit.

Although we put a ton of effort into this project, we have become increasingly dissatisfied with both C++ and Qt, and the Coin3D 3D scenegraph is ancient, inefficient, unsupported, and likely to be obsolete and unusable on modern hardware at any point (it only supports the oldest legacy OpenGL 1.1 standard). Also, there are many great advances in neural network software and hardware these days (e.g., PyTorch, GPU's), that emergent was unable to take advantage of. Thus, we have decided to completely reboot the entire enterprise from the ground up, with a much more open, general-purpose design and approach.

Here are some opinions about the state of C++ that motivated the move to Go:

  • There are many different ways to do anything, many different standard-ish libraries in addition to the official standard, and the language is vast and hard to understand. It has evolved over time in a way that has just added features.
  • Compile times remain very long: emergent takes maybe 20-30 min to build on a modern 8 core laptop, and Qt is over an hour.
  • While more recent versions are perhaps getting better in some ways, adopting the new standards would mean a complete rewrite anyway.
  • Templates in particular are very ugly and hard to read, and the standard library has very poor naming consistency and is generally not a pleasant aesthetic experience to use.
  • Qt on the other hand is very clean and consistent, but its fundamental design is at odds with the recent developments in C++, and still doesn't really interoperate with the standard library very much.
  • Thus, C++ seems like it is at a crossroads, and it is unclear how Qt will fare over time.
  • Qt itself has become rather bloated, like C++, and now features no less than 3 entirely different widget sets! All of their current energy is focused on their own version of a web-like framework called QML, which seems to land in an awkward spot: it is similar to standard web tech, but is actually different, and doesn't run on the browser, and is apparently somewhat slow, to the point of driving the transition from the 2nd to the 3rd set of widgets (which have more stuff implemented in C++).
  • Also, their 3D effort was unusable for our purposes (despite considerable time invested in trying to make it work) and immensely over-complex.

9/1995 - 10/2003: PDP++

PDP++ was developed by Randall O'Reilly, Chad Dawson, and Jay McClelland, at CMU, and then continued to be developed by O'Reilly at CU Boulder. It was written in C++ and used the InterViews GUI toolkit, which was 2D, and only ran under X11.

It featured the TypeAccess reflection system and CSS (C-super-script) scripting language, which have been there from the very start.

1988 - 1993 or so: X3DNet

Randall O'Reilly wrote a simulator in C++ and X11 in college and early grad school, which featured the original use of the 3D-looking network layer layout.

X3DNet Network