Pharo 9
pharo.org
pharo.org
For those who already know "what smalltalk is all about" but are looking to get into Pharo and get something done, I recommend Pharo by Example and Deep into Pharo - between those two books, any developer should be able to figure out the workflows Pharo expects you to employ to be productive.
My only advice would be to go in without preconceived notions based on your years of using other languages. And the community is super helpful.
Honestly, if more people went into every language with that mindset, there'd be a lot less bickering and problem a lot more getting done in the world.
Basically, the common circumstances around these things leads to some biases.
I think one way to address this, is to simply be aware of ourselves. Another would be to ensure people use a large variety of tools early on in their education/career. The meta-skill of navigating to a new tool is something we get better at with practice.
I wouldn't say Smalltalk has a bad rep nowadays, but it used to be knocked for being too expensive (the cost of ST licences back when was beyond a joke), too slow, and producing nasty-looking non-native GUIs. These have almost all been fixed.
Digitalk (now ParcPlace) Visual Smalltalk uses more of the underlying operating system GUI, for better performance but at the price of only supporting a common subset of GUI controls …
IBM Smalltalk maps the Motif GUI widgets onto the underlying operating system widgets.This means you get a very rich kit to build your GUI, but the widgets operate at near native speed. You have the best of both worlds."
p87 "VisualAge for Smalltalk" 1997
http://www.redbooks.ibm.com/redbooks/4instantiations/sg24482...
aka What's the difference between Swing and SWT,
The second reason is that the general knowledge about Smalltalk is very poor, and most people only remember that it is something old and long dead. Try to sell a dead fish.
Is there an overview of the differences somewhere?
I don't know of any such list of differences, and I don't think it's of much use either.There is ANSI Smalltalk, which is very limited and most implementations go well beyond its scope, so you have to compare each implementation separately anyway.
March 7, 1988
"Smalltalk/V 286 is available now and costs $199.95"
https://books.google.com/books?id=CD8EAAAAMBAJ&pg=PA25&lpg=P...
> nasty-looking non-native GUIs
The "non-native GUI" was quite important because Smalltalk was running on MS-DOS — not on MS-Windows.
Dec 1988, MS Word 5.0 for MS-DOS, $450.
$199 was a very reasonable price for a powerful dev tool in 1988. A lot of software at the time cost much, much more. Look up historical prices for just about any contemporaneous commercial software.
You can still argue they would have done better in the long run by marketing themselves as "Turbo Smalltalk" at $69.99. But that's a different argument than "wow that's way overpriced," which simply wasn't the case.
p8 October 1988 https://books.google.com/books?id=WSBVAAAAMAAJ&pg=RA18-PA8
Smalltalk/V 286 included source-code debugger, bit mapped WIMP for MS-DOS, BitBlt graphics, … Turbo Pascal + debugger already cost more.
https://pbs.twimg.com/media/EMJoLicXsAA7dej?format=jpg&name=...
"A clean, innovative, open-source, Smalltalk-inspired environment."
Apparently people don't have any issue hanging to an OS about the same age as COBOL.
Why should they? It works for many cases and has mountains of apps, tooling, libraries, hardware support and whatnot. It takes decades for the new OS/ecosystem to mature.
https://www.microfocus.com/en-us/products/visual-cobol/overv...
I surely have, hence why I have gone back to Windows, where the focus is C++ and .NET, macOS where the focus is Objective-C and Swift (UNIX is there for historical reasons only), Android where the focus are Java/Kotlin and C++ (with Linux kernel being an implementation detail).
> Windows, where the focus is C++ and .NET,
Microsoft is huge organization they have multiple focuses. You seem to be mixing the kernel/userland layer and making very weird argument against UNIX(that nobody uses).
I am not familiar with COBOL is there any effort to improve COBOL?
Please, get out of the GNU cult and check out what BSD's are doing in C.
Smalltalk lost the day IBM decided to join Sun.
https://en.wikipedia.org/wiki/VisualAge
> VisualAge Micro Edition, which supports development of embedded Java applications and cross system development, is a reimplementation of the IDE in Java. This version of VisualAge morphed into the Eclipse Framework.
That said, When I did finally get Squeak, I found it pretty neat, but it just never blew me away like I thought it would. I just didn't have anything to do with it.
Interestingly enough the JVM hotspot compiler was done by Smalltalkers (checkout Strongtalk)
Java didn't hit the market until over a decade and a half later.
If you can't build adoption with a 15+ year head start, then it's not the next generation's fault. It just wasn't going to happen.
Had IBM kept selling Visual Age products instead of jumping into Java ship, history would have turned out much differently.
Or if the Strongtalk guys hadn't return back to Sun and basically turn a Smalltalk VM into a Java one.
JUnit was also born in Smalltalk for those not paying attention.
This is not true. Even the Smalltalk-80 Blue Book wasn't released until 1983.
> If you can't build adoption with a 15+ year head start
Historical context is important here. FOSS etc were not nearly as prevalent as they are now, and most major development environments had a price. The main Smalltalk players probably got it wrong by pricing out expensive licensing fees. But the head start does not matter when the next thing that comes along is released for free, which is what happened with Java.
It's funny how Javascript and the web have turned out to be a more popular target. Nobody back in the late 90s/early 2000s would have thought that. JS was a toy and html was going away in favor of Flash or Java applets or .NET.
At any rate, timing is a really important part of gaining widespread adoption. Smalltalk was way ahead of its time in the 70s, but too early to really take advantage of networking, as their target was stand-alone personal computers.
So how do you explain "HP Distributed Smalltalk" ? :-)
https://www.hpl.hp.com/hpjournal/95apr/apr95a11.pdf
How do you explain "Gemstone/S" ?
In actuality, Smalltalk gave Java a headstart.
That said, Smalltalk just doesn't in general "play well with others"; its image based development environment, especially.
I've heard this before, but it confuses me as apparently the majority of the systems at Xerox Parc (Window manager, word processor, etc. ) were written in Smalltalk. So how could these sophisticated GUI apps perform there but not on other platforms, was the hardware really so different?
It wasn't until the mid to late 80s that microprocessor systems built around the 68k series were able to run Smalltalk 80 well. And that was with Tektronix and others spending thousands of man hours developing techniques to implement the VM well. And many of those systems were still basically dedicated to Smalltalk and cost a fortune.
But still as late as 96, 97, 98 you could still find job postings advertising for Smalltalk developers. I know, because early-20s me really wanted to do be doing that, but I wasn't qualified.
Within a few years Smalltalk had vanished from the few industry pockets it had, and was replaced by Java in most cases.
(Contemporary Fortran and Lisp have evolved a lot since their initial version, but the same is true of COBOL.)
Maybe the most succinct explanation of what this means comes from their vision document[1]:
> What we want to say is that if there is something that can be improved but does not conform the ANSI Smalltalk, we will do it anyway.
This really does seem to be a fundamental value within the Pharo community, and it distinguishes them from the rest of the Smalltalk community. When observing the communities around Squeak or the commercial Smalltalks, I often get the impression that they view themselves as a sort of Jedi order that's trying to preserve an older, better tradition amidst a decadent modern world. The Pharo community, by contrast, actively acknowledges that Smalltalk was not perfect, and is working hard to improve many things about it, including some of the fundamentals. For example, Pharo's made active steps to make their platform more amenable to source control, and, by extension, collaboration among larger groups of people.
[1]: https://gforge.inria.fr/frs/download.php/30434/PharoVision.p...
Pharo IS Smalltalk in the same way Skoda is Volkswagen
Same thing, basically: neither language wants to be beholden to what's come before, nor to their peers.
I wasn't commenting on the layout, I meant the description of the features, the animations and 'balloons'.
One of the most polished presentations of features I've seen on any OSS project.
I personally use smartphone as a phone, off-line GPS, camera (when I happen to not carry dedicated one) and to control various gismos like drones.
I do not use it for reading, viewing websites, computing, etc.
I admit carrying a separate e-ink device is too much of a hassle, so I read books on the smartphone when am not at the PC.
Yes there were few situations when I knew I'd sit in a car and wait for someone for quite a while. So I downloaded book on laptop and read it. I tried reading from a smartphone but my brain simply can not digest properly from this size of a screen. When I read I follow the line but I also glance at the whole page. Not sure why but this is how it works for me.
quick q: I can see the benefit for creating developer tools like the IDE and maybe for creating domain specific languages (DSLs)... but what "regular" applications benefit from this?
in particular, I can see (widespread use of...) introspection making it difficult for a developer of one large Pharo codebase to understand and maintain a different Pharo codebase...
also, Python has (arguably) "good enough" introspection and DSL support and mindshare/marketshare of millions of developers. When is python not good enough?
(asking innocently - please don't shoot)
Ever use developer tools in the web browser? Do you imagine they make Gmail harder or easier to debug and maintain?
[1] I don't mean 'inspired by', they literally started off with a fork of the code of both the VM and image. This is perfectly legit per the license, but it's hardly a completely original work.
I have been making pharo raylib bindings and plan to make a video soon about why Smalltalk is an interesting choice for game development, it's a very 'live-coding' feel, i.e. you run your game while the editor is still live, you have free reign to at any time modify the methods of all game objects, execute random code, etc. without restarting the game...
https://www.youtube.com/channel/UC9QoB2Ik54E1gEJsBixqJ9A
Alternatively I'll be sure to post it to the pharo discord and the smalltalk subreddit
Welp, I've had that wrong my entire life.
(the reason i decided for a dialect is that modern Smalltalks carry a TON of baggage they collected over the decades - sure the language is tiny but they carry more objects than a transatlantic freighter :-P - and i wanted something lean with only the stuff i needed)
I never went beyond the prototyping phase but probably will pick the project up again if i end up getting annoyed by my current language and framework choices :-P.
Also now that i think about it, Cuis might be a good Smalltalk environment for starting out or learning about the language in general since i always get the feeling that the more feature packed dialects like Pharo are a bit intimidating.
I wish that there were a Common Lisp with a Pharo like UI, like my old Lisp Machine.
Retry?
Error downloading 'https://files.pharo.org/get-files/90/pharo-vm-Windows-X86_64-stable.zip'
Cancel
Retry
(The link is a 404, so that's something)Edit: "Templates: Pharo image (stable)" works (32bit v8)
But I'm convinced that Pharo is an amazing development environment and eco-system designed to make amazing development environments and eco-systems. All of the folks are putting work in to improving IDE to make a better IDE.
They're on their, what, fourth(?) iteration of the "widget" set that folks still find difficult to use and under documented. As recently as Pharo 7, when I last looked in any depth to the matter, their rendering model is straight out of the 80s. Vastly less capable than Java2D or Canvas in the browser. It's my understanding it's on their todo list, but I don't know how far they've advanced on this.
What focus there is on applications seems to mostly come from Seaside, the web server application framework.
If you look at their "success" page, most (not all) are web apps.
It would not surprise if someone, somewhere, is fusing Pharo and some Electron-esque rendering front end and using it to create a "desktop application".
And it's not unreasonable to say "Well, web is where it is, desktop is dead." There's certainly arguments in that direction.
In the end, it's moot. The devs have their itches to scratch. Nature of the game. Their itches are not my itches, and an "advanced" rendering model and modern widget set is something I want to use, not write. So, I'm at their mercy waiting for whenever that day may, if ever, come.
If was interested in writing IDEs, then perhaps Pharo would be a place for me. Instead I'm interested in writing hobby desktop apps, and it's not there yet.
If I'm going to write code for my own amusement, I want to work in Smalltalk and a Smalltalk environment. Ever since I first encountered it in the early 1980s, it's been my environment of choice. IMHO there's still no other programming environment that approaches the flexibility, liveness, debuggability, white-boxness of Smalltalk. To paraphrase Guy Steele, "All languages will evolve until they become Smalltalk". (Steele said something of the sort about Lisp.) That said, and jokes aside...
Where Smalltalk beats every other language environment I've ever worked with or seen is at exploratory programming: Programming where you don't quite understand the problem, the domain and/or the solution space. It's more a tool for thinking about problems and how to solve them than something for a fixed, final answer. I suggest, further, that a very great deal of software development is exploratory in nature, so using a Smalltalk is a win, at least until you've understood everything in sufficient depth to "just implement a solution". At that point go to something with better runtime performance, deployability, etc. by all means. Caveat being that sometimes (quite often, really) the exploration never, ever reaches a conclusive terminus, so you may want to stick with a Smalltalk.
tl;dr: Use Smalltalk to explore and understand, and then finally to deliver an executable, test-driven specification.
"Delphi/TurboPascal was the peak of developer productivity"
And "Smalltalk was the peak of developer productivity"
I've only been programming about a decade so both of those languages were long before my time.Can anyone who has experience programming in Smalltalk share what was so special about it/what made it so productive to write programs in versus other languages?
It seems like this unique playground-VM thing makes it sort of unwieldy for non-graphical tools. IE can you use it for scripting tasks system, or for writing networked applications?
There must be something unique about Smalltalk for so many of it's developers to reminisce about it and claim it's been unparalleled since.
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
VW Smalltalk is between 2x and 27x times slower than Javascript.
And Pharo is slower yet than VW Smalltalk:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
Nevertheless, as the front page the the Benchmarks Game is careful to mention, benchmark performance is 1) not necessarily representative of real-world performance and 2) not even always important in the greater context!
Still, it's sad that Smalltalk & company haven't received the VM optimization attention that JS has. What would our world look like if Brendan Eich had gone for Smalltalk instead of creating a language from scratch?
Well...if you consider that the heritage of V8 in Node.js kind of goes back to StrongTalk, I'd say Smalltalk has received more of it than perhaps many people think. Unfortunately StrongTalk didn't really succeed on the market for the same reasons as many other Smalltalk implementations - proprietary nature and exclusivity doesn't really help you in the long run against worse-but-cheaper-and-more-accessible solutions.
Seems to be tagged 2020 — 5.0-202002121043 Wed Feb 12 11:06:45 UTC 2020 gcc 5.4.0 [Production Spur 64-bit VM]
The pharo.version file contains — 80
https://files.pharo.org/get-files/90/pharo64-linux-stable.zi...
— is the same as Pharo 8.0 —
5.0-202002121043 Wed Feb 12 11:06:45 UTC 2020 gcc 5.4.0 [Production Spur 64-bit VM]
The bit towards the end (around 5 min mark I believe) where he gives the IDE (is that what you call it?) an input + desired output and asks it what message would produce the result he wants is pretty damn cool.
The rest of it is "interesting" I suppose. I can imagine that, at the time, this sort of interactive/live visual environment was revolutionary. This would be 1972-1990's I think, and during those early years there was nothing even remotely similar, right?
Towards the end Rapid Application Development (RAD) IDE's would start taking hold and then came the Pascal-powered heydays for a bit.
I think that maybe just due to familiarity bias, I still prefer a text-based IDE which has hot-reloading and live eval results.
Something pretty neat I use personally is an extension called "Quokka" which places the results of each line next to them, live as you edit (similar to a REPL)
Jetbrains IDE's have a similar thing with "Worksheets" for languages like Kotlin, Python, Scala, and likely a few others. (Also "Metals" extension in VS Code can do this for Scala incredibly well)
Of course there are other interesting features worth talking about, such as "images" and the introspection capabilities. Which are both great and often sorely missed in todays systems. But I think the big idea is to try to understand what Kay had in mind with OOP.
Another aspect of smalltalk that is important, beyond just the "language" is to recognize its role in advancing "personal computing". Smalltalk was essentially an operating system that empowered the user to create new media and tinker with the system.
If you want to see a modern web-browser based smalltalk-like system that uses javascript, check out Dan Ingalls' Lively Web. That will give you an idea into how smalltalk systems were meant to be used, in terms of "personal computing".
One favorite advantage was that as much as possible of the system was written in itself and the development environment was an integral component. Any developer could see and change anything. The approach was that you took the Smalltalk system and built your application as an extension onto it. "Playground-VM" is a pretty good description.
Unwieldy? Not if you bought into it entirely, in roughly the same way that certain people I know bought into Emacs: Use it as your login shell and do everything through it. It was bad for creating stand-alone programs or scripts; instead, you add objects and methods to do whatever you wanted to do today.
Sure. Back in the day, Smalltalk without GUI was known as "headless" so Google "headless smalltalk" and you should find info.
Also they have a GUI system ready so you can develop desktop apps (I'm not sure what the deployment story is like these days, but I assume it's fine).
I'd be curious about who, if anyone, funds Pharo development - especially if there are any medium-large companies backing it's development.
I found this link to the Pharo "consortium" but it's not loading for me https://consortium.pharo.org/
And yes, definitely don't want to detract from the community effort, the huge list of individual contributors is impressive in itself.
The key that we should provide more often.
Bret Victor has been discussing for over a decade. Can’t find them demo that i’m thinking of but here’s an introduction into Bret
His ideas go beyond “immediate feedback” …
[1] http://stephane.ducasse.free.fr/FreeBooks/BlueBook/Bluebook....
Does this mean Python and JS meet the same definition and are as "clean and comfortable"?
Although I like Python, and I don’t know JS well, I really enjoyed learning Smalltalk, even though I will likely never use it professionally.
Everything being an object may do the trick for you or not. I don't mind a marketing page (even for a programming language) being opinionated, as long as not borderline delusional.
Many sibling comments, IMHO, miss the point of the parent and focus on the claim about python and js.
Python and js could perhaps have been completely object based. It still wouldn't make them comfortable for many.
Python 3.9.5 (default, May 27 2021, 19:45:35)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 1
>>> type(x)
<class 'int'>
>>> dir(x)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod
__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribut
e__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__
invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__
', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__',
'__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__'
, '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__',
'__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate',
'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>>
>>> y = [2]
>>> type(y)
<class 'list'>
>>> dir(y)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__
doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd
__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '_
_ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '
__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', '
index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
>>> def sum(a, b): return a + b
...
>>> sum
<function sum at 0x7f673429d1f0>
>>> dir(sum)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__
dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals
__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__modul
e__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setat
tr__', '__sizeof__', '__str__', '__subclasshook__']
Apparently everyone keeps forgetting that after the new class type declarations were introduced and the primitive types made subclasses of them, everything in Python is an object as well.Its not uncommon in dynamic OOP (or even object-first multiparadigm languages); it’s true in Python, Ruby, JS, and others.
Imagine that you could do something like this in JavaScript:
(name === "Mike").ifTrue(() => console.log("Hi Mike");
The implementation of this is done through a Boolean class, which has two subclasses, True and False.
True implements the ifTrue(fn) by invoking "fn", False simply returns.
The main advantage is that everything is predictable and inspectable.
Are things like message sends or activation records accessible and manipulable as objects in Python and JS?
Maybe the closest "real world" examples would be Lua, and scheme?
Yes. The GUI framework is called Spec (Spec2, to be specific) and supports multiple backends, including GTK.
On the other hand, if it were adopted to behave like all other environments, there would be objections again, "It's exactly the same as what I'm using now. So why switch?"
It should be added that Pharo addressed most of the small problems that the original Smalltalk had.
Imagine that you download the binary for the programming language, and then you don't know what to do with it so you double click it or try to execute it from the shell, and you are very surprised to see a window open up, showing something looking like a blank desktop.
What is this? You go off to read some tutorials, they show you some ways to click inside the window and so forth.
It slowly dawns on you: this is your program. It is running as we speak. You are livecoding it, those button clicks are mutating it to do new things. The reason it's not doing anything is you haven't written it yet, and it's inviting you to, and when you do it'll recompile and show you the new thing instantly.
So your programming languages have always been designed like a circuit board or a 3D printing rig. Lots of files of blueprints, and then the robots will assemble it for you. Smalltalk is different, the mental model is more like clay or Lego, the thing is already built and running in front of you, what are you going to mold it into being?
This different vision means that usually you are editing text not from vim or emacs or VS Code, but from the editing widgets inside of the programming language. Those are part of the clay, and are editable too. Similarly, Smalltalk version control was typically exposed inside of the running system rather than outside.
My favorite example of this, the thing that is maybe the most outrageous if you're in a normal programming language, is Object.become().
This is a runtime dependency injector. “I want to instruct the programming language to take all of the traffic that it was sending to that object, and send it to me instead. I will become that object.” If you are used to Java where my constructor instantiates some dependency object and I save it to a private variable in this object, surely you see this as a safety violation. “What do you mean, that anybody who gets a reference to this object can tear it out of my private property and replace it with some other subclass? I made it private so I could control when that field gets set! How dare you?” It’s not, of course.
And this is available for every object in the system, which is why you can do this modeling by clay. They tried to write as much of Smalltalk as possible in Smalltalk and so you can just see the source code of the programming language in the source code browsers that you can call up from this window, and you can live edit any of that, and Smalltalk will compile your new object and swap it into where the built-in object was.
Put a different way, it's not a safety violation because this is how modern development with microservices and kubernetes actually works. Security is people's ability to surprise you, measured in dollars: part of this definition is, Smalltalk developers are not surprised by their ability to do this. Every “object” is thought of as a separate server with an API, and of course I will replace old servers with new ones and tell the load balancer to send traffic my way.
IBM taught "object-oriented software technology to experienced procedural programmers" and studied that experience — 'We read and heard many stories about confident and experienced programmers' plunging into self-study tutorials, only to give up in frustration after several hours, still wondering, "Where is the application code?" … New programmers often became lost in the hierarchy or spent considerable time in unfocused exploration of the interactive tools.'
https://mitpress.mit.edu/books/making-use
Technical shortcomings, September 1988 — "… currently unrealistic to expect that an excellent rapid prototyping system can also be an excellent application delivery system."
https://static.miraheze.org/triplescriptswiki/4/49/Wirfs-Bro...
"Smalltalk, C++ knock heads. Computerworld 29, 45 (Nov. 6, 1995)
Then when you're happy with your revised VM, you can spit out portable C code, compile it, and BAM you've got a production VM! Most plug-ins and primitives are also written in the Smalltalk subset (called SLANG), so they will likely be similarly portable.
There is also an FFI for interfacing beyond the standard model.
For example, Pharo github repo doesn't have any C code at all, and to build it I need Pharo VM already running. It is Ok for building new version for existing platform, but what should I do if I want to build VM for other platform (OS)? Hardware platform is supported already, so, I think, I don't need to have new assembler / JIT / Whatever, but I need new glue to new libc, kernel, etc., and new executable file format, am I right?
English voiceover: https://www.youtube.com/watch?v=JUKIjdjGjBU&list=PL2okA_2qDJ...
French: https://www.youtube.com/watch?v=-Sk_35lB-EI&list=PL2okA_2qDJ...
Not trying to rate any particular language here.
It's true. I haven't read much OO CS literature AFAIK. Do you have a some recommendations?
https://www.amazon.com/Component-Software-Object-Oriented-Pr...
The first edition uses Component Pascal instead,
https://www.amazon.com/Component-Software-Beyond-Object-Orie...
Then even if it hasn't taken the world by storm,
"Designing Object Oriented C++ Applications Using The Booch Method"
https://www.amazon.com/Designing-Object-Oriented-Application...
Assuming you also feel like reading about UML design stuff
"Object-Oriented Analysis and Design with Applications"
https://www.amazon.com/Object-Oriented-Analysis-Design-Appli...
Also writing confusing code is incredibly easy in any language / paradigm. One just has to be inexperienced thinker.
Yes, it is.
It is in some situations easier to write non-confusing code in FP (though in other situations its easier in OO.)
Also, OO hasn’t really “fallen out of fashion”, its still, AFAIK, the dominant paradigm. It’s just not as hyperdominant as it was from the mid-90s through the -00s.
The irony.
Doesn't look like it's ready to handle all the UI (?) though – in the promo screenshot there's one GTK window on top of a more classic Pharo window (?)
I don't know what they were thinking. As far as I can tell, Pharo UI history has been one bad (as in not pragmatic) decision after another.
Anyway, my point was that even though "4K" as a concept has good mindshare, that's overkill even for a True Retina(tm) experience in the typical OSes on a 13". Around 100 DPI is what those UIs were foundationally designed for (starting in the 1990s) and all numbers unfold from that decision.
* 15 inches 1024x768 (85ppi)
* 17 inches 1280x1024 (96ppi)
* 19 inches 1400x1050 (92ppi)
I'd argue that everything that is beyond ~140ppi needs adjustments in software and could be considered HiDPI. You could also argue that 200% scaling should be the threshold, if we're starting with 85ppi that would be 170ppi.
It also depends on the viewer distance of course. Larger displays are usually viewed from a bigger distance.
I want everything be as small as possible to fit more when I'm using my laptop but I would really appreciate decent unscaling on my RaspberryPi i use siting on the couch in about 3 meters from a 42-inch 1080p panel.
For a price up to 500€ it lists 306 laptops with 176 having 150+ppi.
Snarky? No. It's open source. If it doesn't have feature <X> then you're free to add it. It can simultaneously be the most important feature for you, and entirely irrelevant to other contributors. You're not prevented from adding it, as you would be in a closed source product.
I'm sure you know all that but it bears refreshing. This is software that's free to use and free to modify. If you've an itch then you're at liberty to scratch it - just as other contributors are equally at liberty not to.