Nicolas,
I thought that there had been a conversation about this and that Bert had expressed a preference for DoubleByte and DoubleWord. Hence I kept to that. If I'm mistaken forgive me. But personally I don't like HalfWord. t's as ambiguous as word. At least DoubleByte is not ambiguous.
On Thu, Oct 20, 2016 at 12:59 PM, commits@source.squeak.org wrote:
Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.1039.mcz
==================== Summary ====================
Name: Kernel-nice.1039 Author: nice Time: 20 September 2016, 11:00:27.302558 pm UUID: b0aeabf6-f73d-44c4-be8b-d2c66a73486f Ancestors: Kernel-bf.1038
Introduce HalfWord (16 bits) and DoubleWord (64 bits) subclasses which are possible in Spur format, but yet not exploited.
=============== Diff against Kernel-bf.1038 ===============
Item was added:
- ----- Method: Behavior>>isDoubleWords (in category 'testing') -----
- isDoubleWords
"Answer true if the receiver is made of 64-bit instance variables."
^self instSpec = 2r1001!
Item was added:
- ----- Method: Behavior>>isHalfWords (in category 'testing') -----
- isHalfWords
"Answer true if the receiver is made of 16-bit instance variables."
^(self instSpec bitAnd: 2r11100) = 2r1100!
Item was changed: ----- Method: Behavior>>isWords (in category 'testing') ----- isWords "Answer true if the receiver is made of 32-bit instance variables."
^(self instSpec bitAnd: 2r11110) = 2r1010!
^self isBytes not!
Item was added:
- ----- Method: Class>>variableDoubleWordSubclass:instanceVariableNames:
classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableDoubleWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the subclass
is to
have indexable double-word-sized nonpointer variables."
^(ClassBuilder new)
superclass: self
variableDoubleWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat
- !
Item was added:
- ----- Method: Class>>variableDoubleWordSubclass:
uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableDoubleWordSubclass: t uses: aTraitCompositionOrArray
instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the subclass
is to
have indexable double-word-sized nonpointer variables."
| newClass copyOfOldClass |
copyOfOldClass := self copy.
newClass := self
variableDoubleWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat.
newClass setTraitComposition: aTraitCompositionOrArray
asTraitComposition.
SystemChangeNotifier uniqueInstance
classDefinitionChangedFrom: copyOfOldClass to: newClass.
^newClass
- !
Item was added:
- ----- Method: Class>>variableHalfWordSubclass:instanceVariableNames:
classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableHalfWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the subclass
is to
have indexable half-word-sized nonpointer variables."
^(ClassBuilder new)
superclass: self
variableHalfWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat
- !
Item was added:
- ----- Method: Class>>variableHalfWordSubclass:uses:
instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableHalfWordSubclass: t uses: aTraitCompositionOrArray
instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the subclass
is to
have indexable half-word-sized nonpointer variables."
| newClass copyOfOldClass |
copyOfOldClass := self copy.
newClass := self
variableHalfWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat.
newClass setTraitComposition: aTraitCompositionOrArray
asTraitComposition.
SystemChangeNotifier uniqueInstance
classDefinitionChangedFrom: copyOfOldClass to: newClass.
^newClass!
Item was changed: ----- Method: ClassBuilder>>superclass:variableByteSubclass: instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') ----- superclass: aClass variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class in which the subclass is to have indexable byte-sized nonpointer variables." | oldClassOrNil actualType env | (aClass instSize > 0) ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields']. (aClass isVariable and: [aClass isWords]) ifTrue: [^self error: 'cannot make a byte subclass of a class with word fields'].
(aClass isVariable and: [aClass isHalfWords])
ifTrue: [^self error: 'cannot make a byte subclass of a
class with half word fields'].
(aClass isVariable and: [aClass isDoubleWords])
ifTrue: [^self error: 'cannot make a byte subclass of a
class with double word fields']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields']. oldClassOrNil := aClass environment at: t ifAbsent:[nil]. actualType := (oldClassOrNil notNil and: [oldClassOrNil typeOfClass == #compiledMethod]) ifTrue: [#compiledMethod] ifFalse: [#bytes]. env := CurrentEnvironment signal ifNil: [aClass environment]. ^self name: t inEnvironment: env subclassOf: aClass type: actualType instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat!
Item was added:
- ----- Method: ClassBuilder>>superclass:variableDoubleWordSubclass:
instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
- superclass: aClass
variableDoubleWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class in which the subclass is to
have indexable double-word-sized nonpointer variables."
| env |
(aClass instSize > 0)
ifTrue: [^self error: 'cannot make a double word subclass
of a class with named fields'].
(aClass isVariable and: [aClass isBytes])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with byte fields'].
(aClass isVariable and: [aClass isHalfWords])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with half word fields'].
(aClass isVariable and: [aClass isWords])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with word fields'].
(aClass isVariable and: [aClass isPointers])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with pointer fields'].
env := CurrentEnvironment signal ifNil: [aClass environment].
^self
name: t
inEnvironment: env
subclassOf: aClass
type: #longs
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat!
Item was added:
- ----- Method: ClassBuilder>>superclass:variableHalfWordSubclass:
instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
- superclass: aClass
variableHalfWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class in which the subclass is to
have indexable half-word-sized nonpointer variables."
| env |
(aClass instSize > 0)
ifTrue: [^self error: 'cannot make a half word subclass of
a class with named fields'].
(aClass isVariable and: [aClass isBytes])
ifTrue: [^self error: 'cannot make a half word subclass of
a class with byte fields'].
(aClass isVariable and: [aClass isWords])
ifTrue: [^self error: 'cannot make a half word subclass of
a class with word fields'].
(aClass isVariable and: [aClass isDoubleWords])
ifTrue: [^self error: 'cannot make a half word subclass of
a class with double word fields'].
(aClass isVariable and: [aClass isPointers])
ifTrue: [^self error: 'cannot make a half word subclass of
a class with pointer fields'].
env := CurrentEnvironment signal ifNil: [aClass environment].
^self
name: t
inEnvironment: env
subclassOf: aClass
type: #shorts
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat!
Item was changed: ----- Method: ClassBuilder>>superclass:variableWordSubclass: instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') ----- superclass: aClass variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class in which the subclass is to have indexable word-sized nonpointer variables." | env | (aClass instSize > 0) ifTrue: [^self error: 'cannot make a word subclass of a class with named fields']. (aClass isVariable and: [aClass isBytes]) ifTrue: [^self error: 'cannot make a word subclass of a class with byte fields'].
(aClass isVariable and: [aClass isHalfWords])
ifTrue: [^self error: 'cannot make a word subclass of a
class with half word fields'].
(aClass isVariable and: [aClass isDoubleWords])
ifTrue: [^self error: 'cannot make a word subclass of a
class with double word fields']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: 'cannot make a word subclass of a class with pointer fields']. env := CurrentEnvironment signal ifNil: [aClass environment]. ^self name: t inEnvironment: env subclassOf: aClass type: #words instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat!
Hi Eliot, I don't remember about this conversation. Anyway I was on the process of adopting DoubleByte, so this was only transitory. I perfectly agree about Words... Even without quitting own Squeak world this is already highly polymorphic: There are virtual machine words (sizeof void *) There are image words (sizeof Oop) Above two matches on Cog & Spur VM, but as you said 32bits image on 64bits image could be interesting. There are variableWord collections (allways 32bits) and now variableDoubleWords...
2016-10-20 22:10 GMT+02:00 Eliot Miranda eliot.miranda@gmail.com:
Nicolas,
I thought that there had been a conversation about this and that Bert
had expressed a preference for DoubleByte and DoubleWord. Hence I kept to that. If I'm mistaken forgive me. But personally I don't like HalfWord. t's as ambiguous as word. At least DoubleByte is not ambiguous.
On Thu, Oct 20, 2016 at 12:59 PM, commits@source.squeak.org wrote:
Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.1039.mcz
==================== Summary ====================
Name: Kernel-nice.1039 Author: nice Time: 20 September 2016, 11:00:27.302558 pm UUID: b0aeabf6-f73d-44c4-be8b-d2c66a73486f Ancestors: Kernel-bf.1038
Introduce HalfWord (16 bits) and DoubleWord (64 bits) subclasses which are possible in Spur format, but yet not exploited.
=============== Diff against Kernel-bf.1038 ===============
Item was added:
- ----- Method: Behavior>>isDoubleWords (in category 'testing') -----
- isDoubleWords
"Answer true if the receiver is made of 64-bit instance
variables."
^self instSpec = 2r1001!
Item was added:
- ----- Method: Behavior>>isHalfWords (in category 'testing') -----
- isHalfWords
"Answer true if the receiver is made of 16-bit instance
variables."
^(self instSpec bitAnd: 2r11100) = 2r1100!
Item was changed: ----- Method: Behavior>>isWords (in category 'testing') ----- isWords "Answer true if the receiver is made of 32-bit instance variables."
^(self instSpec bitAnd: 2r11110) = 2r1010!
^self isBytes not!
Item was added:
- ----- Method: Class>>variableDoubleWordSubcl
ass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableDoubleWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the
subclass is to
have indexable double-word-sized nonpointer variables."
^(ClassBuilder new)
superclass: self
variableDoubleWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat
- !
Item was added:
- ----- Method: Class>>variableDoubleWordSubclass:uses:
instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableDoubleWordSubclass: t uses: aTraitCompositionOrArray
instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the
subclass is to
have indexable double-word-sized nonpointer variables."
| newClass copyOfOldClass |
copyOfOldClass := self copy.
newClass := self
variableDoubleWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat.
newClass setTraitComposition: aTraitCompositionOrArray
asTraitComposition.
SystemChangeNotifier uniqueInstance
classDefinitionChangedFrom: copyOfOldClass to: newClass.
^newClass
- !
Item was added:
- ----- Method: Class>>variableHalfWordSubclas
s:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableHalfWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the
subclass is to
have indexable half-word-sized nonpointer variables."
^(ClassBuilder new)
superclass: self
variableHalfWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat
- !
Item was added:
- ----- Method: Class>>variableHalfWordSubclas
s:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'subclass creation') -----
- variableHalfWordSubclass: t uses: aTraitCompositionOrArray
instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class (the receiver) in which the
subclass is to
have indexable half-word-sized nonpointer variables."
| newClass copyOfOldClass |
copyOfOldClass := self copy.
newClass := self
variableHalfWordSubclass: t
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat.
newClass setTraitComposition: aTraitCompositionOrArray
asTraitComposition.
SystemChangeNotifier uniqueInstance
classDefinitionChangedFrom: copyOfOldClass to: newClass.
^newClass!
Item was changed: ----- Method: ClassBuilder>>superclass:varia bleByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') ----- superclass: aClass variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class in which the subclass is to have indexable byte-sized nonpointer variables." | oldClassOrNil actualType env | (aClass instSize > 0) ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields']. (aClass isVariable and: [aClass isWords]) ifTrue: [^self error: 'cannot make a byte subclass of a class with word fields'].
(aClass isVariable and: [aClass isHalfWords])
ifTrue: [^self error: 'cannot make a byte subclass of a
class with half word fields'].
(aClass isVariable and: [aClass isDoubleWords])
ifTrue: [^self error: 'cannot make a byte subclass of a
class with double word fields']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields']. oldClassOrNil := aClass environment at: t ifAbsent:[nil]. actualType := (oldClassOrNil notNil and: [oldClassOrNil typeOfClass == #compiledMethod]) ifTrue: [#compiledMethod] ifFalse: [#bytes]. env := CurrentEnvironment signal ifNil: [aClass environment]. ^self name: t inEnvironment: env subclassOf: aClass type: actualType instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat!
Item was added:
- ----- Method: ClassBuilder>>superclass:varia
bleDoubleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
- superclass: aClass
variableDoubleWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class in which the subclass is to
have indexable double-word-sized nonpointer variables."
| env |
(aClass instSize > 0)
ifTrue: [^self error: 'cannot make a double word subclass
of a class with named fields'].
(aClass isVariable and: [aClass isBytes])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with byte fields'].
(aClass isVariable and: [aClass isHalfWords])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with half word fields'].
(aClass isVariable and: [aClass isWords])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with word fields'].
(aClass isVariable and: [aClass isPointers])
ifTrue: [^self error: 'cannot make a double word subclass
of a class with pointer fields'].
env := CurrentEnvironment signal ifNil: [aClass environment].
^self
name: t
inEnvironment: env
subclassOf: aClass
type: #longs
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat!
Item was added:
- ----- Method: ClassBuilder>>superclass:varia
bleHalfWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') -----
- superclass: aClass
variableHalfWordSubclass: t instanceVariableNames: f
classVariableNames: d poolDictionaries: s category: cat
"This is the standard initialization message for creating a new
class as a
subclass of an existing class in which the subclass is to
have indexable half-word-sized nonpointer variables."
| env |
(aClass instSize > 0)
ifTrue: [^self error: 'cannot make a half word subclass
of a class with named fields'].
(aClass isVariable and: [aClass isBytes])
ifTrue: [^self error: 'cannot make a half word subclass
of a class with byte fields'].
(aClass isVariable and: [aClass isWords])
ifTrue: [^self error: 'cannot make a half word subclass
of a class with word fields'].
(aClass isVariable and: [aClass isDoubleWords])
ifTrue: [^self error: 'cannot make a half word subclass
of a class with double word fields'].
(aClass isVariable and: [aClass isPointers])
ifTrue: [^self error: 'cannot make a half word subclass
of a class with pointer fields'].
env := CurrentEnvironment signal ifNil: [aClass environment].
^self
name: t
inEnvironment: env
subclassOf: aClass
type: #shorts
instanceVariableNames: f
classVariableNames: d
poolDictionaries: s
category: cat!
Item was changed: ----- Method: ClassBuilder>>superclass:varia bleWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category 'public') ----- superclass: aClass variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class in which the subclass is to have indexable word-sized nonpointer variables." | env | (aClass instSize > 0) ifTrue: [^self error: 'cannot make a word subclass of a class with named fields']. (aClass isVariable and: [aClass isBytes]) ifTrue: [^self error: 'cannot make a word subclass of a class with byte fields'].
(aClass isVariable and: [aClass isHalfWords])
ifTrue: [^self error: 'cannot make a word subclass of a
class with half word fields'].
(aClass isVariable and: [aClass isDoubleWords])
ifTrue: [^self error: 'cannot make a word subclass of a
class with double word fields']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: 'cannot make a word subclass of a class with pointer fields']. env := CurrentEnvironment signal ifNil: [aClass environment]. ^self name: t inEnvironment: env subclassOf: aClass type: #words instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat!
-- _,,,^..^,,,_ best, Eliot
The names Byte, HalfWord, Word, and DoubleWord sound good to me. The term "double-byte" is commonly used with reference to strings.
Dave
On Thu, Oct 20, 2016 at 01:10:41PM -0700, Eliot Miranda wrote:
Nicolas,
I thought that there had been a conversation about this and that Bert
had expressed a preference for DoubleByte and DoubleWord. Hence I kept to that. If I'm mistaken forgive me. But personally I don't like HalfWord. t's as ambiguous as word. At least DoubleByte is not ambiguous.
On Thu, Oct 20, 2016 at 12:59 PM, commits@source.squeak.org wrote:
Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.1039.mcz
==================== Summary ====================
Name: Kernel-nice.1039 Author: nice Time: 20 September 2016, 11:00:27.302558 pm UUID: b0aeabf6-f73d-44c4-be8b-d2c66a73486f Ancestors: Kernel-bf.1038
Introduce HalfWord (16 bits) and DoubleWord (64 bits) subclasses which are possible in Spur format, but yet not exploited.
=============== Diff against Kernel-bf.1038 ===============
squeak-dev@lists.squeakfoundation.org