TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Pharo 10

298 pointsby xkriva11about 3 years ago

14 comments

ok123456about 3 years ago
I went through the MOOC material and tried it out for a few small things. It inherited a lot of the unique Smalltalk features which make it sort of alienating to a modern programmer. For instance, all your code resides in an image file, and if you want a copy of your code the environment does some extra epicycles to copy it outside. The choice to make everything a message, including basic flow control takes some getting used to. As you just sort of hack your image to do what you want, it just sort of turns into a ball of mud. The paradigm they&#x27;re going for is TDD for everything. Personally, I feel this is a big step backwards from most mainstream scripting languages adding on type annotations. It&#x27;s not easy to use a simple text editor. You pretty much have to use their integrated environment.<p>Then, there were a few problems that were specific to Pharo. Pharo went through a couple different package systems and the different package systems don&#x27;t necessarily have the same packages. Pharo has had major breaking changes in their GUI toolkit, so if you found a package that did exactly what you wanted and were able to install it, it just wouldn&#x27;t work.
评论 #30920696 未加载
评论 #30920499 未加载
评论 #30925279 未加载
评论 #30922645 未加载
评论 #30925182 未加载
评论 #30925025 未加载
评论 #30928698 未加载
xkriva11about 3 years ago
This is a list of quite rare features that make Pharo interesting: <a href="https:&#x2F;&#x2F;pharo.org&#x2F;features" rel="nofollow">https:&#x2F;&#x2F;pharo.org&#x2F;features</a>
评论 #30922654 未加载
评论 #30921012 未加载
评论 #30925062 未加载
athenotabout 3 years ago
I really appreciate that a blog post about a language update starts with a simple sentence to describe what the language actually is.<p>&gt; Pharo is a pure object-oriented programming language and a powerful environment, focused on simplicity and immediate feedback.<p>Many times I land on announcements about Foo v3.0 that is super awesome and describes the diff from v2.5, with no mention whatsoever about what Foo actually is.<p>Thank you!
评论 #30953706 未加载
travisgriggsabout 3 years ago
Congratulations to all the Pharo folks. It’s good to see a number of names in the contributors list that I still recognize. I really impressed that Pharo has maintained ground this long.<p>This coming June, it will be 10 years since I jumped out of the Smalltalk balloon, and dedicated myself to embracing polyglotism, right tool for right job, pragmatism, etc.<p>I miss the community. I miss many of the elegant aspects of Smalltalk. Maybe, since it’s release 10, and I’ve journeyed elsewhere for 10 years, I should give Pharo a spin. Any pointers for ye olde VisualWorks guru to get up to speed again?<p>Or minor contributions to be made?
评论 #30930183 未加载
ramesh31about 3 years ago
Who&#x27;s using Pharo in production? Every time Smalltalk comes up, it&#x27;s almost like it&#x27;s this Loch Ness monster that everyone claims to be enamored with but doesn&#x27;t actually exist. I <i>want</i> to love Pharo so much, I just can&#x27;t think of a single thing it would be useful for.
评论 #30919652 未加载
评论 #30920311 未加载
评论 #30919723 未加载
评论 #30919494 未加载
评论 #30922372 未加载
评论 #30921350 未加载
kkfxabout 3 years ago
SmallTalk as a language is IMVHO terrible BUT it&#x27;s strength came from it&#x27;s concept, an user-programmable environment, that&#x27;s matter so much.<p>SmallTalk was the language of first commercial desktop environments, modern desktops with keyboard, mouse, a similar form factor than today desktop, networking etc and those historical systems are still far more advanced than today&#x27;s ones.<p>Personally I prefer Lisp as a base language, but in any case the concept is far more important than the rest. A thing humanity lost years ago and that need to recover ASAP.
评论 #30924052 未加载
评论 #30932277 未加载
评论 #30925074 未加载
spdegabrielleabout 3 years ago
A modern smalltalk for a modern era! Congratulations to the Pharo team, past and present, and all the contributors for a truly monumental achievement.
musicaleabout 3 years ago
Rather misleading - and seemingly insulting to the people who created and use Smalltalk and Squeak - that it doesn&#x27;t say &quot;Smalltalk&quot; (not to mention Squeak) anywhere on the front page.<p>They should really give credit where credit is due; growing the Smalltalk community seems like a better idea rather than pretending it&#x27;s something else and implying that Smalltalk is somehow something bad that they need to hide.
melvinroestabout 3 years ago
I&#x27;ve been using Pharo professionally for about 1.5 months now, and I&#x27;m beginning to getting the hang of the language, and the culture surrounding it.<p>I&#x27;ll share a couple of thoughts.<p>__General Development&#x2F;Hacking__<p>0. From Pharo 9 and onwards, it runs smooth on an M1 Mac.<p>1. If you&#x27;re interested in developing in Pharo professionally, we&#x27;re hiring [1]!<p>1b. Other ways to learn about Pharo is to come to Smalltalk&#x2F;Pharo conferences. I&#x27;ve been to the Pharo Days in Lille recently and I&#x27;ve learned a lot in those 3 days! Other than the Pharo Days there is ESUG.<p>1c. Check out the Discord channel. People have been really helpful [0].<p>2. A big part of the documentation can be found inside the image. For example, press SHIFT + enter and type &quot;tutorial&quot; or &quot;exercise&quot; and a few will come up. Moreover, when you click on any class, there&#x27;s a &quot;class comment&quot; tab. Some class comments actually have comments and they&#x27;re written out in a quite understandable fashion when they do.<p>3. You can make the following clicks and they do something different:<p>- Click: shows a context menu to showcase a particular window &#x2F; tool<p>- Right click: shows &quot;World Contents&quot;, aka objects about your GUI (I haven&#x27;t used this one yet)<p>- Shift + Option + click: this shows a &quot;halo&quot; around a GUI<p>- Shift + Control + Click: the coolest meta click there is, it shows all objects that are directly related to the pixel you clicked on. If you clicked on a table cell item in a GUI window, you can figure it out via this click. I&#x27;ve used this trick to figure out where to go in order to alter my IDE to my own taste.<p>4. Pharo is one of the few languages I know where you can create like a game or application for which it&#x27;s possible to immediately see the source code and interact with it. The use-case this allows for is highly hackable open-source applications. For example, here&#x27;s a game that allows you to design chips [2]. It&#x27;s easy to see how you could alter levels yourself quite easily, just start editing the code! IMO, that&#x27;s next level open-source.<p>5. If you want to, it&#x27;s relatively easy-ish to inspect the AST and see how it&#x27;s mapped to the VM. Be careful of setting breakpoints here, you&#x27;ll crash your image :P<p>6. A Smalltalker told me that Pharo&#x27;s VM enforces everything to be an object but <i>technically</i> not everything is an object, as far as VM implementation goes. If you&#x27;re not hacking on the VM, then you can assume everything is an object.<p>7. Overwriting the #doesNotUnderstand: message can lead to all kinds of fun! I wrote my custom If&#x2F;Elif&#x2F;Else DSL. Smalltalkers will hate me but I found it awesome because it showcases how one could hack a DSL quickly. You can see about it here [3]. Here&#x27;s some example code:<p>``` If _: (someCondition) _: [ &quot;code&quot; ] Elif _: (anotherCondition) _: [ &quot;more code&quot; ] Else _: [ &quot;final code&quot; ] ```<p>As you can see, I&#x27;ve hacked the _: to be a separator of some sorts, but what it actually is, is an argument of a message. You can do all kinds of fun stuff with this. See [8].<p>8. When you overwrite #doesNotUnderstand then you can inspect the message and its arguments. So whether you send Object1 a:arg1 veryImportant:arg2 message:arg3, then you can inspect those arguments. In the case above, this means you can also inspect _:arg1 _:arg2 or _:arg1 _:arg2 _:arg3 ... _;argN. In other words, you can deal with variable arguments and it doesn&#x27;t matter what they&#x27;re called. Because of this, it&#x27;s easy to create a simple DSL, if you need another separator, then simply add one. You have a lot of characters at your disposal that are quite unique [4]. I figured that out by using by using point (2) and just looking around in the environment.<p>__Web Development__<p>9. Seaside is capable of live and dynamic updating. MOOCs won&#x27;t tell you this because it requires using Seaside quite differently. In short, the pattern that I see used at my work is by having server-side rendered HTML that has designated blocks as callbacks. So when you send your server-side rendered HTML, those callback blocks will transform itself into a jQuery GET&#x2F;POST request. Pharo writes the jQuery for you. We also use React, but I haven&#x27;t gotten around to it how it&#x27;s used, I&#x27;m fairly sure we don&#x27;t use anything like Redux.<p>10. In terms of testing, it&#x27;s relatively easy to write tests. As with Go, it&#x27;s all included and you&#x27;re ready to test! Also note: if you want to use Selenium tests, you can use Parasol [5], it&#x27;s quite easy to use.<p>11. The following concepts are not explained well, so I&#x27;ll do it: Seaside heavily uses what we&#x27;d call middleware in NodeJS (filters in Seaside). In NodeJS&#x2F;Express we also have a request object that exists during the lifetime of a request. In Seaside this is called a dynamic variable (WADynamicVariable is the class).<p>__Stuff I wrote out in the open__<p>12. I&#x27;ve been working on refactoring i18n in Seaside [6]. I currently find the approach Pharo uses the nicest approach, which is something along the lines of:<p>&#x27;You have some string that needs translation in your web app&#x27; SeasideTranslated<p>When you want to export a catalog file of all the strings you want to translate, then you send exportCatalog new exportCatalog and it will look through the whole image and find every tagged string and export it into a catalog (.pot) file that you can edit with POEdit (a free Mac app [7]).<p>13. I wrote a simple animation that shows the definition of sin and cos [8]. Most of the code is shown in that video, IMO it gives a good enough sense how to use it.<p>__Bottom Line Thoughts__<p>14. I think Pharo is a production-ready language for SaaS apps where you can easily scale by adding instances. I am not sure if it&#x27;d be production-ready for consumer facing web apps with many concurrent users.<p>15. It&#x27;s an amazing language to create desktop applications for.<p>16. The debugger capabilities are awesome and there&#x27;s active research on it. Time travel debugging is currently in its PoC phase (source: Pharo Days).<p>17. It&#x27;s also a good language for live music making (source: Pharo Days where someone demo-ed some live coded acid music).<p>[0] <a href="https:&#x2F;&#x2F;discord.gg&#x2F;QewZMZa" rel="nofollow">https:&#x2F;&#x2F;discord.gg&#x2F;QewZMZa</a><p>[1] We&#x27;re hiring developers able to work in Europe and based in a European time zone. The way we use Pharo is IMO the real deal, it goes far beyond what any MOOC can teach you.<p><a href="https:&#x2F;&#x2F;yesplan.be&#x2F;en&#x2F;vacancy&#x2F;full-stack-software-engineer" rel="nofollow">https:&#x2F;&#x2F;yesplan.be&#x2F;en&#x2F;vacancy&#x2F;full-stack-software-engineer</a><p>[2] <a href="https:&#x2F;&#x2F;github.com&#x2F;pavel-krivanek&#x2F;PharoChipDesigner" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;pavel-krivanek&#x2F;PharoChipDesigner</a><p>[3] <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=BUEnRrUZ-Ug" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=BUEnRrUZ-Ug</a><p>[4] ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzªµºÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ<p>[5] <a href="https:&#x2F;&#x2F;github.com&#x2F;SeasideSt&#x2F;Parasol" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;SeasideSt&#x2F;Parasol</a><p>[6] <a href="https:&#x2F;&#x2F;github.com&#x2F;SeasideSt&#x2F;Seaside&#x2F;tree&#x2F;gettext-fix" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;SeasideSt&#x2F;Seaside&#x2F;tree&#x2F;gettext-fix</a><p>[7] <a href="https:&#x2F;&#x2F;poedit.net&#x2F;features" rel="nofollow">https:&#x2F;&#x2F;poedit.net&#x2F;features</a><p>[8] <a href="https:&#x2F;&#x2F;drive.google.com&#x2F;file&#x2F;d&#x2F;1Z3UwTAj4A2CRo_TXk6JNG-mN9yMamYMj&#x2F;view" rel="nofollow">https:&#x2F;&#x2F;drive.google.com&#x2F;file&#x2F;d&#x2F;1Z3UwTAj4A2CRo_TXk6JNG-mN9yM...</a>
评论 #30930810 未加载
评论 #30960114 未加载
评论 #30930203 未加载
selykgabout 3 years ago
What are some good resources for learning to develop using Pharo? Anything others would recommend?
评论 #30920868 未加载
评论 #30920782 未加载
wslhabout 3 years ago
Is there an updated Pharo native Wiki like: <a href="https:&#x2F;&#x2F;wiki.squeak.org&#x2F;squeak" rel="nofollow">https:&#x2F;&#x2F;wiki.squeak.org&#x2F;squeak</a>
chunes3about 3 years ago
The problem I have with Pharo is that there are hundreds if not thousands of types — each with their own fiddly interfaces. I don&#x27;t have time for that. I much prefer the Clojure philosophy of having few types that can do it all.
butterisgoodabout 3 years ago
Nice release! And yes, for a short iteration, there&#x27;s a lot of good stuff in there!<p>Congrats!
svcabout 3 years ago
Congrats !