Base 256: that's an implementation detail. Little-endian: that's an implementation detail. My Smalltalk uses base 65536 native-endian and takes some care not to let Smalltalk code find out. (Not least because on 64-bit machines I want to use base 2**32.) For *private* methods, depending on otherwise hidden implementation details is fair enough. My Smalltalk picked up a convention from Squeak -- or rather, from the Squeak mailing list -- that a 'pvt' prefix on a selector makes it truly private and *enforces* that. Pharo does not seem to have anything similar, and #at: is the epitome of a selector in extremely wide general use. Since #digitAt: exists -- and is what the integer classes use -- it is practically certain that #at: is sent to an integer only by mistake. On Wed, 13 Mar 2019 at 17:18, K K Subbu <kksubbu.ml@gmail.com> wrote:
On 12/03/19 9:25 AM, Richard O'Keefe wrote:
Squeak where (20 factorial at: 1) answers 0 (oh dear oh dear oh dear).
Richard,
Could you please elaborate on why this is an error?
Large integers are place value encoded (base 256 little endian) and stored in byte arrays, so they need #at:/#at:put: (as private methods). Place value encoding is not architecture-specific so it doesn't affect portability of an image.
Regards .. Subbu