From: Glenn Vanderburg Date: 2003-11-20T08:14:27+09:00 Subject: Re: "stereotyping" --------------ms080503000103050800080209 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit James Weirich wrote: > > I now think what Sean [wants] is some way of "marking" > a class to indicate that in implements a particular protocol. and Greg McIntyre wrote: > > I think this is fascinating stuff! Have there been > any suggestions yet, even wild stabs at it? Other languages with similar object models have wrestled with these same issues, often long ago. Smalltalk, for example, was at one time extended with the notion of "explicit protocols". (I'm no expert on this, and what little I do remember is sketchy. So take the details here with a grain of salt. But please bear with me.) An explicit protocol was little more than a list of method selectors (what we would call signatures, I suppose). There was an easy way to check whether an object implemented a protocol, and that check was essentially a shorthand for looping through those selectors and calling "respond_to?" on all of them. A class could also declare that it implemented a protocol, but the point wasn't to *publish* anything; rather, the declaration just did the implementation check for you and issued a warning if you didn't pass. The idea was that this would make it easier for method writers to validate at an early stage that an object would meet the need, and signal an error early rather than later. Seems like a decent idea, and could be implemented easily in Ruby. Except for two things. First: the method name syntax in Smalltalk indicates clearly the number of parameters the method takes. That's not true in Ruby, so the mechanism in Ruby would either be less useful or more complicated. Second: explicit protocols never really caught on in Smalltalk, unless I'm mistaken. My point is: instead of continuing to go around and around about this, I wonder if we could persuade a long-time Smalltalker or two to write up something explaining the explicit protocol mechanism in Smalltalk more thoroughly and accurately than I have, plus an analysis of why it didn't catch on. If we're going to consider this road, we should certainly learn from the experience of those who've gone before us. Regards, Glenn Vanderburg --------------ms080503000103050800080209 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIII7TCC AtEwggI6oAMCAQICAwsUQTANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UE ChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNv bmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwHhcNMDMxMTA0MjIwODA3WhcNMDQxMTAzMjIwODA3 WjBEMR8wHQYDVQQDExZUaGF3dGUgRnJlZW1haWwgTWVtYmVyMSEwHwYJKoZIhvcNAQkBFhJn bHZAdmFuZGVyYnVyZy5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDzNfK 4t51kt9rgoJCtKHkOs7kIVavtufTWWH1mE4CqtwpX2vhlTNg3CsyzcMnTCX5N4UjB+tZWXmc rhDoLsMwGxfaUAKI1EcjxRezmt7dzCjKSTnyDUZlkFSl+Bu/ncN/VbkxzTIjNq115xRaUxhs 3/nO+zNRGtBgSc/wd2t3aSl/ro3FKVDkcUb0crB5OHBtH6XU2OLSXYhDxWcx0F0ctzFhEySh rntnQHTXXB1SJ55oTdB7rlVF2BcYVJQdxc9RJQRxaIQdPGkVlaqcThkjOd3SaJTqWSE0xYwA LRBXPDZAoxZTOBr/KFhBarfOp6ZrteS3Q0c0cctNm0EV909lAgMBAAGjLzAtMB0GA1UdEQQW MBSBEmdsdkB2YW5kZXJidXJnLm9yZzAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBAUAA4GB ACIJKWZsXM+vK1PIfVFv/ECz7AV/Z2HQQx+9q5ZulssgB+NCGxozEEjGOIPHAbdSanTKNqmG OeUKqmfgmz5BOwHVQs+NlDjLfj4ylhKUs/JjpQP3tqVDPvu6hGA5rAd0i/BVP3WDd3JX41DI MvfoDK0qN/TjiiaIJxUKAhElFb+LMIIC0TCCAjqgAwIBAgIDCxRBMA0GCSqGSIb3DQEBBAUA MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQu MSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wMzEx MDQyMjA4MDdaFw0wNDExMDMyMjA4MDdaMEQxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBN ZW1iZXIxITAfBgkqhkiG9w0BCQEWEmdsdkB2YW5kZXJidXJnLm9yZzCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAMPM18ri3nWS32uCgkK0oeQ6zuQhVq+259NZYfWYTgKq3Clf a+GVM2DcKzLNwydMJfk3hSMH61lZeZyuEOguwzAbF9pQAojURyPFF7Oa3t3MKMpJOfINRmWQ VKX4G7+dw39VuTHNMiM2rXXnFFpTGGzf+c77M1Ea0GBJz/B3a3dpKX+ujcUpUORxRvRysHk4 cG0fpdTY4tJdiEPFZzHQXRy3MWETJKGue2dAdNdcHVInnmhN0HuuVUXYFxhUlB3Fz1ElBHFo hB08aRWVqpxOGSM53dJolOpZITTFjAAtEFc8NkCjFlM4Gv8oWEFqt86npmu15LdDRzRxy02b QRX3T2UCAwEAAaMvMC0wHQYDVR0RBBYwFIESZ2x2QHZhbmRlcmJ1cmcub3JnMAwGA1UdEwEB /wQCMAAwDQYJKoZIhvcNAQEEBQADgYEAIgkpZmxcz68rU8h9UW/8QLPsBX9nYdBDH72rlm6W yyAH40IbGjMQSMY4g8cBt1JqdMo2qYY55QqqZ+CbPkE7AdVCz42UOMt+PjKWEpSz8mOlA/e2 pUM++7qEYDmsB3SL8FU/dYN3clfjUMgy9+gMrSo39OOKJognFQoCESUVv4swggM/MIICqKAD AgECAgENMA0GCSqGSIb3DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVy biBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5n MSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtU aGF3dGUgUGVyc29uYWwgRnJlZW1haWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZy ZWVtYWlsQHRoYXd0ZS5jb20wHhcNMDMwNzE3MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQsw CQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoG A1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAMSmPFVzVftOucqZWh5owHUEcJ3f6f+jHuy9zfVb8hp2vX8MOmHy v1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9xVsuvPAsH5/EfkTYkKhPPK9Xzgnc9A74r/rsY Pge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAeZBlyYLf7AgMBAAGjgZQwgZEwEgYDVR0T AQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLnRoYXd0ZS5jb20v VGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMCAQYwKQYDVR0RBCIwIKQe MBwxGjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEBBQUAA4GBAEiM0VCD 6gsuzA2jZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFhYsPZOhl+hLGZ GwDFGguCdJ4lUJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVNd+NWIXiC 3CEZNd4ksdMdRv9dX2VPMYIDOzCCAzcCAQEwaTBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMc VGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFs IEZyZWVtYWlsIElzc3VpbmcgQ0ECAwsUQTAJBgUrDgMCGgUAoIIBpzAYBgkqhkiG9w0BCQMx CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wMzExMTkyMzE0MDZaMCMGCSqGSIb3DQEJ BDEWBBRhBoP8RFPtZL3sku5eJNObO3DMeDBSBgkqhkiG9w0BCQ8xRTBDMAoGCCqGSIb3DQMH MA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIB KDB4BgkrBgEEAYI3EAQxazBpMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29u c3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwg SXNzdWluZyBDQQIDCxRBMHoGCyqGSIb3DQEJEAILMWugaTBiMQswCQYDVQQGEwJaQTElMCMG A1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECAwsUQTANBgkqhkiG9w0BAQEFAASCAQASJ3Js rQeeJ3+gO7erHo0VzFu5FfklgnvcGuuLcPWYx0dH53wLIn9RjDbG4kv5zZc3JJ2OUOEoEBRQ DQXZ7EdqfJasOK/Xi6+Ax3LZvy1KGdQsfBDKvAMMfsLOUFkIVAKX5lY8j2QC8omtpuNonBgS IpZ05qsv1T4Xk48mJnDJni0NFXaCxfuWbbTNGPTYsys8lNmGfDO2waIyjmWDZMRIhIndfQ1h +W1vmYo06h3SPka45089Ykaw6B+xifqCW5IHCsYJjyCmAX4EVLUurYXc75eppJwnZL0eIDE+ ovSP9yvVLowr4tR1nRBlolyJS2UHEE50Lg+2evZywdZDPl34AAAAAAAA --------------ms080503000103050800080209--