ááá±á·ááœáẠDropbox ááẠPython áá¯ááºááᯠá¡áá»áá¯ážá¡á á¬ážááááºážáá»á¯ááºáá¯á¶ááŸáá·áº áááºáááºááá·áº áá¬áá¬ááŒááºááá¯ááŸá¯á áááá¡ááá¯ááºážááᯠááá·áºá¡á¬áá¯á¶á áá¯ááºáá¬á á±ááẠáááºáááºáá¬ážáá«áááºá
Dropbox ááẠPython ááœááºá¡áá»á¬ážááŒá®ážáá±ážáááºá áááºážááẠback-end áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº desktop áááá¯ááºážááá·áºá¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠááŸá áºáá¯áá¯á¶ážááœáẠáá»áœááºá¯ááºááá¯á· á¡ááœááºá¡áá¯á¶ážáá»á¬ážáá±á¬ áá¬áá¬á áá¬ážáá áºáá¯ááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠGoá TypeScript ááŸáá·áº Rust á¡áá»á¬ážá¡ááŒá¬ážááᯠá¡áá¯á¶ážááŒá¯áá±á¬áºáááºáž Python ááẠáá»áœááºá¯ááºááá¯á·á á¡ááááá¬áá¬á áá¬ážááŒá áºáááºá áá»áœááºá¯ááºááá¯á·áá áá±ážááá¯ááá·áºááœááºážá ááºážá á¬ážáᬠáááºážáá±á«ááºážáá»á¬ážá áœá¬áá±á¬ Python áá¯ááºááá¯ááºážáá»á¬ážá¡ááŒá±á¬ááºážááᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬áá±ááŒáááºááŸá¬á ááá¯áá¯ááºá ááœááºáááºá áœá¬á á¬ááá¯ááºááŒááºážááẠáááá¯á¡ááºáá² áááºážááá¬ážáááºááŸá¯ááᯠááŸá¯ááºááœá±ážá á±ááŒá®áž áá¯ááºáá¬ážáá¯ááºáá¯ááºá áœááºážá¡á¬ážááᯠááŒááºážáááºá áœá¬ áááºáá±á¬ááºááŸá¯ááŸáá á±áá«áááºá á€ááŒá¿áá¬ááᯠáá»á±á¬á·áá«ážá á±áááºá áá»áœááºá¯ááºááá¯á·ááẠmypy ááá¯á¡áá¯á¶ážááŒá¯á áá»áœááºá¯ááºááá¯á·ááá¯ááºááᯠstatic type checking á¡ááŒá áºááá¯á· ááŒááºážááŒááºážáá»ááºáž ááŒá±á¬ááºážáá²áá¬ááŒáááºá áááºážááẠPython á¡ááœáẠáá±áááºážá¡á á¬ážáá¯á¶áž standalone á¡áá»áá¯ážá¡á á¬áž á á áºáá±ážááŒááºážá áá ẠááŒá áºááá¯ááºáááºá Mypy ááẠopen source ááá±á¬áá»ááºááŒá áºááŒá®áž áááºážá á¡ááá developer áá»á¬ážááẠDropbox ááœáẠá¡áá¯ááºáá¯ááºáá«áááºá
Dropbox ááẠá€á¡ááá¯ááºážá¡áá¬ááœáẠPython áá¯ááºááœáẠstatic type checking ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááá·áºááááá¯á¶ážáá¯áá¹ááá®áá»á¬ážáá²ááŸáá áºáá¯ááŒá áºáááºá Mypy ááᯠááá±á·áá±áẠááá±á¬áá»ááºáá±á«ááºáž áá±á¬ááºáá±á«ááºážáá»á¬ážá áœá¬ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá áá°ááá¯á·ááŒá±á¬ááá·áºá¡ááá¯ááºážá á€áááááá¬ááẠá¡ááŒáááºáá±á«ááºáž ááá±áááœááºááá¯ááºáá±á¬ á á áºááœá²ááœáẠá ááºážáááºáá²á·áááºá áá«ááá¯á· á¡áá¯áá±á¬ááºáá±áá²á·áá±áá¬ááᯠáá±á¬ááºááá¯á· á¡áá±ážááŒá®ážáá±á¬ááºáá¬ááŒá®á áááºážáá áºáá»áŸá±á¬ááºááœáẠáá¡á±á¬ááºááŒááºáá±á¬ áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áá¡á±á¬ááºááŒááºáá±á¬ á ááºážáááºááŸá¯áá»á¬áž áá»á¬ážá áœá¬ááŸááá²á·áááºá áá»áœááºá¯ááºááá¯áá±ááááá±á¬áá»ááºááá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áºáááºážááá»á±á¬ááºáá¯á¶ážááŒá®ážá¡á ááŸá¡á Python ááœááºáááºááŒáááºáá±á¬á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááááá¯ááºážááŒá±á¬ááºážááá¯áá±á¬áºááŒáááºá á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááŸáá·áºá¡áá»áá¯ážá¡á á¬ážá¡ááááºá¡ááŒáœááºáá±ážááŒááºážáá»á¬ážááẠPython ááœááºáá±ážáá±á¬ááá±ááœááºááá¯ááºáá±á¬ developer áá»á¬ážá¡ááœááºáá¯á¶ááŸááºáá±áá¬ááŒá áºáá¬áá±á¬á¡áá«ááœááºáá«ááŸááááºá á€ááá¹ááá¬ážáá»á¬ážááᯠIDE áá»á¬ážááŸáá·áº áá¯ááºááœá²ááŒááºážá áááºááŒá¬áá°áá»á¬ážáá²á·ááá¯á·áá±á¬ áááááá¬áá»á¬ážá áœá¬ááŒáá·áº áá¶á·ááá¯ážáá±ážáá¬ážáá«áááºá
â
á¡áááºááŒá±á¬áá·áº á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááẠááá¯á¡ááºááááºážá
á¡áááºá áááºááẠááá¯ááºážááá áºááŒáá·áºááá¯ááºáá¬ážáá±á¬ Python ááá¯á¡áá¯á¶ážááŒá¯áá°ážáá«áá áááŒá¬áá±ážáá®á static typing ááŸáá·áº mypy ááŸáá·áºáááºáááºááŒá®áž á¡áááºááŒá±á¬áá·áº ááá¯ááᯠááŸá¯ááºááŸááºáááºáá±ááááºážáá°ááá·áºá¡áá»ááºááᯠááá·áºááœáẠááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááŸáááá¯ááºáááºá ááá¯á·ááá¯áẠáááºážáááœááºáááºáá±á¬á á¬ááá¯ááºááŒááºážááŒá±á¬áá·áº Python ááᯠáááºá¡ááá¡áá»ááŸá áºáááºááŒá®áž ááŒá áºáá»ááºáá±ááá·áºá¡áá¬ááẠááá·áºááá¯á áááºáá»ááºá á±áá«áááºá static typing ááááºááá¯ážááá±á¬á·áá»ááºááŸá¬ ááŒá±ááŸááºážáá»ááºáá»á¬ážáá áá±ážááŒá áºáááº- ááá·áºááá±á¬áá»ááºááá¯ááŒá®ážáá±á static typing áá®ááá¯á· áááºááá¯ááá¯á¡á¬ážááá¯ážáá±ááŒá áºááŒá®áž áá±á¬ááºáá¯á¶ážááœááºá áááºá¡ááŸááºááááºááá¯á¡ááºáá±áá±ááŒá áºáááºá
á¡áá»áá¯á·áá±á¬ ááá±á¬áá»ááºáá áºáá¯ááẠááá¯ááºážáá±á«ááºáž áá±á¬ááºážááŸáá·áºáá»á®áá±á¬ á¡ááœááºá¡á á¬ážááá¯á· áá±á¬ááºááŸáááœá¬ážáááºááá¯áá«á áá¯á·á áááºážááœáẠáááá¯ááááºáá¬áá»á¬ážá áœá¬ áá¯ááºáá±á¬ááºáá±ááŒáááºááᯠááœá±á·ááŸáááááºá á¡áá¬ážáá° ááá±á¬áá»ááºááᯠááŒáá·áºáá«á áá»áœááºá¯ááºááá¯á·á á¡ááœá±á·á¡ááŒá¯á¶ááᯠá¡ááŒá±áá¶á áááºážá áá¯ááºááᯠáá¬ážáááºááŒááºážááẠáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážááᯠá áœááºážáá±á¬ááºáááºááŸáá á±ááá·áº áá±á¬á·áá»ááºááŒá áºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááŒá±á¬ááá¯ááºáá«áááºá á¡áá»áá¯ážá¡á á¬ážááŸááºá á¬áá»á¬ážááá«áá²á á¥ááá¬á¡á¬ážááŒáá·áºá áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááá¯á·áááºááá·áºá¡ááŒááºážá¡áá¯á¶áá»á¬ážáá±ážááá¯á·áááºá ááá¯á·ááá¯áẠáááºááá·áºáá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬áž ááŒááºáááá¯ááºáááºááᯠá¡ááŒá±ááŸá¬áááºáááºáá²ááá¯ááºáááºá á€áááºááŸá¬ á¡áá»áá¯ážá¡á á¬ážááŸááºá á¬áá»á¬ážááá¯á¶ážáá² á¡ááŒá±ááááºáá±á·ááŸáááá·áº áá¯á¶ááŸááºáá±ážááœááºážáá»á¬ážááŒá áºáááº-
- á€áá¯ááºáá±á¬ááºáá»ááºááᯠááŒááºáááá¯ááºáá«ááá¬ážá
None
? - á€á¡ááŒááºážá¡áá¯á¶ááẠá¡áááºáááºážá
items
? - Attribute á¡áá»áá¯ážá¡á
á¬ážááá¬áá²
id
:int
áá¯ááºáá¬áž,str
áá«ááŸááá¯áẠá áááºááŒáá¯áẠá¡áá»áá¯ážá¡á á¬áž ááŒá áºááá¯ááºááá¬ážá - á€á¡ááŒááºážá¡áá¯á¶ááẠá á¬áááºážáá áºáᯠááŒá áºááá·áºáá«ááá¬ážá á¡á²áá«ááᯠtuple ááŒááºááá¯á· ááŒá áºááá¯ááºááá¬ážá
á¡á±á¬ááºáá« á¡áá»áá¯ážá¡á á¬áž-ááŸááºá á¯ááŒá¯áá¬ážáá±á¬ áá¯ááºá¡ááá¯á¡ááœá¬ááᯠááŒáá·áºááŸá¯ááŒá®áž á¡áá¬ážáá°áá±ážááœááºážáá»á¬ážááᯠááŒá±ááẠááŒáá¯ážá á¬ážáá«áá á€á¡áá¬ááẠá¡ááá¯ážááŸááºážáá¯á¶ážá¡áá¯ááºááŒá áºáááº-
class Resource:
id: bytes
...
def read_metadata(self,
items: Sequence[str]) -> Dict[str, MetadataItem]:
...
read_metadata
áááŒááºáá°ážáNone
return type ááá¯ááºáá±á¬ááŒá±á¬áá·áºáOptional[âŠ]
.- á¡ááŒááºážááœá¬ážááŸá¯
items
ááá¯ááºážáá»á¬áž á á¡á á®á¡á á¥áºáá áºáá¯ááŒá áºáááºá áááºážááᯠáá»áááºážááŒááºáááááá¯ááºáá«á - áá¯ááºáááº
id
bytes á string áá áºáá¯ááŒá áºáááºá
á á¶ááŒááá¹áá¬áá áºáá¯ááœááºá á¡ááá¯áá«á¡áá±ážá áááºá¡áá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá·áºááœááºážáá¬ážáá±á¬á á¬ááœááºá á¬áááºáž (docstring) ááœáẠáá±á¬áºááŒáááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáááá«áááºá ááá¯á·áá±á¬áº á¡ááœá±á·á¡ááŒá¯á¶áá»á¬ážá áœá¬ááẠáááºá¡áá¯ááºáá¯ááºáááá·áºáá¯ááºááœáẠááá¯ááá¯á·áá±á¬á á¬ááœááºá á¬áááºážáá»á¬ážááᯠáááŒá¬áá áááááŒá¯ááááŒááºážáááŸáááá·áºá¡áá»ááºááᯠá¥ááá¬áá»á¬ážá áœá¬áá±ážáááºá ááá¯ááá¯á·áá±á¬á á¬ááœááºá á¬áááºážáá»á¬ážááẠáá¯ááºááœááºááŸááá±áá»áŸááºáááºá áááºážáá¡ááŒáœááºážáá²á·ááŸááºáááºááŸá¯ááᯠááá·áºááœááºážá ááºážá á¬ážááááá«á á€á á¬ááœááºá á¬áááºážááẠááá±áááœááºááá¯ááºáá±á¬á áááŸááºááá¯ááºáááᯠáá¬ážáááºááŸá¯ááœá²ááŸá¬ážááŒááºážá¡ááœáẠááœáá·áºáááºážááá¯ááºáááºá á¡ááœá²á·ááŒá®ážáá»á¬áž ááá¯á·ááá¯áẠááá±á¬áá»ááºááŒá®ážáá»á¬ážááœáẠá€ááŒá¿áá¬ááẠá¡ááœááºááŒááºážáááºáá¬ááá¯ááºáááºá
Python ááẠááá±á¬áá»ááºáá»á¬ážá á¡á á±á¬ááá¯ááºáž ááá¯á·ááá¯áẠá¡áááºá¡áááºá¡ááá·áºáá»á¬ážááœáẠáá°ážáá»áœááºáá±á¬áºáááºáž áá áºáá»áááºáá»áááºááœáẠá¡á±á¬ááºááŒááºáá±á¬ááá±á¬áá»ááºáá»á¬ážááŸáá·áº Python ááá¯á¡áá¯á¶ážááŒá¯ááá·áºáá¯áá¹ááá®áá»á¬ážááẠá¡áá±ážááŒá®ážáá±á¬áá±ážááœááºážááᯠáááºááá¯ááºáááá¯ááºáááº- "á¡áá¬áá¬ááᯠááááºážáá±á á¬ááá¯ááºáá¬ážáá±á¬ áá¬áá¬á áá¬ážááŒáá·áº ááŒááºáá±ážááá·áºááá¬áž"á
mypy áá²á·ááá¯á·áá±á¬ á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážá áá áºáá»á¬ážááẠáá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬á¡á¬áž á¡áá»áá¯ážá¡á á¬ážáá»á¬ážáá±á¬áºááŒáááºá¡ááœáẠááá¬ážáááºáá¬áá¬á áá¬ážááŒáá·áº áá¶á·ááá¯ážáá±ážááŒááºážááŒáá·áº á¡áááºáá±á¬áºááŒáá«ááŒá¿áá¬ááᯠááŒá±ááŸááºážáá±ážáᬠá¡ááá¯áá«á¡áá»áá¯ážá¡á á¬ážááŒá±áá¬áá»ááºáá»á¬ážááᯠá á áºáá±ážááŒááºážááŒáá·áº áááá¯ááááºá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŸáá·áº ááá¯ááºáá®ááẠ(áááºážááá¯á·áááŒá áºáááºááŸá¯ááᯠá á áºáá±ážááŒááºážááŒáá·áº ááœá±ážáá»ááºááá¯ááºáááº)á áá±áá°áá»á¡á¬ážááŒáá·áºá á€á áá áºáá»á¬ážááẠááá¯áá áá¯áẠá á áºáá±ážáá¬ážáá±á¬ á á¬ááœááºá á¬áááºážáá»á¬ážáá²á·ááá¯á· áá»áœááºá¯ááºááá¯á·á á áœáá·áºáá áºáá á¹á ááºážááœáẠáá¬ážááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááŒá±á¬ááá¯ááºáááºá
á¡ááá¯áá«á áá áºáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠá¡ááŒá¬ážá¡á¬ážáá¬áá»ááºáá»á¬ážááŸáááŒá®áž áááºážááá¯á·ááẠáá¯á¶ážáá¡áá±ážá¡ááœá²ááá¯ááºáá«-
- á¡áá»áá¯ážá¡á
á¬áž á
á
áºáá±ážááŒááºážá
áá
áºááẠáá±ážáááºáá±á¬ á¡ááŸá¬ážá¡ááœááºážá¡áá»áá¯á· (ááá¯á·ááŒáẠáá±ážáááºáááºááá¯ááº) ááᯠááááŸáááá¯ááºáááºá áá¬áá¬ááºá¥ááá¬áá
áºáá¯ááẠáááºááá¯ážáá
áºáá¯áá¯ááºáá±á¬ááºááẠáá±á·ááœá¬ážáá±á¬á¡áá«ááŒá
áºáááºá
None
ááá¯á·ááá¯áẠá¡ááŒá¬ážáá±á¬ á¡áá°ážá¡ááŒá±á¡áá±á¡áá»áá¯á·á - á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážá áá áºááẠáá¯ááºááŒá±á¬ááºážááẠááá¯á¡ááºáááºááŸáá·áºáááºáááºá áááŒá¬áá á¡ááœááºáááá»áá±á¬ááŒá±á¬áá·áº áá¯ááºááŒááºáááºááŒááºáááºááŒááºážááẠá¡ááœááºááá¯ážááŸááºážáá«áááºá áá áºáá»áááºáááºážááŸá¬áááºá á ááºážáááºááŸá¯áá»á¬ážááŸáá·áºá¡áá° 100% áá¯ááºááœáŸááºážááŒá¯á¶ááŸá¯á¡ááœáẠáá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºáá±ááẠáááá¯á¡ááºáá«á áááºááá·áºááá á¹á ááœááºáááᯠá¡áá»á¬ážá¡á¬ážááŒáá·áº áááŒá áºááá¯ááºáá«á ááŒá¿áá¬áá¡ááŒá±á¬ááºážáááºážááá¯ááŸá¬ááœá±ááẠstack trace áá¡ááááºá¡áááºááá¯ááá·áºááœááºážáááºáááá¯á¡ááºáá«á
- ááŒá®ážáá¬ážáá±á¬ááá±á¬áá»ááºáá»á¬ážááœááºáááºá mypy ááẠá áá¹ááá·áºá¡áááºážáááºá¡ááœááºáž á¡áá»áá¯ážá¡á á¬ážá¡ááŒáá·áºá¡á á¯á¶á á áºáá±ážááŒááºážááᯠááŒá¯áá¯ááºááá¯ááºáááºá á á¬áá±ážááœá²áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº á áá¹ááá·áºáááºááááºáž ááá¯á·ááá¯áẠáááá áºáá»á¬ážááẠááŒá¬áááºáááºá á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááá·áºá áá áºááẠáááá¯ááááºáá¬á¡á¬áž áá»ááºáá»ááºážáá¯á¶á·ááŒááºáá»ááºáá±ážáᬠáá°á·á¡áá¯ááºááᯠááá¯ááá¯ááŒááºáááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá áá¯ááºá ááºážáááºááŸá¯ááááºáá»á¬áž ááá¯ááá¯ááŒááºáááºá á±áááºá¡ááœáẠá¡á á áºá¡ááŸááºá¡áá¬áá»á¬ážááᯠááŸá±á¬ááºááŒá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áá¬áá±ážááŸá¯áá»á¬ážááŒáá·áº á¡á á¬ážááá¯ážááá·áº áá°áá áºá á áºáá±ážááŸá¯áá»á¬ážááᯠááááºážááááºážááẠáá»áá¯ážááœááºááŒá®áž áááºáá²ááŒááºážáááºážá áœá¬ áá±ážáá¬ážááẠáááá¯á¡ááºáá±á¬á·áá«á
PyCharm ááá¯á·ááá¯áẠVisual Studio Code áá²á·ááá¯á·áá±á¬ IDE áá»á¬ážááŸáá·áº áááºážááŒááºáá°áá»á¬ážááẠáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážá¡á¬áž áá¯ááºááŒáá·áºá áœááºááŸá¯á á¡ááŸá¬ážá¡áá¬ážáá±ážáá±á¬áºááŒááŸá¯ááŸáá·áº á¡áá¯á¶ážáá»á¬ážáá±á¬ áá¬áá¬á áá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯áá±ážáááºá¡ááœáẠá¡áá»áá¯ážá¡á á¬ážááŸááºá á¬áá»á¬ážá á áœááºážá¡á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá áááºážááá¯á·ááẠá á¬ááá¯ááºááŒááºážá á¡áá»áá¯ážáá»á±ážáá°ážá¡áá»áá¯á·áá¬ááŒá áºáááºá á¡áá»áá¯á·áá±á¬ áááá¯ááááºáá¬áá»á¬ážá¡ááœááºá á€á¡áá¬á¡á¬ážáá¯á¶ážááẠá á¬ááá¯ááºááŒááºážá¡ááœáẠá¡áááá¡ááŒááºážá¡áá¯á¶ááŒá áºáááºá áá«á á¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®ážáá¬áá²á· áá»ááºáá»ááºážá¡áá»áá¯ážááŸááá²á·á¡áá¬áá«á á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠá€á¡áá¯á¶ážááŒá¯ááŸá¯ááá á¹á ááẠmypy áá²á·ááá¯á· áá®ážááŒá¬ážá¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážá áá áºáááá¯á¡ááºáá±á¬áºáááºáž mypy ááẠá¡áá»áá¯ážá¡á á¬ážááŸááºá á¬áá»á¬ážááᯠáá¯ááºááŸáá·áºááá¯ááºáá®ááŸá¯ááŸáá á±ááẠáá°áá®áá±ážááŒá±á¬ááºáž áááááŒá¯ááá·áºáááºá
mypy áá±á¬ááºáá¶
áá»áœááºáá±á¬áº Dropbox ááá¯ááá«áááºááẠááŸá áºá¡áááºážáááºá¡ááá¯á UKá Cambridge ááŸá¬ mypy áá²á·áááá¯ááºážá á áááºáá²á·áá«áááºá áá»áœááºá¯ááºááẠáá»áœááºá¯ááºá áá«ááá° áá¯áá±ááá áá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áºá ááááºážáá±á á¬ááá¯ááºááŒááºážááŸáá·áº áááºááŒáœáá±á¬áá¬áá¬á áá¬ážáá»á¬áž áá±á«ááºážá ááºážááŒááºážááœáẠáá«áááºáá²á·áá«áááºá Jeremy Siek ááŸáá·áº Walid Taha ááá¯á·á ááá¯ážááŒáá·áºá á¬ááá¯ááºááŒááºážááá¯ááºáᬠáá±á¬ááºážáá«ážáá áºáá¯ááºááŸáá·áº Typed Racket ááá±á¬áá»ááºá០áá»áœááºá¯ááºá¡á¬áž ááŸá¯á¶á·áá±á¬áºáá±ážáá²á·áááºá á¡áá»áá¯ážáá»áá¯ážáá±á¬ ááá±á¬áá»ááºáá»á¬ážá¡ááœáẠáá°áá®áá±á¬ áááá¯ááááºáá¬áá¬á áá¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠáááºážáááºážáá»á¬áž ááŸá¬ááœá±áá²á·ááẠ- áá±ážáááºáá±á¬ script áá»á¬ážá០ááá¯ááºážáá±á«ááºáž áááºážáá±á«ááºážáá»á¬ážá áœá¬áá«áááºáá±á¬ áá¯ááºá¡ááŒá±áá¶áá»á¬ážá¡ááá áá áºáá»áááºáááºážááŸá¬áááºá áááºááá·áºá¡ááá¯ááºážá¡áá¬áááá±á¬áá»ááºááœááºáááᯠááŒá®ážáá¬ážáá±á¬á¡áá±ážá¡áá°áá¯ááºá áá¬áááá¯ááŒá±á¬ááºáž áá±áá»á¬á á±ááá¯áá«áááºá á€á¡áá¬á¡á¬ážáá¯á¶ážá á¡áá±ážááŒá®ážáá±á¬ á¡á áááºá¡ááá¯ááºážáá áºáá¯ááŸá¬ áá¯á¶áá°ááá±á¬áºááá±ážáá±á¬ ááŸá±á·ááŒá±ážáá¯á¶á á¶ááá±á¬áá»ááºá០áá»ááºáá»ááºááŒáá·áºááŒáá·áº á ááºážáááºááŒá®áž áááºááŒáááºá áœá¬ ááá¯ááºááŸáááºáá¬ážáá±á¬ áá¯ááºáá»á±á¬áá áºáá¯ááá¯á· ááŒááºážááŒááºážáá»ááºážááŒá±á¬ááºážááẠá áááºáá°ážááŒá áºáááºá ááá±á·áá±ááºááœáẠá¡ááá¯áá« á¡áá°á¡ááá»á¬ážááᯠá¡áá±ážá¡ááẠááá¬ážáá² 2010 ááœáẠáááºááŒáœá áœá¬ á á°ážá ááºážááŸá¬ááœá±áá±áá²ááŒá áºáá±á¬ ááŒá¿áá¬áá áºáá¯ááŒá áºáá²á·áááºá
á¡áá»áá¯ážá¡á
á¬ážá
á
áºáá±ážááŒááºážááœáẠáá»áœááºá¯ááºááá°áááºážá¡áá¯ááºááŸá¬ Python ááᯠáááºááœááºááŒááºážááá¯ááºáá«á á¡á²áá®á¡á
á¬áž "á¡áááºáá¯ááº" áá¬áá¬á
áá¬ážáá±ážááᯠáá¯á¶ážáá²á·áááºá
def Fib(n as Int) as Int
if n <= 1
return n
else
return Fib(n - 1) + Fib(n - 2)
end
end
ááá¯ážááŸááºážáá±á¬ áááááºáá¬áá¬á áá¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠáááá¹áá¶áá¯áá±ááááœáẠá¡áá¯á¶ážááŒá¯áá±á·ááŸááá±á¬ áááºážáááºážáá áºáá¯ááŒá áºáááºá áááºážááẠááá·áºá¡á¬áž á ááºážáááºááŸá¯áá»á¬ážááᯠáá»ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºá á±áá±á¬ááŒá±á¬áá·áº á¡áááºážáá¯á¶ážááŒá áºááŒá®áž áá±á·áá¬ááŸá¯ááŸáá·áº ááááºááá¯ááºáá±á¬á¡áá¬áá»á¬ážááᯠá¡ááœááºááá° áá»á áºáá»á°ááŸá¯áá¬ážááá¯ááºáá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá ááá¹áá¬áá±á«áºááŸá áááá¯ááááºážáááºážáá¬áá¬á áá¬ážáá»á¬ážááẠááŸá¯ááºááœá±ážáá±á¬á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááŸáá·áºá¡áá° ááŒá®ážáá¬ážáá±á¬ááŒá áºá ááºáá»á¬ážááŒá áºáá±á·ááŸáááŒá®áž áááºážááẠáááºááœá±á·á ááºážáááºááŸá¯ááᯠááŸá±ážááœá±ážá á±áááºá ááá¯á·áá¬ááœááºá ááá¯ážááŸááºážáá±á¬áá¬áá¬á áá¬ážááá¯á¡ááŒá±áá¶ááá·áº áááºááá·áºááááºáááᯠá€ááááºáá»á¬ážááá¯áááŸááááºá¡ááœáẠáá¯áá±áá®ááẠáá¬áá¬á áá¬ážáá»á¬ážáááºááœá±á·á¡áá¯á¶ážááŒá¯ááŸá¯á¡ááœáẠá¡áá±ážááŒá®ážáá±á¬á¡áá»ááºáá»á¬ážááᯠá áá±ážááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áº á¡áááºážáááºáá¶ááááŒá áºááœááºááŸááááºá
Alore á¡ááœáẠáá»áœááºá¯ááºá type checker ááẠá¡ááœááºá¡áá¬ážá¡áá¬áá±á¬ááºážáá¯á¶áá±á«ááºáá±á¬áºáááºáž Alore ááŒáá·áº áá±ážáá¬ážáá¬ážááŒááºážááá¯ááºáá±á¬ áá¯ááºá¡á á áºá¡ááŸááºááᯠá ááºážáááºááŒááºážááŒáá·áº áááºážááᯠá ááºážáááºááŒáá·áºááá¯áá«áááºá áá¶áá±á¬ááºážá áœá¬áá²á Alore áá¬áá¬á áá¬ážááẠPython áá²á·ááá¯á· áá°áá®áá±á¬ á¡áá°á¡ááá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶áá¬ážáááºá Python á syntax ááŸáá·áº semantics áá»á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºááá¯ááºá á±ááẠá á¬ááá¯ááºchecker ááᯠááŒááºáááºáááºáá®ážááẠáá¯á¶áá±á¬ááºáá«áááºá áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž open source Python áá¯ááºááœáẠá á¬ááá¯ááºá á áºáá±ážááẠááŒáá¯ážáááºážááá¯ááºá á±áá²á·áááºá ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááẠAlore ááœááºáá±ážáá¬ážáá±á¬áá¯ááºááᯠPython áá¯ááºááá¯á·ááŒá±á¬ááºážááẠtranspiler áá áºáá¯áá±ážáá²á·ááŒá®áž áá»áœááºá¯ááºá á á¬ááá¯ááºá á áºáá±ážáá°áá¯ááºááᯠáá¬áá¬ááŒááºááẠáááºážááá¯á¡áá¯á¶ážááŒá¯áá²á·áááºá ááᯠáá»áœááºá¯ááºááœáẠPython á á¡ááá¯ááºážááœá²áá áºáá¯ááᯠáá¶á·ááá¯ážáá±ážáá±á¬ Python ááœáẠáá±ážáá¬ážáá±á¬ á¡áá»áá¯ážá¡á á¬áž á á áºáá±ážááŒááºážá áá áºáá áºáᯠááŸááá«áááºá ááá¯áá¬áá¬á áá¬ážáá áºáá»áá¯ážáá»áá¯ážááŸááááºá (Alore á¡ááœáẠá¡áááá¹áá«ááºááŸáá á±áá±á¬ á¡áá»áá¯á·áá±á¬ áááá¯áá¬ááá¯ááºáᬠáá¯á¶ážááŒááºáá»ááºáá»á¬ážááẠPython á¡ááœáẠáá¶á·áá»ááºážááŒá®áž áááºážááẠmypy codebase á á¡á áááºá¡ááá¯ááºážáá»á¬ážááœáẠáááá¬áá±áá±ážáááºá)
ááááºáá±á¬á·á áá»áœááºá¯ááºá á¡áá»áá¯ážá¡á á¬ážá áá áºá០áá¶á·ááá¯ážáá±ážáá¬ážáá±á¬ áá¬áá¬á áá¬ážááᯠá€á¡áá»áááºááœáẠPython áá¯áá±á«áºááœááºááá¯ááºáááº- Python 3 á¡áá»áá¯ážá¡á á¬áž ááŸááºáá»ááºá¡áá¬ážá¡ááá¯á ááá·áºáááºáá»ááºá¡áá»áá¯á·ááŒá±á¬áá·áº Python á áá°ááœá²áá áºáá¯ááŒá áºáááºá
Java ááŸáá·áº Python ááá¯á·á áá±á¬ááŸá±á¬áá¯á¶ááááº-
int fib(int n):
if n <= 1:
return n
else:
return fib(n - 1) + fib(n - 2)
ááá¯á¡áá»áááºááœáẠáá»áœááºá¯ááºá á¡ááŒá¶á¥á¬ááºáá»á¬ážáá²á០áá áºáá¯ááẠဠPython ááᯠC ááá¯á· á á¯á ááºážááŒááºážááŒáá·áº á áœááºážáá±á¬ááºááẠááŒáŸáá·áºáááºááẠá¡áá»áá¯ážá¡á á¬áž ááŸááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááá¯áẠJVM bytecode ááŒá áºááá¯ááºáááºá áá»áœááºáá±á¬áº compiler prototype ááá¯áá±ážááá¯á· á¡ááá·áºááá¯áá±á¬ááºáá±áá«ááŒá®á áá«áá±ááá·áº type checking ááá¯ááºááá¯ááºá áá±á¬áºáá±á¬áºá¡áá¯á¶ážáááºáá¯á¶áá±á«ááºáá¬ááŒá±á¬áá·áº áá®á áááºáá°ážááᯠá áœáá·áºááœáŸááºááá¯ááºáááºá
Santa Clara ááŸá PyCon 2013 ááœáẠáá»áœááºá¯ááºá ááá±á¬áá»ááºááᯠáááºáááºááá¯ááºáá«áááºá áá®á¡ááŒá±á¬ááºážááᯠáá áºáááºáá¯á¶áž á á±ááá¬áá±á¬ááºážáá²á· Python á¡á¬áá¬ááŸáẠGuido van Rossum áá²á·áááºáž ááœá±ážááœá±ážáá²á·áá«áááºá áá»áœááºá¯ááºáááá¯ááºááá¯áẠsyntax ááá¯áá»ááŒá®áž á ᶠPython 3 syntax ááŒáá·áº á áœá²á áœá²ááŒá²ááŒá² á áœá²ááá¯ááºáá¬ážáááºá Python 3 ááẠfunction annotations áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºáá¥ááá¬ááᯠá¡á±á¬ááºááœááºááŒáá¬ážááá·áºá¡ááá¯ááºáž ááŒááºáááºáá±ážáá¬ážááá¯ááºááŒá®áž áá¯á¶ááŸáẠPython áááá¯ááááºááᯠáááŸáá á±áááº-
def fib(n: int) -> int:
if n <= 1:
return n
else:
return fib(n - 1) + fib(n - 2)
á¡áá±ážá¡áá°á¡áá»áá¯á·áá¯ááºáá²á·áááẠ(áááá¡áá»ááºá¡áá±ááŒáá·áºá á€á¡áá»ááºááŒá±á¬áá·áº áá»áœááºá¯ááºáááá¯ááºááá¯áẠsyntax ááᯠáá®ááœááºáá²á·ááŒá±á¬ááºáž áááááŒá¯á á±ááá¯áá«áááº)á á¡áá°ážáááŒáá·áºá ááá¯á¡áá»áááºá áá¬áá¬á áá¬ážá áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááŒá áºáá±á¬ Python 3.3 ááẠááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááŸááºáá»ááºáá»á¬ážááᯠááá¶á·ááá¯ážáá«á ááá¯ááá¯á·áá±á¬ ááŸááºá á¯áá»á¬áž á syntactic design á¡ááœáẠááŒá áºááá¯ááºááŒá± á¡áá»áá¯ážáá»áá¯ážááᯠá¡á®ážáá±ážááºááŒáá·áº Guido ááŸáá·áº ááœá±ážááœá±ážáá²á·áááºá ááááºážááŸááºáá»á¬ážá¡ááœáẠá¡áá»áá¯ážá¡á á¬ážááŸááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá áááºážááẠáááºááœááºáá¬ážááá·áº áááºááœááºáá»ááºááᯠááŒáá·áºáááºážáá±ážáá±á¬áºáááºáž á¡áááºážáááºáááºáá²ááẠ(Python 3.6 ááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááá¯áá±á¬ááºážáá±á¬ syntax áá áºáá¯áá±ážáááº)á
products = [] # type: List[str] # Eww
Type ááŸááºáá»ááºáá»á¬áž ááẠá¡áá»áá¯ážá¡á á¬ážááŸááºáá»ááºáá»á¬ážá¡ááœáẠbuilt-in áá¶á·ááá¯ážááŸá¯áááŸááá±á¬ Python 2 ááá¯áá¶á·ááá¯ážáááºá¡ááœááºáááºáž á¡áááºááŒá±áá«áááºá
f fib(n):
# type: (int) -> int
if n <= 1:
return n
else:
return fib(n - 1) + fib(n - 2)
ဠ(ááŸáá·áº á¡ááŒá¬áž) á¡áá±ážá¡áá°áá»á¬áž ááẠá¡ááŸááºáááẠá¡áá±ážáááŒá®ážááŒá±á¬ááºáž ááœááºáá±á«áºáá¬áá²á·ááẠ- static typing á á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááẠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠááŒá®ážááŒáá·áºá á¯á¶ááŸá¯áááºážáá±á¬ syntax ááᯠáááŒá¬áá® áá±á·ááœá¬ážáááºáᯠááá¯ááá¯áá«áááºá á¡áá»áá¯ážá¡á á¬áž-á á áºáá¬ážáá±á¬ Python áá¯ááºááœáẠá¡áá°áž syntactic constructs áá»á¬ážááᯠá¡áá¯á¶ážáááŒá¯áá±á¬ááŒá±á¬áá·áºá ááŸáááŒá®ážáá¬áž Python áááááá¬áá»á¬ážááŸáá·áº áá¯ááºáá¯ááºáá±á¬ááºááŒááºážáá¯ááºáááºážá ááºáá»á¬ážááẠáá¯á¶ááŸááºá¡ááá¯ááºáž áááºáááºáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ááŒá±á¬áá·áº developer áá»á¬ážá¡ááœáẠtool á¡áá áºááᯠáá±á·áá¬ááẠááá¯ááá¯ááœááºáá°á á±áááºá
Guido ááẠáá»áœááºá¯ááºáááœá²á·ááœááºá á¬áááºážááᯠááŒá®ážáá¯á¶ážááŒá®ážáá±á¬áẠDropbox ááœáẠáá«áááºááẠááœá²áá±á¬ááºáá²á·áááºá á€áááºááŸá¬ mypy áá¬ááºáááºážá á áááºáááºá á¬ážá áá¬á¡áá±á¬ááºážáá¯á¶ážá¡ááá¯ááºážááᯠá áááºááá·áºáá±áá¬ááŒá áºáááºá
áááºáááºâŠ
áá»á áºáááºááá«áá±á¬á á¬áááºáá°áá»á¬áž! á¡áááºá áááºááẠPython ááá¯á¡áá¯á¶ážááŒá¯áá«áá á€áá¬áá¬á áá¬ážááŒáá·áº áááºáá¯ááºáá±á¬ááºááá·áº ááá±á¬áá»ááºáá»á¬ážá á¡ááá¯ááºážá¡áá¬ááᯠááŒá±á¬ááŒáá«á
source: www.habr.com