<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://denik.xelfi.cz/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Python - Historie editací</title>
		<link>http://denik.xelfi.cz/index.php?title=Python&amp;action=history</link>
		<description>Historie editací této stránky</description>
		<language>cs</language>
		<generator>MediaWiki 1.15.3</generator>
		<lastBuildDate>Wed, 29 Apr 2026 10:02:28 GMT</lastBuildDate>
		<item>
			<title>Jst:&amp;#32;/* Co jsi zkoumal nejdříve? Proč to nefunguje správně? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=640&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Co jsi zkoumal nejdříve? Proč to nefunguje správně?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 2. 10. 2018, 06:10&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Občas zkouším rozjet náhodné scripty, abychom viděli, jak je na tom naše implementace. Jednak tím testujeme možné chyby a jednak také sleduji performance. Když jsem narazil na článek na Root.cz, kde byla porovnávána rychlost výpočtu obrázku různého rozlišení na základě Mandelbrotovy množiny, zkusil jsem autorův Python skript pustit také na naší implementaci. Nejdříve jsem musel doimplementovat asi dvě specializace v naší implementaci, abychom byli schopni skript spustit. To bylo jednoduché a otázka několik minut.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Občas zkouším rozjet náhodné scripty, abychom viděli, jak je na tom naše implementace. Jednak tím testujeme možné chyby a jednak také sleduji performance. Když jsem narazil na článek na Root.cz, kde byla porovnávána rychlost výpočtu obrázku různého rozlišení na základě Mandelbrotovy množiny, zkusil jsem autorův Python skript pustit také na naší implementaci. Nejdříve jsem musel doimplementovat asi dvě specializace v naší implementaci, abychom byli schopni skript spustit. To bylo jednoduché a otázka několik minut.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;===== Co to je ta specializace? =====&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[TBD]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Jenže po spuštění jsem zjistil, že čas který je potřeba pro výpočet obrázku je několikanásobně větší než je potřeba pro výpočet toho samého obrázku v CPython. Problém byl v tom, že algoritmus vypočítané barvy jednotlivých bodů ukládá do stringu a nakonec celý string je vypsán na standartní výstup, který je přesměrován do souboru. Asi si řeknete, že to není ideální řešení, nicméně je to zdrojový kód z praxe.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Jenže po spuštění jsem zjistil, že čas který je potřeba pro výpočet obrázku je několikanásobně větší než je potřeba pro výpočet toho samého obrázku v CPython. Problém byl v tom, že algoritmus vypočítané barvy jednotlivých bodů ukládá do stringu a nakonec celý string je vypsán na standartní výstup, který je přesměrován do souboru. Asi si řeknete, že to není ideální řešení, nicméně je to zdrojový kód z praxe.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Tue, 02 Oct 2018 06:10:49 GMT</pubDate>			<dc:creator>Jst</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>Jst:&amp;#32;/* Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=639&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 2. 10. 2018, 06:09&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Posledních pár měsíců pracuji na implementaci jazyka Python v Graal VM. Před tím, než jsem začal pracovat v Oracle Labs, tak jsem dělal pár editorů do NetBeans IDE. V NetBeans jsem se naučil hodně o lexování, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pársovaní&lt;/del&gt;, AST a mnoho dalších věcí, které se týkají analýzy zdrojového kódu. Tohle mi určitě pomohlo v Oracle Labs, ale i tak je to jen malá část toho, co potřebují vědět nyní.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Posledních pár měsíců pracuji na implementaci jazyka Python v Graal VM. Před tím, než jsem začal pracovat v Oracle Labs, tak jsem dělal pár editorů do NetBeans IDE. V NetBeans jsem se naučil hodně o lexování, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;parsovaní&lt;/ins&gt;, AST a mnoho dalších věcí, které se týkají analýzy zdrojového kódu. Tohle mi určitě pomohlo v Oracle Labs, ale i tak je to jen malá část toho, co potřebují vědět nyní.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Co jsi zkoumal nejdříve? Proč to nefunguje správně? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Co jsi zkoumal nejdříve? Proč to nefunguje správně? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Tue, 02 Oct 2018 06:09:04 GMT</pubDate>			<dc:creator>Jst</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>Jst v 2. 10. 2018, 06:08</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=638&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 2. 10. 2018, 06:08&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[GraalVM]] umí spouštět různé jazyky, mimo jinými i [[wikipedia:Python|Python]]. Proto jsem byl překvapený, že Pavel Tišňovský ve svých předchozích porovnáních různých implementací jazyka [[Python]] neuvedl i [[GraalVM|GraalPython]] (například při popisu [https://www.root.cz/clanky/rpython-prekvapive-vykonny-dialekt-pythonu-na-nemz-je-zalozen-pypy/ RPythonu] či [https://www.root.cz/clanky/prakticke-pouziti-nastroje-cython-pri-prekladu-pythonu-do-nativniho-kodu-1/ Cythonu]). Trochu uraženě jsem si tedy vyzkoušel, jak si s uvedeným [[wikipedia:Mandelbrot|Mandelbrot]] příkladem poradí náš [[Python]]. No a nakonec jsem byl vlastně rád, že to Pavel nevyzkoušel. Nejen, že to počítalo dlouho, ale hlavně počítalo úplně špatně. Výsledný obrázek nevypadal &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;tak &lt;/del&gt;jako ostatní.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[GraalVM]] umí spouštět různé jazyky, mimo jinými i [[wikipedia:Python|Python]]. Proto jsem byl překvapený, že Pavel Tišňovský ve svých předchozích porovnáních různých implementací jazyka [[Python]] neuvedl i [[GraalVM|GraalPython]] (například při popisu [https://www.root.cz/clanky/rpython-prekvapive-vykonny-dialekt-pythonu-na-nemz-je-zalozen-pypy/ RPythonu] či [https://www.root.cz/clanky/prakticke-pouziti-nastroje-cython-pri-prekladu-pythonu-do-nativniho-kodu-1/ Cythonu]). Trochu uraženě jsem si tedy vyzkoušel, jak si s uvedeným [[wikipedia:Mandelbrot|Mandelbrot]] příkladem poradí náš [[Python]]. No a nakonec jsem byl vlastně rád, že to Pavel nevyzkoušel. Nejen, že to počítalo dlouho, ale hlavně počítalo úplně špatně. Výsledný obrázek &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;vůbec &lt;/ins&gt;nevypadal jako &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ty &lt;/ins&gt;ostatní.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;To však bylo na začátku srpna. Od té doby si s tím Petr Pišl hraje, udělal pár vylepšení a [[GraalVM]] 1.0.0 RC6 již nejen počítá správně, ale je také výrazně rychlejší než standardní [[Python]]3 a přitom nevyžaduje žádné změny kódu. Dovolil jsem si tedy Petra vyzpovídat a zeptat se jej, jak to dokázal.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;To však bylo na začátku srpna. Od té doby si s tím Petr Pišl hraje, udělal pár vylepšení a [[GraalVM]] 1.0.0 RC6 již nejen počítá správně, ale je také výrazně rychlejší než standardní [[Python]]3 a přitom nevyžaduje žádné změny kódu. Dovolil jsem si tedy Petra vyzpovídat a zeptat se jej, jak to dokázal.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Tue, 02 Oct 2018 06:08:48 GMT</pubDate>			<dc:creator>Jst</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>Jst:&amp;#32;/* Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=637&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Proč to vlastně bylo tak pomalé? A jak jsi na to přišel?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 2. 10. 2018, 06:07&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Tady narážíme na problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Tady narážíme na problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM módu. Kód předkompilovaný pomocí SVM &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;módu &lt;/del&gt;startuje mnohonásobně rychleji než v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM módu. Kód předkompilovaný pomocí SVM startuje mnohonásobně rychleji než v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Jak jsi to zrychloval? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Jak jsi to zrychloval? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Tue, 02 Oct 2018 06:07:09 GMT</pubDate>			<dc:creator>Jst</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>Jst:&amp;#32;/* Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=636&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Proč to vlastně bylo tak pomalé? A jak jsi na to přišel?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 2. 10. 2018, 06:06&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Tady narážíme na problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Tady narážíme na problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;modu&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Překompilovaný kód v &lt;/del&gt;SVM módu &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;je několikánásobně rychlejší &lt;/del&gt;než &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;spouštění &lt;/del&gt;v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;módu&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Kód předkompilovaný pomocí &lt;/ins&gt;SVM módu &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;startuje mnohonásobně rychleji &lt;/ins&gt;než v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Jak jsi to zrychloval? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Jak jsi to zrychloval? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Tue, 02 Oct 2018 06:06:51 GMT</pubDate>			<dc:creator>Jst</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>Jst:&amp;#32;/* Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=635&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Proč to vlastně bylo tak pomalé? A jak jsi na to přišel?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 1. 10. 2018, 16:14&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Tady narážíme &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ne &lt;/del&gt;problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Tady narážíme &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;na &lt;/ins&gt;problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM modu. Překompilovaný kód v SVM módu je několikánásobně rychlejší než spouštění v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM modu. Překompilovaný kód v SVM módu je několikánásobně rychlejší než spouštění v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 01 Oct 2018 16:14:47 GMT</pubDate>			<dc:creator>Jst</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>109.81.214.101:&amp;#32;/* Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=616&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Proč to vlastně bylo tak pomalé? A jak jsi na to přišel?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 31. 8. 2018, 09:15&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 16:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Tady narážíme ne problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM modu. Překompilovaný kód v SVM módu je několikánásobně rychlejší než spouštění v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Jak jsi to zrychloval? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Jak jsi to zrychloval? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 31 Aug 2018 09:15:31 GMT</pubDate>			<dc:creator>109.81.214.101</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>109.81.214.101:&amp;#32;/* Co jsi zkoumal nejdříve? Proč to nefunguje správně? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=615&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Co jsi zkoumal nejdříve? Proč to nefunguje správně?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 31. 8. 2018, 09:13&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 14:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 14:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Jenže po spuštění jsem zjistil, že čas který je potřeba pro výpočet obrázku je několikanásobně větší než je potřeba pro výpočet toho samého obrázku v CPython. Problém byl v tom, že algoritmus vypočítané barvy jednotlivých bodů ukládá do stringu a nakonec celý string je vypsán na standartní výstup, který je přesměrován do souboru. Asi si řeknete, že to není ideální řešení, nicméně je to zdrojový kód z praxe.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Jenže po spuštění jsem zjistil, že čas který je potřeba pro výpočet obrázku je několikanásobně větší než je potřeba pro výpočet toho samého obrázku v CPython. Problém byl v tom, že algoritmus vypočítané barvy jednotlivých bodů ukládá do stringu a nakonec celý string je vypsán na standartní výstup, který je přesměrován do souboru. Asi si řeknete, že to není ideální řešení, nicméně je to zdrojový kód z praxe.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Tady narážíme ne problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM modu. Překompilovaný kód v SVM módu je několikánásobně rychlejší než spouštění v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 31 Aug 2018 09:13:55 GMT</pubDate>			<dc:creator>109.81.214.101</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>109.81.214.101:&amp;#32;/* Co jsi zkoumal nejdříve? Proč to nefunguje správně? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=614&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Co jsi zkoumal nejdříve? Proč to nefunguje správně?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 31. 8. 2018, 09:13&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 8:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Co jsi zkoumal nejdříve? Proč to nefunguje správně? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Co jsi zkoumal nejdříve? Proč to nefunguje správně? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;U implementace jazyka Pythonu do Graal VM nejsem od začátku. Nastoupil jsem již do rozjetého projektu, což není většinou jednoduché u projektů jako je tento.&amp;nbsp; Prvních pár týdnů jsem implementoval Math modul, na kterém jsem se učil základní věci. Vlastně se pořád učím.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Občas zkouším rozjet náhodné scripty, abychom viděli, jak je na tom naše implementace. Jednak tím testujeme možné chyby a jednak také sleduji performance. Když jsem narazil na článek na Root.cz, kde byla porovnávána rychlost výpočtu obrázku různého rozlišení na základě Mandelbrotovy množiny, zkusil jsem autorův Python skript pustit také na naší implementaci. Nejdříve jsem musel doimplementovat asi dvě specializace v naší implementaci, abychom byli schopni skript spustit. To bylo jednoduché a otázka několik minut.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Jenže po spuštění jsem zjistil, že čas který je potřeba pro výpočet obrázku je několikanásobně větší než je potřeba pro výpočet toho samého obrázku v CPython. Problém byl v tom, že algoritmus vypočítané barvy jednotlivých bodů ukládá do stringu a nakonec celý string je vypsán na standartní výstup, který je přesměrován do souboru. Asi si řeknete, že to není ideální řešení, nicméně je to zdrojový kód z praxe.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Tady narážíme ne problém zpracování stringu v jazyku Java, což je jazyk ve kterém je naše implementace napsaná. Sčítání stringů v Javě je poměrně rychlá, ale ovšem jen do té doby, než začne docházet paměť. Dříve nebo později se zavolá Arrays.copyof a tento příkaz vyžaduje souvislou volnou paměť pro vytvoření nového pole. Pokud velikost volné paměti je menší, než požadovaná velikost nového pole, dostanete OutOfMemoryException a končíte. To je ta lepší varianta z hlediska performance. Horší situace je, když volná paměť je, ale vytvářené pole se nevejde do žádného souvislého místa v paměti. V tu chvíli se zapíná GC a snaží se paměť uvolnit, tak aby se nové pole vešlo na jedno místo. Za špatných podmínek toto může trvat i několik desítek sekund. Nechci úplně zabíhat do podrobností, to by bylo na samostatný článek.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Pokud někdo zná Graal a Truffle, tak ví, že jednotlivé jazyky lze běhat buď v JVM nebo SVM modu. Překompilovaný kód v SVM módu je několikánásobně rychlejší než spouštění v JVM. Jenže tady jsem narazil na chybu v SVM, která právě zahrnuje chování Arrays.copyof a čas, který byl potřeba pro běžení skriptu na generování obrázku o velikosti 1024x1024 bodů, byl 15 minut.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Proč to vlastně bylo tak pomalé? A jak jsi na to přišel? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 31 Aug 2018 09:13:02 GMT</pubDate>			<dc:creator>109.81.214.101</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
		<item>
			<title>109.81.214.101:&amp;#32;/* Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš? */</title>
			<link>http://denik.xelfi.cz/index.php?title=Python&amp;diff=613&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš?&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 31. 8. 2018, 08:24&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádka 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Pracuješ v pražské pobočce OracleLabs. Co tu vlastně děláš? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Posledních pár měsíců pracuji na implementaci jazyka Python v Graal VM.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Posledních pár měsíců pracuji na implementaci jazyka Python v Graal VM&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. Před tím, než jsem začal pracovat v Oracle Labs, tak jsem dělal pár editorů do NetBeans IDE. V NetBeans jsem se naučil hodně o lexování, pársovaní, AST a mnoho dalších věcí, které se týkají analýzy zdrojového kódu. Tohle mi určitě pomohlo v Oracle Labs, ale i tak je to jen malá část toho, co potřebují vědět nyní&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Co jsi zkoumal nejdříve? Proč to nefunguje správně? ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Co jsi zkoumal nejdříve? Proč to nefunguje správně? ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-29 10:02:28 --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 31 Aug 2018 08:24:34 GMT</pubDate>			<dc:creator>109.81.214.101</dc:creator>			<comments>http://denik.xelfi.cz/o/Diskuse:Python</comments>		</item>
	</channel>
</rss>