What does HackerNews think of iceberg?

Iceberg is the main toolset for handling VCS in Pharo.

Language: Smalltalk

The problem with the filesystem is that it privileges organization scheme which isn’t the best one for every editing task. This makes, for example, implementation inheritance hard because your class has a bunch of invisible code in it. But, it you could expand all the superclass methods into a single view and then have edits automatically integrated into the appropriate places, this wouldn’t be as much of a problem.

Java’s filesystem hierarchy is a great example of a “fileout” format for the sort of environment I’m talking about. Another example here is smalltalk repositories generated by Iceberg: https://github.com/pharo-vcs/iceberg

Fortunately things have changed in the intervening years. Pharo, for example, includes a complete git integration:

https://github.com/pharo-vcs/iceberg

By committing the code to a git repo and having a code review like every other language out there.

I'm guessing you have never tried these things but image based Smalltalk implementations have supported VCS for decades now, literally. In Pharo this is with git using Iceberg:

https://github.com/pharo-vcs/iceberg

They even wrote a tutorial to make it easier: https://github.com/pharo-vcs/iceberg/wiki/Tutorial

It's not magic, it's not even a problem, because the problem you're imagining doesn't actually exist. So long as the user of the system has at least half a brain (and maybe less) they will be capable of distributing their code with git these days.

Iceberg for Pharo: https://github.com/pharo-vcs/iceberg

Monticello: http://www.wiresong.ca/monticello/

I haven't used the latter, but the former is easy to use and based on libgit. Create a new repository, select the packages that go into it, make the initial commit. After that it'll tell you when the changes don't match the repo. You can select down to the method level since it's aware of the language's syntax and semantics. The generated repository looks like the Iceberg repo itself, a collection of directories for the packages and then .st files for the classes and their contents.

> a copy of your code the environment does some extra epicycles to copy it outside

Iceberg https://github.com/pharo-vcs/iceberg is the Git/etc. integration built into Pharo and works extremely well. You don't need to "file out" code if that's what you meant.

Giving up your editor to tough, so I'll come back to that. I believe that Pharo and some other smalltalks no longer require giving up Git[1], and by extension, I assume that would allow keeping any git based review strategies. Some deployment strategies can also be kept largely intact[2][3], but I don't know what you give up by doing so. In those links, a lot of things aren't done how I would do them, but I can see how to adopt what is shown there to my preferred deployment tools.

Getting back to giving up your editor. It should be possible to use many editors with the smalltalk of your choice. However, in practice, there are many half finished and abandoned tools for doing so[4], and fighting with that while learning the system is unlikely to be productive.

[1] https://github.com/pharo-vcs/iceberg [2] https://ci.inria.fr/pharo-contribution/job/EnterprisePharoBo... [3] https://www.slideshare.net/umejava/dockerizing-pharo [4] https://dmitrymatveev.co.uk/shampoo/

Per https://www.peteruhnak.com/blog/2016/07/25/how-to-use-git-an... as of 2 years ago Pharo did not have an established convenient way to integrate with git. Per https://github.com/pharo-vcs/iceberg the current best solution for that is still an experimental tool, so you have to be careful. Being able to integrate with other version control systems is still off in the future.

Integrating with general tools may be a design goal. Yet it clearly isn't fully there. A filesystem based language does better without even trying.

Well, Pharo seems to have quite a few contributors, so they probably figured something out. Let me have a look..

So, based on these slides about Pharo 6[0], it seems that they use multiple things. First, they have a tool called Epicea, which is a more modern way of tracking changes to an image[1]. Then, for git integration, they have a bunch of tools at pharo-vcs, specifically Iceberg[2].

[0] https://www.slideshare.net/pharoproject/pharo-6

[1] http://smalltalkhub.com/#!/~MartinDias/Epicea

[2] https://github.com/pharo-vcs, https://github.com/pharo-vcs/iceberg