Useful programming tools
Here are some programming tools we have successfully used to build
client and other applications. These are generally Open Source tools
(with a few notable and very worthwhile exceptions).
There are also various language and programming-related topical links.
If you are looking for Microsoft Windows specific programming tools,
consider that a)many of the tools on this page will work with
Windows very nicely and b)really, consider working with Open Source
Operating systems (such as Linux) instead, perhaps for
reasons worth considering.
Having noted this, take a look at our
Windows programming resources
page for useful info on this very large topic.
Back to top
Common Code Production tools
GNU Compiler Collection - C, C++, Objective-C, Java, Fortran compiler suite
The GNU Compiler suite is the canonical open-source compiler collection.
In its full configuration, it supports C (and is used to build Linux kernel),
C++, Objective C, Java, and Fortran.
-
See GNU Compilers
-
Tiny C Compiler
Tcl/Tk - Tool Command Language/Toolkit
Tcl is the 'language' part of the package. Tk is a 'widget' kit that allows
a Tcl (or other language) programmer to build graphical and networked
applications with incredible ease.
This is a very easy to use yet quite powerful language and related toolkit.
-
See Scriptics Tcl/Tk site
-
Tesseract tcl/tk resource page
Code build tools
These tools allow one to build complex sets of source code files into
final executables. Of course, this is chiefly accomplished via:
-
GNU Make
is a very powerful make variant with lots of features, and decent speed.
Debugging tools
-
The GNU Debugger (GDB)
-
Debugging with GDB on the
RedHat site
Cross language and other glue software tools
-
SWIG - Simplified Wrapper and Interface Generator
is a powerful and mature tool used to tie various high-level
languages with C or C++. This means that languages such as Tcl, Perl, Java,
and others can interact with code and/or libraries in C/C++. Typically, this
means you can use prototype and test systems quickly by using a
'higher-level' language to call lower level C/C++ APIs.
Code Editor programs
A Good Programming Editor is a must for productive programmers. Our choice
is (hope a flame war does not ensue.....):
-
vim editor is nice, has a bit of
a learning curve, and is kind of line oriented, but once you get used
to it, you can be very productive; other programmers may prefer:
-
Emacs (GNU, in this case)
is much loved and very useful, extensible, and powerful. What is
remarkable about emacs is that I have seen it used as an editor; a host
for code debugging; a code development host for things like the Oz
language; a Natural Language Processing interface; and a learning tool
for the Lisp language. Got to love it, the power of real programmers
(thanks, RMS....)
Back to top
Graphical User Interface (GUI) Toolkits and Libraries
-
Fast, Light Toolkit (FLTK)
-
wxWidgets toolkit
-
GNUStep GNU version of OpenStep
-
Gimp Toolkit (GTK)
is used throughout The Gimp image
manipulation program
-
GUI development tools listing that is pretty large
-
GTK Instrumentation
Widgets is a library witch provides gtk widgets for
scientific/instrumentation visualization.
-
KWWidgets is a free,
cross-platform and open-license GUI Toolkit. Over a hundred C++
classes have been developed and used by
Kitware, Inc. to create open-source and commercial end-user
applications; brought to you by the same brilliant team that made
VTK happen.
-
X11 GUI Toolkits listing that has some interesting entries
-
Visual Component Framework (VCF)
is an advanced C++ application framework that makes it easy to
produce powerful C++ applications. The framework is a based on a
thoroughly modern C++ design and has built in support for Rapid
Application Development (RAD). The framework is designed to be
portable over multiple platforms and compilers, so you don't have
to lose all that work that went into writing your app for a
single platform!
-
FOX Toolkit is a C++
based Toolkit for developing Graphical User Interfaces easily and
effectively. It offers a wide, and growing, collection of Controls,
and provides state of the art facilities such as drag and drop,
selection, as well as OpenGL widgets for 3D graphical manipulation.
FOX also implements icons, images, and user-convenience features such
as status line help, and tooltips.
-
S-Lang is a multi-platform
programmer's library designed to allow a developer to create robust
multi-platform software. It provides facilities required by interactive
applications such as display/screen management, keyboard input,
keymaps, and so on. The most exciting feature of the library is the
slang interpreter that may be easily embedded into a program to
make it extensible.
-
A blast from the past....the
TurboVision toolkit for text-based GUIs, originally published
by Borland, now available as open-source....wow, this brings me
back......
-
Interesting, but not strictly GUI development 'kits':
-
Tesseract page on X11
-
DirectFB is a thin library
that provides hardware graphics acceleration, input device handling
and abstraction, integrated windowing system with support for
translucent windows and multiple display layers, not only on top
of the Linux Framebuffer Device. It is a complete hardware
abstraction layer with software fallbacks for every graphics
operation that is not supported by the underlying hardware.
DirectFB adds graphical power to embedded systems and sets a new
standard for graphics under Linux.
Back to top
Special purpose libraries
Imaging libraries:
3D Graphics libraries and related links, ass'd:
-
OpenGL is certainly a place to
start thinking about 3D; you might get some use our of our
OpenGl page on our site
-
Apocalyx 3D Engine is a
3D engine based on OpenGL, OpenAL and other free libraries suitable
in particular for the development of Programming Game
-
Crystal Space is a free
(LGPL) and portable 3D Game Development Kit written in C++. It supports:
true six degrees of freedom, colored lighting, lightmapped and stencil
based lighting, shader support (CG, vertex programs, fragment programs,
...), mipmapping, portals, mirrors, alpha transparency, reflective
surfaces, 3D sprites (frame based or with skeletal animation using
cal3d animation library), procedural textures, particle systems, halos,
volumetric fog, scripting (using Python, Perl, Java, or potentially
other languages), 16-bit and 32-bit display support, OpenGL, and software
renderer, font support (also with freetype), hierarchical transformations,
physics plugin based on ODE.....whew!
-
Delta3d is an open source gaming
and simulation engine. If I have read this correctly, it is being used
for US Military training and simulation purposes as well.....
-
Genesis3D is a real-time 3D
rendering environment for all of your real-time 3D needs.
-
G3D is a commercial-grade
3D Engine available as Open Source (BSD License). It is used in games,
tech demos, research papers, military simulators, and university courses.
It can support real-time rendering, off-line rendering, back-end game
server management of 3D worlds, and use of graphics hardware for
general purpose computing.
-
graphics3D is "Resources for
the 3D Graphics Community: developers, researchers, artists,
gamers, and enthusiasts."
- The
Irrlicht
Engine is an open source high performance realtime 3D engine written
and usable in C++ and also available for .NET languages. It is
completely cross-platform, using D3D, OpenGL and its own software
renderer, and has all of the state-of-the-art features which can be
found in commercial 3d engines
-
Klimt is an
open-source 3D library, targeted for PDAs and mobile phones. Its API is
very similiar to that of OpenGL and OpenGL|ES.
-
NeoEngine is an Open Source 3D
game engine, currently available in two flavors, pure open source and
commercially supported version.
-
OGRE:Object Oriented Graphics Rendering Engine
is a very cool cross-platform 3D rendering kit useful for games and other...
-
OpenSceneGraph is an open
source high peformance 3D graphics toolkit, used by application
developers in fields such as visual simulation, games, virtual
reality, scientific visualization and modelling. Written entirely in
Standard C++ and OpenGL it runs on all Windows platforms, OSX,
GNU/Linux, IRIX, Solaris, HP-Ux, AIX and FreeBSD operating systems.
-
World Wind is a NASA
authored program to "..let you zoom from satellite altitude into
any place on Earth. Leveraging Landsat satellite imagery and
Shuttle Radar Topography Mission data, World Wind lets you experience
Earth terrain in visually rich 3D, just as if you were really there."
Although World Wind is Windows specific, it seems so compelling (and,
after all, is NASA authored) that I thought it would be very useful
to include it in this list.
-
XEngine
is the 'Platform and API Independent 3D Engine'; is a platform-
and rendering-API-independent 3D engine for real-time visualization
with support for programmable graphics pipeline architectures and is
implemented in C++
Graph and plotting, ass'd:
-
GraphViz
is open source graph drawing software. It has several main graph
layout program; this code is not as low-level as it may seem, and seems
to be grounded in some rather sophisticated techniques and theory that
seem closer to graph-theory than straight computer graphics
Scientific Computing Libraries
-
oonumerics.org
is Scientific Computing in Object Oriented languages (mostly, C++) and in
particular....
-
Blitz++
C++ based templatized scientific computing library
-
The Fastest Fourier Transform
in the West is a C subroutine library for computing the discrete
Fourier transform (DFT) in one or more dimensions, of arbitrary input
size, and of both real and complex data (as well as of even/odd data,
i.e. the discrete cosine/sine transforms or DCT/DST).
Multiprocessing/Multithreading tools
Back to top
Useful programming tricks, hacks and analysis
-
Time, how to measure it, how to deal with it...
-
Network programming
Back to top
Computer programming books and publications and research
Note very well organized, but interesting nonetheless....
Concurrent programming (Multi-Processing/Multi-threading)
General programming issues and excellence in coding..
Back to top
Noteworth programming web sites, miscellaneous and assorted
-
Lambda, the ultimate
The programming languages weblog; interesting collection
of topics, many modern and very useful
-
Safari on
oreilly.com has many books for
perusal, online, at reasonable rates
Back to top
Computer programming languages, related papers and tutorials
Ada
is a structured, statically typed imperative computer programming language
designed by a team led by Jean Ichbiah of CII Honeywell Bull under contract
by the US Navy during 1977-1983. It addresses many of the same tasks as
C or C++, but with one of the best type-safety systems available in a
statically typed programming language. Ada was named after Ada Lovelace,
who is often credited with being the first computer programmer.
Alice
is an interesting experiment in Human Computer Interaction and programming
under the direction of folk at Carnegie
Mellon University
-
(for the Alice languages based on ML, see also ML section)
APL is
an array programming language based on a notation invented in 1957 by
Kenneth E. Iverson while at Harvard University. It originated in an attempt
to provide consistent notation for the teaching and analysis of topics
related to the application of computers.
Many smart people are afraid of APL because it 'looks funny' and uses a
strange character set. Oddly, many of these characters are taken directly
from (and are equivalent to) operators and notation in mathematics. I have
seen 15-year-old APL programs used in modelling chemical systems that, to
me, could handily do things that I would be rather hard-pressed to do
in any reasonable amount of time in other languages. Very powerful stuff,
somewhat tough learning curve.
The C programming language
is still an example of things that are light and great....thanks to
Brian Kernighan (an
extremely approachable and very interesting gentleman, I must say) and
Dennis Richie
C++ which is probably
the most popular object-oriented language being used today
Objective-C language is amazing because develops love it but it's
virtually unknown outside of a small subset of other C/C++ developers.
I recall hearing about Wall St. developers using Objective-C and NextStep
to build applications in weeks that would normally take months (if ever!)
to get a similar application done using C or C++. Incredibly, NextStep
ultimately became OS-X from Apple, and Objective-C lives on as the language
of choice for OS-X Cocoa development.
- Useful links
about Objective-C, newsgroups, chronology, etc.
Erlang
is a language developed for large-scale parallel and fault-tolerant
computing. It seems somewhat derived from Prolog.
Forth language was originally developed
for telescope control and so is quite good at embedded and process control
types of apps. It is a stack based language with a strong Reverse Polish
Logic flavor. In case you did not know, the firmware in all Sun cards
is written in Forth (all Sun adaptor cards have bits of Forth code in them
for Sun iron to be able to ask in portable way about card!)
-
GNU Forth
-
RetroForth is an implementation of the Forth programming language.
It is completely free, and can be used with Linux, FreeBSD, Windows,
BeOS/Haiku, SCO OpenServer, or as a minimal operating system.
Fortran is, as I understand it,
the oldest high-level language (and, so, presumably the first compiled
language). It is the mother of us all in terms of programming (outside of
assembly language), and it continues to largely dominate the numerical
applications where most scientists first learned to apply computers to
complex numerical problems.
Haskell "is Haskell is a computer
programming language. In particular, it is a polymorphicly typed, lazy,
purely functional language, quite different from most other programming
languages. The language is named for Haskell Brooks Curry, whose work in
mathematical logic serves as a foundation for functional languages.
Haskell is based on lambda calculus, hence the lambda we use as a logo."
Java is a C++ inspired language originally
developed for use in TV set-top boxes. There are a lot of great constructs
available in Java, as I suppose there are in C++, and Java also boasts of
removing the concept of explicit memory allocation and memory pointers in
exchange for automatic garbage collection.
Limbo
is a programming language intended for applications running distributed
systems on small computers. It supports modular programming, strong type
checking at compile- and run-time, interprocess communication over typed
channels, automatic garbage collection, and simple abstract data types.
It is designed for safe execution even on small machines without
hardware memory protection. This language was originally intended as the
system language for the
Inferno
operating system, originally developed at (the Late, Great)
Bell Labs; in fact, Dennis Richie,
one of the architects of Unix and C, was one of the designers or Limbo
Lisp is a language that is amazing
at several levels. Programmers either love it or hate it. Either you
get it, or it's a mystery. It has been used for expert systems and
other areas of AI since artificial intelligence was conceived for
computers.
It has spawned
specialized hardware and architectures and amazing
software engineering and
computer graphics systems.
-
GNU Lisp an ANSI Common Lisp
implementation; includes an interpreter, a compiler, a debugger, CLOS,
MOP, a foreign language interface, i18n, regular expressions, a socket
interface, and more.
-
CMU Common Lisp
is a free, robust and comprehensive implementation of Common Lisp.
-
Steel Bank Common Lisp is an open
source (free software) compiler and runtime system for ANSI Common Lisp.
It provides an interactive environment including an integrated native
compiler, a debugger, and many extensions.
-
GLOS
is a graphic library intended to display and animate 3d objects
in real-time onto a X-Window. Implementing a subset of the OpenGL
library, it cares about observing OpenGL primitive naming and rendering
methods. It is also entirely developed in ANSI Common Lisp,
but features some specific CMU/CL optimizations enabling about 1/4
of MesaGL speed.
-
Cliki is the Common Lisp Wiki; many
useful items to be had...
-
LispMachine.net has
many tasty bits...
-
Association of Lisp Users (ALU)
-
Paul Graham's site not only
has lots of information on Lisp, but has lots of info on many
important considerations and takes in software engineering and
general programming. Smart guy (Lisp attracts lots of smart folk...)
-
"Lisp: Good News, Bad News, How to Win Big"
is the classic commentary regarding
attitudes, technologies, and approaches to software development, and
where engineering has finally left us vs. what could have been....
-
Lisp Machines and Symbolics information, quite neat
-
Wikipedia on Symbolics
-
Symbolics Graphics division and related memories...
-
Symbolics Lisp Machine Museum
-
A Brief History
of Lisp Machines; also look around this site, this Lisp-er has
many interesting tidbits of info on Lisp, Lisp Machines, history,
important research papers, etc.
-
See also Scheme programming section
Logo
is another very cool language with many advanced features. It was originally
developed by Seymour Papert at MIT for use in education and, indeed, this
still seems to be the direction Logo is most used in.
ML there are several variants of ML
available; I don't know a lot about this language, but I have understood that
really great functional programming is fast to develop, lends itself to
very stable engineering techniques, and is very expressive and fun to work
with.
-
Programming in Standard
ML tutorial and notes from
Computer Science Dept. at Carnegie Mellon University; there are
several version of this document available on line, look for newest,
which seems rather nice and rather complete
-
Functional programming in the real world is an interesting summary
of small, mid and large scale applications of functional programming
techniquest and languages (such as ML) in industrial and other
settings. I always appreciate this sort of thing because computing has
very much become rather predictable ("GUIs are done in Visual Basic,
everything else is in C or C++") and it's refreshing to see large scale
experimentation and deployment of new paradigms and techniques. So there.
-
Caml and Objective Caml
-
Moscow ML
-
Alice dialect of ML
is a functional programming language based on Standard ML, extended
with rich support for concurrent, distributed, and constraint programming.
Occam is a parallel processing
language designed by a team at INMOS in conjunction with the design of the
transputer processor
, and based on T. Hoare's ideas of CSP.
Occam incorporates support for very fine grained, easy to use threads and
seamless support of multi-processor environments. It can be used with shared
or distributed memory systems, and the strong basis in CSP makes it
excellent choice when formal proofs of correctness are required.
INMOS has big plans for the transputer. The name of this processor
was based on TRANS from transistor (utterly ubiquitous) and comPUTER;
Inmos thought transputers would be everywhere in the near future
(as of the early 1980's). And so, a brief hardware digression.....
Oz
contains in a simple and well-factored way most of the concepts of the
major programming paradigms, including logic, functional (both lazy and eager),
imperative, object-oriented, constraint, distributed, and concurrent
programming. Oz has both a simple formal semantics (see chapter 13 of
the book mentioned below) and an efficient implementation, the Mozart
Programming System (see below). Oz is a concurrency-oriented language, as
the term was introduced by Joe Armstrong, the main designer of the Erlang
language. A concurrency-oriented language makes concurrency both easy to use
and efficient.
Pascal is Dr. Niklaus Wirth's
structured programming language that was often seen as a popular contender
for general programming practice in the 70's and 80's.
Perl is sometimes called "the duct tape
for the internet." It's really much, much more. What's interesting to me,
though, is how sometimes funny the relationship between Perl-mongers
and Perl-monks vs. other languages is. Anyway, never underestimate
the language and its devotees.
-
perl.org
-
cpan.org where you get your
Perl modules on....
-
a Great Book available for free download is
Higher Order Perl;
this book could really change your way of thinking about not just
Perl, but many other languages, it's a real treasure!
Prolog
is named for PROgramming in LOGic. It was originally based on a Lisp-
like syntax, but later evolved into syntax referred to as
Clocksin and Mellish syntax after the two researchers
that evolved Prolog into its more common, later form.
Prolog is considered a 'declarative language' in that you can feed
'clauses' (logical statements) into Prolog then, when suitably queried,
draw new facts derived from stored clauses based on Prolog's built in
'inference' mechanism.
Although the now-defunct Turbo-Prolog product from the nearly defunct
Borland Corp. was not a true Prolog (it was typed!!), I used it to build many
quite sophisticated applications for customers that rolled out a whole lot
faster than if I had written in C. Quite an experience.
-
GNU Prolog
-
SWI-Prolog offers a comprehensive
Free Software Prolog environment, licensed under the Lesser GNU Public
License. Together with its graphics toolkit XPCE, its development started
in 1987 and has been driven by the needs for real-world applications.
These days SWI-Prolog is widely used in research and education as well
as for commercial applications.
-
Prolog and Logic Languages has many very cool links including lots of
parallel Prolog and other topical goodies
-
The
Warren Abstract Machine or "WAM" is the abtract execution engine
intended to host Prolog and other symbolic computations sytems. It
is worth taking a peek at in order to see an early 1980's approach
to symbolic computing and Prolog implementations in particular.
-
Warren's Abstract Machine: A Tutorial Reconstruction
is a book that was published by MIT Press, in 1991, now out of print;
the author owns the copyright and does not mind distributing it for
free to anyone who wants to use it for non-commercial purposes.
Python is a quite powerful language
with lots of built in functionality by way of extensions, plus lots of
interesting and advanced constructs. The only real complaint I have about
this language is that it forces structure on your programs by way of
whitespace detection: the code is expected to be formed and block structured
based on indentation and whitespace hinting......I thought we ended this
with Fortran....
Ruby is a dynamic, open source
programming language with a focus on simplicity and productivity.
It has an elegant syntax that is natural to read and easy to write.
-
Ruby on Rails is an
open-source framework that's optimized for programmer happiness
and sustainable productivity. It lets you write beautiful code by
favoring convention over configuration.
-
Ruby Central a growing web
resource for everything to do with the Ruby language.
Scheme
is a powerful dialect/derivative of Lisp. It is often used as an extension
language inside of other systems (such as
script-fu in
The Gimp)
SmallTalk is one of the very first
modern Object Oriented languages (a full OO language, no less..). Smalltalk
and its development environments used on
Xerox PARC Alto workstations was the
tool of choice for pioneering work in the development of modern user
interfaces, mouse based graphical interaction, and object oriented
programming and analysis techniques.
-
Squeak
is a very powerful, and small (boots from a floppy!!) SmallTalk
based development environment and language 'ala classic SmallTalk
from PARC. This is especially true since I am pretty sure that
Squeak's principal developer is none other than Alan Kay, one of the
originators of Smalltalk.
-
GNU Smalltalk
-
Slate language
is a prototype-based object-oriented programming language based on Self,
CLOS, and Smalltalk. Slate syntax is intended to be as familiar as
possible to a Smalltalker, rather than engaging in divergent experiments
in that respect. Unlike the Smalltalk family, within Slate, methods can
be assigned to a signature of objects, instead of being installed on one
favored receiver
tcl is a very simple language that has
lots of handy applications. It also has tremendous support for fairly
low level reflection as well as interfacing with other languages. This makes
it a lot like an embeddable, portable poor-man's Lisp. Lots of very big
projects have been done in tcl and its UI companion toolkit, Tk.
Back to top
Interesting commentaries on programming
Programming Humor
Back to top
Back to Tesseract links