Computer Languages
Putting together the C vs Pascal page got
me reminiscing a bit, and I thought I'd collect all the computer
languages I have learned. I am including anything I worked on/with as
a hobbiest, in school (college), or as part of a job. I am excluding
anything that I might have learned a bit about along the way, but
where I have not actually 'produced' something.
(SNOBOL,
APL,
PILOT,
Logo,
Objective C,
Go,
x86 assembly, etc.)
Also listed is where I first experienced the language. (The
68000 and C first at home, for example, but I had extensive work
experience with it—more than any of the other languages.)
The lists are approximately in the order in which I learned them.
Not all of these imply any sort of expertise, only that I did
produce something in each, however small or badly written. (Contrast
the
9900,
for which I wrote exactly one subroutine
[a CORDIC
rotator for a school assignment] with the
34010, for which I
wrote a complete low-level graphics library, defined a custom ABI for
higher-level C code, and for which I ported the
DIAB C
compiler. [The magnificent and highly-retargetable DIAB compiler
is still out there, now a product of
Wind River, though they've
almost certainly never heard of that 34010 cross-compiler I did. Its
author did offer me a job once, stating that I was
the only person in the world who knew how the compiler worked who did
not already work there, but I didn't want to relocate to
California—the only option at the time. The 34010 compiler required
zero code changes, the retargeting was
accomplished entirely via the base compiler's table-driven
targeting system.])
- Assembly
- 1802 (Home)
- 6502 (Home)
- 8085/Z-80 (School)
- 9900 (School)
- 8048 (Work)
- 8051 (Work)
- 680x0 (Home)
- 6809 (Home)
- 68HC11 (Home)
- 34010 (Work)
- FINGER (Work) This was a custom bitfield-moving
80-MIPS 32-bit Harvard-model processor that I designed in
Verilog for use in Packet Engines' then-new
Gigabit Ethernet switch
ASICs.
There were five pipelined in a single channel's data path,
IIRC, and each had about 50 instructions in its time budget in
order to keep up at line rate. Software wanted an ARM and a C
compiler, which was entirely impractical, ludicrous even, so
instead we gave them the FINGER. (There was a
backronym,
but I forget what we came up with, besides 'N' for Network.
Fast Ingress Network General
Execution Resource?) The FINGER
was a key part of providing
low-latency
cut-through
switching and programmable
MPLS
and
Layer-3
switching in the product. The FINGER
array, in conjunction with two binary search engines (in lieu
of expensive and limited-capacity
TCAM's)
and other dedicated hardware in the Ingress ASIC, was
responsible for analyzing the incoming frames and determining
their disposition (forward, drop, flood), and what, if any,
edits were to be accomplished in the Egress ASIC(s); all at
line rate. This was an ambitious ASIC for the time, and
required IBM's then-new
copper
process. It was heartbreaking that this product never saw
commercial sales. It was ready for shipment just after we
were bought and merged with a competitor, who scuttled it in
favor of their (much less capable) product line. The quote of
the day: "Don't let the customer see that, otherwise they'll
want to buy it!" We made keychains out of the rest
of the first-run silicon. The world's most expensive
keychains (man-years of engineering on our part plus some stiff
NRE
charges from a premium vendor of bleeding-edge technology),
solid gold would have been cheaper!
- PowerPC (Home)
- MIPS (Work)
- ARM (Work)
- FORTRAN (School)
- BASIC (Home)
- Pascal (School)
- FORTH (Home)
- C (Home)
- FoxBase (Work)
- sh et al. (Work)
- LISP (Work)
- AWK (Work)
- PERL (Work)
- Verilog/Vera (Work)
- PHP (Work)
- Python (Work)
- SQL (Work)
Return to Site Home