
Pharo Smalltalk Overview - 7thaccount
https://www.pharo.org/features
======
disposedtrolley
My favourite feature of Pharo (which I believe it inherited from Squeak) from
my very limited experience with Smalltalk environments is the ability to
search for methods via example.

In the Finder window, you can type an example of an input and the result that
you want, for instance `2. -2`, and the system will search for a method to do
that operation for you. In this case you'd see the "negated" method which
given `2` spits out `-2`.

[https://www.youtube.com/watch?v=awAB4zHrlHI](https://www.youtube.com/watch?v=awAB4zHrlHI)

~~~
wk_end
This seems like total magic. How on earth is that implemented?

~~~
ssivark
Venturing a guess: Make up a unit test that runs on all relevant functions of
the class (I.e. type) that the object “2” belongs to, and pick functions that
pass the test.

~~~
iso8859-1
How could that possibly be safe in a non-pure programming language? There
could be a function that deletes the n first files found in the working
directory.

~~~
noblethrasher
I remembering wondering about the same thing a few years ago, and came across
this: [https://stackoverflow.com/questions/30177559/how-does-
find-b...](https://stackoverflow.com/questions/30177559/how-does-find-by-
example-work-in-the-pharo-finder/30178067#30178067)

------
pvg
Bunch of previous big Pharo threads:

[https://news.ycombinator.com/item?id=18968116](https://news.ycombinator.com/item?id=18968116)

[https://news.ycombinator.com/item?id=18267445](https://news.ycombinator.com/item?id=18267445)

[https://news.ycombinator.com/item?id=16754872](https://news.ycombinator.com/item?id=16754872)

[https://news.ycombinator.com/item?id=14504244](https://news.ycombinator.com/item?id=14504244)

[https://news.ycombinator.com/item?id=11690125](https://news.ycombinator.com/item?id=11690125)

[https://news.ycombinator.com/item?id=9386775](https://news.ycombinator.com/item?id=9386775)

~~~
theshadowknows
I’m sure it can’t be done, but I’d love to see Pharo running natively on iOS
one day.

~~~
saagarjha
Why not? I’m sure if you cull the JIT you could probably compile it for the
platform. Apparently there’s even macOS and ARM support, so it’s more than
halfway there ;)

~~~
jecel
Squeak was ported to iOS right after the iPhone came out. The virtual machine
only had an interpreter back then but, as you said, there is not reason why
the JIT (called Cog) couldn't be used as well. Apple has never allowed it on
the app store (but applications built with it have been allowed as long as
they are completely closed) so people can't get it, but that is a non
technical issue.

The needed code is at

[https://github.com/OpenSmalltalk/opensmalltalk-
vm/tree/Cog/p...](https://github.com/OpenSmalltalk/opensmalltalk-
vm/tree/Cog/platforms/iOS)

~~~
saagarjha
Not so, Apple has closed some loopholes in iOS 14 to make (already limiting)
JIT restrictions more annoying to the point where it's not really usable
anymore…

------
JimmyRuska
I love the idea of being able to visualize the state of everything while it's
running, for me, that's the killer feature I'd love to see in other languages.

~~~
stefanchrobot
Erlang's VM comes to mind. It has great APIs for inspecting a running system
and quite a few options for consuming that data: build-in observer [0], CLI
version [1], web live dashboard [3] and more.

[0]
[https://erlang.org/doc/apps/observer/observer_ug.html](https://erlang.org/doc/apps/observer/observer_ug.html)

[1]
[https://github.com/zhongwencool/observer_cli](https://github.com/zhongwencool/observer_cli)

[2]
[https://github.com/phoenixframework/phoenix_live_dashboard](https://github.com/phoenixframework/phoenix_live_dashboard)

------
mickduprez
I love Smalltalk but apart from the commercial versions, the UI frameworks are
very limited or immature and have very few examples or doc's. Yes, you can
build your own 'morphs' etc but that doesn't scale well for anything but one
off small/toy applications.

Pharo is probably the best placed open source Smalltalk to get into the
enterprise dev market and has a promising UI framework under dev at the moment
but until this gets sorted out I think it will remain on the sidelines for a
while yet.

~~~
pjmlp
Commercial Smalltalks for Windows are as flexible as Win32.

[http://www.cincomsmalltalk.com/main/](http://www.cincomsmalltalk.com/main/)

This was the path they were on when Java happened.

~~~
badsectoracula
There is also Dolphin Smalltalk[0] which is an open source Smalltalk with
native Win32 UI support.

[0] [https://github.com/dolphinsmalltalk](https://github.com/dolphinsmalltalk)

~~~
pjmlp
Yes that was another one.

I was using Smalltalk/V for Windows 3.x back in the day, as part of some
university project assignments.

------
xkriva11
We started to describe these features in more detail on the The Pharo Dev
blog:
[https://thepharo.dev/tag/pharofeatures/](https://thepharo.dev/tag/pharofeatures/)

------
deesep
I love Pharo and occasionally explore it, but I worry that there are very few
examples of applications developed with it. [0]The ones listed seem to be
old(at least the last time i checked). This page is currently unavailable

[0][https://pharo.org/success](https://pharo.org/success)

~~~
bjz_
Glamorous Toolkit[0] is pretty neat! More of something designed for making
software on top of, but it's a pretty cool example of what's possible.

[0]: [https://gtoolkit.com/](https://gtoolkit.com/)

~~~
greggman3
Why is that only possible in Pharo? The concepts seem pretty language
agnostic. Maybe I've mis-understood what it does but I can imagine a devtools
plugin for Chrome/Firefox that basically does effectively

    
    
        if (x instanceof foo) ShowUIForFoo
        else if (x isnstanceof bar) ShowUIForBar
        ...
    

And then let you register your object UIs so they show up in the debugger.

------
seif_madc
From my little experience with Pharo, i can say it offers many things i can't
find elsewhere and there is a huge room for innovation and improvement, and on
top of that a lot of fun, Pharo is not getting the attention it deserves.

------
bmitc
I've been meaning to find some time and go through the Pharo MOOC. Would love
to learn the language and environment.

[https://mooc.pharo.org/](https://mooc.pharo.org/)

~~~
tom_mellior
I enjoyed that MOOC, I can definitely recommend having a look. I watched the
videos in French, IIRC there was English dubbing available, but it was not
great.

~~~
bmitc
Thanks for the encouragement! Yes, I've seen the English dubbing, as I've
watched the few videos or so. It seems like an interesting language, and I
really like the idea of interactive programming systems. It's similar to what
I use and the languages I am interested in, but I haven't given a Smalltalk
system proper learning time. I feel it's an area of computer science that has
not received much attention. If programming languages and their environments
were more interactive and gave better feedback, then I feel I don't need all
sorts of fancy stuff like dependent types, which really seem to excite people.
If the system's interactability and feedback is good enough, I, the
programmer, can make the right decisions, which is the primary challenge when
programming.

------
hvs
Possibly a case of a Hacker News Hug of Death.

------
register
The main thing that put me down on investigating Pharo even for hobby projects
is the absence of native multi-threading support. I know that it depends on
the application context but still...

------
nahuel0x
the "Smalltalk" word is missing from this page and the main one, interesting
marketing move :)

~~~
pjmlp
Pharo is no longer a pure Smalltalk-80, it follows its own path.

Squeak is the real Smalltalk for modern computers if one wants to be precise.

~~~
mhd
Didn't Cuis[1] branch off from Squeak even before that to be closer to its
ST-80 roots. Although, if I recall correctly, it does at least use Morphic and
not MVC.

[1]: [https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-
Dev](https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev)

~~~
jecel
The focus of Cuis is simplicity, not tradition. So it is only closer to ST80
than Squeak in the cases where new features make Squeak "fat", like Etoys.

------
hota_mazi
"The server is temporarily unavailable".

Wonder if it's written in Pharo.

~~~
dpraburaj
It appears to be. Zinc is the default http client/server package.

    
    
      $ curl -I https://www.pharo.org/features
      HTTP/1.1 200 OK
      Date: Tue, 21 Jul 2020 05:18:23 GMT
      Server: Zinc HTTP Components 1.0
      Content-Type: text/html;charset=utf-8
      Content-Length: 27546
      Connection: close
    

Not sure how common it is to have it serve traffic directly instead of through
a reverse proxy like nginx though.

