<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>rust (no need for array but anyway)</p>
<p>[bmaxa@manjaro rust]$ time ./append<br>
10000000 took 0.064016791<br>
110000000 took 0.13466229<br>
<br>
real 0m0.204s<br>
user 0m0.167s<br>
sys 0m0.033s<br>
</p>
<p>haskell (your fastest version)</p>
<p>[bmaxa@manjaro rust]$ time ./concat <br>
"Done"<br>
<br>
real 0m0.224s<br>
user 0m0.220s<br>
sys 0m0.000s<br>
</p>
<p>c++ (no array)</p>
<p>[bmaxa@manjaro rust]$ time ./a.out <br>
<br>
real 0m0.115s<br>
user 0m0.100s<br>
sys 0m0.013s<br>
</p>
<p>rust:</p>
<p>use std::time::*;<br>
<br>
fn main() {<br>
let mut arr=Vec::new();<br>
arr.reserve(10_000_000);<br>
let start = Instant::now();<br>
for _ in 0 .. 10_000_000 {<br>
arr.push("hello world");<br>
}<br>
let end = start.elapsed();<br>
let diff = (end.as_secs()*1000000000 + end.subsec_nanos() as
u64) as f64/1000000000.;<br>
println!("{} took {}",arr.len(),diff);<br>
let mut str = String::new();<br>
str.reserve(110_000_000);<br>
let start = Instant::now();<br>
for i in arr {<br>
str .push_str(i);<br>
}<br>
let end = start.elapsed();<br>
let diff = (end.as_secs()*1000000000 + end.subsec_nanos() as
u64) as f64/1000000000.;<br>
println!("{} took {}",str.len(),diff);<br>
}<br>
<br>
c++:</p>
<p>#include <stdio.h><br>
#include <string><br>
<br>
<br>
int main() {<br>
std::string tmp;<br>
tmp.reserve(110000000);<br>
for (int i=0;i<10000000;i++) {<br>
tmp += "hello world";<br>
}<br>
}<br>
<br>
Model name: Intel(R) Core(TM) i3-5005U CPU @ 2.00GHz<br>
</p>
<br>
<div class="moz-cite-prefix">On 07/12/2016 05:36 AM, William Yager
wrote:<br>
</div>
<blockquote
cite="mid:CAG8oi1NvsmdL+xdyT-GaZo4KMB5UgcY1hV_xOdG-=sjfc35YeA@mail.gmail.com"
type="cite">
<div dir="ltr">You picked the single slowest way to do it. Please
see <a moz-do-not-send="true"
href="https://gist.github.com/wyager/df063ad4edd9a9c8b0ab762c91a79894">https://gist.github.com/wyager/df063ad4edd9a9c8b0ab762c91a79894</a>
<div><br>
</div>
<div>All times are on my Intel Atom Macbook. Compiled with -O3,
no other options.</div>
<div><br>
</div>
<div>Using Lazy Bytestrings (either through the Builder
interface or plain old concatenation) is about 7-7.5 times
faster than string concatenation so on your computer it should
take about 0.12 seconds. In other words, faster than C.</div>
<div><br>
</div>
<div>This is my usual experience with lazy bytestrings; due to
their optimization for cache size, they are extremely fast
with almost no effort. They often out-perform "fast" array
operations in C due to fusion and cache coherency. </div>
<div><br>
</div>
<div>I will note that if you want to do exactly what C does
(often with only slightly different assembly output), you can
often achieve this with unboxed vectors (mutable or immutable,
depending on your application).</div>
<div><br>
</div>
<div>--Will<br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Mon, Jul 11, 2016 at 10:24 PM,
Richard A. O'Keefe <span dir="ltr"><<a
moz-do-not-send="true" href="mailto:ok@cs.otago.ac.nz"
target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:ok@cs.otago.ac.nz">ok@cs.otago.ac.nz</a></a>></span>
wrote:
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
Making a list of "Hello world" 10,000,000 times and then<br>
concatenating that list to produce a single String took<br>
0.87 seconds (start program to end program) in Haskell.<br>
</blockquote>
</div>
</div>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
</blockquote>
<br>
</body>
</html>