abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:11 | Nová verze

    Byla vydána nová verze 8.7.0 správce sbírky fotografií digiKam (Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení (NEWS). Nejnovější digiKam je ke stažení také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

    Ladislav Hagara | Komentářů: 0
    dnes 12:22 | IT novinky

    Před 30 lety, k 1. 7. 1995, byl v ČR liberalizován Internet - tehdejší Eurotel přišel o svou exkluzivitu a mohli začít vznikat první komerční poskytovatelé přístupu k Internetu [𝕏].

    Ladislav Hagara | Komentářů: 0
    dnes 11:33 | Nová verze

    Byla vydána (𝕏) nová verze 7.4 open source monitorovacího systému Zabbix (Wikipedie). Přehled novinek v oznámení na webu, v poznámkách k vydání a v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    dnes 05:44 | Bezpečnostní upozornění

    Balíček s příkazem sudo byl vydán ve verzi 1.9.17p1. Řešeny jsou zranitelnosti CVE-2025-32462 (lokální eskalace práv prostřednictvím volby host) a CVE-2025-32463 (lokální eskalace práv prostřednictvím volby chroot).

    Ladislav Hagara | Komentářů: 4
    dnes 05:22 | IT novinky

    Do služeb Seznam.cz se lze nově přihlásit pomocí služby MojeID [𝕏].

    Ladislav Hagara | Komentářů: 1
    dnes 03:33 | Bezpečnostní upozornění

    Bezpečnostní výzkumníci zveřejnili informace o osmi zranitelnostech, které postihují více než 700 modelů tiskáren, skenerů a štítkovačů značky Brother. Bezpečnostní upozornění vydali také další výrobci jako Fujifilm, Ricoh, Konica Minolta a Toshiba. Nejzávažnější zranitelnost CVE-2024-51978 umožňuje útočníkovi vzdáleně a bez přihlášení získat administrátorská oprávnění prostřednictvím výchozího hesla, které lze odvodit ze

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 16:00 | Komunita

    Společnost Oracle vlastní ochrannou známku JAVASCRIPT. Komunita kolem programovacího jazyka JavaScript zastoupena společností Deno Land vede právní bitvu za její osvobození, viz petice a otevřený dopis na javascript.tm. Do 7. srpna se k nim má vyjádřit Oracle (USPTO TTAB).

    Ladislav Hagara | Komentářů: 4
    včera 13:11 | IT novinky

    Byl představen samostatný rádiový modul Raspberry Pi Radio Module 2 s Wi-Fi a Bluetooth.

    Ladislav Hagara | Komentářů: 6
    včera 12:44 | Upozornění

    Certifikační autorita Let’s Encrypt ukončila k 4. červnu zasílání e-mailových oznámení o vypršení platnosti certifikátů. Pokud e-maily potřebujete, Let’s Encrypt doporučuje některou z monitorovacích služeb.

    Ladislav Hagara | Komentářů: 0
    včera 01:44 | Pozvánky

    Přemýšlíte, jak začít prázdniny? Už v úterý 1. července se bude konat Virtuální Bastlírna, tedy online setkání bastlířů, techniků, vědců i akademiků, kde se ve volné diskuzi probírají novinky ze světa techniky, ale i jiných zajímavých témat.

    Za poslední měsíc jsme byli svědky plamenů několika raket. Zatímco malá raketa od Hondy se úspěšně vznesla a opět přistála, raketa od SpaceX se rozhodla letět všemi směry najednou. Díkybohu méně … více »
    Uprdkávač | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (28%)
     (7%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 336 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Ant compile - z definice rozbité

    18.5.2009 22:36 | Přečteno: 997× | Ani zbla

    V Javě jsem zvyklý využívat dobře definovaných class souborů. Myslím tím, že je možné nahradit v nějakém programu jeden class soubor jiným, za předpokladu že mají stejné rozhraní. Ono totiž ty class soubory jsou takové hezky deoptimalizované, všechny špinavé triky (inlinování atd.) dělá JVM až za běhu.

    Tato deoptimalizace má jednu velkou výjimku. Přišel jsem na to tak, že nefungoval "inkrementální" překlad v antu, tj. po zadání obligátního ant compile se program občas choval jinak než po ant rebuild.

    Pokud máte třídu

    public class Conf {
        public static final int DEBUG = 1;
    }

    tak třídy, které čtou konstantu DEBUG ji ve skutečnosti nečtou. Překladač do jejich těla s klidem vloží přímo literál, tedy jedničku. Takže když v Conf změníte hodnotu na DEBUG = 0 a znovu ji samu samotinkou přeložíte, změny se nepromítnou do jiných částí programu. Pomůže rebuild.

           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    19.5.2009 00:14 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    A to je vlastnost Antu nebo javac?
    alblaho avatar 19.5.2009 07:39 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Javac kompiluje tak, že Ant není schopen přesně určit závislosti (on se dívá jenom na timestamp souboru).
    19.5.2009 11:04 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    To je vlastnost javac od Sunu od verze 1.5. A je to zdokumentovaná funkce, všichni (hm, skoro všichni) o ní vědí a vědí, že release projektu se dělá jako čistý build, nikdy jako výsledek inkrementální kompilace. Inkrementální kompilace je jenom pomůcka pro zrychlení vývoje (a třeba takový elcipse kompilátor dělá i horší věci, klidně přeloží soubor se syntaktickou chybou a příslušnou metodu s chybou nahradí pouze vyhozením výjimky, kde je zpráva o tom, že tam je syntaktická chyba).
    alblaho avatar 19.5.2009 13:38 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Nikdo netvrdí, že to není zdokumentovaná vlastnost. Jenom jsem o tom nevěděl, to je celé. A o releasování projektu též nikdo nemluvil.
    mkoubik avatar 19.5.2009 00:25 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    To jsi z toho vyvázl ještě dobře. Když podstrkuješ jiné .class soubory stejného názvu místo původních, aniž bys použil classloader, tak buď rád, že se ještě nesmažíš v pekle.
    alblaho avatar 19.5.2009 07:41 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Můžeš to rozvést? Já ale nedělám takové věci u živé běžící aplikace (to obecně fungovat nemůže), prostě upravím a spustím.
    mkoubik avatar 19.5.2009 11:15 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Pokud napíšeš Conf c = new Conf();, tak kompilátor předpokládá, že třída Conf bude vždy vypadat tak, jak je popsána v Conf.java a všemožné optimalizace na to nejspíš spoléhají. Kdežto když použiješ Conf c = Class.forName("Conf").newInstance();, tak by to mělo fungovat, protože se třída hledá až v runtimeu (stejně tak by parametrem forName mohla být proměnná).

    Pokud tvrdíš, že třída Conf vypadá tak a tak a potom ji vyměníš, je to jako bys otevřel slinkovaný céčkový program v hexaeditoru a začal přepisovat části odpovídající nějakému objektu - taky radši použiješ shared object (.so).

    Skrátka třídy, které se navzájem "jůzujou" je lepší považovat za "slinkované", v prvním případě používáš přímo třídu Conf, v druhém pouze třídu java.lang.Class, která se, předpokládám, měnit nebude.

    A rada na závěr: na konfiguraci je XML.
    alblaho avatar 19.5.2009 13:42 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Conf bude vždy vypadat tak, jak je popsána v Conf.java a všemožné optimalizace na to nejspíš spoléhají.

    Je právě otázka, jaké optimalizace se odehrají. Pokud je mi známo, je inlinování konstanty jediná výjimka, zbytek se děje až za běhu.

    PS: v mém projektíku si z různých důvodů nemůžu konfiguraci v XML dovolit :-)
    default avatar 19.5.2009 13:50 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    PS: v mém projektíku si z různých důvodů nemůžu konfiguraci v XML dovolit :-)

    Tak použij -D parametry :-D

    19.5.2009 13:56 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Proměnné prostředí se občas hodí. Ale jinak kód jsou data a data jsou kód a konfigurace v kódu je úplně v pořádku, pokud nepotřebuje uživatel dynamické změny. (A pokud je potřebuje, stačí použít skriptovací jazyk :-) )
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    default avatar 19.5.2009 13:58 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité

    I tak bych to řešil properties souborem na ClassPath. Kvůli jedný blbině nemusíš zbytečně rekompilovat…

    mkoubik avatar 19.5.2009 14:06 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    pokud nepotřebuje uživatel dynamické změny
    Což pravděpodobně potřebuje, když vyměňuje .class soubory. Teď nemyslím konkrétně tenhle případ - zapínání/vypínání debugování se takhle řešit dá, ale jak už tu zaznělo, je potřeba před produkčním nasazením celý projekt přebuildovat.
    alblaho avatar 19.5.2009 21:37 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Konfigurace a vyměňování classů spolu nesouvisí. Párkrát jsem class vyměňoval a teď jsem (na příkladu s konfigurací) objevil případ, kdy to nefunguje, to je celé.
    default avatar 19.5.2009 14:06 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité

    Co se té třídy Conf týče:

    zpravidla jsou tyto třídy javí interfaces, takže s nimi není třeba nikterak šachovat (když jo, tak se refaktoruje na obou stranách). A jak pak vypadá ta ConfImpl třída — to je už opravdu jedno. Jenom musí implementovat ten interface. Takhle třeba funguje vychytávka services.

    Docela se mi líbí ten princip modulů v NetBeans. Každý modul je rozdělen na dvě části (pozor, zjednodušuji!): první je public API (ty interfáče) a pak pod tím — ta druhá — je private API s implementací. Pomocí ClassLoaderů je zajištěno, že jiný modul se k té druhé části nedostane. Takže já pak můžu mít několik modulů, které implementují stejné veřejné API a implementace dělá něco trošku/úplně jiného. Je to v podstatě ten model services, akorát víc dotažený.

    19.5.2009 09:32 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Já bych k tomu řekl jenom tolik: moje vývojové prostředí si závislosti hlídá :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    alblaho avatar 19.5.2009 10:30 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Hmm, že by bash nebyl tím nejlepším IDE?-).

    Chtělo by to nějaký plugin do anta. Jenomže když ant bude zkoumat každou třídu jestli tam něco takového není, to už může rovnou nechat přeložit všechno. IDE tohle zkoumání může dělat průběžně.
    default avatar 19.5.2009 10:09 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité

    Sranda. Zrovna včera jsem na tenhle paskvil upozornil v naší aplikaci. :-D Konstanty obencě by neměly být public nebo package public. Od toho jsou enumy. (Pro rejpaly: neříkám, že to nejde nebo že se to nesmí. Ale zrovna debug level je učebnicová ukázka, jak se to používat nemá. :-) )

    Když není nazbyt, tak se to řeší takto:

    public static final String SOMETHING;
    
    static {
        SOMETHING = "foo";
    }

    Takto se vytvoří jen vazba na třídu (aspoň současná verze javac ten trik neumí odhalit) a inlinování provede až ClassLoader za běhu.

    Doporučuji si přečíst pár článků o modulárním programování v Javě. Toto konkrétně se řešilo před pár lety, když designovali GlassFish v3. Obecně o modulárním programování pojednává Jaroslav Tulach z NetBeans.

    Ale třeba o tom vím jen velký kulový. Koneckonců, v Javě jsem dělal naposledy před rokem. :-D

    19.5.2009 10:19 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Jako člověk, který tomu ani trochu nerozumí a má tak patřičný odstup, pravím: modulární programování v Javě je jedna velká pakárna a ta classloaderová magie, kterou předvádí OSGi, je zralá akorát tak na cvokhaus. Zlatí chlapci od .NETu, v tohle.

    A dělat takovéhle triky s konstantami mi přijde padlé na hlavu. Pokud někdo tvrdí, že dělá inkrementální překlad, a přitom si nepohlídá závislosti, je to chucpe.
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    alblaho avatar 19.5.2009 10:35 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Classloaderovou magii opravdu nemusím. Jak je to v .NETu ovšem netuším, umí vůbec nahrát dvě různé verze jedné assembly?

    Občas za běhu reloadnu nějaký modul v Pythonu, tam se na optimalizace kašle a všechno jede hezky dynamicky.

    default avatar 19.5.2009 13:56 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Classloaderovou magii opravdu nemusím.

    ClassLoadeři jsou mí nejlepší kamarádi. Ale já byl vždycky jinej. :-D Když si vzpomenu třeba na ResourceClassLoader, který natahoval aplikaci z resourců přímo z Jar archivu, takže jsem nemusel řešit takový ty lib/ adresáře a -cp parametry… Nebo můj miláček — EndorsedClassLoader. A endorsed.dirs šly tam, odkud přišly. :-D

    19.5.2009 14:01 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    takže jsem nemusel řešit takový ty lib/ adresáře a -cp parametry
    JarJar Links :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    default avatar 19.5.2009 14:10 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité

    No, až na to, že to ty knihovny přebalí a cosi to udělá s třídami — tak je to cool. Ale ten ClassLoader mi připadá trošku bezpečnější. :-D

    19.5.2009 14:12 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Modifikace bajtkódu vládne světu. Sláva javovskému verifikátoru :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    alblaho avatar 19.5.2009 10:32 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Hm, dobrý workaround. Akorát je mi nesympatické psát složitější kód jenom proto, aby to javac nezoptimalizoval :-).
    mirec avatar 19.5.2009 11:12 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    Určovať závislosti v jave je dosť ehm .. ako by som to správne nazval .. povedzme, že zložité. Minule som do školy riešil pár vecí a používal som vlastné makefile súbory, takže som si užíval to, že javac je neštandardný kompilátor snáď vo všetkom. U C som bol zvynutý na jednoduché generovanie hocičo.c -> hocičo.o pričom názov som si určoval sám. Z jedného súboru vždy práve jeden výstup. Javac to má výrazne zložitejšie pretože pri kompilácii niektorého súboru skompiluje automaticky aj všetky závislosti a ešte to aj pohádže do rôznych adresárov podľa balíčkov. Písať makefile pre toto je fakt peklo. Ale s dodržiavaním pár pravidiel a určením (nie všeobecných) pravidiel v makefile to bolo celkom ľahké a dovolím si tvrdiť, že som makefile napísal rýchlejšie než by mi nabootoval operačný systém netbeans.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    alblaho avatar 19.5.2009 13:33 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Re: Ant compile - z definice rozbité
    No zkrátka Java je dost jiná než C. Právě proto je lepší použít nástroje, které jsou jí šité na míru, třeba ten ant.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.