Pharo (Smalltalk) is much more than simply live coding. All of us here
dearly love live coding. Kilon states it is possible to do live coding in other languages. I have no experience doing so in any other language. I will say that I know of no other language that it is integral to development in that language. Pharo is a live object environment. It has objects that would take someone with a better understanding of the entire image than myself to tell when the object was created. But suffice it to say that Pharo (Smalltalk) have some very old objects, possibly back to 1980 or 1972? The live environment supports live objects, not just live coding as understood by someone who may attempt live coding in some language that does not by nature do live coding. Objects have state and behavior. Objects in Pharo grow and shrink in behavior and state as messages are sent to them. They evolve, they dynamic not static. Pharo's environment can survive crashes. Yes, I know, there are times when some unrecoverable event happens and you can not recover lost changes. But the community attempts to fix anything that would cause such an event. Other languages, do not have such. Segfaulting is normal, to be expected. You go back to your dead code editor and fix what caused the segfault and start up again, clean without the state your objects were in when it happened or even before. They do autopsies on their core dumps to attempt to discover what went wrong. Yes, you can explicitly choose to run a debugger on your app to watch its state and behavior. Pharo's environment survives shutdown of its environment and shutdown or restart of an operating system. Once restarted your Pharo environment is exactly as it was with all it's live objects and live code. It survives change of operating systems and computers. All the image needs is the appropriate vm for the image and the operating system currently running. Pharo can survive stupid programmer errors. I have written infinite loops and lived to tell about it. My objects and environment survived. I have written code which took hours to execute over a large set of data only to discover I had an error in my code on the last method or so that executed and it raised a debugger. I fixed it and continued. Nice. In some other language, you fix and start over executing that multiple hour process and hope there are no more errors. I know of no other language that facilitates this behavior. The editing of the code is in a different environment from the execution of the code. The state of the objects in the executing code disappears when the code ceasing execution whether by choice or error. And yes, some of that is and can be mitigated by files and databases. Live debugging of code is by executing an application (debugger) on the application you want to debug. This all by nature is static and dead. Only to discover problems in my fixed in time code and objects. You can't fix the debugger while debugger some program. I don't know that you necessarily fix the program outside of discover of where to fix it in the separate editing process. Then you start all over again. Even if you can overcome ever single one of my perceived technical difficulties. And I may be in error. I do not program in those environments and have little experience there. One thing that is indisputable at least to my understanding is this. Whatever language you may overcome all of this in, you are quite possibly doing it alone or at best in very small groups. There is no community or cultural support. Pharo has a community, a culture which supports the artifact which provides this live object environment. This is of tremendous value. Pharo has a culture which supports live objects and live coding. It has a culture that says your stupid code should not crash the environment. If it does, we need to fix it. Pharo is not perfect. Its community is not perfect. But I have not found anything or place better. So I am learning C, and dead programming hopefully sufficiently enough that I can bridge the gap where Pharo does it well or where Pharo could use a little outside help. But I still get to live in my nice live object environment. I have nothing against other languages. I would love it if there were other languages which had this ability and culture. But I don't find them anywhere. I have programmed in Python, Lua, played with PicoLisp. Pharo is home. :) And to top it all off, Stef's Pharo 7 and 8 roadmap looks pretty sweet. I just wanted to say that Pharo (Smalltalk) is so much more than what I perceive other languages understanding of live coding to be. And that I know of no other language or community which approaches what is done by nature in Pharo (Smalltalk). All the above is my naive opinion. Do with it as you will. Have a great day! Jimmie |
Live coding as a concept does not exist in most languages. The reason why they can do live coding is because out of necessity . Take exceptions for example , almost never you will find any mention about live coding but you will read about code exiting elegantly or not exiting at all and reloading modules etc.
In the end all coders need a lot of flexibility during execution , especially during the process of debugging. Even in Pharo live coding shines the most during debugging process this is why they go hand in hand. The moment you have live code and state having live objects is just a consequence of having live code. If you approach it from a pure object orientated approach that is not unique either. Because nowadays we have many extremely popular languages like Python and Ruby . Python for example suppose to be a hybrid procedural and OOP language but that is a lie because in Python functions are objects. Ruby is almost Smalltalk. So both Python and Ruby are pure object orientated. Pharo crash prone behavior is not extensive. Live state will be lost for data living outside Pharo. If the data is accessed or copied from Pharo the copy will be retained through saving the image but if you don't save the live state of Pharo will be lost. Even if you do save the image the live state on the C side won't be stored so it's up to you to restore if you have the means to do so and already took the appropriate measures. This is why I made a big deal for memory mapped files because essentially they store using an auto save feature live c and C++ state. Another huge problem for Pharo is that crashes can corrupt the image which means you will have to rebuild it from scratch which can be so tedious if you have lost a lot of live state. Recovery of code is not a big deal for other programming languages cause unlike Smalltalk they are based on source code files and most modern IDEs will auto save your source code file. If you use version control that becomes unnecessary if you commit often like I do because essentially you become unable to lose code. Smalltalk and Pharo shines in the idea of a single IDE but the community is too small to afford to be fragmented between many different IDEs. In other languages some IDEs are closed source , some are open source but the trend for the past decade is toward open source IDEs. For example I code in Python and by far the most popular IDE is PyCharm , it's closed source but it has a free edition called "Community Edition" that contains most of of the commercial features (80%) it's one source and free and hosted in Github https://github.com/JetBrains/intellij-community/tree/master/python The idea of self contained environments is no big deal either because we have git forks , Python even comes with another features that allow you to create isolate environments that like Pharo contain your code, the language and any library used. Smalltalk was a bIg deal decades ago but no longer is because coders themselves may not be aware of either Smalltalk or Lisp but language and IDE designers and library developers are very much aware as both languages are considered the golden standard and very much respected. Pharo is important because is a modern implementation of Smalltalk and tries to push its concepts further. Unlike other language it's not just about copying Smalltalk or canibalizing it's ideas. It's crucial that Smalltalk continues to evolve because afterall is a language of innovation. None the less we live in a time that modern technology is very close to Smalltalk and most of its features have infected modern coding. They are fragmented or not that obvious or out of the box offered but they are there and experienced coders already rely on them to speed up their workflow. Languages like C distance themselves from Smalltalk because they prioritize performance. It's the usual case of not having your cake and eat it too. But since every language including Smalltalk is based on C for performance you can implement many of the features. Problem is that you will be reducing performance so in that case it takes more sense to use Pharo or Python or what else. In any case Pharo is a great environment to work with many flaws and unique advantages in the end Pharo is Pharo offering its own unique experience we all love and respect. Emulation is never the same as the actual thing. On Fri, 21 Jul 2017 at 19:36, Jimmie Houchin <[hidden email]> wrote: Pharo (Smalltalk) is much more than simply live coding. All of us here |
In reply to this post by Jimmie Houchin-5
Thanks Jimmie. Do not hesitate to improve Pharo, because Pharo is what
we have and each we can make it better. BTW: it was not my roadmap it is the result of everybody in the team brainstorming. On Fri, Jul 21, 2017 at 6:35 PM, Jimmie Houchin <[hidden email]> wrote: > Pharo (Smalltalk) is much more than simply live coding. All of us here > dearly love live coding. Kilon states it is possible to do live coding in > other languages. I have no experience doing so in any other language. I will > say that I know of no other language that it is integral to development in > that language. > > Pharo is a live object environment. It has objects that would take someone > with a better understanding of the entire image than myself to tell when the > object was created. But suffice it to say that Pharo (Smalltalk) have some > very old objects, possibly back to 1980 or 1972? > > The live environment supports live objects, not just live coding as > understood by someone who may attempt live coding in some language that does > not by nature do live coding. Objects have state and behavior. Objects in > Pharo grow and shrink in behavior and state as messages are sent to them. > They evolve, they dynamic not static. > > Pharo's environment can survive crashes. Yes, I know, there are times when > some unrecoverable event happens and you can not recover lost changes. But > the community attempts to fix anything that would cause such an event. Other > languages, do not have such. Segfaulting is normal, to be expected. You go > back to your dead code editor and fix what caused the segfault and start up > again, clean without the state your objects were in when it happened or even > before. They do autopsies on their core dumps to attempt to discover what > went wrong. Yes, you can explicitly choose to run a debugger on your app to > watch its state and behavior. > > Pharo's environment survives shutdown of its environment and shutdown or > restart of an operating system. Once restarted your Pharo environment is > exactly as it was with all it's live objects and live code. It survives > change of operating systems and computers. All the image needs is the > appropriate vm for the image and the operating system currently running. > > Pharo can survive stupid programmer errors. I have written infinite loops > and lived to tell about it. My objects and environment survived. I have > written code which took hours to execute over a large set of data only to > discover I had an error in my code on the last method or so that executed > and it raised a debugger. I fixed it and continued. Nice. In some other > language, you fix and start over executing that multiple hour process and > hope there are no more errors. > > I know of no other language that facilitates this behavior. The editing of > the code is in a different environment from the execution of the code. The > state of the objects in the executing code disappears when the code ceasing > execution whether by choice or error. And yes, some of that is and can be > mitigated by files and databases. Live debugging of code is by executing an > application (debugger) on the application you want to debug. This all by > nature is static and dead. Only to discover problems in my fixed in time > code and objects. You can't fix the debugger while debugger some program. I > don't know that you necessarily fix the program outside of discover of where > to fix it in the separate editing process. Then you start all over again. > > Even if you can overcome ever single one of my perceived technical > difficulties. And I may be in error. I do not program in those environments > and have little experience there. One thing that is indisputable at least to > my understanding is this. Whatever language you may overcome all of this in, > you are quite possibly doing it alone or at best in very small groups. There > is no community or cultural support. > > Pharo has a community, a culture which supports the artifact which provides > this live object environment. This is of tremendous value. Pharo has a > culture which supports live objects and live coding. It has a culture that > says your stupid code should not crash the environment. If it does, we need > to fix it. > > Pharo is not perfect. Its community is not perfect. But I have not found > anything or place better. > > So I am learning C, and dead programming hopefully sufficiently enough that > I can bridge the gap where Pharo does it well or where Pharo could use a > little outside help. But I still get to live in my nice live object > environment. > > I have nothing against other languages. I would love it if there were other > languages which had this ability and culture. But I don't find them > anywhere. I have programmed in Python, Lua, played with PicoLisp. Pharo is > home. :) > > And to top it all off, Stef's Pharo 7 and 8 roadmap looks pretty sweet. > > I just wanted to say that Pharo (Smalltalk) is so much more than what I > perceive other languages understanding of live coding to be. And that I know > of no other language or community which approaches what is done by nature in > Pharo (Smalltalk). > > All the above is my naive opinion. Do with it as you will. > > Have a great day! > > > Jimmie > > > > > > > > |
In reply to this post by kilon.alios
My apologies if I wasn't clear. I wasn't stating that Pharo was
crash prone. I was stating the exact opposite and that other
languages are crash prone. That in other languages that a program
crashing or misbehaving in some way is a normal part of the
development process. It is one of the ways of discovering problems
in the developing app. I am no way saying that deployed apps are
crash prone What I was saying is that in any language, I the
programmer can do something stupid. In Pharo, I can recover from
my errors without my object environment crashing. Other languages
my errors crash my program and I start the process all over with
external editor, debugger, repl, or compiler. I will readily admit
I am not expert or good in that world and probably lack knowledge. Pharo's (Smalltalk) live object environment in some ways exceed what current OSes do. Let alone simple isolated environments such as Python. Can you suspend Python's (or any other language) environment. Restart your OS, move to a different computer, to a different OS, any of these and then resume with your environment's state completely intact and ready to continue from where you stopped? Unless I am completely out of date with Python (and I may be), I do not think you can do this. I do not know of where else you can do any of that.
And nothing in Pharo prevents you from doing similar. Persist
your state in an external database. Have your app operate over
that database. Use Iceberg to commit your app code to git. And I
would wager that it is still a much better experience than other
languages doing the same thing. Simply because the Pharo
environment understands your code, because your code is its code.
The lines are blurred. No big distinction. My separate editor/IDE,
my separate debugger, my separate execution environment. Yes I
know there are many programmers (probably most) who prefer this
separation. I would actually say most don't even know that what
Pharo (Smalltalk) does is possible. They have only been taught the
other way. Once again. In other languages everything is external to the
environment. The editor, the debugger, the database, ... Whereas
Pharo, all is inside the environment. It opens the capabilities
tremendously.
While on the website I see a familiar name (Paul Everitt) from when I used to program with Bobo and then when it became Zope, many, many years ago. PyCharm fresh start with one project, with one 80 line file, with that file open in an editor, weighs in at 675mb of ram. Opening a Python console from PyCharm adds another 10mb and the console itself used 21mb. This is on a Xubuntu 17.04 64bit laptop. Whereas I have a full Pharo 6 image with an app I am working on
which has 26 classes, numerous methods. The app is currently
running and has parsed for used several multi-mb files for use.
This image currently uses 105mb of ram. It has a much better
understanding of the code it contains than does IntelliJ. Because
for my app, the Pharo environment contains the IDE and the
debugger and my app and all of the other tools available to Pharo.
It is exceptionally rich in capabilities. All for currently 1/6th
or less of the weight of PyCharm or IntelliJ.
This demonstrates the reasonable efficiency of Pharo (Smalltalk)
verses other ways of development. Even if you do simple. Simple
editor, repl, etc. you still do not save much if any over Pharo,
and you give up much.
In other languages is the IDE one with the language, debugger,
environment and application? No, it is not. This is exactly why I
titled this Beyond Live Coding. Personally I find code in file based languages to not be as
friendly for committing and source control. I am not good at it. I
have a tendency to edit to large a section of code and commit to
infrequently. I have not mastered to development cycle
sufficiently. In Pharo such is not necessary. Within an image
method based commits are exceptionally nice. You do have to learn
Monticello and now Iceberg to go beyond the image. But it is being
worked on to make it a natural part of development. And as I said,
method level commits are native to the way Pharo (Smalltalk)
works. So you already do frequent, smaller commits. You would need
to insure that you do so in reasonable intervals for Monticello or
Iceberg.
Pharo is not perfect, far from it. Hence why I sometimes struggle. It requires much more effort to do things if what you want to do have requirements beyond the image. Such as using libraries or accessing systems external to Pharo. This is a requirement I have. Fortunately for me one of the systems I require has released a REST API for access. So I no longer require going through FFI for that access. I attempted some FFI with NativeBoost and it was not fun. It crashed my image regularly and I was not skilled enough to move beyond. I hope UFFI and Pharo 6 is better. Because it is still very important to access C libraries. If it isn't, then I still might have problems. Pharo still isn't good at truly small systems. Pharo 7 and 8
should help that nicely. It will be interesting to see how small
the VM and image can be and have a working app. I hope it will be
nice.
I like the idea of small. Something I can understand. Something that doesn't require GBs of ram for an IDE . I would rather do PicoLisp which has an incredibly fast interpreter, is small and is understandable on both the language and implementation side. It is the one language that intrigues and tempts me. But coming from Pharo it feels primitive. It would take some thought and effort. It might be worth the effort.
The nice thing is that everyone can choose what fits them and their situation. What fits the way they think. What fits their goals. I just struggle with the idea of needing 700mbs to GBs of ram to run an IDE. I would rather do small. Get it in my head and fingertips. Nice thing about choice. My choice isn't required of anyone else. :)
Thanks for the conversation. Have a great day.
Jimmie
On 07/22/2017 03:02 AM, Dimitris
Chloupis wrote:
Live coding as a concept does not exist in most languages. The reason why they can do live coding is because out of necessity . Take exceptions for example , almost never you will find any mention about live coding but you will read about code exiting elegantly or not exiting at all and reloading modules etc. |
In reply to this post by Stephane Ducasse-3
Thanks for the reply.
Absolutely, I love what you say, "Pharo is yours". Which is why last month I joined the Association. I felt I needed to make the commitment. I had thought I wanted to do BountySource on a monthly basis. I signed up at the Association level but nothing happened with regarding to any membership. So I went ahead and did the Annual fee. But I do like the idea of monthly support. So I may do that again anyway. I would love to see the monthly support via BountySource or directly to the Association whichever is best for you to grow and help sustainability. I have also been thinking about ways to contribute of my time. I am looking at how I can help with documentation type areas. The team that contributes toward Pharo is amazing, especially considering the size. Again thanks. Jimmie On 07/22/2017 05:04 AM, Stephane Ducasse wrote: > Thanks Jimmie. Do not hesitate to improve Pharo, because Pharo is what > we have and each we can make it better. > BTW: it was not my roadmap it is the result of everybody in the team > brainstorming. [snip] |
>
> Which is why last month I joined the Association. I felt I needed to make > the commitment. I had thought I wanted to do BountySource on a monthly > basis. I signed up at the Association level but nothing happened with > regarding to any membership. So I went ahead and did the Annual fee. But I > do like the idea of monthly support. So I may do that again anyway. Excellent. I always said that the structure make us, individuals, more powerful. The consortium is also a good structure for the same reason: as a sme 1000 Euros brings nothing but when there are 50 sme, we get one engineer. > > I would love to see the monthly support via BountySource or directly to the > Association whichever is best for you to grow and help sustainability. Marcus knows everything and me nothing about the setup :) > I have also been thinking about ways to contribute of my time. I am looking > at how I can help with documentation type areas. Yes this is great. > The team that contributes toward Pharo is amazing, especially considering > the size. Tx. But you see there are many external contributors and they get an impact. > Again thanks. > > Jimmie > > > > On 07/22/2017 05:04 AM, Stephane Ducasse wrote: >> >> Thanks Jimmie. Do not hesitate to improve Pharo, because Pharo is what >> we have and each we can make it better. >> BTW: it was not my roadmap it is the result of everybody in the team >> brainstorming. > > > [snip] > |
Free forum by Nabble | Edit this page |