Jazyk podobný C#

Daniel Kozak

Re:Jazyk podobný C#
« Odpověď #105 kdy: 21. 01. 2014, 11:52:27 »


perceptron

Re:Jazyk podobný C#
« Odpověď #106 kdy: 21. 01. 2014, 12:09:51 »
och, v tej jave tolko hovnokod.cz peral :-)

Jakub Galgonek

Re:Jazyk podobný C#
« Odpověď #107 kdy: 21. 01. 2014, 12:12:28 »
zde jsou ukazky kodu:
Jazyk D: http://pastebin.com/w7VaPYYj
Java: http://pastebin.com/ncuqtyZX

Tu konkatenaci řetězců máš udělánu hodně nevhodně. Tvá verze (metoda run) u mne běží 0.418s, pokud ale použiji StringBuffer, tak běží jen 0.043s. Pokud navíc do bufferu zapisuju po znacích (namísto jednoznakových řetězců), tak běží jen 0.036s.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Jazyk podobný C#
« Odpověď #108 kdy: 21. 01. 2014, 12:12:56 »
jn, v tom java kodu je hodne prasecin. asi byl zamer to co nejvic zpomalit

Re:Jazyk podobný C#
« Odpověď #109 kdy: 21. 01. 2014, 13:43:54 »
To lepeni retezcu v Jave je zacatecnicka chyba. Na druhou stranu, nekdy tohle umi prekladac prehodit na pouziti StringBuilderu (tady od oka uz ne, na to je to dost slozite, ale nejsem si zdaleka jisty).


Re:Jazyk podobný C#
« Odpověď #110 kdy: 21. 01. 2014, 13:51:03 »
pokud ale použiji StringBuffer
Protože to bezpečně běží v jednom vlákně, je špatně použití i StringBufferu se zbytečnou synchronizací, správné je použít StringBuilder. Ostatně javac to sčítání řetězců na StringBuilder přeloží, akorát že tady bude každé sečtení vytvoření samostatného builderu, spojení a zahození builderu – protože to kompilátor neodhalí, že by se to dalo celé udělat s jedním.

Daniel Kozak

Re:Jazyk podobný C#
« Odpověď #111 kdy: 21. 01. 2014, 14:15:58 »
zde jsou ukazky kodu:
Jazyk D: http://pastebin.com/w7VaPYYj
Java: http://pastebin.com/ncuqtyZX

Tu konkatenaci řetězců máš udělánu hodně nevhodně. Tvá verze (metoda run) u mne běží 0.418s, pokud ale použiji StringBuffer, tak běží jen 0.043s. Pokud navíc do bufferu zapisuju po znacích (namísto jednoznakových řetězců), tak běží jen 0.036s.

To ja samozrejme vim, to byl ucel ukazat ze vzdy se da napsat kod tak aby jeden jazyk bezel rychle a druhy pomalu. Napriklad v ruby existuji dva operatory pro zretezeni kde pouziti jednoho znamena lepsi vykon nez druheho.

Kazdopadne jde o to ze oba dva kody jsou napsany co mozna nejpodobneji. I v tom jazyku D je pouzit operator konkatenace a ne zadny StringBuilder atd.

Daniel Kozak

Re:Jazyk podobný C#
« Odpověď #112 kdy: 21. 01. 2014, 14:16:48 »
och, v tej jave tolko hovnokod.cz peral :-)

Tak ten kod neni muj je to v podstate prevzate z jiz zminovane stranky

Daniel Kozak

Re:Jazyk podobný C#
« Odpověď #113 kdy: 21. 01. 2014, 14:21:50 »
To lepeni retezcu v Jave je zacatecnicka chyba. Na druhou stranu, nekdy tohle umi prekladac prehodit na pouziti StringBuilderu (tady od oka uz ne, na to je to dost slozite, ale nejsem si zdaleka jisty).

No prave, tady jde o to ze spousta lidi tu tvrdi ze java muze delat spousty optimalizaci, ktere kompilovany kod nedela. Coz v tomto pripade nedela, samozrejme to ma asi sve duvody. Jde o to ze maloktery jazyk naz dokaze zachranit od toho aby kod bezel pomalu. Napriklad pokud bychom v kode pro jazyk D, nahradily static x = run3() za auto x = run3(), tak se kod pro D zpomali

Jakub Galgonek

Re:Jazyk podobný C#
« Odpověď #114 kdy: 21. 01. 2014, 14:22:46 »
Kazdopadne jde o to ze oba dva kody jsou napsany co mozna nejpodobneji. I v tom jazyku D je pouzit operator konkatenace a ne zadny StringBuilder atd.

Napsány co možná nejpodobněji syntakticky, ne však sémanticky.

Daniel Kozak

Re:Jazyk podobný C#
« Odpověď #115 kdy: 21. 01. 2014, 14:38:27 »
Prave ze i semanticky, teda az na ten podvod v tom ze jazyk D cely ten kod provede uz v dobe kompilace. Ale jinak je to i semanticky stejne. Oba operatory konkatenace delaji totez. Pokud bych v Jave pouzil StringBuffer tak pak bych v D musel Pouzit Appender. V tom pripade bych dosahl toho ze je Java je jen o minimum (20ms) pomalejsi nez jazyk D. Coz ja prece nechci ;-).

Jakub Galgonek

Re:Jazyk podobný C#
« Odpověď #116 kdy: 21. 01. 2014, 14:49:03 »
Prave ze i semanticky, teda az na ten podvod v tom ze jazyk D cely ten kod provede uz v dobe kompilace. Ale jinak je to i semanticky stejne. Oba operatory konkatenace delaji totez. Pokud bych v Jave pouzil StringBuffer tak pak bych v D musel Pouzit Appender. V tom pripade bych dosahl toho ze je Java je jen o minimum (20ms) pomalejsi nez jazyk D. Coz ja prece nechci ;-).

Aha :)

Jakub Galgonek

Re:Jazyk podobný C#
« Odpověď #117 kdy: 21. 01. 2014, 14:52:56 »
Java: 14.984s
C++/icc: 5.58s
C++/g++: 2.64s

Tak jsem si s tou Javou ještě trochu pohrál a dostal jsem z ní čas 5.893s.

Tak jsem to díky Shiniho nápadu stáhnul až na 4.23s.

Nord

Re:Jazyk podobný C#
« Odpověď #118 kdy: 21. 01. 2014, 15:20:56 »
Bezva, vybavil bych všechny JIT stroje vlastním Galounkem a to bude panečku zrychlení! Kam se hrabe turbo!

PS: A teď to ty chytrolíne udělej jako plně generickou metodou!

Pavel Tisnovsky

Re:Jazyk podobný C#
« Odpověď #119 kdy: 21. 01. 2014, 15:23:29 »
zde jsou ukazky kodu:
Jazyk D: http://pastebin.com/w7VaPYYj
Java: http://pastebin.com/ncuqtyZX

Spojovani retezcu uz tady lidi resili, k tomu se nemusim vyjadrovat, ale jeste je lepsi merit cas pres System.getCurrentTimeMillis(), na co se drbat s nejakym zbytecnym Calendar. Nerikam, ze to usetri nejaky cas (samozrejme usetri, ale asi pod presnost prikazu time v tomto pripade), ale obecne je to pouziti kanonu na vrabce a ve vetsich aplikacich se tyto veci budou scitat, coz je jeden z duvodu, proc je java *povazovana* za pomalejsi jazyk.