Re: WideString method definitions
by Stephan Eggermont
Doru wrote:
>Hmm. I love it that you are trying to get Moose in Gemstone :).
Ah well, we just ran into that widestring problem when trying to
make another project run on Gemstone. When I found the nice
simple expression I just pasted it in some other open windows...
Another common problem is empty sentences. Gemstone doesn't
like ..
>These methods are not particularly important, and I think we
>can find workarounds for them.
Just replacing them with the same text, but then in plain ascii,
is enough. Often, it is just a wrong quote in a comment.
Stephan
9 years, 6 months
WideString method definitions
by Stephan Eggermont
Gemstone doesn't like widestring method definitions.
MCMethodDefinition allInstances select: [ :each | (each source isKindOf: ByteString) not ]
should return an empty collection. In Pharo 3.0 it does.
In Moose 4.8 however we have
VerveineJTestResource>mse
MalPorterStemmerTest>porterTestData
MalStopwords>moreBasicEnglish
MalGermanStemmer>performStemming:
PPAnalyzerTest>grammarD
Stephan
9 years, 6 months
Re: Slow reading of MSE file
by Stephan Eggermont
Doru wrote:
>@Stephan, Diego: Would you like to look into this? This should get in the 4.8 release.
New versions of Morphic & Kernel, and Fame-ImportExport
Giving Job its own jobAnnouncer (and using that in SystemProgressMorph)
helps a bit, but not enough.
Job>>jobAnnouncer
^jobAnnouncer ifNil: [ jobAnnouncer := Announcer new ]
Job>announce: anAnnouncementClass
| announcement |
announcement := anAnnouncementClass on: self.
self announcer announce: announcement.
Job>announcer
^Job jobAnnouncer
SystemProgressMorph>>enable
Job jobAnnouncer on: JobStart send: #startJob: to: self.
Job jobAnnouncer on: JobEnd send: #endJob: to: self.
Job jobAnnouncer on: JobChange send: #updateJob: to: self.
SystemProgressMorph>>disable
Job jobAnnouncer unsubscribe: self.
- 25606 tallies, 25644 msec.
**Tree**
--------------------------------
Process: (40s) Morphic UI process: nil
--------------------------------
79.3% {20336ms} MooseModel class>>importFrom:
79.3% {20336ms} MooseModel class>>importFrom:withMetamodel:
79.3% {20328ms} MSEImporter(FMImporter)>>run
79.3% {20328ms} FMMSEParser>>run
79.2% {20322ms} FMMSEParser>>basicRun
79.2% {20322ms} FMMSEParser>>Document
78.2% {20066ms} FMMSEParser>>Element
50.0% {12834ms} FMMSEParser>>Attribute
|24.3% {6239ms} MSEImporter(FMImporter)>>endAttribute:
| |24.3% {6228ms} FMFutureElement>>endAttribute:
| | 24.2% {6212ms} FMFutureAttribute>>endAttribute:
| | 21.6% {5541ms} FMFutureAttribute>>maybeEnd
| | |13.3% {3404ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | |8.1% {2078ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | |3.9% {1010ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | |2.8% {730ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | |1.8% {461ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | | |1.7% {434ms} FMMultivalueLink>>do:
| | | | | | 1.7% {430ms} OrderedCollection>>do:
| | | | |1.5% {396ms} ByteString(String)>>=
| | | | | 1.5% {390ms} primitives
| | | |2.6% {661ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | |2.1% {549ms} FMMultivalueLink>>do:
| | | | | 2.0% {508ms} OrderedCollection>>do:
| | | |1.7% {438ms} ByteString(String)>>=
| | | | 1.7% {430ms} primitives
| | |7.1% {1819ms} FM3PropertyDescription>>setOn:values:
| | | 6.4% {1629ms} FAMIXParameterType(Object)>>mmSetProperty:to:
| | | 6.2% {1597ms} FM3PropertyDescription>>setOn:rawValue:
| | | 2.0% {525ms} ByteSymbol(Symbol)>>asMutator
| | | 1.9% {493ms} ByteString(String)>>asSymbol
| | | 1.5% {387ms} Symbol class>>intern:
| | | 1.5% {376ms} Symbol class>>lookup:
| | | 1.4% {367ms} WeakSet>>like:
| | | 1.4% {361ms} WeakSet>>scanFor:
| | 2.4% {620ms} PhexMatcher>>=
| | 1.1% {287ms} PhexMatcher>>expect:using:
|12.2% {3127ms} FMMSEParser>>Value
| |5.7% {1459ms} FMMSEParser>>Primitive
| | |4.4% {1141ms} FMMSEParser>>Number
| | | 1.2% {309ms} WriteStream>>reset
| |4.9% {1259ms} FMMSEParser>>Reference
| | 2.7% {705ms} FMMSEParser>>Identifier
|5.8% {1490ms} FMMSEParser>>tNAME
| |2.4% {608ms} Character>>isAlphaNumeric
| | |1.9% {482ms} Character>>isLetter
| | | 1.2% {305ms} Character>>characterSet
| |1.3% {327ms} FMMSEParser>>next
| | 1.1% {279ms} MultiByteFileStream>>next
|4.6% {1168ms} MSEImporter(FMImporter)>>beginAttribute:
| |4.4% {1124ms} FMFutureElement>>beginAttribute:
| | 3.6% {912ms} PhexMatcher>>beTrue
| | 3.4% {874ms} PhexMatcher>>true
| | 3.0% {758ms} PhexMatcher>>expectedUnknownMessageToReturn:
| | 1.7% {449ms} Array(Collection)>>copyWithout:
| | |1.7% {437ms} Array(Collection)>>reject:
| | 1.0% {261ms} PhexMatcher>>expect:describeShould:describeShouldNot:
|1.1% {290ms} FMMSEParser>>tOPEN
20.4% {5239ms} FMMSEParser>>increment
|20.4% {5239ms} Job>>value:
| 20.4% {5231ms} Job>>currentValue:
| 20.4% {5231ms} Job>>announceChange
| 20.4% {5231ms} Job>>announce:
| 20.4% {5221ms} Announcer>>announce:
| 20.3% {5211ms} SubscriptionRegistry>>deliver:
| 19.2% {4931ms} SubscriptionRegistry>>deliver:to:
| 19.1% {4896ms} SubscriptionRegistry>>deliver:to:startingAt:
| 19.0% {4878ms} AnnouncementSubscription>>deliver:
| 18.7% {4794ms} MessageSend>>cull:cull:
| 18.1% {4652ms} MessageSend>>cull:
| 17.6% {4510ms} MessageSend>>value:
| 17.6% {4510ms} MessageSend>>valueWithArguments:
| 17.0% {4362ms} SystemProgressMorph class>>updateJob:
| 11.8% {3035ms} JobProgressMorph>>progress:
| |10.0% {2558ms} JobProgressBarMorph>>progress:
| | 9.6% {2465ms} ProgressBarMorph>>value:
| | 9.6% {2463ms} ProgressBarMorph(Morph)>>changed
| | 9.6% {2452ms} ProgressBarMorph(Morph)>>invalidRect:
| | 9.5% {2444ms} ProgressBarMorph(Morph)>>invalidRect:from:
| | 9.5% {2440ms} JobProgressBarMorph(Morph)>>invalidRect:from:
| | 9.4% {2418ms} JobProgressMorph(Morph)>>invalidRect:from:
| | 9.4% {2406ms} SystemProgressMorph(Morph)>>invalidRect:from:
| | 9.3% {2390ms} PasteUpMorph>>invalidRect:from:
| | 8.5% {2167ms} Rectangle>>intersect:ifNone:
| | 4.3% {1110ms} Rectangle>>intersects:
| | |2.5% {633ms} SmallInteger>><=
| | | |2.3% {580ms} SmallInteger(Integer)>><=
| | | | 2.2% {573ms} Float>>adaptToInteger:andCompare:
| | | | 2.1% {548ms} Float>>asTrueFraction
| | | | 1.1% {275ms} SmallInteger>>bitShift:
| | |1.8% {473ms} SmallInteger>>>=
| | | 1.6% {403ms} SmallInteger(Integer)>>>=
| | | 1.6% {401ms} Float>>adaptToInteger:andCompare:
| | | 1.6% {399ms} Float>>asTrueFraction
| | 2.1% {537ms} SmallInteger>>>
| | |1.8% {458ms} SmallInteger(Integer)>>>
| | | 1.8% {454ms} Float>>adaptToInteger:andCompare:
| | | 1.7% {426ms} Float>>asTrueFraction
| | 1.7% {427ms} SmallInteger>><
| | 1.4% {348ms} SmallInteger(Integer)>><
| | 1.4% {348ms} Float>>adaptToInteger:andCompare:
| | 1.3% {340ms} Float>>asTrueFraction
| 4.4% {1140ms} JobProgressMorph>>label:
| 4.3% {1106ms} JobProgressMorph(Object)>>changed:
| 3.8% {982ms} SystemProgressMorph>>update:
| 3.4% {868ms} SystemProgressMorph>>updateWidth
| 3.4% {860ms} SystemProgressMorph>>resize
| 2.9% {749ms} SystemProgressMorph>>maxBarWidth
| 2.7% {684ms} JobProgressMorph(Morph)>>minExtent
| 1.4% {355ms} JobProgressMorph(Morph)>>layoutBounds
| 1.2% {297ms} JobProgressMorph(Morph)>>innerBounds
3.1% {800ms} MSEImporter(FMImporter)>>beginElement:
|3.0% {760ms} FMFutureElement class>>with:name:
| 2.9% {756ms} FMFutureElement>>with:name:
| 2.4% {615ms} FM3MetaDescription>>createInstance
| 2.2% {576ms} FAMIXPackage class(Behavior)>>new
2.4% {620ms} FMMSEParser>>tFULLNAME
1.3% {324ms} FMMSEParser>>Serial
**Leaves**
5.7% {1458ms} OrderedCollection>>do:
5.2% {1332ms} ByteString(String)>>=
2.8% {709ms} FMMSEParser>>tOPEN
2.7% {682ms} SmallInteger(Number)>>negative
2.6% {673ms} Array(SequenceableCollection)>>at:ifAbsent:
2.4% {624ms} False(ProtoObject)>>~~
2.2% {561ms} SmallInteger>>bitShift:
2.1% {549ms} FAMIXClass(Object)>>=
1.7% {424ms} MultiByteFileStream(StandardFileStream)>>basicNext
1.6% {405ms} WriteStream>>reset
1.4% {349ms} FMMSEParser>>tWHITESPACE
1.2% {319ms} WriteStream>>nextPut:
1.2% {307ms} MultiByteFileStream>>next
1.1% {278ms} ByteString class(String class)>>new:
1.0% {265ms} LargePositiveInteger(Integer)>>lowBit
**Memory**
old +42,243,932 bytes
young -642,456 bytes
used +41,601,476 bytes
free +1,138,424 bytes
**GCs**
full 2 totalling 1,491ms (6.0% uptime), avg 746.0ms
incr 1693 totalling 3,551ms (14.0% uptime), avg 2.0ms
tenures 734 (avg 2 GCs/tenure)
root table 0 overflows
FMMEParser>increment is called 105538 times. Changing the parser to
only update every 100 increments brings the overhead to 1.7 %
FMMSEParser>increment
progBar ifNotNil: [
(increments % 100) = 0 ifTrue: [progBar value: self pos]. increments := increments+1]
FMMSEParser>run
increments := 0.
UIManager default
displayProgress: 'Parsing ', self stream localName
at: Sensor cursorPoint
from: 1
to: self stream size
during: [ :bar | progBar := bar. self basicRun].
- 18965 tallies, 18975 msec.
**Tree**
--------------------------------
Process: (40s) Morphic UI process: nil
--------------------------------
73.3% {13901ms} MooseModel class>>importFrom:
73.3% {13901ms} MooseModel class>>importFrom:withMetamodel:
73.2% {13897ms} MSEImporter(FMImporter)>>run
73.2% {13895ms} FMMSEParser>>run
73.0% {13843ms} FMMSEParser>>basicRun
73.0% {13843ms} FMMSEParser>>Document
71.7% {13612ms} FMMSEParser>>Element
|61.5% {11669ms} FMMSEParser>>Attribute
| |31.4% {5963ms} MSEImporter(FMImporter)>>endAttribute:
| | |31.2% {5925ms} FMFutureElement>>endAttribute:
| | | 31.2% {5923ms} FMFutureAttribute>>endAttribute:
| | | 27.8% {5270ms} FMFutureAttribute>>maybeEnd
| | | |17.5% {3329ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | |11.0% {2091ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | |4.8% {905ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | | |3.5% {671ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | | | 1.1% {216ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | | | | |1.1% {204ms} FMMultivalueLink>>do:
| | | | | | | | 1.0% {197ms} OrderedCollection>>do:
| | | | | | | 1.1% {205ms} ByteString(String)>>=
| | | | | | | |1.0% {195ms} primitives
| | | | | | | 1.0% {194ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | |2.6% {492ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | | | |2.5% {467ms} FMMultivalueLink>>do:
| | | | | | | 2.4% {450ms} OrderedCollection>>do:
| | | | | |2.4% {451ms} ByteString(String)>>=
| | | | | | |2.2% {421ms} primitives
| | | | | |1.1% {216ms} ByteSymbol(Symbol)>>asString
| | | | |2.9% {552ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | | |2.5% {480ms} FMMultivalueLink>>do:
| | | | | | 2.3% {440ms} OrderedCollection>>do:
| | | | |2.4% {460ms} ByteString(String)>>=
| | | | | 2.3% {441ms} primitives
| | | |8.7% {1647ms} FM3PropertyDescription>>setOn:values:
| | | | |7.8% {1478ms} FAMIXParameterizedType(Object)>>mmSetProperty:to:
| | | | | 7.7% {1464ms} FM3PropertyDescription>>setOn:rawValue:
| | | | | 2.4% {457ms} ByteSymbol(Symbol)>>asMutator
| | | | | |2.3% {429ms} ByteString(String)>>asSymbol
| | | | | | 1.8% {349ms} Symbol class>>intern:
| | | | | | 1.8% {349ms} Symbol class>>lookup:
| | | | | | 1.8% {349ms} WeakSet>>like:
| | | | | | 1.8% {347ms} WeakSet>>scanFor:
| | | | | 1.3% {245ms} FAMIXMethod(FAMIXBehaviouralEntity)>>declaredType:
| | | | | 1.3% {241ms} FMMultivalueLink class>>on:update:from:to:
| | | | | 1.3% {241ms} FMMultivalueLink>>unsafeAdd:
| | | | | 1.2% {237ms} OrderedCollection(SequenceableCollection)>>includes:
| | | | | 1.2% {237ms} OrderedCollection(SequenceableCollection)>>indexOf:
| | | | | 1.2% {237ms} OrderedCollection(SequenceableCollection)>>indexOf:ifAbsent:
| | | | | 1.2% {233ms} OrderedCollection(SequenceableCollection)>>indexOf:startingAt:ifAbsent:
| | | | | 1.1% {218ms} FAMIXMethod(Object)>>=
| | | |1.1% {218ms} FAMIXClass(MooseEntity)>>handleFameProperty:value:
| | | | 1.1% {200ms} FAMIXClass(MooseEntity)>>propertyNamed:put:
| | | | 1.0% {198ms} MooseDefaultState>>propertyAt:put:
| | | 3.2% {598ms} PhexMatcher>>=
| | | 1.6% {312ms} PhexMatcher>>expect:using:
| |13.8% {2611ms} FMMSEParser>>Value
| | |6.8% {1293ms} FMMSEParser>>Primitive
| | | |5.3% {1005ms} FMMSEParser>>Number
| | | | 1.3% {256ms} WriteStream>>reset
| | | | 1.2% {231ms} FMMSEParser>>backtrack:
| | | | 1.2% {224ms} Character>>isDigit
| | |5.3% {998ms} FMMSEParser>>Reference
| | | 2.9% {556ms} FMMSEParser>>Identifier
| |7.5% {1430ms} FMMSEParser>>tNAME
| | |3.1% {594ms} Character>>isAlphaNumeric
| | | |2.6% {488ms} Character>>isLetter
| | | | 1.5% {292ms} Character>>characterSet
| | | | |1.3% {252ms} EncodedCharSet class>>charsetAt:
| | | | | 1.3% {244ms} Array(SequenceableCollection)>>at:ifAbsent:
| | | | | 1.0% {196ms} primitives
| | | | 1.0% {196ms} Unicode class>>isLetter:
| | |1.5% {293ms} FMMSEParser>>next
| | | 1.2% {235ms} MultiByteFileStream>>next
| |5.0% {939ms} MSEImporter(FMImporter)>>beginAttribute:
| | |4.5% {860ms} FMFutureElement>>beginAttribute:
| | | 3.1% {597ms} PhexMatcher>>beTrue
| | | 3.1% {585ms} PhexMatcher>>true
| | | 2.5% {465ms} PhexMatcher>>expectedUnknownMessageToReturn:
| | | 1.2% {219ms} Array(Collection)>>copyWithout:
| | | |1.1% {213ms} Array(Collection)>>reject:
| | | 1.1% {211ms} PhexMatcher>>expect:describeShould:describeShouldNot:
| |1.5% {287ms} FMMSEParser>>tOPEN
| | 1.3% {250ms} primitives
|3.4% {648ms} MSEImporter(FMImporter)>>beginElement:
| |3.2% {605ms} FMFutureElement class>>with:name:
| | 3.2% {605ms} FMFutureElement>>with:name:
| | 2.6% {502ms} FM3MetaDescription>>createInstance
| | 2.5% {473ms} FAMIXNamespace class(Behavior)>>new
|2.8% {531ms} FMMSEParser>>tFULLNAME
| |1.2% {231ms} Character>>isAlphaNumeric
|1.7% {314ms} FMMSEParser>>increment
| |1.6% {310ms} Job>>value:
| | 1.6% {310ms} Job>>currentValue:
| | 1.6% {310ms} Job>>announceChange
| | 1.6% {310ms} Job>>announce:
| | 1.6% {310ms} Announcer>>announce:
| | 1.6% {310ms} SubscriptionRegistry>>deliver:
| | 1.6% {310ms} SubscriptionRegistry>>deliver:to:
| | 1.6% {310ms} SubscriptionRegistry>>deliver:to:startingAt:
| | 1.6% {310ms} AnnouncementSubscription>>deliver:
| | 1.6% {310ms} MessageSend>>cull:cull:
| | 1.6% {306ms} MessageSend>>cull:
| | 1.6% {300ms} MessageSend>>value:
| | 1.6% {298ms} MessageSend>>valueWithArguments:
| | 1.5% {290ms} SystemProgressMorph class>>updateJob:
| | 1.2% {231ms} JobProgressMorph>>label:
| | 1.2% {229ms} JobProgressMorph(Object)>>changed:
| | 1.2% {227ms} SystemProgressMorph>>update:
| | 1.1% {211ms} SystemProgressMorph>>refresh
| | 1.1% {211ms} PasteUpMorph>>displayWorld
| | 1.1% {211ms} PasteUpMorph>>privateOuterDisplayWorld
| | 1.1% {211ms} WorldState>>displayWorld:submorphs:
|1.5% {279ms} FMMSEParser>>Serial
1.2% {229ms} MSEImporter>>endDocument
1.2% {229ms} FMRepository>>addAll:
1.2% {229ms} FMRepository>>add:
1.2% {225ms} IdentitySet(Set)>>add:
**Leaves**
7.5% {1420ms} OrderedCollection>>do:
7.0% {1335ms} ByteString(String)>>=
3.0% {564ms} SmallInteger(ProtoObject)>>~~
2.9% {559ms} FMMSEParser>>tOPEN
2.9% {549ms} Array(SequenceableCollection)>>at:ifAbsent:
2.7% {517ms} FAMIXParameterizedType(Object)>>=
2.1% {397ms} MultiByteFileStream(StandardFileStream)>>basicNext
1.8% {344ms} ByteString class(String class)>>new:
1.7% {318ms} WriteStream>>reset
1.6% {310ms} MultiByteFileStream>>next
1.6% {301ms} WriteStream>>nextPut:
1.5% {292ms} FMMSEParser>>tWHITESPACE
1.1% {204ms} FMMSEParser>>next
1.1% {200ms} OrderedCollection(SequenceableCollection)>>indexOf:startingAt:ifAbsent:
1.1% {200ms} FMMultivalueLink(Collection)>>detect:ifNone:
1.0% {195ms} SmallInteger(Magnitude)>>between:and:
1.0% {191ms} Unicode class>>isLetter:
**Memory**
old +35,101,980 bytes
young -1,271,824 bytes
used +33,830,156 bytes
free +1,354,584 bytes
**GCs**
full 2 totalling 2,268ms (12.0% uptime), avg 1134.0ms
incr 1263 totalling 2,632ms (14.0% uptime), avg 2.0ms
tenures 569 (avg 2 GCs/tenure)
root table 0 overflows
9 years, 6 months
Re: Slow reading of MSE file
by Stephan Eggermont
Without the progress bar
FMMSEParser>increment
"progBar ifNotNil: [progBar value: self pos]"
18 sec vs 32 sec with the progress bar.
Stephan
- 18299 tallies, 18304 msec.
**Tree**
--------------------------------
Process: (40s) Morphic UI process: nil
--------------------------------
71.1% {13018ms} MooseModel class>>importFrom:
71.1% {13018ms} MooseModel class>>importFrom:withMetamodel:
71.1% {13012ms} MSEImporter(FMImporter)>>run
71.1% {13006ms} FMMSEParser>>run
70.7% {12944ms} FMMSEParser>>basicRun
70.7% {12944ms} FMMSEParser>>Document
69.6% {12747ms} FMMSEParser>>Element
|61.2% {11199ms} FMMSEParser>>Attribute
| |30.6% {5605ms} MSEImporter(FMImporter)>>endAttribute:
| | |30.5% {5586ms} FMFutureElement>>endAttribute:
| | | 30.4% {5572ms} FMFutureAttribute>>endAttribute:
| | | 27.5% {5040ms} FMFutureAttribute>>maybeEnd
| | | |17.4% {3191ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | |11.0% {2014ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | |5.0% {910ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | | |3.8% {691ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | | | 1.4% {248ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | | | | |1.3% {230ms} FMMultivalueLink>>do:
| | | | | | | | 1.2% {218ms} OrderedCollection>>do:
| | | | | | | 1.1% {194ms} FM3MetaDescription>>attributeNamed:ifAbsent:
| | | | | |2.5% {459ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | | | |2.3% {428ms} FMMultivalueLink>>do:
| | | | | | | 2.3% {412ms} OrderedCollection>>do:
| | | | | |2.2% {405ms} ByteString(String)>>=
| | | | | | |2.2% {397ms} primitives
| | | | | |1.1% {201ms} ByteSymbol(Symbol)>>asString
| | | | |2.9% {535ms} FMMultivalueLink(Collection)>>detect:ifNone:
| | | | | |2.5% {455ms} FMMultivalueLink>>do:
| | | | | | 2.3% {430ms} OrderedCollection>>do:
| | | | |2.4% {446ms} ByteString(String)>>=
| | | | | 2.3% {422ms} primitives
| | | |8.9% {1621ms} FM3PropertyDescription>>setOn:values:
| | | | 8.1% {1477ms} FAMIXParameterType(Object)>>mmSetProperty:to:
| | | | 7.9% {1453ms} FM3PropertyDescription>>setOn:rawValue:
| | | | 2.3% {423ms} ByteSymbol(Symbol)>>asMutator
| | | | |2.2% {394ms} ByteString(String)>>asSymbol
| | | | | 1.8% {328ms} Symbol class>>intern:
| | | | | 1.8% {328ms} Symbol class>>lookup:
| | | | | 1.8% {322ms} WeakSet>>like:
| | | | | 1.7% {318ms} WeakSet>>scanFor:
| | | | 1.5% {282ms} FAMIXMethod(FAMIXBehaviouralEntity)>>declaredType:
| | | | 1.5% {278ms} FMMultivalueLink class>>on:update:from:to:
| | | | 1.5% {278ms} FMMultivalueLink>>unsafeAdd:
| | | | 1.5% {274ms} OrderedCollection(SequenceableCollection)>>includes:
| | | | 1.5% {274ms} OrderedCollection(SequenceableCollection)>>indexOf:
| | | | 1.5% {270ms} OrderedCollection(SequenceableCollection)>>indexOf:ifAbsent:
| | | | 1.5% {270ms} OrderedCollection(SequenceableCollection)>>indexOf:startingAt:ifAbsent:
| | | | 1.4% {252ms} FAMIXMethod(Object)>>=
| | | 2.7% {493ms} PhexMatcher>>=
| |14.7% {2684ms} FMMSEParser>>Value
| | |7.3% {1330ms} FMMSEParser>>Primitive
| | | |5.6% {1021ms} FMMSEParser>>Number
| | | | |1.5% {268ms} Character>>isDigit
| | | | |1.3% {230ms} WriteStream>>reset
| | | | |1.2% {215ms} FMMSEParser>>backtrack:
| | | |1.0% {186ms} FMMSEParser>>String
| | |5.7% {1046ms} FMMSEParser>>Reference
| | | 2.9% {524ms} FMMSEParser>>Identifier
| |8.0% {1459ms} FMMSEParser>>tNAME
| | |3.2% {579ms} Character>>isAlphaNumeric
| | | |2.5% {449ms} Character>>isLetter
| | | | 1.7% {312ms} Character>>characterSet
| | | | 1.5% {267ms} EncodedCharSet class>>charsetAt:
| | | | 1.4% {259ms} Array(SequenceableCollection)>>at:ifAbsent:
| | | | 1.3% {237ms} primitives
| | |1.7% {317ms} FMMSEParser>>next
| | | 1.3% {237ms} MultiByteFileStream>>next
| |4.0% {738ms} MSEImporter(FMImporter)>>beginAttribute:
| | |3.9% {714ms} FMFutureElement>>beginAttribute:
| | | 2.8% {515ms} PhexMatcher>>beTrue
| | | 2.7% {494ms} PhexMatcher>>true
| | | 2.2% {405ms} PhexMatcher>>expectedUnknownMessageToReturn:
| | | 1.1% {195ms} Array(Collection)>>copyWithout:
| | | 1.0% {187ms} Array(Collection)>>reject:
| |1.4% {264ms} FMMSEParser>>tOPEN
| | 1.1% {207ms} primitives
|3.5% {637ms} MSEImporter(FMImporter)>>beginElement:
| |3.3% {596ms} FMFutureElement class>>with:name:
| | 3.2% {594ms} FMFutureElement>>with:name:
| | 2.8% {519ms} FM3MetaDescription>>createInstance
| | 2.6% {483ms} FAMIXNamespace class(Behavior)>>new
|2.9% {532ms} FMMSEParser>>tFULLNAME
| |1.3% {229ms} Character>>isAlphaNumeric
|1.5% {268ms} FMMSEParser>>Serial
1.1% {196ms} MSEImporter>>endDocument
1.1% {196ms} FMRepository>>addAll:
1.0% {191ms} FMRepository>>add:
1.0% {189ms} IdentitySet(Set)>>add:
**Leaves**
6.9% {1263ms} OrderedCollection>>do:
6.7% {1228ms} ByteString(String)>>=
3.8% {698ms} Array(SequenceableCollection)>>at:ifAbsent:
3.0% {556ms} FMMSEParser>>tOPEN
2.9% {528ms} FAMIXParameterizedType(Object)>>=
2.8% {513ms} UndefinedObject(ProtoObject)>>~~
2.0% {365ms} MultiByteFileStream(StandardFileStream)>>basicNext
1.8% {331ms} WriteStream>>reset
1.8% {323ms} ByteString class(String class)>>new:
1.7% {316ms} WriteStream>>nextPut:
1.5% {278ms} FMMSEParser>>tWHITESPACE
1.4% {263ms} MultiByteFileStream>>next
1.2% {218ms} FMMSEParser>>next
1.0% {192ms} FMMultivalueLink(Collection)>>detect:ifNone:
**Memory**
old +23,650,644 bytes
young -69,592 bytes
used +23,581,052 bytes
free +1,340,268 bytes
**GCs**
full 3 totalling 2,718ms (15.0% uptime), avg 906.0ms
incr 1252 totalling 2,384ms (13.0% uptime), avg 2.0ms
tenures 567 (avg 2 GCs/tenure)
root table 0 overflows
9 years, 6 months
Expressing that a property is mandatory
by Anne Etien
Hi,
I can't see how Fame enable to express that a Property in a metamodel is mandatory or not. The isMultivalued property of the FM3PropertyDescription class enables to specify that a property is multivalued or not, but nothing concerning the character mandatory of the property. Saying that in other words, it is possible to specify in a metamodel that the upper multiplicity of a property is '*' but I can't see how to specify the lower multiplicity.
For example considering the metamodel of stateMachine. A State is contained in one and only one StateMachine, whereas a StateMachine can contained 0 or several states. A transition has one and only one State as source and a state can be the source of 0 or several transitions.
Does Fame enable to express this mandatory characteristic?
Expressing such a thing may facilitate some generations. Indeed, when adding a State, we must specify its container but it is not mandatory to specify the transitions for which it is a source.
Thank you in advance for your help.
Anne
9 years, 6 months