9 ms·
Probably part of why Smalltalk died. The C syntax and the BASIC syntax became ubiquitous, and things like Pascal and Smalltalk were just too weird. Luckily we h
by phendrenad2 5y ago
Probably part of why Smalltalk died. The C syntax and the BASIC syntax became ubiquitous, and things like Pascal and Smalltalk were just too weird. Luckily we have Ruby, which is almost-Smalltalk with a BASIC-like syntax.
- mseepgood 5y agoCompared to C, Pascal has the less weird syntax.
- VWWHFSfQ 5y agoI don't program in Ruby but every time I look at it I see something different depending on who wrote the code and what their personal style is. It seems like it has every syntax in there somewhere.
- api 5y agoThat's a problem with LISP-style languages too. Too much flexibility and dynamic syntax leads to write-only languages, or at least languages that are write-only-by-the-original-author. You can see the opposite end of that spectrum in Go, which can be readily read by anyone since there's generally only one good way to do anything.
- ferdowsi 5y agoThe only way I've seen Ruby work professionally is by using tooling that prevents developers from getting too clever with creating write-only code.
- nauticacom 5y agoI don't program in Ruby but every time I look at it I see something different depending on who wrote the code and what their personal style is I'd say this is a plus, at least in certain dimensions. One of the best descriptions I've heard of Rails' ActiveSupport (a collection of extensions to built-in types included in Rails) is as a dialect of Ruby, one specific for developing web applications. Other domains could and should use different dialects.
- snek_case 5y agoIMO that's one of the biggest weaknesses of Ruby. The language offers lots of different ways to do the same thing. You can say that makes the language more expressive. Sure, but it also means as a newcomer, there's a lot more language features to learn about. It makes the language less approachable to outsiders. Python and Ruby occupy similar niches. Python has many more libraries, so people will say, that's why Python has been more successful, but IMO, even if Python and Ruby had as many useful libraries, most people would still choose Python, because it's a simpler and easier to learn language. That may have contributed to Python getting a headstart in the beginning. I'm sure some people would say that's a case of "worse is better", but I think you also have to have some empathy for other programmers. When collaborating on a programming project, having a project that is easier for others to understand is easier. Having a language with less weirdness, less peculiarities and less complexity is a plus.
- setpatchaddress 5y agoI think it’s much simpler than that. Ruby didn’t have good documentation in English until the mid-2000’s. Python was in use by the English-speaking world before the turn of the century. Documentation + you can generally understand it at a glance == total Python dominance. Looking at recent Python code, it also seems like the simplicity is being lost in the rush to add features.
- Jtsummers 5y ago> Looking at recent Python code, it also seems like the simplicity is being lost in the rush to add features. My inkling is that this is because it is hard to have a general purpose language that lends itself to both novices and experts, and to small scale and large scale. Not impossible, but hard. Those categories desire/need different things, and will use the language in vastly different ways. BASIC (for all its problems) was a better first language for many people than C or Fortran, but BASIC also didn't scale well to larger systems (structured variants scaling better). Then you start getting BASICs supporting OO and other features which complicate them and lose the appeal to novices, but more effectively meet the needs of intermediate-to-advanced users and maintainers of medium-to-large scale systems. See also Pascal and its evolution. From a small language to a still small but not as small language in Delphi and others. For the novices, they can still use that small core. But it's now harder for them to onboard with a larger project or a project developed by more advanced users of the language. Especially as the standard library (for the language implementation, if not the language proper) grows. Scheme, over the various revisions, has seen a similar conflict, culminating in the effective rejection of R6RS and the division into small and large for R7RS. And those are languages that were largely meant to support novices and learners. Python started off similarly. Now it's older, and its users have aged, and they want to do more powerful things with it and maintain larger and larger systems with it. On the small vs large side, look at the evolution of JavaScript. It was literally meant for in-page scripting, to do small things and not be the larger system, but a mere component. Like a shell script that copies two files contrasted with the actual OS or shell implementation. But now 25 years or so later it's a vastly different language, and people are building distributed systems on top of it.
- jacquesm 5y agoPascal is actually one of the few languages that is quite readable, even for novices to programming. That's no coincidence, it was designed that way.
- froh 5y agoYes the only "weird" thing in pascal was pointers and pointer dereferencing with the caret ^ I loved pascal syntax.
- jacquesm 5y agoYes, C got that bit right. -> made a lot more sense.
- pyjarrett 5y agoIn Ada (Pascal derivative), there's implicit dereference so we just use it like normal, `A.B`.
- renox 5y agoWhich has pros and cons: a pointer indirection can be expensive so the potential additional cost is hidden and pointers semantic is so different than hiding their usage is a bit risky.. That said this simplify refactoring and is much less 'noisy' to read. My preference is Pascal style but with an @ instead of a ^ which feels a bit weird.
- badsectoracula 5y agoThe caret is because ↑ (arrow up, in case HN drops it) wasn't really "typeable" (or even available) in most computers. I'm not sure if Wirth's Pascal even had the caret - i do have an old book about Pascal which uses the arrow for pointers, but i remember seeing the caret in various dialects. IMO Pascal actually has much better pointer syntax than C, even with the caret (which is basically a pointer/arrow up without the tail): 1. Pointer de-referencing is done via something that looks like a pointer and doesn't reuse some math operator (despite writing C for more than two decades i still pause for a bit whenever i want to multiply a pointer to a number) 2. Getting the address of something is via the "at" character @ (which kinda makes sense as a pointer to something is a way to refer "at" it), no way to mix the two 3. No special syntax for referencing a member of a record (struct) through a pointer, all record members are referenced using a dot ".", all pointers are de-referenced through the caret "^" so of course all members to a record pointer is done through using both of them: "^." Also i think that the reason C has -> is because in C pointer de-reference is a prefix whereas in Pascal is a suffix so without it you'd either have to write (*ptr).foo. Pascal avoids that by having both be suffix operators.
- fault1 5y agoI think Smalltalk's demise was really from the fact that it was a entire environment that had to live in a virtual machine. Especially in the 70s and 80s, that was a huge performance barrier. Contrast this with C, which probably won because of its largest benefactor, Bell Labs and UNIX. Smalltalk in some sense was a competitor with UNIX itself. Smalltalk's influence is everywhere, but the sad thing about it is that it's dev tools were so much ahead of time of anything else.
- agumonkey 5y agoI think none of the reason applies but it's tongue in cheek.. I think it all points at cultural maturity. Same smalltalk today might be well received because machines are wide and fast and people have seen more languages. It's surely easier to show ST to py or js coder today now they've seen large syntax changes and paradigms (FP, async etc)
- 7thaccount 5y agoPharo is a Smalltalk, but they're ok with moving in new directions. As a Python coder, I played with Pharo and tried several tutorials and read a book on Smalltalk-80. I get the gist of things, but have trouble actually writing the code as things aren't obvious and there is no StackOverflow or cookbook for common tasks. It took me forever to figure out how to do file IO and that sort of thing. The other problem is that deployment isn't just running a script, but deploying the image and runtime of some obscure language nobody has ever heard of in enterprise software and no IT department is going to be cool with it.
- igouy 5y agoMaybe IT already deployed https://www.cincomsmalltalk.com/main/successes/financial-services/jpmorgan/ https://www.cincomsmalltalk.com/main/successes/financial-ser...
- 7thaccount 5y agoI think most users of Cincom Smalltalk (and other esoteric language users such as Volvo using Dyalog APL) occurs most often due to historical reasons. Please note that I don't think poorly of these languages and would use them over something like Java in my own pet projects any day.
- pyjarrett 5y ago> Pascal and Smalltalk were just too weird A huge reason why C syntax is "not weird" is because its weirdness has been normalized. I didn't realize how absolutely bizarre some of the things in it were until I was an undergraduate teaching assistant for a C programming class for Math and Engineering majors. The big problems I remember: - Why {} braces? - Why A = B? They're not actually equal. This can be a huge conceptual stumbling block. - Why is this function returning "void"? This makes no sense, that's not a function. - Why A.B()? Period gets read as a sentence terminator and that function is being called with no parameters, which makes no sense. - Why do we use square brackets [] and not parentheses () for arrays? - Why do we need a ';' at the end? - Lots of confusion over `&&` and `||`. - Problems understanding `+=` and similar. Old Smalltalk editors did some things to make the language more understandable, such as turning `:=` into an leftward pointing arrow and `^` into an upward arrow. Once I saw this in practice, it made a lot more sense to me. Not that Ruby and Rust both have the `|vars|` syntax. Pascal-family languages like Ada look "too weird" because most people learned a C family language early on. It'd be like saying Russian or Japanese is a weird language because you only know Romance languages.
- formerly_proven 5y ago> - Why is this function returning "void"? This makes no sense, that's not a function. Personally the distinction between subroutines and functions always struck me as overly math-centric thinking, because it's not an interesting difference as soon as non-local state exists, which is almost always the case. > - =, += I don't quite get why this remains contentious; even in math these are somewhat overloaded ("=" in equations vs. "<=>"/"=" for equality of equations, for example); code simply is not math. Why would the symbols mean exactly the same thing in a different context? > - Why {} braces? Big braces have always been used to group stuff together (e.g. case distinctions, summaries etc.), so it kinda makes sense to use that for groups of lines, i.e. code blocks. > - Why do we need a ';' at the end? C/UNIX was originally written using actual teletypes, so not only does ";" make it easier to parse, but it also gives you a very explicit marker that you definitely reached the end of the statement. That matters when every line you're looking at when interactively editing a file uses up some paper.
- TurboHaskal 5y agoI believe it was mostly economical circumstances just like the other poster said. People put up with everything as long as there is a market and they are getting paid. As for Smalltalk I can say that it's the only language that has never clicked with me. I have tried the usual languages including Lisp and some weird ones like Forth, Factor and the APL family and never had an issue with those but with Smalltalk I can't go beyond writing factorial. Actually if you sat me in front of a Smalltalk environment it would take me ages to figure out again where to click in order to even have the chance to create such method. The biggest problem with Smalltalk is that you have to give up your tools in exchange of some alien technology that isn't really that good to begin with. Disclaimer: I have tried Pharo, Squeak and some commercial offerings such as Cincom.
- overgard 5y agoI doubt it. C++ syntax is all of: bizarre, hideous, and ambiguous and yet it never limited C++ because at the end of the day C++ was extremely practical. Smalltalk didn't take off (Im not going to say died because it's not dead) because the development tools were expensive and the runtime was frequently not fast enough and you needed a very powerful for its time computer to use it. Also I think most super popular languages have a niche. Whether its webapps, text processing, low level, etc. Smalltalk lived in its own world and it was hard to integrate with the OS and other capabilities of the system, (try writing a wrapper for like OpenGL or other libraries for example) and I think that somewhat prevented it from finding a great niche to thrive in.
- Tozen 5y agoI also disagree with your assessment. Pascal has greater readability in comparison to C, so it's "weirdness" is in the sense that it's more verbose. Arguably, the inherent problem of C family languages is their terseness tends to make them more cryptic and symbolic. But because of their popularity, many have become used to the eccentricities. Often those who learned C family languages first (C, C++, C#, Java, JavaScript...), can feel there is "something wrong" when viewing the syntax and structures of other languages. When everybody only wears dark blue or black, somebody wearing purple or beige could be considered "weird". The creator of Ruby, Matsumoto, was a C++ programmer. It appears his intention was to make the language a bit more verbose, as is Pascal and BASIC, to increase ease of use and readability more than exists in C++. A person who used Ruby, would probably find reading and adjusting to Pascal or Lua much easier to do. Smalltalk gets a bit "weird", because of how they do OO. The structure and syntax used reflects a different way of thinking. Saying that Smalltalk "died", seems to be part of this odd labeling for any language not in the top 10. Are Rust, Kotlin, or Go dead because they never were nor are in the top 10? Smalltalk was never that tremendously popular to begin with, but it certainly didn't die. Go check out Pharo (https://pharo.org/ https://pharo.org/).