{"id":39,"date":"2007-01-23T19:33:16","date_gmt":"2007-01-23T18:33:16","guid":{"rendered":"http:\/\/blog.esperantilo.org\/?p=39"},"modified":"2009-12-07T23:00:31","modified_gmt":"2009-12-07T22:00:31","slug":"perfekta-programa-lingvo-por-komputila-lingvistiko","status":"publish","type":"post","link":"http:\/\/blog.esperantilo.org\/?p=39","title":{"rendered":"Perfekta programa lingvo por komputila lingvistiko"},"content":{"rendered":"<p>La nombro de programaj lingvoj estas tre granda (pli ol 1000), kaj \u0109iun jaron novaj programaj lingvoj ekestas. Oni povas diri pri evoluo de programaj lingvoj, \u0109ar la ideoj kaj konceptoj de programado estas heredigitaj de unu lingvo al alia. La evoluo ofte progresas en multajn diferencajn direktojn, sed kelkaj lingvoj denove unuigas konceptojn de aliaj maljunaj lingvoj. Do anka\u016d en la kampo de programaj lingvoj ni havas la babilan turon. (<a href=\"http:\/\/en.wikipedia.org\/wiki\/History_of_programming_languages\">Wikipedia: history of programming languages<\/a>)<\/p>\n<p>La unuopaj programaj lingvoj mem evoluas kaj estas ofte plivastigataj kaj influataj de evoluo de aliaj lingvoj. Programistoj tre vigle kaj volonte diskutas pri la perfekta kaj la plej utila programa lingvo.<\/p>\n<p>La ka\u016dzoj por diferenceco de programaj lingvoj estas diferencaj ol tiuj de naturaj lingvoj. La novaj programaj lingvoj ekestas pro teknika a\u016d scienca evoluo a\u016d komercaj interesoj de firmaoj. \u0108iu nova programlingvo promesas pli bonan uzadon de tekniko, pli grandan efikecon, pli grandan uzeblecon a\u016d ta\u016dgecon por iu tasko,  kaj pli vastan subtenon de diferencaj komputilaj sistemoj. Multaj malgrandaj sciencaj programlingvoj ekestas kiel eksperimento a\u016d nur pro kreemo de sciencistoj.<\/p>\n<p>Mi mem lernis \u011dis nun pli ol 20 programajn lingvojn kaj uzis pli longan tempon \u0109irka\u016d 12 lingvojn. Miaj plej gravaj programaj lingvoj ordigitaj la\u016d tempo de lerno estis:<\/p>\n<ol>\n<li>Basic &#8211; C-64<\/li>\n<li>Assembler &#8211; C-64<\/li>\n<li>C &#8211; Amiga 500<\/li>\n<li>C++ &#8211; Amiga 500<\/li>\n<li>Modula 2 &#8211; (dum studado)<\/li>\n<li>Java<\/li>\n<li>Tcl<\/li>\n<li>Perl<\/li>\n<li>XOTcl<\/li>\n<li>Smalltalk<\/li>\n<li>C#<\/li>\n<li>JavaScript<\/li>\n<\/ol>\n<p>Mi pristudis anka\u016d: Ruby, PHP, Python, Haskell, Lisp, Polog, Oz (ver\u015dajne anka\u016d kelkaj aliaj). Aktuale mi programas plej intense en lingvoj: Java, XOTcl, C#.<\/p>\n<p>La plej popularaj programaj lingvoj estas lingvoj kun plej multnombra programaro kaj plej granda nombro de programistoj. Aktuale tiuj lingvoj estas: C, Java, C#, Perl, Python, Visual Basic, PHP,  JavaScript, Ruby kaj maljuna Cobol. Vidu anka\u016d <a href=\"http:\/\/www.tiobe.com\/tpci.htm\">Statistiko pri populareco de programlingvoj<\/a> Tiuj indeksoj kutime pritraktas kelkajn indicojn por komputi la popularecon. Lingvo, kiu i\u011dis plej rapide populara, estis en la jaro 2006 la lingvo <a href=\"http:\/\/eo.wikipedia.org\/wiki\/Ruby_%28komputillingvo%29\">Ruby<\/a>. Programistoj do lernas tiujn lingvojn por pli facile trovi la laboron. Oni povas trovi pli da informoj pri tiu lingvo.<\/p>\n<p>Oni povas diferenci kelkajn kategoriojn kaj trajtojn de programaj lingvoj.<\/p>\n<ul>\n<li>kutima arto de problemoj, kiujn pritraktas la lingvo<\/li>\n<li>baza koncepto de lingvo: funkcioj, objektoj, &#8230;<\/li>\n<li>testado de sintakso (tipoj)<\/li>\n<li>arto de kurado<\/li>\n<li>baza permesilo de lingvo<\/li>\n<li>lingvoj por cetera mastruma sistemo.<\/li>\n<li>komunikebloj kun aliaj programoj a\u016d sistemoj<\/li>\n<li>reuzado de alilingvaj programoj<\/li>\n<li>lingvoj por cetera homgrupo: lernantoj, matematiksitoj, hobiuloj<\/li>\n<\/ul>\n<p>Programistoj scias, ke principe per \u0109iu lingvo kun potenco de <a href=\"http:\/\/eo.wikipedia.org\/wiki\/Ma%C5%9Dino_de_Turing\">Turing-ma\u015dino<\/a> estas eble programi \u0109iujn algoritmojn. Mia sperto estas, ke oni uzu por \u0109iu takso la plej avanta\u011dan lingvon. Estas bone koni kelkajn programajn lingvojn kaj ne preferi \u011denerale unu ceteran lingvon. Ofte oni povas reuzi spertojn de programistoj en unu lingvo por programi sistemon en la alia lingvo. Oni devas pripensi ne nur la nunan situacion, sed anka\u016d aliaj \u0109irkunstancojn.<\/p>\n<ul>\n<li>Kiuj aliaj programistoj devas flegi la programon<\/li>\n<li>Kun kiuj aliaj sistemoj devas komuniki la programo<\/li>\n<\/ul>\n<p>En profesia laboro la elekto de programa lingvo ne estas tasko de programisto kaj ofte tio estas historia elekto.<br \/>\nLernado de nova programa lingvo estas peniga laboro, sed kun \u0109iu aldona lingvo, kiun oni regas, la lernado estas pli facila. Programistojn ofte bezonas kelkajn jarojn por bone regi iun programan lingvon. Grava estas anka\u016d la regado de programaj iloj kaj de programa medio. Oni bezonas anka\u016d spertojn pri kutimaj solvoj kaj insidojn de tiu programa lingvo. Tial  programistoj forte kontra\u016das la aliajn lingvojn ofte nur por tute egocentraj kialoj, kiuj estas la sekurigo la valoro de ilia sperto<\/p>\n<h3>Elekto de programlingvo<\/h3>\n<p>Mi pensas, ke plej ofte tiu elekto estas tute hazarda kaj dependas de lernejo kaj laborejo de programisto. Se oni havas la \u015dancon mem elekti la lingvon oni pritaksu:<\/p>\n<ul>\n<li>Popularecon de lingvo (aktuala kaj historia)\n<ul>\n<li>Nombro de libroj pri tiu lingvo<\/li>\n<li>Nombro de uzantoj. Vigleco de komunumo de programistoj<\/li>\n<li>Historio kaj deveno de programa lingvo<\/li>\n<\/ul>\n<\/li>\n<li>Ekzisto de programa medio kaj aldonaj programaj iloj por tiu lingvo<\/li>\n<li>Nombro de ekzemplaj programoj en tiu lingvo<\/li>\n<li>Kategorio de programoj programitaj en tiu lingvo<\/li>\n<li>Aldonaj ebloj de lingvo (GUI, Ligiloj kun dato-bazo, XML)<\/li>\n<li>Permesilo kaj komerca a\u016d libera uzado de baza fonto de programa lingvo<\/li>\n<\/ul>\n<h3>Programa Lingvo por Komputila Lingvistiko<\/h3>\n<p>Lingvistika programado estas tre vasta kampo, kaj ne estas facile diri, kiu programa lingvo estas la plej avanta\u011da por tio. Oni devas diferenci inter sciencaj esploraj programoj a\u016d sistemoj programitaj por avera\u011da uzanto. Ofte lingvistika programaro estas parto de aliaj grandaj sistemoj (ekzemple: tekstaj redaktiloj) kaj devas subordigi sin al ruloj de gasta sistemo.<\/p>\n<p>Por lingvistika programaro grava estas facila reuzado. Tial multaj lingvistikaj sistemoj estas programitaj en Javo, kiu nuntempe havas grandan rolon en komerca programado. La \u0109efa avanta\u011do de tiu programlingvo estas granda populareco en pluraj kampoj. Sed anka\u016d ekzistas grandaj lingvistikaj programoj programitaj per skriptaj lingvoj kiel: Python (<a href=\"http:\/\/nltk.sourceforge.net\/\">NLTK<\/a>), Perl kaj Tcl (<a href=\"http:\/\/www.ellogon.org\/\">Ellogon<\/a>).<\/p>\n<p>Mi spertis, ke sekvaj trajtoj estas gravaj por komputila lingvistika:<\/p>\n<ul>\n<li>subteno de UTF-8 kaj aliaj historiaj enkodoj<\/li>\n<li>programado de grafika uzantointerfaco<\/li>\n<li>facila kaj utila prilaboro de signo\u0109enoj<\/li>\n<li>por prilaboro de tekstoj estas tre praktikaj regulaj esprimoj<\/li>\n<li>prilaboro de XML-dokumentoj<\/li>\n<li>interfaco al SQL-datumbazoj<\/li>\n<li>bona interkomuniko kun aliaj programoj<\/li>\n<li>bona programa medio<\/li>\n<li>facila instalado kaj pretigo de instaladaj paketoj<\/li>\n<\/ul>\n<p>Kelkajn lingvistikaj sistemoj, kiuj bazas sur limiglogika programado a\u016d predikatkalkulo, uzas specialajn programlingvojn kiel Prolog a\u016d <a href=\"http:\/\/www.mozart-oz.org\/\">Oz<\/a>. Tiuj sistemoj estis plejofte kreitaj en universitataj medioj.Mi mem spertis, ke la plej avanta\u011daj estas dinamikaj skriptlingvoj, kiuj estas anka\u016d nuntempe ta\u016dgaj por grandaj sistemoj. Nun la plej popularaj kaj rekomendindaj estas lingvoj: Python kaj Ruby. Frue la programistoj ofte diskutis pri esprimpovo de lingvo a\u016d sintakso. Mi \u015datas lingvoj, en kiuj oni povas per mallongaj esperimoj programi potencajn reuzeblajn strukturojn. Tiuj lingvoj estas: Smalltalk, Ruby, Python a\u016d XOTcl.<\/p>\n<p>Jen ekzempla kodo, kiu donas la lastaj 2 literon de vorto por diferencaj programaj lingvoj.<\/p>\n<ul>\n<li>Java &#8211; <code>vorto.substring(vorto.length()-2)<\/code><\/li>\n<li>C# &#8211; <code>vorto.Substring(vorto.Length-2)<\/code><\/li>\n<li>Python &#8211; <code>vorto[-2:]<\/code><\/li>\n<li>Tcl &#8211; <code>string range $vorto end-2 end<\/code><\/li>\n<li>Smalltalk &#8211; <code>vorto last: 2<\/code><\/li>\n<li>Ruby &#8211; <code>vorto[-2,2]<\/code><\/li>\n<li>C &#8211; <code>if (strlen(vorto)>2) vorto += strlen(vorto)-2;<\/code><\/li>\n<li>C++ &#8211; <code>new String(vorto,vorto.lenght()-2,2)<\/code><\/li>\n<\/ul>\n<p>Por C kaj C++ tiu takso estas e\u0109 pli komplika, \u0109ar oni devas anka\u016d pripensi la uzadon de memoro. Oni bone vidas, ke tiu simpla tasko estas en Smalltalk kaj en skriptaj lingvo la plej klara kaj mallonga.Lingvoj kiel C++, Java a\u016d C#, kiuj havas ridigan statikan tipan sistemon havas tre grandan rolon en komerco kaj estas uzataj por tre grandaj komercaj projektoj. Sed por komputila lingvistiko, kie la algoritmoj povas esti tre komplika, tiu ridiga tipa sistemo povas tre \u011deni kaj malutili. Tiuj lingvoj ne oferas potencajn abstrakta\u0135ojn por mallongigi la programan kodon. Do la programado per tiuj lingvoj estas malpli efika kaj la rezulta kodo pli longa. Tio estas anka\u016d maloportuna por posta flego de sistemo.<\/p>\n<p>La konata strategio estas anka\u016d programi unue la prototipon en skripta lingvo kaj poste, kiam oni estas certa pri la funkciado, reprogrami tiun modulon en lingvo kiel C,C++, Java a\u016d C#. Tion oni faras plej ofte por rapidigi a\u016d malpligrandigi tiun modulon. Lingvo Tcl estas anka\u016d nomata kiel glutea lingvo. Tiu lingvo estas do uzata kiel gluteo de moduloj programitaj en lingvo C a\u016d C++. Anka\u016d aliaj skriptaj lingvoj povas esti uzataj kiel gluteo.<\/p>\n<p>Mia sperto estas, ke anka\u016d grava estas stabila programa medio, populareco kaj aldonaj moduloj. \u0108iam estas pli oportune reuzi fremdan modulon ol programi ilin de komenco. Oni atentu anka\u016d,  ke aliaj programistoj volas anka\u016d tralegi kaj reuzi la programpecojn. En profesiaj sistemoj \u0109iu linio de kodo estas nur unufoje skribita sed avera\u011de 10-foje tralegita. Fine al neniu malutilas lerni multajn programajn lingvojn.<\/p>\n<h3>Programa lingvo de &#8222;Esperantilo&#8220;<\/h3>\n<p>Esperantilo estas programita en <a href=\"http:\/\/www.tcl.tk\">Tcl<\/a> (<a href=\"http:\/\/eo.wikipedia.org\/wiki\/Tcl\">Wikipedia<\/a>) kun aldona objektema modulo <a href=\"http:\/\/www.xotcl.org\">XOTcl<\/a>. La lingvo apartenas al tiel nomataj skriptaj kaj interpretaj lingvoj. Tiu lingvo estas ofte uzata de ne informatikistoj, \u0109ar \u011di estas facile lernebla. Lingvo Tcl estis tre populara en 80-aj jaroj, sed \u011dia populareco nun konstante malkreskas. En lasta tempo Tcl malgajnas la popularecon principe por lingvoj: Python kaj Ruby, kiuj oferas enprogramitan objektemon.<\/p>\n<p>Normale oni programas en tiu lingvo nur malgrandajn programojn. Esperantilo estas en tiu kazo escepto. Tio estis ebla plejparte, \u0109ar mi uzis objekteman metodon por strukturi la programon. Kiel programada medio mi uzas <a href=\"http:\/\/www.xdobry.de\/xotclIDE\">XOTclIDE<\/a>. Tiu medio estas programita la\u016d modelo de <a href=\"http:\/\/www.smalltalk.org\/main\/\">Smalltalk<\/a> medioj. \u011ci ebligas interaktivan metodon de programado kaj facilan trarigardon de sistemo.<\/p>\n<p>Mi mem elektis tiun lingvon pro mia propra prefero. Mi spertis, ke per skriptaj kaj dinamikaj programaj lingvoj mia efikeco de programado estas la plej alta. Kompare al programlingvo Java a\u016d C# per XOTcl mi estas 5-10 foje pli efika, kvankam mi anka\u016d havas multjaran sperton kun tiuj lingvoj. Tcl havas grandan maturan komunumon de programistoj. Ilia \u0109efa medio estas <a href=\"http:\/\/mini.net\/tcl\/\">Wiki Tcl<\/a> kaj mesa\u011dlistoj <a href=\"http:\/\/groups.google.de\/group\/comp.lang.tcl\/topics\">comp.lang.tcl<\/a>. Ekzistas multaj libroj kaj ekzemplaj programoj por tiu lingvo.<\/p>\n<p>La efikeco de programado kaj eblo de rapidaj eksperimentoj estis la plej grava ka\u016dzo por elekto de lingvo. Sed anka\u016d aliaj trajtoj de tiu lingvo estas oportunaj por lingvistika programado:<\/p>\n<ul>\n<li>subteno de UTF-8<\/li>\n<li>facileco de programado de grafikaj uzantinterfacoj<\/li>\n<li>subteno de \u0109iuj aktualaj mastrumaj sistemoj<\/li>\n<li>malgranda dimensio de instaladaj programoj<\/li>\n<li>direkta subteno de signo\u0109enoj kiel \u0109efa koncepto de lingvo<\/li>\n<li>tre malgranda nombro de sintaksaj reguloj<\/li>\n<li>facila lernado<\/li>\n<li>facila reuzo de aliaj programoj per C-lingvo interfaco<\/li>\n<li>facila enmikso de C\/C++-moduloj<\/li>\n<li>facila instalado por avera\u011da uzanto<\/li>\n<\/ul>\n<p>\u0108ar neniu lingvo estas perfekta. Mi rimarkas anka\u016d kelkajn maloportunaj trajtojn:<\/p>\n<ul>\n<li>Lingvo ne subtenas la koncepton de logika programado a\u016d regulbazita programado, kiu estas ofte uzataj \u0109e sintaksa analizo<\/li>\n<li>La lingvo ne atingas la plej bonan rapidecon de C-programoj.<\/li>\n<li>Objektema programdo per aldona modulo XOTcl ne estas tre populara<\/li>\n<li>Malgranda komerca uzado de tiu lingvo (escepte de administrado de komputilaj sistemoj). Preska\u016d neniu subteno de grandaj komputilaj firmaoj.<\/li>\n<li>Malgranda akcepto de tiu lingvo de aliaj programistoj<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>La nombro de programaj lingvoj estas tre granda (pli ol 1000), kaj \u0109iun jaron novaj programaj lingvoj ekestas. Oni povas diri pri evoluo de programaj lingvoj, \u0109ar la ideoj kaj konceptoj de programado estas heredigitaj de unu lingvo al alia. La evoluo ofte progresas en multajn diferencajn direktojn, sed kelkaj lingvoj denove unuigas konceptojn de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-39","post","type-post","status-publish","format-standard","hentry","category-programado"],"_links":{"self":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/posts\/39","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=39"}],"version-history":[{"count":0,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=\/wp\/v2\/posts\/39\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=39"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=39"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.esperantilo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}