Via ad typechecking 4 decies centena lineae Pythonis codicis. Pars I

Animadvertimus tuam tertiam partem translationis materialium circa viam quam Dropbox sumpsit cum exsequens rationem typum reprimendi in codice Pythonis.

Via ad typechecking 4 decies centena lineae Pythonis codicis. Pars I

→ partes anteriores ; primus и secundus

Ad IV decies lineae ex codice typed

Alia maior provocatio (et secunda cura communissima inter eos qui interne lustrati sunt) augebatur moles codici obductis typis in Dropbox. Plures aditus ad solvendum hoc problema conati sumus, ex natura augente magnitudinem codebasi impressi, ut verteretur conatus bigae mypylae in static et dynamica illatione generis automated. In fine, videbatur simile non fuisse simplex consilium conciliandi, sed celeri incremento consequi potuimus in codice annotati multae accessus componendo.

Quam ob rem maximum repositum Python (cum backend code) habet fere 4 decies centena milia linearum in codice annotato. Opus in typing codice statice circiter tribus annis perfectum est. Mypy nunc varias species e codice coverage tradit quae faciliorem ad progressionem typing monitoris praebeant. Praesertim relationes in codice generare possumus cum ambiguitatibus in speciebus, ut exempli gratia, expresso usu typo Any in annotationibus, quae verificari non possunt, vel cum rebus quasi importandis bibliothecarum tertiarum partium quae annotationes typus non habent. Cum partem propositi ad accurationem typorum in Dropbox retentando emendare studuimus, ad definitiones typus (lima stipularum sic dictarum) emendandas contulit ad nonnullas bibliothecas populares apertas fontem in repositorio centrali Pythonis typesed.

Nos novas lineamenta systematis systematis insequentibus (et normatis in PEPs subsequentibus) implevimus, quae accuratiores figuras ad aliqua exemplaria Pythonis specificas permittunt. Insigne exemplum hoc est TypeDictquae typos praebet JSON dictionariis sicut clavium chordarum statutum habentes, cum valore sui generis. Nos ad systematis genus augendum pergimus. Proximus noster gradus erit verisimile ad meliorandum subsidium pro facultatibus Pythonis numeralibus.

Via ad typechecking 4 decies centena lineae Pythonis codicis. Pars I
Numerus versuum annotatae in codice: server

Via ad typechecking 4 decies centena lineae Pythonis codicis. Pars I
Numerus versuum annotatae in codice: client

Via ad typechecking 4 decies centena lineae Pythonis codicis. Pars I
Numerus linearum annotatae codice

Hic est inspectio praecipuarum rerum quae ad augendam quantitatem codicis annotati in Dropbox:

rigore ANNOTATIONES. Paulatim exigentias auximus pro rigore novi codicis annotati. Nos cum apicibus linteis incepimus, quae annotationes ad fasciculos addere suggesserunt, qui iam nonnullas adnotationes habebant. Nunc postulamus ut typus annotationes in novis Pythonis fasciculis et in scriniis maxime exstantibus.

Typing refert. Partes septimanales mittimus relationes in ordine typionum in codice suo et consilium de quo primum annotandum est.

Pervulgatio mypy. Mypy certe loquimur et loqui ad iunctos adiuvandos ut incipias cum annotationibus generis.

Pollui. Usorem periodicum perlustrat ad cognoscendas difficultates maioris momenti. Parati sumus longius ire in solvendis his quaestionibus (etiam novam condere linguam ad mypy accelerandum!).

euismod. Mypy usum daemonis et mypyci adhibendo magnopere emendavimus. Hoc factum est, ut incommoditates quae per annotationem processum oriuntur, levia sint, et ut cum magna codicis copia laborare possint.

Integration with edd. Instrumenta aedificavimus ad mypyium currentem in editoribus popularibus in Dropbox. Haec PyCharm, Vim et VS Codex includit. Hoc valde simplicior processum in codice annotati atque in eius officiando inhibito. Haec genera actionum communia sunt cum codice exsistenti annotato.

Analysis statice. Instrumentum nobis creavimus ad signaturas functiones colligendas utentes instrumenta analyseos stabilis. Hoc instrumentum nonnisi in simplicibus adiunctis relative operari potest, sed adiuvit nos sine magno labore coverage typus codicem nostrum augere.

Firmamentum est tertium librariorum partium. Multi inceptis nostris instrumentis SQLAlchemy toolkit utuntur. Commodum est facultatibus dynamicis Pythonis quae PEP 484 typi directe effingere nequeunt. Nos, secundum PEP 561, tabulam stipulam respondentem creavimus et plugin scripsimus pro mypy (aperta principium) , qui SQLAlchemy auxilio melioris.

Difficultates non offendit

Semita ad 4 decies centena milia lineae codicis impressi non semper nobis facilis fuit. In hac via multa salebras invenimus et varia errata fecimus. Hae sunt nonnullae difficultates, quas invenimus. Speramus nos de illis narrantes similes quaestiones adiuvaturos alios vitaturos.

Desunt files. Opus nostrum incepimus annotando tantum parva copia imaginum. Quidquid his fasciculis non comprehenditur, non coercitum est. Tabulae ad indicem adiectae sunt cum in eis primae adnotationes apparuerunt. Si aliquid e modulo extra recognitionem ambitum positum est, tum de operandis valoribus similibus loquebamus Anyquae minime experta sunt. Inde ad notabilem iacturam typingarum accurate, praesertim in primis migrationis gradibus. Hic accessus mirum in modum bene laboravit, quamvis situs typicus est qui additis fasciculis ad scopum recognitionis difficultates in aliis partibus in codicebase manifestat. Pessime in casu, cum duae partes codicis separatim coaluerunt, in quibus, independenter ab invicem, typi iam sedati sunt, evenit ut rationes harum regionum inter se repugnant. Inde ad necessitatem multae annotationes mutandae sunt. Respiciens nunc, animadvertimus nos modulos bibliothecae nuclei ad mypy's typo reprimendi area citius addidisse. Hoc opus nostrum multo praevidere posset.

codicem vetus Annotantem. Cum coepimus, circiter quattuor milionum versuum Pythonis codicem exsistendi habuimus. Apparebat hoc codicem omnia annotare haud facile. Instrumentum vocavimus PyAnnotate creavimus qui notitias typus colligere potest cum probationes currunt et addere possunt annotationes typus in codice tuo secundum informationes collectas. Sed peculiariter pervulgatum hoc instrumentum adoptionis non animadvertimus. Genus informationis colligens tarda erat et automatice annotationes generatae saepe multas emendationes manuales requirebant. Cogitavimus de hoc instrumento ipso currendo, quotiescumque codicem recensemus, vel informationes typos colligendas innixas quasdam parvas petitiones retis retis examinare, sed non decrevimus quia vel accessus nimis periculosus erat.

Quam ob rem notari potest codicem potissimum a suis dominis manualiter annotatum esse. Ut hunc processum in rectum dirigant, relationes paramus modorum ac munerum peculiarium momenti quae annotandae sunt. Exempli gratia, magni momenti est pro modulo bibliothecae rationem annotationes praebere, quae in centenis locis adhibetur. Sed vetus religio, quae nova substituitur, iam non est tanti momenti annotare. Experimur etiam nos cum analysi statice utendo ad genera annotationes ad generandum codicem legatum.

Cyclic importat. Antea locutus sum de importationibus cyclicis (de "tangulis dependentiae"), cuius existentiam difficilem effecit ad mypyam accelerandam. Etiam laborare debemus ut mypy sustentatio omnium generum idiomatis, quae ex his importationibus cyclicis causantur. Nuper peractum est nobis maius consilium redesignum quod maxime fixum est quaestiones mypy circa importationes circulares. Hae difficultates ortae sunt a primis diebus propositi, ab Alore, lingua educativa quam mypy consilium primum intendit. Alore syntaxin facilem facit problemata solvenda cum mandatis cyclicis importatis. Mypy moderna aliquas limitationes ab antecedentibus, simplicibus exsequendis (quae Alore magna erat apta). Python in rotundis operando difficiles importat, maxime quia ambiguae locutiones sunt. Verbi gratia, operatio assignationis alias speciem definire potest actu. Mypy haec talia deprehendere non semper potest donec maxime fascia importati processit. Nullae tantae ambiguitates in Alore erant. Pauperes decisiones in primis progressui systematis temporibus iniucundam admirationi programmatori multis annis post exhibere possunt.

Proventus: semita ad 5 decies centena millia linearum Codicis et fines novos

Mypy project longissima via venit - a primis prototypis ad systema quod 4 decies centena genera generandi codicem moderatur. Ut mypy evolvitur, Pythonis genus innuit de mensuris. Haec dies, potens ecosystematis circum typing Pythonis codicem evolvit. Bibliothecae subsidii locum habet, instrumenta auxiliaria pro IDEs et editoribus continet, plures systemata ditionis speciei habet, quarum unaquaeque suum pros et cons habet.

Etsi genus reprimendi iam est Dropbox datum, credo tamen nos in primis diebus typingis Pythonis codicem esse. Puto genus iniecta technologiae evolvere et emendare pergere.

Si genus reprimendi in amplitudine Pythonis propositi tui non prius adhibitum est, tunc scito nunc tempus optimum esse ad typing static movere. Locutus sum cum his qui similem transitum fecerunt. Nemo eorum paenitebat. Typus iniecta facit linguam Python multo aptiorem ad magna incepta enucleandam quam "Python regularis."

Carissimi legentibus! Uteris generis reprehendo in tuis Pythonis inceptis?

Via ad typechecking 4 decies centena lineae Pythonis codicis. Pars I
Via ad typechecking 4 decies centena lineae Pythonis codicis. Pars I

Source: www.habr.com

Add a comment