{"id":285,"date":"2020-01-20T17:34:28","date_gmt":"2020-01-20T16:34:28","guid":{"rendered":"http:\/\/bertilow.com\/bertiloblogo\/?p=285"},"modified":"2020-06-30T08:47:57","modified_gmt":"2020-06-30T07:47:57","slug":"de-perlo-al-pitono","status":"publish","type":"post","link":"https:\/\/bertilow.com\/bertiloblogo\/?p=285","title":{"rendered":"De Perlo al Pitono"},"content":{"rendered":"\n<p>\u0108i tiu afi\u015do temas pri mia laboro pri la <a rel=\"noreferrer noopener\" aria-label=\"Tekstaro de Esperanto (malfermi\u011das en nova langeto)\" href=\"https:\/\/tekstaro.com\" target=\"_blank\">Tekstaro de Esperanto<\/a>. \u011ci tamen rilatas anka\u016d al <a rel=\"noreferrer noopener\" aria-label=\"PMEG (malfermi\u011das en nova langeto)\" href=\"https:\/\/bertilow.com\/pmeg\/\" target=\"_blank\">PMEG<\/a>, \u0109ar la Tekstaron mi ne nur prizorgas, sed anka\u016d mem uzadas. \u011ci fakte estas unu el miaj plej gravaj helpiloj, kiam mi laboras pri PMEG. La afi\u015do anka\u016d temas pri Pitono, sed ne pri la serpentospeco (atentu la majusklon en \u201cPitono\u201d). \u011ci temas pri la programado lingvo Pitono.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>La unua programado lingvo, kiun mi lernis, estas Perlo. Mi eklernis Perlon iam en la 1990-aj jaroj, proksimume tiam, kiam mi ekverkis PMEG-on. Perlo estas elstare kapabla lingvo, precipe kiam temas pri traktado de tekstoj: \u015dan\u011dado de teksto, priser\u0109ado de teksto kaj similaj taskoj. Perlo anka\u016d havas, ekde la jaro 2000, tre bonan subtenon de <a rel=\"noreferrer noopener\" aria-label=\"Unikodo (malfermi\u011das en nova langeto)\" href=\"https:\/\/bertilow.com\/html\/signokodoj\/signokodoj.html#Unikodo\" target=\"_blank\">Unikodo<\/a>. Tial, kiam mi kreis la ser\u0109ilon de la Tekstaro en 2002, mi elektis uzi Perlon por la plej gravaj funkcioj de la Tekstaro. La tekstoj en la Tekstaro estas plejparte en Esperanto, sed aperas anka\u016d ie kaj tie vortoj kaj signoj el plej diversaj lingvoj (e\u0109 en la \u0108ina), kaj por tiaj tekstoj oni ne povas uzi ion alian ol Unikodo. Por la bazaj HTML-aj pa\u011doj, kiujn la uzantoj vidas en la Tekstaro, mi tamen uzas la lingvon PHP, kiu estas iom pli simpla kaj facila, kiam temas pri retpa\u011doj. PHP havas tamen tre malbonan subtenon de Unikodo, kion mi forte beda\u016dras.<\/p>\n\n\n\n<p>En 2002, kiam mi eklaboris pri la Tekstaro, la lingvo Pitono (\u201cPython\u201d) estis forta rivalo de Perlo, sed \u011di tiam apena\u016d subtenis Unikodon, almena\u016d ne tiom, ke \u011di povus esti uzebla por miaj celoj. Mi jam tiam interesi\u011dis pri tiu lingvo, sed \u011di tute ne estis matura por tiaj taskoj, kiujn mi bezonis fari per \u011di. En 2008 oni lan\u0109is tute novan version de Pitono, sub la nomo Pitono 3. Tiu nova versio ekuzis Unikodon kiel sian \u0109efan signokodon, kio estis tre bona nova\u0135o. Mi jam tiam pripensis eklerni Pitonon 3, sed mi rapide konstatatis, ke Pitono 3 estas tro fre\u015da. Multaj aldonaj moduloj, kiuj estas nemalhaveblaj, kiam oni efektive volas fari ion per la lingvo, ankora\u016d ne estis adaptitaj al Pitono 3, kaj plej multaj programistoj ankora\u016d longe restis \u0109e la malnova speco de Pitono. Mi do devis forlasi mian lernadon de Pitono, kaj mi plu uzadis Perlon por la Tekstaro kaj por multaj aliaj tekstoprilaboraj taskoj dum jaroj.<\/p>\n\n\n\n<p>Sed la mondo evoluis. Perlo iom post iom, fakte sufi\u0109e rapide, perdis sian popularecon. En 2000 oni komencis labori pri tute nova versio de Perlo, nomata Perlo 6, sed tiu laboro ankora\u016d da\u016dras, kaj Perlo 6 ankora\u016d en 2020 (sub la nova nomo \u201cRaku\u201d) ne estas matura por vera ekuzo. \u011ci e\u0109 al mi \u015dajnas esti plene fiaskinta projekto. La anta\u016da versio, Perlo 5, estas plu tute uzebla, sed apena\u016d iu ajn elektas uzi tiun lingvon en novaj projektoj. Krome Perlo 5 \u015dajnas hodia\u016d eksdata kaj malmoderna en multaj manieroj. \u011cia maniero uzi objekte orientitan kodon estas tre stranga kaj maloportuna. \u011cia maniero uzi referencojn \u0109e variabloj estas vera malhelpa\u0135o. Mi ankora\u016d hodia\u016d post preska\u016d 30 jaroj da perlumado \u0109iufoje stumblas, kiam mi devas fari ion per referencoj, kaj devas rekontroli en manlibro a\u016d per Guglo, kiel fari tion, kaj ofte bezonas reverki la saman kodpecon plurfoje, anta\u016d ol \u011di funkcias.<\/p>\n\n\n\n<p>Dume Pitono forte populari\u011dis. \u011ci hodia\u016d ne plu estas ia kurioza rivaleto de Perlo, sed unu el la plej gravaj programadaj lingvoj en la mondo. Krome \u011di estas ege pli racie kaj bonorde strukturita ol Perlo. Lastatempe mi komencis senti, ke estas tempo reprovi lerni Pitonon, precipe \u0109ar mi iom ektimis, ke Perlo vere mortos, kaj ne plu estos evoluigata. Do, anta\u016d kelkaj semajnoj mi decidis ekagi. Mi havigis al mi lernolibron pri Pitono, kaj komencis eksperimenti. Montri\u011dis, ke la lernolibron mi apena\u016d bezonas. La rimedoj en la Interreto estas pli utilaj. Krome mi lernas plej bone per konkreta uzado, kaj jam post kelkaj tagoj mi komencis provi reverki la \u0109efan ser\u0109oprogramon de la Tekstaro per Pitono.<\/p>\n\n\n\n<p>Tiu eksperimento montri\u011dis ekstreme utila. Mi devis trairi la Perlo-kodon de la malnova ser\u0109oprogramo, kiun mi verkis anta\u016d multaj jaroj, por povi rekrei la samajn funkciojn per Pitono. Mi devis pripensi \u0109e \u0109iu linio, kion la sufi\u0109e kompleksa kodo efektive faras. Tiam mi trovis plurajn lokojn, kiuj ne estas optimume koditaj, kaj e\u0109 plurajn spurojn de kodo, kiu faris nenion ajn, a\u016d e\u0109 malhelpis ion. Mi korektis tiujn fu\u015dojn, kaj kompreneble faris la samon pli \u011duste en la nova Pitona versio. Post kelkaj tagoj la nova programo estis sufi\u0109e kompleta por ke mi povu \u011din efektive testi farante priser\u0109ojn de la tekstoj de la Tekstaro, kontrolante, \u0109u la Pitona versio redonas la samajn ser\u0109orezultojn kiel la Perla versio. Kompreneble estis diferencoj, kaj mi devis eltrovi, kio misiras. Tiam mi trovis ne nur erarojn a\u016d mankojn en la nova Pitona kodo, sed anka\u016d erarojn kaj mankojn en la Perla versio, kaj aldone e\u0109 tre subtilajn mankojn kaj fu\u015dojn en la Tekstaraj tekstoj. Temas pri malglata\u0135oj, kiujn mi eble neniam trovus, se mi ne farus la Pitonan eksperimenton. Jam duonvoje tra la eksperimento mi povis konstati, ke e\u0109 se en la fino mi forlasos la Pitonan version de la programo, la eksperimento tamen estas tute inda kaj utilega.<\/p>\n\n\n\n<p>Mi dume anka\u016d ekhavis kelkajn ideojn pri efektivaj plibonigoj kaj kompletigoj. Interalie mi \u0135us aldonis pli racian traktadon de eraroj en ser\u0109esprimoj. La ser\u0109ado en la Tekstaro okazas per t.n. \u201cregulesprimoj\u201d, kiuj estas kompleksa sistemo de \u0135okeraj koda\u0135oj kaj aliaj helpiloj por esprimi kompleksan ser\u0109adon de teksto. Eblas tamen krei ser\u0109esprimojn, kiuj nenion povas trovi, \u0109ar ili estas erare strukturitaj. Anta\u016de la ser\u0109ilo simple kolapsis senklarige, kiam oni donis al \u011di ion tian. Nun (ekde hodia\u016d!) \u011di bonorde raportas la problemon al la uzanto, kiu povas korekti sian ser\u0109esprimon kaj reprovi.<\/p>\n\n\n\n<p>\u0108iuokaze \u015dajnas al mi, ke la eksperimento plene sukcesis. Certe mi devos ankora\u016d multon testi, kaj mi esperas, ke la uzantoj de la Tekstaro helpos min raportante eventualajn problemojn. Sed hodia\u016d mi kura\u011dis lan\u0109i la Pitonan ser\u0109oprogramon kiel la\u016dvole elekteblan alternativon apud la malnova ser\u0109oprogramo. Kiam mi testis \u011din en mia propra komputilo, \u011di plej ofte estis iomete pli rapida ol la Perla versio, sed ja nur mar\u011dene. Plej grave por mi estas, ke la programa kodo estas pli bone strukturita kaj pli facile komprenebla, kio ebligas al mi evoluigi \u011din pli facile. Temas do pri sekurigado de la estonteco de la Tekstaro.<\/p>\n\n\n\n<p>Pri unu mar\u011dena detalo montri\u011dis, ke Pitono kondutas en maniero neoptimuma por la Tekstaro. Tio longe mistifikis min, kaj mi e\u0109 pensis, ke estas grava difekto en Pitono mem. Temas pri ser\u0109ado de ne-Esperantaj literoj, kio feli\u0109e estas ne tre esenca afero por la Tekstaro. Kiam mi uzis la specialan ser\u0109osimbolon \u201c\\NE\u201d (por \u201cne-Esperanta litero\u201d), kaj elektis uzi ser\u0109adon sen atento al la diferenco inter minuskloj kaj majuskloj, la nova ser\u0109oprogramo elsputis tute sensencajn rezultojn. \u011ci subite konsideris la literojn \u201ci\u201d kaj \u201cs\u201d kiel ne-Esperantajn, kvankam la kodo, kiun mi donis al la ser\u0109ilo, klare diris ion tute alian! Mi longe rompis al mi la kapon provante kompreni, kio misiras. Mi provis diversajn manierojn traduki la kodon \u201c\\NE\u201d al efektiva regulesprimo, sed \u0109iufoje la afero fiaskis mizere, kiam mi ne elektis \u201cAtenti usklecon\u201d. Post multe de guglado kaj cerbumado mi finfine eltrovis, kio okazas. Temas pri la fama \u201cturka problemo\u201d. Jes, turka! Oni nomas \u011din tiel, \u0109ar temas precipe pri la litero \u201c\u0131\u201d &#8211; t.e. \u201ci\u201d sen punkto. La turka uzas du specojn de \u201ci\u201d, unu kun punkto, kies majuskla formo estas \u201c\u0130\u201d (same kun punkto), kaj alian sen punkto, \u201c\u0131\u201d, kies majuskla formo estas \u201cI\u201d (sen punkto, kompreneble). Tre racie. Fakte la \u201ci\u201d-oj de aliaj lingvoj estas tute mallogikaj: la minuskla formo havas punkton, dum la majuskla formo ne havas punkton. Sed kiel tio rilatas al priser\u0109ado de la Tekstaro? Montri\u011dis, ke en ser\u0109ado sen atento de uskleco, \u0109iuj tiuj kvar \u201ci\u201d-oj egali\u011das. Ne estas tiam diferenco inter \u201c\u0131\u201d kaj \u201cI\u201d, nek inter \u201ci\u201d kaj \u201c\u0130\u201d, nek inter \u201c\u0131\u201d kaj \u201ci\u201d, nek inter \u201cI\u201d kaj \u201c\u0130\u201d. Kaj sekve, kiam la ser\u0109ilo en ser\u0109ado de ne-Esperantaj literoj vidas la literon \u201ci\u201d, \u011di vidas en \u011di anka\u016d la literon \u201c\u0131\u201c, kiu estas unu el la literoj ser\u0109ataj per la kodo \u201c\\NE\u201d. Simile okazas pri la litero \u201cs\u201d, kiu en sen-uskleca ser\u0109ado egalas al la litero \u201c\u017f\u201d, kiu estas ar\u0125aika formo de \u201cs\u201d kun propra kodnumero en Unikodo. \u201c\u017f\u201d ja estas speco de \u201cs\u201d, precipe en sen-uskleca ser\u0109ado, kaj tial anka\u016d \u0109iuj \u201cs\u201d-oj aperas en ser\u0109orezultoj, kiam oni uzas \u201c\\NE\u201d. Ial Perlo vidas tion tute alie, kaj donas ser\u0109orezultojn, kiuj konvenas por la Tekstaro, anka\u016d sen elekto de \u201cAtenti usklecon\u201d. Mi unue opiniis, ke Pitono agas erare, sed post cerbumado mi devis koncedi, ke ne estas eraro, sed simple alia logiko, kredeble tute oportuna en multaj okazoj. Kaj la aliro de Perlo kredeble estas en multaj okazoj simile nedezirata.<\/p>\n\n\n\n<p>Kion do fari? Ne ekzistas maniero igi Pitonon uzi la logikon de Perlo pri tiaj aferoj. Finfine mi elektis devigi uzon de \u201cAtenti usklecon\u201d \u0109iufoje, kiam \u201c\\NE\u201d aperas en ser\u0109esprimo. \u0108iuokaze tiu koda\u0135o estas akcesora\u0135o malgrava en la Tekstara ser\u0109ilo. Kredeble malmultaj uzas \u011din, kaj kiam ili iafoje ja uzas \u011din, ili devas simple ser\u0109i kun atento de uskleco. (Mi scias, ke oni apena\u016d uzas \u011din, \u0109ar dum longa tempo \u011di tute ne funkciis pro programeraro, kaj tiam neniu rimarkis la problemon, a\u016d almena\u016d neniu raportis \u011din al mi.)<\/p>\n\n\n\n<p>Tamen, se oni rekte enskribas la turkan literon \u201c\u0131\u201d (a\u016d \u201c\u0130\u201d), kaj elektas sen-usklecan ser\u0109on,  oni ja ricevas nekonvenan rezulton kun trafoj de \u201ci\u201d kaj \u201cI\u201d uzante la novan Pitonan ser\u0109ilon. Mi dume allasas tion, \u0109ar kredeble apena\u016d iu ajn faras tiajn ser\u0109ojn. Pri la ar\u0125aika litero \u201c\u017f\u201d mi tute ne faras al mi zorgojn. \u011ci \u0109iuokaze ne aperas en la tekstoj de la Tekstaro, dum \u201c\u0131\u201d ja \u0109eestas, e\u0109 70 fojojn (a\u016d 65.529 fojojn, se kredi Pitonon).<\/p>\n\n\n\n<p>Se ne aperos gravaj nesolveblaj problemoj, mi intencas pluiri iom post iom anstata\u016digante la aliajn Perlajn partojn de la Tekstara sistemo, esperante, ke Pitono efektive povas fari \u0109ion, kion mi jam faras per Perlo. Poste mi esperas anstata\u016digi anka\u016d PHP-on per Pitono. Tio devas esti sufi\u0109e facila afero.<\/p>\n\n\n\n<p>\u0108u do \u0109io estas perfekta pri Pitono? Ne, tute ne. \u0108iu programada lingvo havas kaj bonajn, kaj malbonajn flankojn. Multajn \u011denas la uzo de spacosignoj en Pitono, sed tio ne estas problemo por mi. Mi \u0109iam trovis tion bonega eco de Pitono. La kodo estas pli klara kaj pli facile legebla sen amasoj da kurbaj krampoj kaj punktokomoj \u0109ie. Sed estas problemoj pri la dokumentado de Pitono. Pro la ekzisto de du specoj de Pitono, Pitono 2 kaj Pitono 3, kiuj estas tre similaj, sed ne interkongruaj, oni facile konfuzi\u011das, kiam oni ser\u0109as klarigojn pri io. Mi volas uzi nur la novan version 3, sed \u0109iufoje, kiam mi ser\u0109as klarigojn, mi devas pene forkribri \u0109ion, kio temas pri Pitono 2. Ofte oni miksas klarigojn pri amba\u016d specoj en la sama teksto. Kaj e\u0109 estas \u0109iam granda risko, ke oni senintence uzas Pitonon 2 anstata\u016d 3. En Linukso (Ubuntu) versio 2 ankora\u016d estas la defa\u016dlta, kaj oni devas aparte atenti por uzi version 3. Tiel estas, kvankam ekde la 1-a de Januaro 2020 Pitono 2 estas oficiale finita projekto. Oni ne plu evoluigos \u011din. Espereble iom post iom tiu problemo malplii\u011dos. Krome iuj moduloj estas tre malbone dokumentitaj. Mi ekz. uzas la modulon \u201clibxml2\u201d por trakti XML-on. \u011ci apena\u016d havas uzeblan dokumentaron. \u011cenerale oni rekomendas alian modulon, \u201clxml\u201d, por tiaj taskoj. \u011ci kredeble estas bona, sed al \u011di mankas unu grava eblo, kiu estas absolute esenca por la tekstaro. Montri\u011dis, ke nur \u201clibxml2\u201d bone ta\u016dgas. Sed mi devis multon mem diveni por povi uzi \u011din. Anka\u016d uzo de WSGI (ne petu min klarigi, kio tio estas; mi nur diru, ke estas io simila al CGI) estas tre \u0125aose (kaj iafoje mal\u011duste) klarigita. Mi devis multe eksperimenti por funkciigi tion. Nu, anka\u016d pri Perlo iafoje okazis simile.<\/p>\n\n\n\n<p>Se vi sukcesis legi \u011dis \u0109i tie, vi kredeble mem estas programisto. Espereble vi trovis ion interesan en mia rakonto. Al \u0109iuj aliaj mi povas nur gratuli pro via pacienco. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0108i tiu afi\u015do temas pri mia laboro pri la Tekstaro de Esperanto. \u011ci tamen rilatas anka\u016d al PMEG, \u0109ar la Tekstaron mi ne nur prizorgas, sed anka\u016d mem uzadas. \u011ci fakte estas unu el miaj plej gravaj helpiloj, kiam mi laboras pri PMEG. La afi\u015do anka\u016d temas pri Pitono, sed ne pri la serpentospeco (atentu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=\/wp\/v2\/posts\/285"}],"collection":[{"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=285"}],"version-history":[{"count":30,"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=\/wp\/v2\/posts\/285\/revisions"}],"predecessor-version":[{"id":338,"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=\/wp\/v2\/posts\/285\/revisions\/338"}],"wp:attachment":[{"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bertilow.com\/bertiloblogo\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}