zde jsou ukazky kodu:Jazyk D: http://pastebin.com/w7VaPYYjJava: http://pastebin.com/ncuqtyZX
pokud ale použiji StringBuffer
Citace: Daniel Kozak 21. 01. 2014, 11:52:27zde jsou ukazky kodu:Jazyk D: http://pastebin.com/w7VaPYYjJava: http://pastebin.com/ncuqtyZXTu 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.
och, v tej jave tolko hovnokod.cz peral :-)
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).
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.
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 ;-).
Citace: Jakub Galgonek 21. 01. 2014, 00:06:31Java: 14.984sC++/icc: 5.58sC++/g++: 2.64sTak jsem si s tou Javou ještě trochu pohrál a dostal jsem z ní čas 5.893s.
Java: 14.984sC++/icc: 5.58sC++/g++: 2.64s