• Welcome to the new COTI server. We've moved the Citizens to a new server. Please let us know in the COTI Website issue forum if you find any problems.

What Programming Languages do you use?

What Programming Languages do you currently code in?


  • Total voters
    96
I still have my first personal computer, the first production run of the Apple ][ with integer Basic (serial number 660). I also still have the 6809 processor card I bought for it. Installed 6809 Forth on that and wrote the keyboard and screen interface in 6502 assembler. Ah, memories.

To this day I only use RPN calculators. ;)
 
I still have my first personal computer, the first production run of the Apple ][ with integer Basic (serial number 660). I also still have the 6809 processor card I bought for it. Installed 6809 Forth on that and wrote the keyboard and screen interface in 6502 assembler. Ah, memories.

To this day I only use RPN calculators. ;)

I wish I still had my Apple II+, but it was stolen in college. Then my father gave me an Apple II with the Integer Basic card, I gave it to a friend who was down on his luck computer wise. He is since deceased and I know not what fate that machine met with. I still have my sister's Apple IIC in the attic. Every once in a blue moon I set it up and play with it, but it always goes back to the attic to make space. It's always worked...
 
Forth ranks a 10 on its simplicity, and a 10 on its power, but it's a really raw platform to build upon. And the fact that there's just not much in terms of "libraries" makes it even more difficult, especially today.

There are several modern stack based languages if folks are willing to explore them.

I enjoyed working on RPL, which is the stack based language of the later HP calculators. But it had some very nice high level facilities. That was a lot of fun.
 
Last time I booted them up, my Amiga A1000 and A3000 worked. The A3000 has a 52 meg and a 105 meg SCSI hard drives in it. 3.5"

My three A500s don't work. According to the videos on youtube, the electrolytic capacitors used were cheap and should be replaced. I know more than enough electronics to fix that. Same with the external floppy drives.

Get those running, and I can use AmigaBASIC again.
 
Forth ranks a 10 on its simplicity, and a 10 on its power, but it's a really raw platform to build upon. And the fact that there's just not much in terms of "libraries" makes it even more difficult, especially today.

There are several modern stack based languages if folks are willing to explore them.

I'll admit to knowing little. What is Forth's niche? And what is a stack based language? Most of my coding education has been on an "as needed right now" basis and is pretty sketchy, at best.
 
I'll admit to knowing little. What is Forth's niche? And what is a stack based language? Most of my coding education has been on an "as needed right now" basis and is pretty sketchy, at best.

FORTH is famous for reverse polish notation is all. The language is close to older ASM programming, so some programmers hopped on it at the time. BASIC and FORTRAN were considered too bloated with their interpreters and compilers in the day.
 
FORTH is famous for reverse polish notation is all.

Uh, no. Hardly.

Well, it's fair to say that Forth is famous for RPN as much as Lisp is famous for it parentheses. Both are the most casual of observations of the languages. Nobody who knows Lisp think it's about parentheses, CAR, and CDR. Just like nobody who knows Forth think it's about RPN.

The language is close to older ASM programming, so some programmers hopped on it at the time.

Yea, that's not accurate either. Coding in Forth is nothing like coding in assembler. The mind set it utterly different. However it can be quite low level.

So.

An early claim to fame for Forth was it's very small footprint. As portrayed early on, you could easily get the Forth runtime, compiler, interpreter, a source code editor, assembler and mass storage to disk in under 8K of RAM. The requirements for the system were routines to read the keyboard, write the terminal, and read/write a sector from the disk.

What you got was one of the most expressive and powerful languages available. It was fast, much faster than BASIC, and offered very quick turnaround for development since it was incrementally compiled and interactive, much like BASIC.

What you didn't get, however, was a large runtime of utility software. A glaring example of what was missing was basic string processing. BASIC offered great string processing, which is part and parcel to its broader success, especially in data processing. Forth, did not. Not out of the box. It also didn't support floating point math out of the box.

However, unlike BASIC, Forth was completely extensible. You could add string processing and it would look, well, however you wanted it to look. But it would look just like everything else in Forth. BASIC can't be changed, not readily, and especially not in BASIC.

If you wanted to add a REPEAT-UNTIL loop in BASIC, you couldn't. If you wanted to add support for 32 bit integer math to BASIC, you couldn't. In Forth, you could.

You could readily add new control structures. New data structures. New fundamental data types. You could do this with high level Forth code. In fact, most of Forth is written in Forth. Many Forth systems are "self-hosting". Written in themselves. You can tweak and change them, and rebuild them in to a new core. (The term of art is "meta compiler".)

Because that's essentially how you created applications.

In BASIC, you take your logic and semantics, and project them on to the limited tool set that's offered by BASIC and go from there.

In Forth, you come up with a vocabulary that best represents your application, and then build that vocabulary up. So that in the end, you're writing your application in the language of the application rather than ints and pointers and words of memory. In BASIC if you want anything more than a string array, you're kind of stuck (and yes I know BASICs are much better featured today than they were).

Now, that's the Forth potential. That's where it can go. I've seen Pascal compilers written in Forth. I've seen high level Database systems written in Forth.

But, in the end, much of Forth is mostly relegated to the controller market. It's there because of it's small footprint, it's ease of porting from one architecture to another, the interactivity it offers. Forth has, roughly, 30 primitives that must be coded in assembly language. it's very nice to port a Forth to a new CPU, connect to it, and then use it to explore things like the on board peripherals, interfacing new hardware, etc.

There's a great little article about the "3 instruction Forth" where a guy installs the most simplest of routines on a new piece of hardware (about 70 bytes of machine language): read a byte, write a byte, jump to address all via the onboard serial port. Then you can drive that board, via the Forth runtime on your host system, pretty much identically as you could your own system. It's hard to convey the simplicity and power of this here but just let it be said that you can't easily do this in anything else.

Forth has a large potential but the base system has much of it unrealized. Which is why it's not so good for things like writing a Character Generators or subsector viewers. Not quickly. Not the first time.
 
An early claim to fame for Forth was it's very small footprint. As portrayed early on, you could easily get the Forth runtime, compiler, interpreter, a source code editor, assembler and mass storage to disk in under 8K of RAM. The requirements for the system were routines to read the keyboard, write the terminal, and read/write a sector from the disk.

What you got was one of the most expressive and powerful languages available. It was fast, much faster than BASIC, and offered very quick turnaround for development since it was incrementally compiled and interactive, much like BASIC.

What you didn't get, however, was a large runtime of utility software. A glaring example of what was missing was basic string processing. BASIC offered great string processing, which is part and parcel to its broader success, especially in data processing. Forth, did not. Not out of the box. It also didn't support floating point math out of the box.

However, unlike BASIC, Forth was completely extensible. You could add string processing and it would look, well, however you wanted it to look. But it would look just like everything else in Forth. BASIC can't be changed, not readily, and especially not in BASIC.

If you wanted to add a REPEAT-UNTIL loop in BASIC, you couldn't. If you wanted to add support for 32 bit integer math to BASIC, you couldn't. In Forth, you could.

You could readily add new control structures. New data structures. New fundamental data types. You could do this with high level Forth code. In fact, most of Forth is written in Forth. Many Forth systems are "self-hosting". Written in themselves. You can tweak and change them, and rebuild them in to a new core. (The term of art is "meta compiler".)

Because that's essentially how you created applications.

In BASIC, you take your logic and semantics, and project them on to the limited tool set that's offered by BASIC and go from there.

In Forth, you come up with a vocabulary that best represents your application, and then build that vocabulary up. So that in the end, you're writing your application in the language of the application rather than ints and pointers and words of memory. In BASIC if you want anything more than a string array, you're kind of stuck (and yes I know BASICs are much better featured today than they were).

Now, that's the Forth potential. That's where it can go. I've seen Pascal compilers written in Forth. I've seen high level Database systems written in Forth.

But, in the end, much of Forth is mostly relegated to the controller market. It's there because of it's small footprint, it's ease of porting from one architecture to another, the interactivity it offers. Forth has, roughly, 30 primitives that must be coded in assembly language. it's very nice to port a Forth to a new CPU, connect to it, and then use it to explore things like the on board peripherals, interfacing new hardware, etc.

There's a great little article about the "3 instruction Forth" where a guy installs the most simplest of routines on a new piece of hardware (about 70 bytes of machine language): read a byte, write a byte, jump to address all via the onboard serial port. Then you can drive that board, via the Forth runtime on your host system, pretty much identically as you could your own system. It's hard to convey the simplicity and power of this here but just let it be said that you can't easily do this in anything else.

Forth has a large potential but the base system has much of it unrealized. Which is why it's not so good for things like writing a Character Generators or subsector viewers. Not quickly. Not the first time.
But none of that is what FORTH is famous for. See number of active FORTH programmers compared to other active language programmers. In fact, try to find someone who programs in FORTH. In the '80s, there were 8 people in San Diego. I bet there are less now. TIOBE Index for November 2020. Soon to be Index for 2021.
 
Last edited:
But none of that is what FORTH is famous for. See number of active FORTH programmers compared to other active language programmers. In fact, try to find someone who programs in FORTH. In the '80s, there were 8 people in San Diego. I bet there are less now. TIOBE Index for June 2019

Of the 153 jobs on Dice.com that reference Forth, not all seem to mean the programming language. Of course, that's still more than TCL, Elixir, or Haskell. :)
 
But none of that is what FORTH is famous for.
Forth is notorious for its use of RPN and syntax in general.

It's renowned for its simplicity, flexibility, and power.

See number of active FORTH programmers compared to other active language programmers. In fact, try to find someone who programs in FORTH. In the '80s, there were 8 people in San Diego.
Popularity has no impact on anything that I discussed. I never said it was popular. Even if it's not used, it's respected and revered in the Computer Science community, and has a passionate, if small, following.

The Lisps are similar -- more notorious for it idiosyncrasies than its power and expressiveness. But for Those That Know, Lisp is off the charts. And, no, it's not necessarily popular either (though it's probably more popular than Forth). I love Lisp, but I don't use it much.

Expressiveness, extensibility, and power don't necessarily equal popularity. BASIC had little of these, but was popular for other reasons.

Postscript is arguably the most popular and widest deployed Forth language today, even if no one ever sees it. The semantics of Postscript are very close the original Forth. To be pedantic, there's probably more Postscript source code out in the world, buried within PDF files, than any other language (JavaScript would give it a good run for its money, for sure). Sure, it's machine generated. Like I said, pedantic.

There were several Forth CPUs made. Designed to run the Forth inner interpreter natively in hardware. There are many CPUs that are spectacularly good at running classic Forth. While the original public domain Forth's shared implementation details (notably the threaded interpreter), many have moved beyond that model, even up to the point of native Forth compilers.

It's just a language, after all.
 
And what is a stack based language?
In most languages, a stack is used for many things, notably parameter passing, but also things like local storage allocation.

However, these stacks are implementation details and not a first class construct within the language itself.

In Forth, and other stack based languages, the stack is, indeed, front and center of the system.

The most common example is RPN math, made most popular by Hewlett Packard calculators.

In RPN and simple equation like:

1 + 2 * 3

Becomes

1 2 3 * +

The arguments to the operations/functions are put (pushed) on to an argument stack, and then the operations remove (pull) them from the stack, and then push their results back on.

So, in the second example, we push 1, 2, and 3 on the stack. We then evaluate the * operator, which pops the 3 and 2, multiplies them together, and then pushes the result, 6, back on to the stack. Then, the + operator pulls two arguments off the stack, the 6 (result of the *) and the 1, and then adds them together. Leaving the result 7 on the stack.

If these were functions, it would look like:

+(1, *(2, 3))

Note that we did:

1 2 3 * +

and not

1 2 + 3 *

That's because algebraically, the * has precedence over the +, so it needs to be evaluated first.

1 2 3 * + == 7

while

1 2 + 3 * == 9

Different answer.

The Java JVM is a modern implementation of a virtual stack machine, but it's internal and not manifest in the Java Language itself.

Stack machines have been around for quite some time.
 
To be pedantic, there's probably more Postscript source code out in the world, buried within PDF files, than any other language (JavaScript would give it a good run for its money, for sure). Sure, it's machine generated. Like I said, pedantic.

Javascript probably does outdo PS... but that's because it's embedded in much of the web, not just a large fraction of PDFs...
 
Aw, and here I got all excited with this week's release of GNU APL 1.8, with baked-in FFT, regular expressions, and GTK GUI capability. Now, where did I put my Greek keyboard... ;)

APL's vector capabilities for Python programmers probably nudged it up from .00255 to .0027 on the grinder.
 
My only exposure to Forth was in Sun's Open Boot Prom on the older systems. At the time, I wasn't enough of a programmer to take advantage of it.
 
I remember that with Forth. Wickedly fast language. Would give assembler a run for its money. That was about 40 years ago though.

I vaguely remember Forth (a version for the Commodore VIC-20). As a near-novice at the time, it struck me that without a pre-packaged library of words, you had to build the whole language from scratch before you could program in it.

Maybe I missed something.

Currently the only programming I do is in BASIC, and very little of that.
 
Just noticed Python passing C/C++ on the votes.

Sorry about that, C and C++ are likely very different groups of programmers. I wonder which of the two has the majority vote.

Python 2 is EOL, and lots of educators are using Python 3 as a learning language. As I write this, Python #2 on the TIOBE Index.
 
Back
Top