Domaci - komentari #1
Doslo vreme da se radi domaci iz prevodioca...
Pre nego sto krenem da radim projekat u nekoj novoj tehnologiji ili primenom
nekih novih alata, uvek imam praksu da prvo realizujem jedan relativno
trivijalan primer, kako bih postavio i zaokruzio kostur aplikaciju koja
kasnije moze da posluzi kao starter za ostale realne projekte tog tipa.
Domaci iz prevodioca nije izuzetak s obzirom da se koriste, za mene, novi
alati J(F)lex i CUP.
"#1" u subject-u znaci da ocekujem da cu imati jos gomilu komentara povodom
domaceg (kada budem krenuo da ga radim), a ovaj prvi, prakticno, ima vise
veze sa samim nacinom izrade domaceg, edukacije studenata povodom istog i
koriscenih alata, a do kojeg sam dosao postavljajuci kostur aplikaciju.
Dakle, ovo su dobronamerne sugestije kako bi se olaksao zivot buducim
narastajima. Ja jesam u onih 99% koji smatraju da nikad u zivotu nece
praviti kompajler, ali ako vec radimo projekat, ajmo onda da ga radimo
ljudski, a ne kao u srednjem veku.
Pa da krenemo:
Prva stvar koja me je zaprepastila je "edukacija" povodom build procesa.
Preporuceni nacin je nesto ovog tipa: napraviti u editoru lex fajl,
pokrenuti rucno generator leksera, rucno kompajlirati dobijenu klasu,
napraviti cup fajl, pokrenuti rucno generator parsera, kompajlirati rucno
dobijenu klasu, pokrenuti sve to rucno. Blago poboljsanje koje sam primetio
je u instalaciji CUP-a, gde postoji Make.
Ovo je ipak 21. vek :) Projekti se rade u IDE-u, a nezavisno od toga treba
da postoji i automatski build. Rucni nacin rada necu vise ni da
komentarisem, a Make je (makar sto se tice Jave), daleka proslost. Ono sto
je aktualno je dobro poznati Apache Ant, a u poslednje vreme se cini da ce
Apache Maven postati defakto standard (ovde mozete videti moju prezentaciju
na tu temu na JavaSvet-u: http://www.javasvet.net/sastanak/9/index.html).
Tuga je sto, koliko sam video, vecina domacih zadataka studenti rade tako
sto donesu IDE projekat i onda kliknu "run" u IDE-u. Nigde nema build
procesa, nigde nema gotovog proizvoda. Pa necete sutra klijentu nositi IDE.
Domaci na ovom predmetu je idealan primer kada to vise nije moguce (bez
podrske idea) jer postoji jedna specificna build faza - generisanje sorsa.
Taka da je ovo idealna prilika da se proces automatizuje, a studenti
edukuju.
Elem, misija je jasna - omoguciti auto generisanje koda na osnovu lex i cup
fajlova i omoguciti razvoj domaceg u IDE-u. U tome sam uspeo, izgubivsi
jedan ceo dan, a zakljucci se svode prakticno na koriscene alate.
Prvo, svaka pohvala za odabir JFlex-a kao generatora leksera. Za ovaj alat,
za razliku od JLexa, postoji Ant task, Maven plugin i plugin za IDE koji ja
koristim (IntelliJ IDEA), sto samo govori o tome da je alat moderan, da se i
dalje razvija. Naravno, ima vise mogucnosti i brzi je od JLexa. Kada sam
pomenuo IDE, plugin za ovaj alat mi omogucava da IDE prepoznaje jlex izvorni
kod i imam punu podrsku - code completition, syntax highlighting, error
checking itd. Znaci klasika, sve je u redu, moze da se radi.
Dolazimo do CUP-a. Odma da kazem - odabir ovog alata je najveca greska, a
evo i zasto.
Preporucena verzija (0.10, cini mi se) je matora i sto je najvece zlo, nema
Ant task za nju, nema Maven plugin i naravno, ne postoji podrska Idea.
Dakle, ne postoji nacin da se nista automatizuje. Rad je mucan.
Napravio sam pomak tako sto sam skinuo najnoviju verziju 0.11a koja, hvala
bogu, ima Ant task, tako da sam uspeo da automatizujem auto generisanje
sorsa na osnovu cup fajla.
Medjutim, ostaje jedan, za mene nedopustiv, problem, a to je nepostojanje
podrske IDE-a za cup fajlove. Dakle, ovako smo osudjeni da cup fajl kucamo u
obicnom editoru, bez completition-a, bez yntax highlightinga, bez provere
gresaka. Ljudi, tu ima i Java koda. Na primer, nisam ni poceo da radim
projekat, a vec mi dosta vremena odlazi na probleme sa ovim. Recimo,
zaboravite da uradite import. Naravno da toga ne mogu da se setim, kada mi
to vec 3 godine, koliko se profesionalno bavim razvojem u Javi, radi IDE. To
je najveca zamerka.
Dalje, ne samo da ne postoji dobra podrska alata za CUP, nego je i
implementacija CUP-a toliko idiotska, da sam se juce krstio. Naime, prilikom
pisanja unit testa za moj, relativno trivijalni, lexer, sam primetio da mi
test ne prolazi. A na prvi pogled sve je u redu. Posle jednog celog
izgubljenog sata sam svatio da gospoda koja je radila CUP, pojma nema sa
programiranjem.
Sta su uradili - njima toString metoda klase Symbol menja stanje objekta!!!
Tako da kada se prvi put pozove ispis Symbol objekata, i drugi put, vi ne
dobijate isti izlaz! Razne gluposti jesam vidjao kod programera, ali ovo je
jedna od vecih. Dakle, "biznis logika" im je procurela u toString metodu
Objecta. Strasno...
E sad, zamislite da treba da u takvom fajlu pisete celu MicroJava
gramitiku...
Ono sto ja preporucujem je da se u buducnosti koristi Antlr (
http://www.antlr.org/) koji je daleko mocniji i ima odlicnu podrsku alata.
Evo, ja mogu da ponudim da kada zavrsim sa ovim ispitom, da se lepo okaci
moj domaci ili da se iz njega ekstrahuje kostur aplikacija od koje ce
ubuduce studenti moci da krenu, a ne da svako gubi vreme na ove rezijske
stvari.
Toliko za sada :)
Vanja
Pre nego sto krenem da radim projekat u nekoj novoj tehnologiji ili primenom
nekih novih alata, uvek imam praksu da prvo realizujem jedan relativno
trivijalan primer, kako bih postavio i zaokruzio kostur aplikaciju koja
kasnije moze da posluzi kao starter za ostale realne projekte tog tipa.
Domaci iz prevodioca nije izuzetak s obzirom da se koriste, za mene, novi
alati J(F)lex i CUP.
"#1" u subject-u znaci da ocekujem da cu imati jos gomilu komentara povodom
domaceg (kada budem krenuo da ga radim), a ovaj prvi, prakticno, ima vise
veze sa samim nacinom izrade domaceg, edukacije studenata povodom istog i
koriscenih alata, a do kojeg sam dosao postavljajuci kostur aplikaciju.
Dakle, ovo su dobronamerne sugestije kako bi se olaksao zivot buducim
narastajima. Ja jesam u onih 99% koji smatraju da nikad u zivotu nece
praviti kompajler, ali ako vec radimo projekat, ajmo onda da ga radimo
ljudski, a ne kao u srednjem veku.
Pa da krenemo:
Prva stvar koja me je zaprepastila je "edukacija" povodom build procesa.
Preporuceni nacin je nesto ovog tipa: napraviti u editoru lex fajl,
pokrenuti rucno generator leksera, rucno kompajlirati dobijenu klasu,
napraviti cup fajl, pokrenuti rucno generator parsera, kompajlirati rucno
dobijenu klasu, pokrenuti sve to rucno. Blago poboljsanje koje sam primetio
je u instalaciji CUP-a, gde postoji Make.
Ovo je ipak 21. vek :) Projekti se rade u IDE-u, a nezavisno od toga treba
da postoji i automatski build. Rucni nacin rada necu vise ni da
komentarisem, a Make je (makar sto se tice Jave), daleka proslost. Ono sto
je aktualno je dobro poznati Apache Ant, a u poslednje vreme se cini da ce
Apache Maven postati defakto standard (ovde mozete videti moju prezentaciju
na tu temu na JavaSvet-u: http://www.javasvet.net/sastanak/9/index.html).
Tuga je sto, koliko sam video, vecina domacih zadataka studenti rade tako
sto donesu IDE projekat i onda kliknu "run" u IDE-u. Nigde nema build
procesa, nigde nema gotovog proizvoda. Pa necete sutra klijentu nositi IDE.
Domaci na ovom predmetu je idealan primer kada to vise nije moguce (bez
podrske idea) jer postoji jedna specificna build faza - generisanje sorsa.
Taka da je ovo idealna prilika da se proces automatizuje, a studenti
edukuju.
Elem, misija je jasna - omoguciti auto generisanje koda na osnovu lex i cup
fajlova i omoguciti razvoj domaceg u IDE-u. U tome sam uspeo, izgubivsi
jedan ceo dan, a zakljucci se svode prakticno na koriscene alate.
Prvo, svaka pohvala za odabir JFlex-a kao generatora leksera. Za ovaj alat,
za razliku od JLexa, postoji Ant task, Maven plugin i plugin za IDE koji ja
koristim (IntelliJ IDEA), sto samo govori o tome da je alat moderan, da se i
dalje razvija. Naravno, ima vise mogucnosti i brzi je od JLexa. Kada sam
pomenuo IDE, plugin za ovaj alat mi omogucava da IDE prepoznaje jlex izvorni
kod i imam punu podrsku - code completition, syntax highlighting, error
checking itd. Znaci klasika, sve je u redu, moze da se radi.
Dolazimo do CUP-a. Odma da kazem - odabir ovog alata je najveca greska, a
evo i zasto.
Preporucena verzija (0.10, cini mi se) je matora i sto je najvece zlo, nema
Ant task za nju, nema Maven plugin i naravno, ne postoji podrska Idea.
Dakle, ne postoji nacin da se nista automatizuje. Rad je mucan.
Napravio sam pomak tako sto sam skinuo najnoviju verziju 0.11a koja, hvala
bogu, ima Ant task, tako da sam uspeo da automatizujem auto generisanje
sorsa na osnovu cup fajla.
Medjutim, ostaje jedan, za mene nedopustiv, problem, a to je nepostojanje
podrske IDE-a za cup fajlove. Dakle, ovako smo osudjeni da cup fajl kucamo u
obicnom editoru, bez completition-a, bez yntax highlightinga, bez provere
gresaka. Ljudi, tu ima i Java koda. Na primer, nisam ni poceo da radim
projekat, a vec mi dosta vremena odlazi na probleme sa ovim. Recimo,
zaboravite da uradite import. Naravno da toga ne mogu da se setim, kada mi
to vec 3 godine, koliko se profesionalno bavim razvojem u Javi, radi IDE. To
je najveca zamerka.
Dalje, ne samo da ne postoji dobra podrska alata za CUP, nego je i
implementacija CUP-a toliko idiotska, da sam se juce krstio. Naime, prilikom
pisanja unit testa za moj, relativno trivijalni, lexer, sam primetio da mi
test ne prolazi. A na prvi pogled sve je u redu. Posle jednog celog
izgubljenog sata sam svatio da gospoda koja je radila CUP, pojma nema sa
programiranjem.
Sta su uradili - njima toString metoda klase Symbol menja stanje objekta!!!
Tako da kada se prvi put pozove ispis Symbol objekata, i drugi put, vi ne
dobijate isti izlaz! Razne gluposti jesam vidjao kod programera, ali ovo je
jedna od vecih. Dakle, "biznis logika" im je procurela u toString metodu
Objecta. Strasno...
E sad, zamislite da treba da u takvom fajlu pisete celu MicroJava
gramitiku...
Ono sto ja preporucujem je da se u buducnosti koristi Antlr (
http://www.antlr.org/) koji je daleko mocniji i ima odlicnu podrsku alata.
Evo, ja mogu da ponudim da kada zavrsim sa ovim ispitom, da se lepo okaci
moj domaci ili da se iz njega ekstrahuje kostur aplikacija od koje ce
ubuduce studenti moci da krenu, a ne da svako gubi vreme na ove rezijske
stvari.
Toliko za sada :)
Vanja
Previous by date: Re: Domaci septembar
Next by date: Verzija domaceg
Previous by thread: Re: pp1 resenje jun 2008 Next by thread: Verzija domaceg
Previous by thread: Re: pp1 resenje jun 2008 Next by thread: Verzija domaceg