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! |
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, <[hidden email]> wrote: Nicolas Cellier uploaded a new version of Kernel to project The Trunk: _,,,^..^,,,_ best, Eliot |
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 <[hidden email]>:
|
In reply to this post by Eliot Miranda-2
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, <[hidden email]> 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 =============== > > |
Free forum by Nabble | Edit this page |