Simula – The forgotten programming language
deusinmachina.net
deusinmachina.net
Therefore, a few years back I decided to learn it a bit (I borrowed a really old book from the library) and solved one of the Advent of Code puzzles in Simula: https://github.com/judofyr/aoc2018/blob/master/day3prog.sim
I was actually very surprised at how “modern” it felt. However, neither this code nor the article touches on the real cool parts of Simula: Simulations based on coroutines.
Of course at the time there were people on staff who had written books about it.
I do remember we found a really embarrassing algorithm choice in the Stack class, though (push and pop at the time were O(n), as it used a singly linked list that they iterated through recursively to find the top of the stack... we found that out on a group project where we kept running out stack space because of the recursion...)
I believe CIM does the work of compiling C as well, but i may be misremebering.
Yes, CIM is generating C and uses the available C compiler behind the scenes.
The course admin might be on holiday but it's worth a try.
I can check tomorrow if I still have acess to the course resources
Dahl was a professor of computer science at the University of Oslo and is considered to be one of the fathers of Simula and object-oriented programming along with Kristen Nygaard.
https://en.wikipedia.org/wiki/Ole-Johan_Dahl
https://www.uio.no/om/finn-fram/omrader/gaustad/ga06/
Many of the rooms inside of that building are named after programming languages.
Naturally there is a room named Simula. And there are some rooms named after some big languages like Python and Java. Then there are also rooms named after some more niche languages, like Scheme. And even some obscure languages, like Ada.
Simila is not and, beyond some ALGOL-descended similarities, is quite different from the other three.
Anecdotally, as someone who has coded extensively in Pascal (particularly the Object Pascal variant) and also (though, less so) in Ada; I'm baffled as to how anyone could look at the two and say they're only "marginally related". They're so similar that they're grouped together in much the manner C/C++ are, though Ada took a much harder compatibility break than C++ did:
https://p2ada.sourceforge.net/pascada.htm
> Well, what is that Ada language ? For here, it suffices to write: a superset of Pascal with some syntactical differences. Or a Super-Pascal. Or, a Pascal on steroids. In fact it's a better, redesigned language strongly inspired by Pascal. You'll see what I mean in the examples.
To quote from https://dl.acm.org/doi/10.1145/956653.956654:
"Pascal itself only meets a small part of the Steelman requirements. Merely to attempt to extend Pascal would have been neither feasible nor a desirable approach. [...] Hence, the goal in the design of the Green language was to retain the Pascal spirit of simplicity and elegance but not necessarily the form of each Pascal feature"
So it's neither a "superset of Pascal" nor a "Pascal on steroids", but a new language design which meets (or better tried to meet since it is much more complex than Pascal) the "spirit of simplicitly" for completely different and much more complex requirements than Pascal did. It's definitely not a "Wirth language" and I don't know of any statement by neither Ichbiah nor Barnes where they would call it that way.
Is the point you should have zeroed in on, not the thrown away comments. If you had, you would realize everyone is saying the same thing as you.
> It's definitely not a "Wirth language"
I specifically stated in my original comment that it was indirectly so, via it's Pascal lineage. If you want to jump through hoops to disavow it of it's clear and self-avowed forebear, go for it. There's nothing to be gained from continuing down this line of argumentation for me.
Here is a simple example; both Pascal und its descendants suffered and still suffer from the dangling else problem; Ada solved this by adding end if and elsif, i.e. by integrating structured statements with blocks (Wirth himself came to a similar solution in Modula); superficially you still see the same Pascal keywords, but it's a different and much better approach.
Ada is neither indirectly a Wirth language; Wirth had nothing to do with it at all and came to quite different solutions in his later languages than the Ada authors.
Edit: to finish my thought, if you are in physics or meteorology fortran is still common as well. There are a lot of software niches, and full-stack web dev is just the largest, at least as represented at HN, embedded might have more people if you combine planes, trains, automobiles, industrial, manufacturing, and more visibly IOT.
These are very much alive, and implemented in major modern databases.
"SQL/PSM is derived, seemingly directly, from Oracle's PL/SQL. Oracle developed PL/SQL and released it in 1991, basing the language on the US Department of Defense's Ada programming language."
Simula was used as the first programming language for informatics students at the University of Bergen until the mid 1990s, when they switched to Java. I was among the last batch of Simula students there.
In 1962 the first version of Simula appeared which was quite different from Simula 67, not yet object-oriented, and dedicated to simulation.
Simula 67 was the first general purpose object-oriented programming language.
> Then, in 1991 another language would enter the playing field, Java, and the rest is history.
Java actually used the object model of Simula 67; James Gosling gave a talk about it at the 50th anniversary in Oslo. Here is the link: https://www.youtube.com/watch?v=ccRtIdlTqlU
"In Simula I, Dahl made two changes to the Algol 60 block: small changes, but changes with far-reaching consequences. First, “a block instance is permitted to outlive its calling statement, and to remain in existence for as long as the program needs to refer to it” [11]. Second, references to those block instances are treated as data, which gives the program a way to refer to them as independent objects. As a consequence of these changes, a more general storage allocation mechanism than the stack is needed: a garbage collector is required to reclaim those areas of storage occupied by objects that can no longer be referenced by the running program."
https://www.sciencedirect.com/science/article/pii/S089054011...
> [case insensitivity... so] both beGIN and BEGIN are interpreted the same way. This was also characteristic of the time, as programmers programmed their computers by shouting.
It remained in the "getty" process for some time, well into the {Free,Net,Open}BSD era.
CP/M and the like were pretty forgiving of commands being shouted too.
some languages (IMP, maybe others) used %reserved-word% formatting so you could do things pretty much how you wanted and then the system would know what was instructions.
Still there in agetty: https://github.com/util-linux/util-linux/blob/master/term-ut... And, I imagine in other getty implementations.
However programs like MS-BASIC would allow you to create files with lower case names that were then unmanageable from the command line.
https://nim-lang.org/docs/manual.html#lexical-analysis-ident...
Sadly, not every developer understands why that’s a good or bad design, i.e. the global pool of developer talent is partially stupid.
I have played with nim for a bit though, and this rule I just don't care for.
My reply above was tongue-in-cheek, maybe a bit too edgy. The person I was replying to characterized the language feature as "sad", and that's just silly. Even if it's an aspect of the language one doesn't appreciate, it's no more "sad" than e.g. Clojure involving a lot of parentheses or Haskell promoting monads. Likewise, no one is stupid or partially so for not liking or understanding Nim's partial case-insensitivity.
and this is the case because of C, which was my point. The fact that OS'es are written in C and thus have a C libraries and APIs is why you must respect C's rules for identifier names.
Also, yes compilers for other languages essentially name-mangle anyway, that's how (modern) fortran which is case sensitive and C++ which isn't (but tacks on a bunch of things to function identifiers) work. But the point about naming conventions or recommendations still stands, like a lot of things it is a fact of history favoring C, not that there is anything inherently better about it.
I believe it was already the case prior to C with assembly, and really because originally only one case (uppercase) was available. C just didn't change anything about the case-sensitivity of linking.
C is case sensitive, but it's also not seen as very modern language these days, so I'm not sure I understand your argument.
I think case-insensitivity is seen as rustic because it's a remnant of the times when some systems simply did not have a notion of case and everything was uppercase all the time. Modern systems handle case just fine so having several character strings being distinct in terms of byte values but equal in the way the language interprets them seems clunky and error prone (because it is).
Modern systems tend to support international character sets (UTF-8, etc.), where the idea of 'case' makes things more complicated than ASCII; and probably more trouble than it's worth. Even if we stick with latin characters, are 'uppercase' and '𝖀𝓟ℙ𝗘ℝℂ𝙰𝒮𝓔' the same identifier?
One thing people discovered eventually - case-sensitivity is language-specific. It is easy so long as you assume everything is in English and 7-bit US-ASCII, but once you move beyond that assumption, it becomes significantly more complex. An easy way to avoid all that complexity is to not do it.
People also forget about the related notion of accent-insensitivity - again, if all you support is English, you can ignore that, since English hardly uses accents
I miss the those times when using a computer meant ‘programming on a computer’, and programming on a computer meant trying to find your foot on any of a dozen languages popping left and right.
Interlisp[28] – developed at BBN Technologies for PDP-10 systems running the TENEX operating system, later adopted as a "West coast" Lisp for the Xerox Lisp machines as InterLisp-D. A small version called "InterLISP 65" was published for the 6502-based Atari 8-bit family computer line. For quite some time, Maclisp and InterLisp were strong competitors.
I ported Franz Lisp to the Atari ST.
A fellow student was the son of one of the people who wrote a compiler for Simula.
He knew about all sorts of little documented features. Some gave precise control when a "simulation was executed". Thinking back, it makes me think of RTOS like features.
Now Simula was never the fastest language, and these did not offer guarantees that any real time system would but they were cool.
It was fun when you used language features that the teachers had never seen before.
- Simula - Norway
- C++ - Stroustrup is Danish
- TypeScript / C# - Hjelsberg is Danish
- PHP - Lerdorf is Danish
- the v8 team including Lars Bak is Danish, and has developed several languages
- Erlang - from Ericsson in Sweden, though Joe Armstrong was British
Well now that I write it out, it seems like it's even more Danes than Nordic countries!
(Someone wrote pretty much the same comment here in 2016 - https://news.ycombinator.com/item?id=10833073)
Hm also from the same thread, L, M, and P from the LAMP stack all originated in Scandinavia! Didn't realize that https://news.ycombinator.com/item?id=10835311
https://en.wikipedia.org/wiki/COMAL
As a bonus, it's an anagram of OCaml.
Linux - Linus
Ruby on Rails - DHH
Turbo and Borland Pascal, and Delphi - Hjelsberg again
Was going to mention that the Netherlands is not in Scandinavia until I remembered that the P is not Python :P
It is interesting that so much foundational tech comes from Europe when I think there is a common perception of that generation of tech as being largely driven by the US (MIT, Bell, etc).
I often feel like the beginning of the 90s was a missed opportunity by Scandinavian companies. There were many great companies and individuals that were innovative, but could not compete due to the lack of VCs from Silicon Valley and a smaller domestic market
There's a cool documentary as well: https://www.youtube.com/watch?v=CswjD3plsF8
The UK chronically undervalues its computing sector. Lots of the pioneering hardware/fundamentals work was done at Bletchley Park in the 1940s, but was destroyed or remained classified for decades. We had a disproportionately large slice of the software industry in the 80s, but that seemed to be dismissed as just gaming; and of course games themselves aren't taken as seriously as e.g. cinema, despite being a much larger market.
Not just your "standard" Dane, but born in Greenland. The only such person I can name.
Maybe you mean something like "as a share of top 10 most used languages" or "per capita"?
* https://en.wikipedia.org/wiki/List_of_programming_languages
I have tried to document as best I could our various contributions to that idea in an article published in CACM, 1988, and more recently in a History of Logic Programming, published in 2014. In summary, however, it is probably fair to say that my own contributions were mainly philosophical and Alain’s were more practical. In particular, Alain’s work led in the same summer of 1972 to the design and implementation of the logic programming language Prolog.
Sweden, Norway and Finland came in 2nd, 3rd and 4th. I think US was at place 20.
[1]: https://en.wikipedia.org/wiki/AVR_microcontrollers#History
Full interview: https://www.youtube.com/watch?v=ZO0PXYMVGSU
> "OutImage is called to build the final Simula “Image”. From my digging it appears that OutImage is usually necessary at the end of a block, or a compiler error will be generated. I initially forgot OutImage though so, I imagine that maybe Portable Simula is just implicitly adding this if it’s missing, or it was changed in a later standard. Regardless I’ll leave it in from now."
In reality the "image" is just the current outline buffer, and OutImage prints the line feed. Very similar to Pascal later.
From the textbook:
> "OutImage causes the line which is currently being created - the current image - to be written to the printer or terminal and a new line to be started."
It was probably a good choice, for the time and for the course objectives. But I never used it since.
Should be "taught". Just FYI.
Simula -> C++ -> Java.
Leaves out rather a lot of important object oriented programming languages.