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