If you want to make your code fully compatible and interoperable with other Smalltalk dialects you must restrict yourself to the minimum support provided by Tonel.
It is recommended you only use Applications without SubApplications, so the mapping Application (VAST) ->Package (Tonel) will be straightforward in both directions.
You could use SubApplications that will be read as Packages in other dialects, but that hierarchy information is going to be lost if the other dialect writes it back to Tonel format. This is so because the "metadata" we use to store the parent application, the config expressions, etc. is not read by other dialects and discarded once written back.
E.g.
- You have the VAST Application named
MyCoolApp
withMyCoolSubappA
andMyCoolSubAppB
- You write them to disk using the Tonel Writer
- You load them into Pharo, they will be imported as three separate Packages
MyCoolApp
,MyCoolSubappA
andMyCoolSubAppB
with no specific load order. - Assuming everything loaded correctly, you make some changes in Pharo and write them back to a Tonel repository.
- Back in VAST you load from that Tonel repository
- Regardless of the names,
MyCoolApp
,MyCoolSubappA
andMyCoolSubAppB
will be read as separate Applications because in step 4 no metadata was written about#vaSubapplications
nor#vaParent
.
For the same reasons as in the Application Hierarchy, all methods should have public
visibility.