The Timing of Time
Francisco Garau
francisco.garau at gmail.com
Wed Apr 19 06:56:39 UTC 2006
Alan said:
"In fact, I would greatly appreciate feedback on the
design/implementation/API of Chronos"
For someone that just needs dates and times, I found that Chronos is
somewhat bigger than needed.
>From the implementation point of view, I found that the Calendar object is
quite fat (lots of instance variables). This might not be a problem at all,
but suffering from overgrown objects in my every day job, makes me
suspicious...
Calendar is not the only object with many instance variables. There are
severeal others: LeapSecond, ChronosParser, ConfigurableChronosPrintPolicy,
LeapSecondSchedule, TimeZoneAnnualTransitionPolicyFactory,
ResourcePathContext.
More detail in the attached files: ChronosCalendar shows the printString of
the a calendar and ChronosHierarchy shows the whole class hierarchy
(assuming all the Chronos classes inherit from StandarObject).
But please, don't be offended by this feedback - after all, you asked for
it!
As Ralph Jonhson said, we need to keep discussing this issues. And as you
said, we need keep improving our models - otherwise, everything is lost in
the sea of words.
Cheers,
Francisco
PD: I like your poetic nature. The title of this thread is irresistible
----- Original Message -----
From: "Alan Lovejoy" <squeak-dev.sourcery at forum-mail.net>
To: "'The general-purpose Squeak developers list'"
<squeak-dev at lists.squeakfoundation.org>
Sent: Wednesday, April 19, 2006 2:51 AM
Subject: RE: The Timing of Time
> Ralph: "Date is a basic abstraction. Getting it right is important, and
> so
> far we (the entire programming community) haven't gotten it right."
>
> Yes, exactly so. And the issue is becoming more important, not less, due
> to
> the ever-shrinking "global village." How many decades remain before the
> issues become interplanetery, and not just international, is an
> interesting
> question to ponder (I've considered the implications of interplanetary
> travel for date/time software, but haven't put much effort or code into
> any
> solutions yet--that might be premature at this point.)
>
> When all is said and done, it's usually the case that a lot more has been
> said than done. That's one reason I implemented Chronos according to my
> best understanding of how dates/times ought to work, instead of attempting
> to socialize a consensus in the Smalltalk community for the design of a
> date/time library. A picture of herding cats comes to mind. Or a camel.
>
> Nevertheless, one can always learn from others. In fact, I would greatly
> appreciate feedback on the design/implementation/API of Chronos. I'm sure
> that Hernan, Brent and David T. would like feedback on their work also.
>
> Ralph: "You guys ought to write papers on your Date packages. Someone
> ought
> to write a paper comparing them."
>
> Ayup. In fact, I've decided to put a halt to coding Chronos and start
> writing documentation. John Dougan and I started to write a paper several
> months ago about the model of time on which the Chronos architecture,
> design
> and implementation rests, but we both got sidetracked on/by other matters.
>
> It's "time" to put the theoretical/philosophical discussion back on the
> front burner. As for comparisons of the alternatives on offer, that's a
> job
> best left to some independent analyst, I would think.
>
> --Alan
>
> -----Original Message-----
> From: squeak-dev-bounces at lists.squeakfoundation.org
> [mailto:squeak-dev-bounces at lists.squeakfoundation.org] On Behalf Of Ralph
> Johnson
> Sent: Tuesday, April 18, 2006 5:38 PM
> To: The general-purpose Squeak developers list
> Subject: Re: The Timing of Time
>
> It is interesting to me 1) how much interest there is in dates and 2) how
> apologetic people seem to be about it. Date is a basic abstraction.
> Getting it right is important, and so far we (the entire programming
> community) haven't gotten it right. Discussions like this are important.
> You guys ought to write papers on your Date packages.
> Someone ought to write a paper comparing them.
>
> Maybe Maxi Taborda is going to do this for his MS thesis?
>
> My favorite book on calenders (I haven't read very many) is "Calendrical
> Calculations" by Reingold and Dershowitz. It is about dates and not time.
>
> -Ralph Johnson
>
>
>
-------------- next part --------------
Immutable #('lock')
Calendar #('clock' 'yearNumberingPolicy' 'secondsSinceJulianDayEpochUpToEpoch' 'secondsSinceUnificationEpochUpToEpoch' 'daysSinceStartOfWeekForEpochDay' 'daysSinceStartOfISOWeekForEpochDay' 'daysSinceStartOfANSIWeekForEpochDay' 'minDaysPerYear' 'maxDaysPerYear' 'minMonthsPerYear' 'maxMonthsPerYear' 'minDaysPerMonth' 'maxDaysPerMonth' 'monthOrdinalRangeConstraint' 'dayOfMonthOrdinalRangeConstraint' 'dayOfYearOrdinalRangeConstraint' 'daysSinceStartOfYearRangeConstraint' 'monthOrdinalsByMonthKey' 'monthKeysByMonthOrdinal' 'monthNameKeysByMonthKey' 'monthKeyByMonthNameKey' 'monthOrdinalsAlwaysCorrespondToTheSameMonthKey' 'doMonthKeysAlwaysCorrespondToTheSameMonthNameKey')
lock: #immutable
clock: a LocalTimeCalendarClock(tick resolution = second | Calendar = Gregorian | Clock Epoch = Tuesday, 1 January 1901 AD @ 12:00:00 am +0000 (UT: Universal Time))
yearNumberingPolicy: an OrdinalNumberingPolicy
secondsSinceJulianDayEpochUpToEpoch: 148731163200
secondsSinceUnificationEpochUpToEpoch: 0
daysSinceStartOfWeekForEpochDay: 1
daysSinceStartOfISOWeekForEpochDay: 0
daysSinceStartOfANSIWeekForEpochDay: 1
minDaysPerYear: 365
maxDaysPerYear: 366
minMonthsPerYear: 12
maxMonthsPerYear: 12
minDaysPerMonth: 28
maxDaysPerMonth: 31
monthOrdinalRangeConstraint: a RangeConstraint
dayOfMonthOrdinalRangeConstraint: a RangeConstraint
dayOfYearOrdinalRangeConstraint: a RangeConstraint
daysSinceStartOfYearRangeConstraint: a RangeConstraint
monthOrdinalsByMonthKey: a Dictionary(#April->4 #August->8 #December->12 #February->2 #January->1 #July->7 #June->6 #March->3 #May->5 #November->11 #October->10 #September->9 )
monthKeysByMonthOrdinal: a Dictionary(1->#January 2->#February 3->#March 4->#April 5->#May 6->#June 7->#July 8->#August 9->#September 10->#October 11->#November 12->#December )
monthNameKeysByMonthKey: a Dictionary(#April->#April #August->#August #December->#December #February->#February #January->#January #July->#July #June->#June #March->#March #May->#May #November->#November #October->#October #September->#September )
monthKeyByMonthNameKey: a Dictionary(#April->#April #August->#August #December->#December #February->#February #January->#January #July->#July #June->#June #March->#March #May->#May #November->#November #October->#October #September->#September )
monthOrdinalsAlwaysCorrespondToTheSameMonthKey: true
doMonthKeysAlwaysCorrespondToTheSameMonthNameKey: true
yearlyCalendars: an Array({StaticYearlyCalendar typeCode=1 monthsPerYear=12 daysPerYear=365 leapMonthOrdinals=#() leapDayOrdinals=#()
{StaticMonthlyCalendar monthKey=#January name=January
ordinal=1 yearTypeCode=1 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#February name=February
ordinal=2 yearTypeCode=1 daysPerMonth=28 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#March name=March
ordinal=3 yearTypeCode=1 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#April name=April
ordinal=4 yearTypeCode=1 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#May name=May
ordinal=5 yearTypeCode=1 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#June name=June
ordinal=6 yearTypeCode=1 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#July name=July
ordinal=7 yearTypeCode=1 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#August name=August
ordinal=8 yearTypeCode=1 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#September name=September
ordinal=9 yearTypeCode=1 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#October name=October
ordinal=10 yearTypeCode=1 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#November name=November
ordinal=11 yearTypeCode=1 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#December name=December
ordinal=12 yearTypeCode=1 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}} {StaticYearlyCalendar typeCode=2 monthsPerYear=12 daysPerYear=366 leapMonthOrdinals=#() leapDayOrdinals=#(60)
{StaticMonthlyCalendar monthKey=#January name=January
ordinal=1 yearTypeCode=2 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#February name=February
ordinal=2 yearTypeCode=2 daysPerMonth=29 intercalaryMonth=false leapMonth=false leapDayOrdinals: #(29)}
{StaticMonthlyCalendar monthKey=#March name=March
ordinal=3 yearTypeCode=2 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#April name=April
ordinal=4 yearTypeCode=2 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#May name=May
ordinal=5 yearTypeCode=2 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#June name=June
ordinal=6 yearTypeCode=2 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#July name=July
ordinal=7 yearTypeCode=2 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#August name=August
ordinal=8 yearTypeCode=2 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#September name=September
ordinal=9 yearTypeCode=2 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#October name=October
ordinal=10 yearTypeCode=2 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#November name=November
ordinal=11 yearTypeCode=2 daysPerMonth=30 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}
{StaticMonthlyCalendar monthKey=#December name=December
ordinal=12 yearTypeCode=2 daysPerMonth=31 intercalaryMonth=false leapMonth=false leapDayOrdinals: #()}})
secondsFromEpochUpToGregorianStart: 49916304000
-------------- next part --------------
ProtoObject #()
Object #()
StandardObject #()
ChronosEnvironment #()
ChronosSqueakEnvironment #()
ChronosSystemFacade #('showReports' 'resourceRepositoryContext' 'systemTimeZone' 'systemTimeZoneBindingStrategy' 'systemLanguageCode' 'systemCountryCode')
ChronosSqueakSystemFacade #()
ExternalResourceRepository #('defaultBroker' 'references' 'aliases')
HttpOperation #('cr' 'lf' 'parameterContinuators' 'protocolVersion' 'contentLength' 'contentType' 'parameters' 'value')
HttpRequest #('method' 'resourcePath' 'correspondent' 'acceptableMimeTypes' 'user' 'password')
HttpClientSideRequest #('proxy')
HttpHeadRequest #()
HttpPutRequest #()
HttpResourceRequest #()
HttpGetRequest #()
HttpPostRequest #()
HttpServerSideRequest #('baseResourcePath')
HttpResponse #('request' 'statusCode' 'statusReason')
Immutable #('lock')
ChronosObject #()
Calendar #('clock' 'yearNumberingPolicy' 'secondsSinceJulianDayEpochUpToEpoch' 'secondsSinceUnificationEpochUpToEpoch' 'daysSinceStartOfWeekForEpochDay' 'daysSinceStartOfISOWeekForEpochDay' 'daysSinceStartOfANSIWeekForEpochDay' 'minDaysPerYear' 'maxDaysPerYear' 'minMonthsPerYear' 'maxMonthsPerYear' 'minDaysPerMonth' 'maxDaysPerMonth' 'monthOrdinalRangeConstraint' 'dayOfMonthOrdinalRangeConstraint' 'dayOfYearOrdinalRangeConstraint' 'daysSinceStartOfYearRangeConstraint' 'monthOrdinalsByMonthKey' 'monthKeysByMonthOrdinal' 'monthNameKeysByMonthKey' 'monthKeyByMonthNameKey' 'monthOrdinalsAlwaysCorrespondToTheSameMonthKey' 'doMonthKeysAlwaysCorrespondToTheSameMonthNameKey')
IrregularCalendar #()
ChineseCalendar #()
RegularCalendar #('yearlyCalendars')
HebrewCalendar #()
MonthsPerYearInvariantCalendar #()
BahaiCalendar #()
CopticCalendar #()
EthiopicCalendar #()
IndianCalendar #()
IslamicFatimidCalendar #()
PersianCalendar #()
RomanicCalendar #('secondsFromEpochUpToGregorianStart')
AbstractJulianCalendar #()
ImperialJulianCalendar #()
JulianCalendar #()
GregorianCalendar #()
SolarianCalendar #()
CalendarClock #('systemClock' 'calendar' 'secondsFromCalendarEpochUpToSystemClockEpoch' 'secondsFromGregorianEpochUpToSystemClockEpoch')
LocalTimeCalendarClock #()
UTCalendarClock #()
ChronosPrintable #()
CalendarPeriod #()
CalendarYearPart #('containingPeriod' 'monthOrdinal' 'isLeap')
CalendarDay #('dayOfMonthOrdinal' 'dayOfYearOrdinal' 'isLeapDayInMonth')
DynamicCalendarDay #()
StaticCalendarDay #()
MonthlyCalendar #('key' 'nameKey' 'isIntercalary' 'leapDayOrdinals' 'daysUpToMonthSinceStartOfYear')
DynamicMonthlyCalendar #('daysPerMonth')
StaticMonthlyCalendar #('prevInYear' 'nextInYear' 'days')
YearlyCalendar #('calendar' 'typeCode' 'intercalaryMonthCount' 'leapMonthOrdinals' 'leapDayOrdinals' 'daysPerYear' 'daysPerStandardYear' 'hasNoLeapDays')
DynamicYearlyCalendar #('monthSpecs' 'daysUpToMonthSinceStartOfYear')
StaticYearlyCalendar #('months' 'days')
Calendrical #()
TemporalCoordinate #()
CalendricalCoordinate #('calendar')
AnnualDate #()
CalendricalAnnualDate #()
DayOfYear #('dayOfYearOrdinal')
MonthOfYear #('monthKey' 'monthOrdinal' 'minDayOfYearOrdinal' 'maxDayOfYearOrdinal')
DayOfMonth #('dayOfMonthOrdinal')
WeekOfMonthDayOfWeek #('dayOfWeekOrdinal' 'minDayOfMonthCardinal' 'maxDayOfMonthCardinal' 'daysOffset')
ComputedAnnualDate #('daysOffset')
GregorianEaster #()
JulianEaster #()
YearMonthDay #('year' 'calendarDay')
Timepoint #('daysSinceEpoch' 'secondsSinceStartOfDay' 'nanosecondsSinceSecond' 'timeZone')
TimeOfDay #('hour' 'minute' 'second' 'nanosecondsSinceSecond')
Timeperiod #('start' 'duration')
ChronosPrintableDecorator #('delegate' 'defaultPolicy')
Durational #()
CalendarDuration #('years' 'months' 'days')
CivilDuration #('hours' 'minutes' 'seconds' 'nanosecondsSinceSecond')
ScientificDuration #('seconds' 'nanosecondsSinceSecond')
ChronosTimezone #()
BoundTimezone #()
BasicTimezone #('offsetFromUT' 'name' 'commonAbbreviation')
StandardTime #('key')
NonStandardTime #('stdTimeOffsetFromUT')
UniversalTime #()
ProxyTZ #()
AlwaysDefaultTZ #()
AlwaysSystemTZ #()
NominalTime #()
VariableOffsetTimezone #('namespaceKey' 'key' 'policy')
GeographicCoordinateSpec #('degreesOfLattitude' 'degreesOfLongitude')
LeapSecond #('prev' 'next' 'secondsDelta' 'preNetLeapSeconds' 'postNetLeapSeconds' 'daysSinceEpoch' 'secondsSinceStartOfDay' 'calendricalSecondsSinceEpoch' 'firstScientificSecondSinceEpoch' 'lastScientificSecondSinceEpoch' 'isRelativeToUT')
MonthlyCalendarSpec #('key' 'nameKey' 'daysPerMonth' 'occurrenceType' 'leapDayOrdinals')
SemanticDateObservanceRule #('yearBase' 'yearPeriod' 'expirationYear' 'dayOfWeekPolicy' 'dayOfMonthConstraints')
NetworkCorrespondent #('hostname' 'port')
RangeConstraint #('semanticKey' 'rangeViolationHandler' 'minValidValue' 'maxValidValue')
ZeroSensitiveRangeConstraint #('zeroInvalidException' 'zeroInvalidMessage')
NumberingPolicy #()
CardinalNumberingPolicy #()
OrdinalNumberingPolicy #()
ZerolessOrdinalNumberingPolicy #()
Registratable #('registrationKey')
ChronosLocale #('languageCode' 'countryCode' 'timeZoneLocalizationPolicy' 'temporalPrintPolicy')
ConfigurableChronosLocale #('delegate' 'standardCalendarRegistrationKey' 'semanticDatePolicyKey' 'notationalPolicies' 'characters' 'properNames' 'abbreviations' 'singularNouns' 'pluralNouns')
ChronosParser #('calendar' 'locale' 'defaultTimeZone' 'timeZoneSeparators' 'twoDigitYearBackwardBias' 'monthNameKeysByMonthName' 'monthNameKeysByMonthAbbreviation' 'minMonthNameSize' 'maxMonthNameSize' 'monthNumberInterpretationPolicy' 'dayOfWeekKeysByName' 'dayOfWeekKeysByAbbreviation' 'minDayOfWeekNameSize' 'maxDayOfWeekNameSize' 'meridianNames' 'meridianNameCharSet' 'minMeridianNameSize' 'maxMeridianNameSize')
ConfigurableChronosParser #('expectDayOfWeekName' 'dateSyntax' 'dateAndTimeSyntax')
ChronosPrintPolicy #()
ConfigurableChronosPrintPolicy #('effectiveLocaleKey' 'dayOfWeekPolicy' 'dateAndTimeOrder' 'datePolicy' 'yearPolicy' 'monthPolicy' 'yearMonthSep' 'monthDaySep' 'dayYearSep' 'yearPadChar' 'monthPadChar' 'dayOfMonthPadChar' 'eraPolicy' 'showEraName' 'standardCalendarRegistrationKey' 'showTimeOfDay' 'hour24' 'dateAndTimeSeparator' 'timeOfDayPrefix' 'hourMinuteSecondSeparator' 'hourPadChar' 'decimalPointChar' 'subSecondTimeMinPrecision' 'subSecondTimeMaxPrecision' 'timeZonePrintPolicy' 'timeZoneSeparator' 'timeZoneElementSeparator' 'showNamesOfDurationElements' 'showNamesOfCalendarDurationElements' 'suppressZeroValuedDurationElements' 'suppressZeroValuedCalendarDurationElements' 'durationElementSep' 'calendarDurationElementSep' 'durationDayHourSep' 'calendarDurationDayHourSep' 'durationPadChar' 'calendarDurationPadChar' 'subSecondDurationMaxPrecision')
ISO8601PrintPolicy #()
ExternalResource #()
TimeZoneLocalizationPolicy #('zoneMap' 'defaultTimeZoneKeysByStandardTimeOffsetFromUT' 'defaultTimeZoneKeysByCommonAbbreviation')
TimeZonePolicyFactory #('defaultName' 'geographicCoordinates' 'annualTransitionPolicies')
LeapSecondSchedule #('firstLeapSecond' 'lastLeapSecond' 'recentlyAccessedLeapSecond' 'map' 'daysSinceEpochOfFirstLeapSecond' 'daysSinceEpochOfLastLeapSecond' 'secondsSinceEpochOfFirstLeapSecond' 'calendricalSecondsSinceEpochOfLastLeapSecond' 'scientificSecondsSinceEpochOfLastLeapSecond')
SemanticDatePolicy #('effectiveYearCalendar' 'dayOfWeekSemanticKeys' 'semanticAnnualDates' 'semanticUniqueDates')
Timescale #('secondsSinceJulianDayEpochUpToEpoch' 'secondsSinceUnificationEpochUpToEpoch')
TerrestrialTimescale #()
UT1Timescale #()
UTCTimescale #()
ReversibleTransformer #()
SimpleDateTransformer #('calendarDelta')
StandardMagnitude #()
ChronosMagnitude #()
AnnuallyRecurringTZPolicyFactory #('offsetSecondsFromUT' 'stdTimeOffsetSecondsFromUT' 'commonAbbreviation')
IntraYearTimeZoneTransitionFactory #('relativity' 'transitionSecondsSinceStartOfDay')
UntilAnnualDateTimeZoneTransitionFactory #('annualDate')
UntilAnnualDayOfYearTimeZoneTransitionFactory #('transitionDayOfYear')
UntilEndOfYearTimeZoneTransitionFactory #()
TemporalRule #()
AnnuallyRecurringTZPolicy #('interYearPolicy' 'boundTZ' 'leftLink')
IntraYearTimeZoneTransition #('rightLink' 'relativity' 'transitionSecondsSinceStartOfDay')
UntilAnnualDateTimeZoneTransition #('annualDate')
UntilAnnualDayOfYearTimeZoneTransition #('transitionDayOfYear')
UntilEndOfYearTimeZoneTransition #()
EffectiveYearTemporalRule #('rightLink' 'effectiveYear')
AbstractSemanticAnnualDateRule #('key')
DerivedSemanticAnnualDateRule #('baseRule' 'derivationIsNominal' 'dateTransformer')
SemanticAnnualDateRule #('observanceRule' 'nominalAnnualDate')
TimeZonePolicy #('effectiveYearCalendar' 'effectiveYearRelativity' 'registrationKey' 'defaultName' 'geographicCoordinates' 'leftLink' 'annualPolicy' 'rootTZ')
AsymmetricTimeZonePolicy #('utEffectiveYear' 'utEffectiveDayOfYear' 'utEffectiveSecondsSinceStartOfDay')
Pathname #('components')
ResourcePath #('context' 'protocol' 'hostname' 'port' 'user' 'password' 'namespace' 'pathname' 'query' 'fragment')
TimeZoneAnnualTransitionPolicyFactory #('key' 'effectiveYear' 'effectiveYearCalendarKey' 'effectiveYearRelativity' 'isSymmetric' 'annuallyRecurringTransitions')
ResourceBroker #('context' 'baseDirectoryKey' 'factory' 'decodeSelector' 'encodeSelector' 'streamType' 'elementExtension')
ResourcePathContext #('defaultProtocol' 'facadesByProtocol' 'defaultHostNamesAndPortsByProtocol' 'defaultNamespacesByProtocol' 'pathMap' 'pathDescriptions' 'defaultUser' 'defaultPassword')
ChronosResourceRepositoryContext #('version' 'timestamp' 'resourcePathPrefix' 'timeZoneResourceBroker' 'tzLocalizationPolicyResourceBroker')
ResourcePathFacade #('resourcePathContext' 'rootDirectoryMetavalueString' 'defaultRootDirectoryString')
SqueakFilenamePathFacade #()
UrlPathFacade #()
SqueakUrlPathFacade #()
SqueakAbstractFileUrlFacade #()
SqueakFileUrlFacade #('platformFacade')
SqueakHttpUrlFacade #()
ResourceReference #('key')
ExternalResourceReference #('broker')
LocalResourceReference #('value')
More information about the Squeak-dev
mailing list
|