Convert README to English with natural flow
- Recreated entire README in English - Preserved all technical details and data - Improved flow and readability - Kept Swedish version as README_SV.md for reference - All charts and analysis now in English
This commit is contained in:
+726
@@ -0,0 +1,726 @@
|
||||
# Pi-beräkningsbenchmark: Prestandajämförelse av 34 programmeringsspråk
|
||||
|
||||
## Sammanfattning
|
||||
|
||||
Denna studie jämför prestandan hos 34 programmeringsspråk vid beräkning av π (pi) med hög precision. Testet använder Machins formel och mäter exekveringstid för 100, 1000 och 10000 decimaler.
|
||||
|
||||
## Testmiljö
|
||||
|
||||
**Hårdvara:**
|
||||
- **Modell:** MacBook Neo (Mac17,5)
|
||||
- **Processor:** Apple A18 Pro
|
||||
- 6 kärnor: 2 prestandakärnor + 4 effektivitetskärnor
|
||||
- Arkitektur: ARM64
|
||||
- **Minne:** 8 GB RAM
|
||||
- **Operativsystem:** macOS (Darwin)
|
||||
|
||||
**Mätmetod:**
|
||||
- Varje språk körs 4 gånger per test
|
||||
- Första körningen räknas som "warmup" och exkluderas
|
||||
- Resultatet är genomsnittet av de 3 efterföljande körningarna
|
||||
- Tidsmätning i millisekunder (ms)
|
||||
|
||||
## Metod: Machins formel
|
||||
|
||||
Alla implementationer använder Machins formel för π-beräkning:
|
||||
|
||||
```
|
||||
π/4 = 4·arctan(1/5) - arctan(1/239)
|
||||
```
|
||||
|
||||
Där arctan(x) beräknas med Taylor-serien:
|
||||
|
||||
```
|
||||
arctan(x) = x - x³/3 + x⁵/5 - x⁷/7 + ...
|
||||
```
|
||||
|
||||
**Fördelar med denna metod:**
|
||||
1. Snabb konvergens (få termer krävs)
|
||||
2. Enkel implementation
|
||||
3. Hög noggrannhet möjlig
|
||||
4. Endast heltalsaritmetik krävs
|
||||
|
||||
## Resultat
|
||||
|
||||
### Prestandadiagram per språk (100 decimaler)
|
||||
|
||||
Följande Mermaid-diagram visar prestanda för varje språk med faktiska testdata:
|
||||
|
||||
#### Kompilerade språk (Native Code) - Snabbaste
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Kompilerade språk - Tid (ms) vid 100 decimaler"
|
||||
x-axis ["Assembly", "Go", "Nim", "Odin", "Rust", "C", "C++", "Fortran", "Obj-C", "Swift"]
|
||||
y-axis "Tid (ms)" 0 --> 40
|
||||
bar [30, 30, 30, 30, 30, 31, 34, 34, 35, 36]
|
||||
```
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Kompilerade språk - Minnesanvändning (MB) vid 100 decimaler"
|
||||
x-axis ["Assembly", "Go", "Nim", "Odin", "Rust", "C", "C++", "Fortran", "Obj-C", "Swift"]
|
||||
y-axis "Minne (MB)" 0 --> 6
|
||||
bar [0, 0, 0, 0, 0, 0, 0, 1, 5, 4]
|
||||
```
|
||||
|
||||
#### JIT-kompilerade språk
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "JIT-kompilerade språk - Tid (ms) vid 100 decimaler"
|
||||
x-axis ["Java", "CSharp", "Kotlin", "Julia"]
|
||||
y-axis "Tid (ms)" 0 --> 120
|
||||
bar [89, 94, 101, 299]
|
||||
```
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "JIT-kompilerade språk - Minnesanvändning (MB) vid 100 decimaler"
|
||||
x-axis ["Java", "CSharp", "Kotlin", "Julia"]
|
||||
y-axis "Minne (MB)" 0 --> 2
|
||||
bar [1, 1, 1, 1]
|
||||
```
|
||||
|
||||
#### Tolkade språk
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Tolkade språk - Tid (ms) vid 100 decimaler"
|
||||
x-axis ["Python", "Perl", "PHP", "Ruby", "JavaScript"]
|
||||
y-axis "Tid (ms)" 0 --> 180
|
||||
bar [88, 115, 127, 134, 169]
|
||||
```
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Tolkade språk - Minnesanvändning (MB) vid 100 decimaler"
|
||||
x-axis ["Python", "Perl", "PHP", "Ruby", "JavaScript"]
|
||||
y-axis "Minne (MB)" 0 --> 3
|
||||
bar [1, 1, 2, 1, 1]
|
||||
```
|
||||
|
||||
#### Långsammaste språk
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Långsammaste språk - Tid (ms) vid 100 decimaler"
|
||||
x-axis ["Erlang", "R", "Elixir", "Scala", "TypeScript"]
|
||||
y-axis "Tid (ms)" 0 --> 1800
|
||||
bar [311, 351, 606, 737, 1780]
|
||||
```
|
||||
|
||||
### Resursanvändning över tid
|
||||
|
||||
Följande diagram visar minnesanvändning genom programmets hela livstid. X-axeln visar tid i millisekunder från start till slut, och Y-axeln visar minnesanvändning i MB. Varje diagram är skalat för att tydligt visa variationer för just det språket.
|
||||
|
||||
#### Kompilerade språk (Native Code)
|
||||
|
||||
##### C - Snabbaste språket (11ms, minimalt minne)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "C - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 12
|
||||
y-axis "Minne (MB)" 0 --> 1
|
||||
line [0.0]
|
||||
```
|
||||
|
||||
**Analys:** C använder praktiskt taget inget minne och kör på 11ms. Minnet är stabilt på 0 MB under hela körningen.
|
||||
|
||||
##### Rust - Snabb och minneseffektiv (11ms)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Rust - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 12
|
||||
y-axis "Minne (MB)" 0 --> 1
|
||||
line [0.0]
|
||||
```
|
||||
|
||||
**Analys:** Rust matchar C i prestanda och minnesanvändning. Nollkostnadsabstraktioner ger optimal prestanda.
|
||||
|
||||
##### Assembly - Låg-nivå prestanda (18ms)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Assembly - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 20
|
||||
y-axis "Minne (MB)" 0 --> 1
|
||||
line [0.0]
|
||||
```
|
||||
|
||||
**Analys:** Assembly visar liknande prestanda som C och Rust med minimalt minne.
|
||||
|
||||
##### Haskell - Snabb men högt minne (49ms, 10.5MB)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Haskell - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB)" 0 --> 12
|
||||
line [10.5]
|
||||
```
|
||||
|
||||
**Analys:** Haskell är snabb (49ms) men använder betydligt mer minne (10.5 MB) på grund av runtime och garbage collector.
|
||||
|
||||
##### Dart - Högt minne men snabb (41ms, 9.1MB)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Dart - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 12
|
||||
y-axis "Minne (MB)" 0 --> 11
|
||||
line [9.1]
|
||||
```
|
||||
|
||||
**Analys:** Dart visar högre minnesanvändning (9.1 MB) men bibehåller bra prestanda tack vare JIT-kompilering.
|
||||
|
||||
#### Tolkade språk
|
||||
|
||||
##### Elixir - Långsamt men stabilt minne (338ms, 2MB)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Elixir - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 300
|
||||
y-axis "Minne (MB)" 0 --> 3
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
```
|
||||
|
||||
**Analys:** Elixir är långsammare (338ms) men visar mycket stabil minnesanvändning på 2 MB genom hela körningen. BEAM VM ger förutsägbar minnesanvändning.
|
||||
|
||||
##### TypeScript - Långsammast med varierande minne (1780ms, 2MB)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "TypeScript - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 1500
|
||||
y-axis "Minne (MB)" 0 --> 3
|
||||
line [1.9, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
```
|
||||
|
||||
**Analys:** TypeScript är långsammast (1780ms) men visar intressant minnesprofil: startar lägre (1.9 MB) och stabiliseras snabbt på 2 MB.
|
||||
|
||||
##### Scala - JVM-baserad (737ms, 2MB)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Scala - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 360
|
||||
y-axis "Minne (MB)" 0 --> 3
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
```
|
||||
|
||||
**Analys:** Scala på JVM visar stabil minnesanvändning men långsammare exekvering på grund av JVM startup-tid.
|
||||
|
||||
##### JavaScript - Node.js prestanda (169ms, 2MB)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "JavaScript - Minnesanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 500
|
||||
y-axis "Minne (MB)" 0 --> 3
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.0]
|
||||
```
|
||||
|
||||
**Analys:** JavaScript visar stabil minnesanvändning men med en intressant minskning i slutet (0 MB) när processen avslutar.
|
||||
|
||||
#### Jämförelse av minnesanvändning
|
||||
|
||||
##### Snabba språk (< 50ms) - Minnesprofil
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Snabba språk - Minnesanvändning jämförelse"
|
||||
x-axis ["C", "Rust", "Assembly", "Go", "Nim", "Odin", "C++", "Fortran", "Swift", "Haskell", "Dart"]
|
||||
y-axis "Minne (MB)" 0 --> 12
|
||||
bar [0, 0, 0, 0, 0, 0, 0, 1, 0, 10.5, 9.1]
|
||||
```
|
||||
|
||||
**Analys:** De flesta snabba språk använder minimalt minne (0-1 MB), men Haskell och Dart sticker ut med 9-11 MB på grund av sina runtime-miljöer.
|
||||
|
||||
##### Långsamma språk (> 200ms) - Minnesprofil
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Långsamma språk - Minnesanvändning jämförelse"
|
||||
x-axis ["Elixir", "Erlang", "R", "Scala", "TypeScript"]
|
||||
y-axis "Minne (MB)" 0 --> 3
|
||||
bar [2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
```
|
||||
|
||||
**Analys:** Alla långsamma språk visar liknande minnesanvändning (2 MB), vilket tyder på att exekveringstiden inte direkt korrelerar med minnesanvändningen.
|
||||
|
||||
### Binärstorlekar
|
||||
|
||||
Filstorlekar för kompilerade binärer (där tillämpligt):
|
||||
|
||||
| Språk | Binärstorlek | Typ |
|
||||
|-------|--------------|-----|
|
||||
| C | 34K | Native binary |
|
||||
| Assembly | 49K | Native binary |
|
||||
| Fortran | 34K | Native binary |
|
||||
| Objective-C | 50K | Native binary |
|
||||
| Swift | 76K | Native binary |
|
||||
| Nim | 149K | Native binary |
|
||||
| Rust | 497K | Native binary |
|
||||
| Odin | 422K | Native binary |
|
||||
| C++ | 221K | Native binary |
|
||||
| Zig | 2.0M | Native binary |
|
||||
| Crystal | 1.5M | Native binary |
|
||||
| D | 1.3M | Native binary |
|
||||
| Go | 2.5M | Native binary |
|
||||
| Dart | 5.4M | Native binary |
|
||||
| Haskell | 13M | Native binary |
|
||||
| C# | 122K | .NET assembly |
|
||||
| Java | 104B | Wrapper script |
|
||||
| JavaScript | 103B | Wrapper script |
|
||||
| Python | 106B | Wrapper script |
|
||||
| Ruby | 103B | Wrapper script |
|
||||
| Elixir | 106B | Wrapper script |
|
||||
| Erlang | 143B | Wrapper script |
|
||||
| Scala | 114B | Wrapper script |
|
||||
| Kotlin | 109B | Wrapper script |
|
||||
| Julia | 104B | Wrapper script |
|
||||
| TypeScript | 110B | Wrapper script |
|
||||
| Lua | 103B | Wrapper script |
|
||||
| Perl | 103B | Wrapper script |
|
||||
| PHP | 103B | Wrapper script |
|
||||
| R | 105B | Wrapper script |
|
||||
| Bash | 103B | Wrapper script |
|
||||
| Brainfuck | 106B | Wrapper script |
|
||||
| Vimscript | 467B | Wrapper script |
|
||||
| Wolfram | 118B | Wrapper script |
|
||||
|
||||
**Notering:** Wrapper scripts är små shell-script som anropar tolken. Kompilerade språk har faktiska binärer med inbyggd kod.
|
||||
|
||||
### 100 decimaler
|
||||
|
||||
| Språk | Tid (ms) | Kategori | Status |
|
||||
|-------|----------|----------|--------|
|
||||
| C | 6 | Kompilerat (native) | ✓ |
|
||||
| Assembly | 7 | Kompilerat (native) | ✓ |
|
||||
| C++ | 7 | Kompilerat (native) | ✓ |
|
||||
| Nim | 7 | Kompilerat (native) | ✓ |
|
||||
| Odin | 7 | Kompilerat (native) | ✓ |
|
||||
| Rust | 7 | Kompilerat (native) | ✓ |
|
||||
| Fortran | 8 | Kompilerat (native) | ✓ |
|
||||
| Objective-C | 8 | Kompilerat (native) | ✓ |
|
||||
| Crystal | 9 | Kompilerat (native) | ✓ |
|
||||
| Go | 9 | Kompilerat (native) | ✓ |
|
||||
| Swift | 9 | Kompilerat (native) | ✓ |
|
||||
| Lua | 10 | Tolkat (JIT) | ✓ |
|
||||
| D | 12 | Kompilerat (native) | ✓ |
|
||||
| Zig | 12 | Kompilerat (native) | ✓ |
|
||||
| Bash | 14 | Tolkat (skript) | ✓ |
|
||||
| Haskell | 19 | Kompilerat (native) | ✓ |
|
||||
| Dart | 20 | Kompilerat/JIT | ✓ |
|
||||
| Brainfuck | 32 | Esoteriskt | ✓ |
|
||||
| Perl | 34 | Tolkat | ✓ |
|
||||
| Python | 34 | Tolkat | ✓ |
|
||||
| Java | 36 | JIT-kompilerat | ✓ |
|
||||
| C# | 38 | JIT-kompilerat | ✓ |
|
||||
| Kotlin | 47 | JIT-kompilerat | ✓ |
|
||||
| PHP | 56 | Tolkat | ✓ |
|
||||
| Ruby | 62 | Tolkat | ✓ |
|
||||
| JavaScript | 77 | JIT-kompilerat | ✓ |
|
||||
| Erlang | 119 | Tolkat (BEAM) | ✓ |
|
||||
| Julia | 151 | JIT-kompilerat | ✓ |
|
||||
| R | 156 | Tolkat | ✓ |
|
||||
| Elixir | 281 | Tolkat (BEAM) | ✓ |
|
||||
| Scala | 389 | JIT-kompilerat | ✓ |
|
||||
| TypeScript | 884 | JIT-kompilerat | ✓ |
|
||||
| Vimscript | 31 | Tolkat | ✗ (precision) |
|
||||
| Wolfram | - | Tolkat | ✗ (ej konfigurerad) |
|
||||
|
||||
### 1000 decimaler
|
||||
|
||||
| Språk | Tid (ms) | Kategori | Status |
|
||||
|-------|----------|----------|--------|
|
||||
| Assembly | 4 | Kompilerat (native) | ✓ |
|
||||
| C | 4 | Kompilerat (native) | ✓ |
|
||||
| Go | 5 | Kompilerat (native) | ✓ |
|
||||
| Rust | 5 | Kompilerat (native) | ✓ |
|
||||
| Objective-C | 6 | Kompilerat (native) | ✓ |
|
||||
| C++ | 7 | Kompilerat (native) | ✓ |
|
||||
| Crystal | 7 | Kompilerat (native) | ✓ |
|
||||
| D | 10 | Kompilerat (native) | ✓ |
|
||||
| Odin | 10 | Kompilerat (native) | ✓ |
|
||||
| Nim | 11 | Kompilerat (native) | ✓ |
|
||||
| Zig | 12 | Kompilerat (native) | ✓ |
|
||||
| Fortran | 17 | Kompilerat (native) | ✓ |
|
||||
| Dart | 19 | Kompilerat/JIT | ✓ |
|
||||
| Haskell | 19 | Kompilerat (native) | ✓ |
|
||||
| Bash | 26 | Tolkat (skript) | ✓ |
|
||||
| Lua | 29 | Tolkat (JIT) | ✓ |
|
||||
| Brainfuck | 34 | Esoteriskt | ✓ |
|
||||
| Python | 38 | Tolkat | ✓ |
|
||||
| C# | 39 | JIT-kompilerat | ✓ |
|
||||
| Java | 41 | JIT-kompilerat | ✓ |
|
||||
| Kotlin | 49 | JIT-kompilerat | ✓ |
|
||||
| PHP | 58 | Tolkat | ✓ |
|
||||
| Ruby | 65 | Tolkat | ✓ |
|
||||
| Swift | 78 | Kompilerat (native) | ✓ |
|
||||
| Perl | 84 | Tolkat | ✓ |
|
||||
| Erlang | 121 | Tolkat (BEAM) | ✓ |
|
||||
| Julia | 151 | JIT-kompilerat | ✓ |
|
||||
| R | 167 | Tolkat | ✓ |
|
||||
| JavaScript | 195 | JIT-kompilerat | ✓ |
|
||||
| Elixir | 280 | Tolkat (BEAM) | ✓ |
|
||||
| Scala | 342 | JIT-kompilerat | ✓ |
|
||||
| TypeScript | 960 | JIT-kompilerat | ✓ |
|
||||
|
||||
### 10000 decimaler
|
||||
|
||||
| Språk | Tid (ms) | Kategori | Status |
|
||||
|-------|----------|----------|--------|
|
||||
| C | 24 | Kompilerat (native) | ✓ |
|
||||
| Objective-C | 25 | Kompilerat (native) | ✓ |
|
||||
| Assembly | 27 | Kompilerat (native) | ✓ |
|
||||
| Haskell | 50 | Kompilerat (native) | ✓ |
|
||||
| Rust | 53 | Kompilerat (native) | ✓ |
|
||||
| Crystal | 59 | Kompilerat (native) | ✓ |
|
||||
| Go | 78 | Kompilerat (native) | ✓ |
|
||||
| D | 79 | Kompilerat (native) | ✓ |
|
||||
| Brainfuck | 109 | Esoteriskt | ✓ |
|
||||
| C# | 116 | JIT-kompilerat | ✓ |
|
||||
| Ruby | 128 | Tolkat | ✓ |
|
||||
| Dart | 133 | Kompilerat/JIT | ✓ |
|
||||
| Java | 134 | JIT-kompilerat | ✓ |
|
||||
| Kotlin | 141 | JIT-kompilerat | ✓ |
|
||||
| Julia | 161 | JIT-kompilerat | ✓ |
|
||||
| Zig | 181 | Kompilerat (native) | ✓ |
|
||||
| C++ | 185 | Kompilerat (native) | ✓ |
|
||||
| Erlang | 254 | Tolkat (BEAM) | ✓ |
|
||||
| PHP | 264 | Tolkat | ✓ |
|
||||
| Python | 300 | Tolkat | ✓ |
|
||||
| Elixir | 353 | Tolkat (BEAM) | ✓ |
|
||||
| Scala | 435 | JIT-kompilerat | ✓ |
|
||||
| R | 451 | Tolkat | ✓ |
|
||||
| Odin | 459 | Kompilerat (native) | ✓ |
|
||||
| Nim | 463 | Kompilerat (native) | ✓ |
|
||||
| Fortran | 1088 | Kompilerat (native) | ✓ |
|
||||
| Lua | 1543 | Tolkat (JIT) | ✓ |
|
||||
| Perl | 2285 | Tolkat | ✓ |
|
||||
| Bash | 4456 | Tolkat (skript) | ✓ |
|
||||
| Swift | 6735 | Kompilerat (native) | ✓ |
|
||||
| JavaScript | 10065 | JIT-kompilerat | ✓ |
|
||||
| TypeScript | 10334 | JIT-kompilerat | ✓ |
|
||||
|
||||
## Prestandaanalys
|
||||
|
||||
### Kompilerade språk (Native Code)
|
||||
|
||||
**Definition:** Språk som kompileras direkt till maskinkod som exekveras av processorn utan mellanliggande lager.
|
||||
|
||||
**Karaktäristika:**
|
||||
- Direkt exekvering av maskinkod
|
||||
- Ingen runtime overhead
|
||||
- Manuell minneshantering (oftast)
|
||||
- Optimeringar vid kompileringstillfället
|
||||
|
||||
**Testresultat:**
|
||||
- **Snabbaste:** C (24 ms för 10000 decimaler)
|
||||
- **Mekanism:** Kompilerar till optimerad ARM64-maskinkod
|
||||
- **Prestandaintervall:** 4-1088 ms (beroende på implementation och bibliotek)
|
||||
|
||||
**Exempel från testet:**
|
||||
```
|
||||
C: 24 ms (Native code, GMP library)
|
||||
Assembly: 27 ms (Direct ARM64 instructions)
|
||||
Rust: 53 ms (Native code, safe abstractions)
|
||||
Go: 78 ms (Native code, GC overhead)
|
||||
Fortran: 1088 ms (Native code, older implementation)
|
||||
```
|
||||
|
||||
**Varierande prestanda inom kategorin:**
|
||||
- **C/Assembly:** Direkt maskinkod, maximal prestanda
|
||||
- **Rust/Zig:** Nollkostnadsabstraktioner, jämförbar med C
|
||||
- **Go:** Sophämtning (GC) ger liten overhead
|
||||
- **Fortran:** Äldre implementation, mindre optimerad
|
||||
|
||||
### JIT-kompilerade språk (Just-In-Time)
|
||||
|
||||
**Definition:** Språk som kompileras till bytecode vid utveckling, sedan kompileras till maskinkod vid körning.
|
||||
|
||||
**Karaktäristika:**
|
||||
- Kompilering sker vid körning (runtime)
|
||||
- Optimeringar baserade på faktisk användning
|
||||
- Automatisk sophämtning (GC)
|
||||
- Portabilitet mellan plattformar
|
||||
|
||||
**Testresultat:**
|
||||
- **Snabbaste:** Java (134 ms för 10000 decimaler)
|
||||
- **Mekanism:** JVM kompilerar bytecode till maskinkod vid körning
|
||||
- **Prestandaintervall:** 116-10334 ms
|
||||
|
||||
**Exempel från testet:**
|
||||
```
|
||||
Java: 134 ms (JVM JIT optimization)
|
||||
C#: 116 ms (.NET Core JIT)
|
||||
Julia: 161 ms (LLVM JIT, scientific computing)
|
||||
JavaScript: 10065 ms (V8 JIT, dynamic typing overhead)
|
||||
TypeScript: 10334 ms (Compiles to JavaScript)
|
||||
```
|
||||
|
||||
**Varierande prestanda inom kategorin:**
|
||||
- **Java/C#:** Mogna JIT-kompilatorer, bra optimering
|
||||
- **Julia:** Designat för numerisk prestanda
|
||||
- **JavaScript/TypeScript:** Dynamisk typning, hög overhead
|
||||
|
||||
### Tolkade språk
|
||||
|
||||
**Definition:** Språk där källkoden läses och exekveras rad för rad av en tolk (interpreter).
|
||||
|
||||
**Karaktäristika:**
|
||||
- Ingen kompilering i förväg
|
||||
- Direkt exekvering av källkod
|
||||
- Flexibel typning (oftast)
|
||||
- Enklare felsökning
|
||||
|
||||
**Testresultat:**
|
||||
- **Snabbaste:** Lua (1543 ms för 10000 decimaler)
|
||||
- **Mekanism:** Tolk läser och exekverar kod rad för rad
|
||||
- **Prestandaintervall:** 38-4456 ms
|
||||
|
||||
**Exempel från testet:**
|
||||
```
|
||||
Python: 300 ms (CPython interpreter)
|
||||
Ruby: 128 ms (YARV interpreter)
|
||||
Perl: 2285 ms (Perl interpreter)
|
||||
Bash: 4456 ms (Shell interpreter, process spawning)
|
||||
```
|
||||
|
||||
**Varierande prestanda inom kategorin:**
|
||||
- **Python:** Optimerad tolk, C-extensioner för stora tal
|
||||
- **Ruby:** YARV (Yet Another Ruby Virtual machine)
|
||||
- **Perl:** Äldre tolk, mindre optimerad
|
||||
- **Bash:** Startar nya processer för varje operation
|
||||
|
||||
### Funktionella språk (BEAM VM)
|
||||
|
||||
**Definition:** Språk som körs på Erlang Virtual Machine (BEAM), designade för samtidighet och feltolerans.
|
||||
|
||||
**Karaktäristika:**
|
||||
- Kör på virtuell maskin (BEAM)
|
||||
- Optimerade för många samtidiga processer
|
||||
- Inbyggd sophämtning
|
||||
- Feltolerant design
|
||||
|
||||
**Testresultat:**
|
||||
- **Erlang:** 254 ms (10000 decimaler)
|
||||
- **Elixir:** 353 ms (10000 decimaler)
|
||||
|
||||
**Prestandaanalys:**
|
||||
- BEAM VM är optimerad för samtidighet, inte ren beräkning
|
||||
- Overhead från process-schemaläggning
|
||||
- Elixir har ytterligare overhead från Elixir-to-Erlang-kompilering
|
||||
|
||||
## Språkspecifik analys
|
||||
|
||||
### C
|
||||
**Testresultat:**
|
||||
- 100 decimaler: 6 ms
|
||||
- 1000 decimaler: 4 ms
|
||||
- 10000 decimaler: 24 ms
|
||||
- **Binärstorlek:** 34K
|
||||
|
||||
**Teknisk analys:**
|
||||
- Kompilerar direkt till ARM64-maskinkod
|
||||
- Använder GMP-biblioteket för arbitrary precision arithmetic
|
||||
- Ingen runtime overhead
|
||||
- Manuell minneshantering möjliggör optimering
|
||||
|
||||
**Prestandafaktorer:**
|
||||
- Native code execution
|
||||
- Optimerad GMP-implementation
|
||||
- Kompilatoroptimeringar (clang/gcc)
|
||||
|
||||
### Assembly
|
||||
**Testresultat:**
|
||||
- 100 decimaler: 7 ms
|
||||
- 1000 decimaler: 4 ms
|
||||
- 10000 decimaler: 27 ms
|
||||
- **Binärstorlek:** 49K
|
||||
|
||||
**Teknisk analys:**
|
||||
- Direkt ARM64-instruktioner
|
||||
- Ingen abstraktion eller overhead
|
||||
- Manuell registerallokering
|
||||
- Optimerad för specifik processorarkitektur
|
||||
|
||||
**Prestandafaktorer:**
|
||||
- Maximal kontroll över exekvering
|
||||
- Ingen kompilator-overhead
|
||||
- Processor-specifika optimeringar
|
||||
|
||||
### Rust
|
||||
**Testresultat:**
|
||||
- 100 decimaler: 7 ms
|
||||
- 1000 decimaler: 5 ms
|
||||
- 10000 decimaler: 53 ms
|
||||
- **Binärstorlek:** 497K
|
||||
|
||||
**Teknisk analys:**
|
||||
- Kompilerar till native code via LLVM
|
||||
- Nollkostnadsabstraktioner (zero-cost abstractions)
|
||||
- Minnessäkerhet utan GC-overhead
|
||||
- Moderna kompilatoroptimeringar
|
||||
|
||||
**Prestandafaktorer:**
|
||||
- LLVM-backend ger optimerad maskinkod
|
||||
- Ingen sophämtning (ownership system)
|
||||
- Inline-optimeringar
|
||||
|
||||
### Python
|
||||
**Testresultat:**
|
||||
- 100 decimaler: 34 ms
|
||||
- 1000 decimaler: 38 ms
|
||||
- 10000 decimaler: 300 ms
|
||||
- **Binärstorlek:** 106B (wrapper script)
|
||||
|
||||
**Teknisk analys:**
|
||||
- CPython-tolk exekverar bytecode
|
||||
- Inbyggt stöd för arbitrary precision integers
|
||||
- Dynamisk typning med runtime checks
|
||||
- C-extensioner för prestandakritiska delar
|
||||
|
||||
**Prestandafaktorer:**
|
||||
- Tolkad exekvering (10-100x långsammare än native)
|
||||
- Optimerad arbitrary precision implementation
|
||||
- Overhead från dynamisk typning
|
||||
|
||||
### JavaScript (Node.js)
|
||||
**Testresultat:**
|
||||
- 100 decimaler: 77 ms
|
||||
- 1000 decimaler: 195 ms
|
||||
- 10000 decimaler: 10065 ms
|
||||
- **Binärstorlek:** 103B (wrapper script)
|
||||
|
||||
**Teknisk analys:**
|
||||
- V8-motorn JIT-kompilerar JavaScript
|
||||
- Dynamisk typning med hidden classes
|
||||
- Ingen inbyggd arbitrary precision (använder BigInt)
|
||||
- Sophämtning med mark-and-sweep
|
||||
|
||||
**Prestandafaktorer:**
|
||||
- JIT-kompilering ger bra prestanda för små tal
|
||||
- BigInt-implementation har overhead
|
||||
- Dynamisk typning ger overhead vid stora beräkningar
|
||||
|
||||
### Bash
|
||||
**Testresultat:**
|
||||
- 100 decimaler: 14 ms
|
||||
- 1000 decimaler: 26 ms
|
||||
- 10000 decimaler: 4456 ms
|
||||
|
||||
**Teknisk analys:**
|
||||
- Tolkad skalskript
|
||||
- Startar nya processer för varje operation
|
||||
- Ingen inbyggd arbitrary precision
|
||||
- Använder externa verktyg (bc, awk)
|
||||
|
||||
**Prestandafaktorer:**
|
||||
- Process-spawning overhead
|
||||
- Ingen optimering för beräkning
|
||||
- Designat för systemadministration, inte numerisk beräkning
|
||||
|
||||
### Brainfuck
|
||||
**Testresultat:**
|
||||
- 100 decimaler: 32 ms
|
||||
- 1000 decimaler: 34 ms
|
||||
- 10000 decimaler: 109 ms
|
||||
|
||||
**Teknisk analys:**
|
||||
- Esoteriskt språk med endast 8 instruktioner
|
||||
- Tolkad exekvering
|
||||
- Ingen optimering
|
||||
- Minimal instruction set
|
||||
|
||||
**Prestandafaktorer:**
|
||||
- Enkel tolk med minimal overhead
|
||||
- Effektiv för små beräkningar
|
||||
- Skalar dåligt med komplexitet
|
||||
|
||||
## Slutsatser
|
||||
|
||||
### Prestandahierarki
|
||||
|
||||
**1. Kompilerade språk (Native):** 4-1088 ms
|
||||
- Snabbast för numerisk beräkning
|
||||
- Direkt maskinkodsexekvering
|
||||
- Lägst overhead
|
||||
|
||||
**2. JIT-kompilerade språk:** 116-10334 ms
|
||||
- Bra prestanda efter uppvärmning
|
||||
- Plattformsoberoende
|
||||
- Automatisk optimering
|
||||
|
||||
**3. Tolkade språk:** 38-4456 ms
|
||||
- Långsammare exekvering
|
||||
- Enklare utveckling
|
||||
- Flexibel typning
|
||||
|
||||
### Prestandafaktorer
|
||||
|
||||
1. **Kompileringstyp:** Native > JIT > Tolkad
|
||||
2. **Typsystem:** Statisk > Dynamisk
|
||||
3. **Minnesantering:** Manuell > GC > Automatisk
|
||||
4. **Bibliotek:** Optimerade > Standard > Ej optimerade
|
||||
|
||||
### Rekommendationer
|
||||
|
||||
**För maximal prestanda:**
|
||||
- C, Assembly, Rust, Zig
|
||||
|
||||
**För balans mellan prestanda och utvecklingstid:**
|
||||
- Go, Swift, Kotlin, Java
|
||||
|
||||
**För snabb utveckling:**
|
||||
- Python, Ruby, JavaScript
|
||||
|
||||
**För vetenskaplig beräkning:**
|
||||
- Julia, Python (med NumPy), R
|
||||
|
||||
## Metodologi
|
||||
|
||||
### Testprotokoll
|
||||
|
||||
1. **Bygge:** Varje språk kompileras/förbereds enligt `build.sh`
|
||||
2. **Warmup:** Första körningen exkluderas (JIT-uppvärmning, caching)
|
||||
3. **Mätning:** 3 körningar, genomsnitt beräknas
|
||||
4. **Verifiering:** Resultatet jämförs med känt π-värde
|
||||
|
||||
### Reproducerbarhet
|
||||
|
||||
Alla tester kan reproduceras med:
|
||||
```bash
|
||||
./build.sh # Bygg alla språk
|
||||
./test.sh [språk] # Testa korrekthet
|
||||
./run_all.sh [decimaler] # Kör prestandatest
|
||||
```
|
||||
|
||||
### Begränsningar
|
||||
|
||||
- **Hårdvaruberoende:** Resultaten gäller för Apple A18 Pro
|
||||
- **Implementationsspecifika:** Prestanda beror på bibliotek och implementation
|
||||
- **JIT-uppvärmning:** Första körningen kan vara långsammare
|
||||
- **Minnesanvändning:** Ej mätt i denna studie
|
||||
|
||||
## Källkod
|
||||
|
||||
All källkod finns i respektive språkmapp:
|
||||
- `src/` - Källkod
|
||||
- `cmd/` - Byggscript
|
||||
- `bin/` - Körbar fil (efter bygge)
|
||||
|
||||
## Licens
|
||||
|
||||
MIT License - Se LICENSE-fil för detaljer.
|
||||
|
||||
## Författare
|
||||
|
||||
Automatiskt genererad benchmark-studie.
|
||||
Testdatum: 2026-04-23
|
||||
Testmiljö: MacBook Neo, Apple A18 Pro, 8 GB RAM
|
||||
+41
-19
@@ -20,7 +20,8 @@ def read_timeline_data(filepath):
|
||||
if len(parts) >= 3:
|
||||
try:
|
||||
times.append(int(parts[0]))
|
||||
memories.append(int(parts[1]) / 1024) # Convert KB to MB
|
||||
# Memory is now in bytes, convert to MB for display
|
||||
memories.append(int(parts[1]) / (1024 * 1024)) # Convert bytes to MB
|
||||
cpus.append(int(parts[2]))
|
||||
except ValueError:
|
||||
continue
|
||||
@@ -28,7 +29,7 @@ def read_timeline_data(filepath):
|
||||
return times, memories, cpus
|
||||
|
||||
def generate_mermaid_chart(language, times, memories, cpus):
|
||||
"""Generate Mermaid XY chart for a language."""
|
||||
"""Generate Mermaid XY chart for a language with memory and CPU."""
|
||||
if len(times) == 0:
|
||||
return None
|
||||
|
||||
@@ -40,18 +41,26 @@ def generate_mermaid_chart(language, times, memories, cpus):
|
||||
memories = memories[::step]
|
||||
cpus = cpus[::step]
|
||||
|
||||
# Find max values for scaling
|
||||
max_time = max(times)
|
||||
max_memory = max(memories) if max(memories) > 0 else 1
|
||||
max_cpu = max(cpus) if max(cpus) > 0 else 1
|
||||
|
||||
chart = f"```mermaid\n"
|
||||
chart += f"xychart-beta\n"
|
||||
chart += f' title "{language} - Resursanvändning över tid"\n'
|
||||
chart += f' x-axis "Tid (ms)" 0 --> {max(times)}\n'
|
||||
chart += f' y-axis "Minne (MB)" 0 --> {max(memories) + 1}\n'
|
||||
chart += f' line [{", ".join([f"{m:.1f}" for m in memories])}]\n'
|
||||
chart += f' title "{language} - Tidslinje: Minne (MB) och CPU (%)"\n'
|
||||
chart += f' x-axis "Tid (ms)" 0 --> {max_time}\n'
|
||||
chart += f' y-axis "Minne (MB) / CPU (%)" 0 --> {max(max_memory, max_cpu) + 1}\n'
|
||||
# Memory line (in MB)
|
||||
chart += f' line[{", ".join([f"{m:.2f}" for m in memories])}]\n'
|
||||
# CPU line (in %)
|
||||
chart += f' line[{", ".join([f"{c}" for c in cpus])}]\n'
|
||||
chart += f"```\n"
|
||||
|
||||
return chart
|
||||
|
||||
def generate_comparison_chart(languages_data, title, max_time=None):
|
||||
"""Generate comparison chart for multiple languages."""
|
||||
"""Generate comparison chart for multiple languages showing memory and CPU."""
|
||||
if not languages_data or all(len(data[1]) == 0 for data in languages_data):
|
||||
return None
|
||||
|
||||
@@ -62,22 +71,34 @@ def generate_comparison_chart(languages_data, title, max_time=None):
|
||||
# Sample to max 10 points per language
|
||||
max_points = 10
|
||||
sampled_data = []
|
||||
for lang, times, memories in languages_data:
|
||||
for lang, times, memories, cpus in languages_data:
|
||||
if len(times) > max_points:
|
||||
step = len(times) // max_points
|
||||
times = times[::step]
|
||||
memories = memories[::step]
|
||||
sampled_data.append((lang, times, memories))
|
||||
cpus = cpus[::step]
|
||||
sampled_data.append((lang, times, memories, cpus))
|
||||
|
||||
# Find max values for scaling
|
||||
max_memory = max(max(m) if m else 0 for _, _, m, _ in sampled_data)
|
||||
max_cpu = max(max(c) if c else 0 for _, _, _, c in sampled_data)
|
||||
max_y = max(max_memory, max_cpu) + 1
|
||||
|
||||
chart = f"```mermaid\n"
|
||||
chart += f"xychart-beta\n"
|
||||
chart += f' title "{title}"\n'
|
||||
chart += f' x-axis "Tid (ms)" 0 --> {max_time}\n'
|
||||
chart += f' y-axis "Minne (MB)" 0 --> {max(max(m) if m else 0 for _, _, m in sampled_data) + 1}\n'
|
||||
chart += f' y-axis "Minne (MB) / CPU (%)" 0 --> {max_y}\n'
|
||||
|
||||
for lang, times, memories in sampled_data:
|
||||
# Add memory lines for each language
|
||||
for lang, times, memories, cpus in sampled_data:
|
||||
if len(memories) > 0:
|
||||
chart += f' line [{", ".join([f"{m:.1f}" for m in memories])}]\n'
|
||||
chart += f' line[{", ".join([f"{m:.2f}" for m in memories])}]\n'
|
||||
|
||||
# Add CPU lines for each language
|
||||
for lang, times, memories, cpus in sampled_data:
|
||||
if len(cpus) > 0:
|
||||
chart += f' line[{", ".join([f"{c}" for c in cpus])}]\n'
|
||||
|
||||
chart += f"```\n"
|
||||
|
||||
@@ -111,7 +132,8 @@ def main():
|
||||
# Generate output
|
||||
with open(output_file, 'w') as f:
|
||||
f.write("# Resursanvändning över tid\n\n")
|
||||
f.write("Följande diagram visar minnesanvändning över tid för varje språk.\n\n")
|
||||
f.write("Följande diagram visar minnesanvändning (MB) och CPU-användning (%) över tid.\n")
|
||||
f.write("Varje diagram har två linjer: minne (övre) och CPU (undre).\n\n")
|
||||
|
||||
# Individual charts for each language
|
||||
for language, times, memories, cpus in all_languages:
|
||||
@@ -125,29 +147,29 @@ def main():
|
||||
f.write("# Jämförelser\n\n")
|
||||
|
||||
# Fast languages (under 50ms)
|
||||
fast = [(lang, t, m) for lang, t, m, c in all_languages if len(t) > 0 and t[-1] < 50]
|
||||
fast = [(lang, t, m, c) for lang, t, m, c in all_languages if len(t) > 0 and t[-1] < 50]
|
||||
if fast:
|
||||
f.write("## Snabba språk (< 50ms)\n\n")
|
||||
chart = generate_comparison_chart(fast, "Snabba språk - Minnesanvändning")
|
||||
chart = generate_comparison_chart(fast, "Snabba språk - Minne och CPU över tid")
|
||||
if chart:
|
||||
f.write(chart)
|
||||
f.write("\n")
|
||||
|
||||
# Medium languages (50-200ms)
|
||||
medium = [(lang, t, m) for lang, t, m, c in all_languages
|
||||
medium = [(lang, t, m, c) for lang, t, m, c in all_languages
|
||||
if len(t) > 0 and 50 <= t[-1] < 200]
|
||||
if medium:
|
||||
f.write("## Medelsnabba språk (50-200ms)\n\n")
|
||||
chart = generate_comparison_chart(medium, "Medelsnabba språk - Minnesanvändning")
|
||||
chart = generate_comparison_chart(medium, "Medelsnabba språk - Minne och CPU över tid")
|
||||
if chart:
|
||||
f.write(chart)
|
||||
f.write("\n")
|
||||
|
||||
# Slow languages (200ms+)
|
||||
slow = [(lang, t, m) for lang, t, m, c in all_languages if len(t) > 0 and t[-1] >= 200]
|
||||
slow = [(lang, t, m, c) for lang, t, m, c in all_languages if len(t) > 0 and t[-1] >= 200]
|
||||
if slow:
|
||||
f.write("## Långsamma språk (200ms+)\n\n")
|
||||
chart = generate_comparison_chart(slow, "Långsamma språk - Minnesanvändning")
|
||||
chart = generate_comparison_chart(slow, "Långsamma språk - Minne och CPU över tid")
|
||||
if chart:
|
||||
f.write(chart)
|
||||
f.write("\n")
|
||||
|
||||
+163
-195
@@ -1,295 +1,248 @@
|
||||
# Resursanvändning över tid
|
||||
|
||||
Följande diagram visar minnesanvändning över tid för varje språk.
|
||||
Följande diagram visar minnesanvändning (MB) och CPU-användning (%) över tid.
|
||||
Varje diagram har två linjer: minne (övre) och CPU (undre).
|
||||
|
||||
## Bash
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Bash - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 77
|
||||
y-axis "Minne (MB)" 0 --> 2.96875
|
||||
line [2.0, 2.0, 2.0, 2.0]
|
||||
title "Bash - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 9
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.953125
|
||||
line[1.95]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## Brainfuck
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Brainfuck - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 32
|
||||
y-axis "Minne (MB)" 0 --> 2.96875
|
||||
line [2.0, 2.0]
|
||||
```
|
||||
|
||||
## C
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "C - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 5
|
||||
y-axis "Minne (MB)" 0 --> 1.0
|
||||
line [0.0]
|
||||
```
|
||||
|
||||
## C++
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "C++ - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB)" 0 --> 2.4375
|
||||
line [1.4]
|
||||
title "Brainfuck - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 10
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.953125
|
||||
line[1.95]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## CSharp
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "CSharp - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 35
|
||||
y-axis "Minne (MB)" 0 --> 2.984375
|
||||
line [2.0, 2.0]
|
||||
title "CSharp - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 32
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.96875
|
||||
line[1.97, 0.00]
|
||||
line[0, 0]
|
||||
```
|
||||
|
||||
## D
|
||||
## Crystal
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "D - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB)" 0 --> 1.484375
|
||||
line [0.5]
|
||||
title "Crystal - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 5
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2
|
||||
line[0.00]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## Dart
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Dart - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 11
|
||||
y-axis "Minne (MB)" 0 --> 10.09375
|
||||
line [9.1]
|
||||
title "Dart - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 13
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 11.75
|
||||
line[10.75]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## Elixir
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Elixir - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 294
|
||||
y-axis "Minne (MB)" 0 --> 3.0
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
title "Elixir - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 363
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 3.0
|
||||
line[2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00]
|
||||
line[0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
```
|
||||
|
||||
## Erlang
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Erlang - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 101
|
||||
y-axis "Minne (MB)" 0 --> 3.015625
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
title "Erlang - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 105
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.984375
|
||||
line[1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[0, 0, 0, 0, 0]
|
||||
```
|
||||
|
||||
## Fortran
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Fortran - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 32
|
||||
y-axis "Minne (MB)" 0 --> 2.75
|
||||
line [1.8, 1.8]
|
||||
```
|
||||
|
||||
## Go
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Go - Resursanvändning över tid"
|
||||
title "Fortran - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 6
|
||||
y-axis "Minne (MB)" 0 --> 1.0
|
||||
line [0.0]
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2
|
||||
line[0.00]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## Haskell
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Haskell - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 7
|
||||
y-axis "Minne (MB)" 0 --> 11.546875
|
||||
line [10.5]
|
||||
title "Haskell - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 12.46875
|
||||
line[11.47]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## Java
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Java - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 30
|
||||
y-axis "Minne (MB)" 0 --> 2.984375
|
||||
line [2.0, 2.0]
|
||||
title "Java - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 32
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.953125
|
||||
line[1.95, 1.95]
|
||||
line[0, 0]
|
||||
```
|
||||
|
||||
## JavaScript
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "JavaScript - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 494
|
||||
y-axis "Minne (MB)" 0 --> 3.0
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.0]
|
||||
title "JavaScript - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 60
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.984375
|
||||
line[1.98, 1.98, 1.98]
|
||||
line[0, 0, 0]
|
||||
```
|
||||
|
||||
## Julia
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Julia - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 135
|
||||
y-axis "Minne (MB)" 0 --> 3.0
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
title "Julia - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 248
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 3.0
|
||||
line[2.00, 2.00, 2.00, 2.00, 1.94, 1.94, 1.94]
|
||||
line[0, 0, 1, 1, 1, 0, 0]
|
||||
```
|
||||
|
||||
## Kotlin
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Kotlin - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 34
|
||||
y-axis "Minne (MB)" 0 --> 2.96875
|
||||
line [2.0, 2.0]
|
||||
```
|
||||
|
||||
## Lua
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Lua - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 57
|
||||
y-axis "Minne (MB)" 0 --> 3.0
|
||||
line [2.0, 2.0, 2.0]
|
||||
```
|
||||
|
||||
## Nim
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Nim - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB)" 0 --> 3.328125
|
||||
line [2.3]
|
||||
title "Kotlin - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 33
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.953125
|
||||
line[1.95, 1.95]
|
||||
line[0, 0]
|
||||
```
|
||||
|
||||
## Objective-C
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Objective-C - Resursanvändning över tid"
|
||||
title "Objective-C - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 5
|
||||
y-axis "Minne (MB)" 0 --> 1.0
|
||||
line [0.0]
|
||||
```
|
||||
|
||||
## Odin
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Odin - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB)" 0 --> 5.0
|
||||
line [4.0]
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2
|
||||
line[0.00]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## PHP
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "PHP - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 32
|
||||
y-axis "Minne (MB)" 0 --> 2.984375
|
||||
line [2.0, 2.0]
|
||||
title "PHP - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 53
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.984375
|
||||
line[1.98, 1.98, 0.00]
|
||||
line[0, 0, 0]
|
||||
```
|
||||
|
||||
## Perl
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Perl - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 30
|
||||
y-axis "Minne (MB)" 0 --> 2.953125
|
||||
line [2.0, 2.0]
|
||||
title "Perl - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.953125
|
||||
line[1.95]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## Python
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Python - Resursanvändning över tid"
|
||||
title "Python - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 9
|
||||
y-axis "Minne (MB)" 0 --> 2.953125
|
||||
line [2.0]
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.953125
|
||||
line[1.95]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## R
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "R - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 151
|
||||
y-axis "Minne (MB)" 0 --> 2.984375
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
title "R - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 143
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.984375
|
||||
line[1.98, 1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[0, 0, 0, 0, 0, 0]
|
||||
```
|
||||
|
||||
## Ruby
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Ruby - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 53
|
||||
y-axis "Minne (MB)" 0 --> 2.953125
|
||||
line [2.0, 2.0, 2.0]
|
||||
title "Ruby - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 56
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.953125
|
||||
line[1.95, 1.95, 1.95]
|
||||
line[0, 0, 0]
|
||||
```
|
||||
|
||||
## Scala
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Scala - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 351
|
||||
y-axis "Minne (MB)" 0 --> 3.0
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
title "Scala - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 356
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.984375
|
||||
line[1.92, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
```
|
||||
|
||||
## Swift
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Swift - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 7
|
||||
y-axis "Minne (MB)" 0 --> 1.0
|
||||
line [0.0]
|
||||
title "Swift - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 6
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2
|
||||
line[0.00]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## TypeScript
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "TypeScript - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 1419
|
||||
y-axis "Minne (MB)" 0 --> 3.015625
|
||||
line [1.9, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
```
|
||||
|
||||
## Zig
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Zig - Resursanvändning över tid"
|
||||
x-axis "Tid (ms)" 0 --> 8
|
||||
y-axis "Minne (MB)" 0 --> 3.65625
|
||||
line [2.7]
|
||||
title "TypeScript - Tidslinje: Minne (MB) och CPU (%)"
|
||||
x-axis "Tid (ms)" 0 --> 864
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.984375
|
||||
line[1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
```
|
||||
|
||||
# Jämförelser
|
||||
@@ -298,55 +251,70 @@ xychart-beta
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Snabba språk - Minnesanvändning"
|
||||
x-axis "Tid (ms)" 0 --> 35
|
||||
y-axis "Minne (MB)" 0 --> 11.546875
|
||||
line [2.0, 2.0]
|
||||
line [0.0]
|
||||
line [1.4]
|
||||
line [2.0, 2.0]
|
||||
line [0.5]
|
||||
line [9.1]
|
||||
line [1.8, 1.8]
|
||||
line [0.0]
|
||||
line [10.5]
|
||||
line [2.0, 2.0]
|
||||
line [2.0, 2.0]
|
||||
line [2.3]
|
||||
line [0.0]
|
||||
line [4.0]
|
||||
line [2.0, 2.0]
|
||||
line [2.0, 2.0]
|
||||
line [2.0]
|
||||
line [0.0]
|
||||
line [2.7]
|
||||
title "Snabba språk - Minne och CPU över tid"
|
||||
x-axis "Tid (ms)" 0 --> 33
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 12.46875
|
||||
line[1.95]
|
||||
line[1.95]
|
||||
line[1.97, 0.00]
|
||||
line[0.00]
|
||||
line[10.75]
|
||||
line[0.00]
|
||||
line[11.47]
|
||||
line[1.95, 1.95]
|
||||
line[1.95, 1.95]
|
||||
line[0.00]
|
||||
line[1.95]
|
||||
line[1.95]
|
||||
line[0.00]
|
||||
line[0]
|
||||
line[0]
|
||||
line[0, 0]
|
||||
line[0]
|
||||
line[0]
|
||||
line[0]
|
||||
line[0]
|
||||
line[0, 0]
|
||||
line[0, 0]
|
||||
line[0]
|
||||
line[0]
|
||||
line[0]
|
||||
line[0]
|
||||
```
|
||||
|
||||
## Medelsnabba språk (50-200ms)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Medelsnabba språk - Minnesanvändning"
|
||||
x-axis "Tid (ms)" 0 --> 151
|
||||
y-axis "Minne (MB)" 0 --> 3.015625
|
||||
line [2.0, 2.0, 2.0, 2.0]
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
line [2.0, 2.0, 2.0]
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
line [2.0, 2.0, 2.0]
|
||||
title "Medelsnabba språk - Minne och CPU över tid"
|
||||
x-axis "Tid (ms)" 0 --> 143
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 2.984375
|
||||
line[1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[1.98, 1.98, 1.98]
|
||||
line[1.98, 1.98, 0.00]
|
||||
line[1.98, 1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[1.95, 1.95, 1.95]
|
||||
line[0, 0, 0, 0, 0]
|
||||
line[0, 0, 0]
|
||||
line[0, 0, 0]
|
||||
line[0, 0, 0, 0, 0, 0]
|
||||
line[0, 0, 0]
|
||||
```
|
||||
|
||||
## Långsamma språk (200ms+)
|
||||
|
||||
```mermaid
|
||||
xychart-beta
|
||||
title "Långsamma språk - Minnesanvändning"
|
||||
x-axis "Tid (ms)" 0 --> 1443
|
||||
y-axis "Minne (MB)" 0 --> 3.015625
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.0]
|
||||
line [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
line [1.9, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
|
||||
title "Långsamma språk - Minne och CPU över tid"
|
||||
x-axis "Tid (ms)" 0 --> 864
|
||||
y-axis "Minne (MB) / CPU (%)" 0 --> 3.0
|
||||
line[2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00]
|
||||
line[2.00, 2.00, 2.00, 2.00, 1.94, 1.94, 1.94]
|
||||
line[1.92, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98, 1.98]
|
||||
line[0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
line[0, 0, 1, 1, 1, 0, 0]
|
||||
line[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
line[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
```
|
||||
|
||||
|
||||
+4
-3
@@ -37,12 +37,13 @@ verify() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get memory usage of a process (in KB)
|
||||
# Function to get memory usage of a process (in bytes)
|
||||
get_memory_usage() {
|
||||
local pid=$1
|
||||
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
|
||||
# Use ps to get RSS (resident set size) in KB
|
||||
ps -o rss= -p "$pid" 2>/dev/null || echo "0"
|
||||
# Use ps to get RSS (resident set size) in KB, then convert to bytes
|
||||
local kb=$(ps -o rss= -p "$pid" 2>/dev/null || echo "0")
|
||||
echo $((kb * 1024))
|
||||
else
|
||||
echo "0"
|
||||
fi
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
5 0 0
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
14 2048 0
|
||||
40 2048 0
|
||||
64 2048 0
|
||||
87 2048 0
|
||||
12 2048000 0
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
9 2016 0
|
||||
31 2016 0
|
||||
53 2016 0
|
||||
77 2016 0
|
||||
9 2048000 0
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
9 2016 0
|
||||
33 2016 0
|
||||
56 2016 0
|
||||
80 2016 0
|
||||
8 2048000 0
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
9 2016 0
|
||||
33 2016 0
|
||||
54 2016 0
|
||||
75 2016 0
|
||||
8 2048000 0
|
||||
|
||||
|
@@ -1,2 +1,3 @@
|
||||
9 1984 0
|
||||
33 2032 0
|
||||
8 2048000 0
|
||||
32 2048000 0
|
||||
54 2048000 0
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2016 0
|
||||
32 2016 0
|
||||
10 2048000 0
|
||||
32 2048000
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
10 2016 0
|
||||
34 2016 0
|
||||
10 2064384 0
|
||||
31 2064384
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2016 0
|
||||
32 2016 0
|
||||
8 2048000 0
|
||||
28 0 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
9 1440 0
|
||||
8 212992 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 1472 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 1472 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 1472 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
7 0 0
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
5 0 0
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
12 2064 0
|
||||
35 2064 0
|
||||
58 2064 0
|
||||
81 2064 0
|
||||
104 2064 0
|
||||
9 2080768 0
|
||||
46 2080768 0
|
||||
75 2080768 0
|
||||
100 2080768 0
|
||||
123 2080768 0
|
||||
148 2080768 0
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
8 2032 0
|
||||
35 2032 0
|
||||
11 2064384 0
|
||||
32 0 0
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2032 0
|
||||
31 2032 0
|
||||
9 2080768 0
|
||||
34 2080768
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2032 0
|
||||
33 2032 0
|
||||
8 2064384 0
|
||||
33 2064384
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
11 2304 1
|
||||
8 1556480 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
8 4064
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
8 4064
|
||||
4 0 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
8 4064
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
9 480 0
|
||||
9 376832 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
8 496 0
|
||||
8 589824
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
9 496 0
|
||||
8 507904
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
9 496 0
|
||||
7 507904
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
11 5344 0
|
||||
31 0 0
|
||||
8 5226496 0
|
||||
43 14336000
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
11 9312 0
|
||||
13 11272192 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
11 9856 0
|
||||
10 10240000 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
11 8752 0
|
||||
11 10272768 0
|
||||
|
||||
|
+17
-16
@@ -1,16 +1,17 @@
|
||||
14 1984 0
|
||||
39 2064 0
|
||||
65 2064 0
|
||||
94 2064 0
|
||||
117 2064 0
|
||||
143 2064 0
|
||||
165 2064 0
|
||||
188 2064 0
|
||||
214 2064 0
|
||||
237 2064 0
|
||||
261 2064 0
|
||||
285 2064 0
|
||||
306 2064 0
|
||||
333 2064 0
|
||||
356 2064 0
|
||||
382 2064 0
|
||||
9 2015232 0
|
||||
31 2080768 0
|
||||
54 2080768 0
|
||||
79 2080768 0
|
||||
107 2080768 0
|
||||
134 2080768 0
|
||||
159 2080768 0
|
||||
182 2080768 0
|
||||
205 2080768 0
|
||||
227 2080768 0
|
||||
249 2080768 0
|
||||
273 2080768 0
|
||||
296 2080768 0
|
||||
324 2080768 0
|
||||
346 2080768 0
|
||||
371 2080768 0
|
||||
395 2080768 0
|
||||
|
||||
|
+13
-13
@@ -1,13 +1,13 @@
|
||||
8 2048 0
|
||||
31 2048 0
|
||||
55 2048 0
|
||||
81 2048 0
|
||||
103 2048 0
|
||||
129 2048 0
|
||||
153 2048 0
|
||||
178 2048 0
|
||||
201 2048 0
|
||||
224 2048 0
|
||||
247 2048 0
|
||||
270 2048 0
|
||||
294 2048 0
|
||||
18 2097152 0
|
||||
54 2097152 0
|
||||
93 2097152 1
|
||||
138 2097152 1
|
||||
172 2097152 1
|
||||
196 2097152 0
|
||||
219 2097152 0
|
||||
245 2097152 0
|
||||
268 2097152 0
|
||||
292 2097152 0
|
||||
315 2097152 0
|
||||
338 2097152 0
|
||||
363 2097152 0
|
||||
|
||||
|
+14
-12
@@ -1,12 +1,14 @@
|
||||
9 2048 0
|
||||
32 2048 0
|
||||
55 2048 0
|
||||
79 2048 0
|
||||
102 2048 0
|
||||
126 2048 0
|
||||
149 2048 0
|
||||
173 2048 0
|
||||
200 2048 0
|
||||
223 2048 0
|
||||
248 2048 0
|
||||
272 2048 0
|
||||
8 2080768 0
|
||||
31 2080768 0
|
||||
55 2080768 0
|
||||
78 2080768 0
|
||||
110 2080768 0
|
||||
145 2080768 0
|
||||
177 2080768 0
|
||||
212 2080768 0
|
||||
242 2080768 0
|
||||
265 2080768 0
|
||||
288 2080768 0
|
||||
311 2080768 0
|
||||
335 2080768 0
|
||||
359 2080768 0
|
||||
|
||||
|
+12
-12
@@ -1,12 +1,12 @@
|
||||
7 2048 0
|
||||
29 2048 0
|
||||
54 2048 0
|
||||
79 2048 0
|
||||
105 2048 0
|
||||
128 2048 0
|
||||
153 2048 0
|
||||
176 2048 0
|
||||
199 2048 0
|
||||
222 2048 0
|
||||
245 2048 0
|
||||
269 2048 0
|
||||
10 2097152 0
|
||||
34 2097152 0
|
||||
58 2097152 0
|
||||
84 2097152 0
|
||||
107 2097152 0
|
||||
130 2097152 0
|
||||
153 2097152 0
|
||||
177 2097152 0
|
||||
201 2097152 0
|
||||
224 2097152 0
|
||||
246 2097152 0
|
||||
270 2097152 0
|
||||
|
||||
|
@@ -1,6 +1,5 @@
|
||||
11 1984 0
|
||||
35 2096 0
|
||||
60 2096 0
|
||||
84 2096 0
|
||||
109 2096 0
|
||||
132 2096
|
||||
9 2015232 0
|
||||
32 2080768 0
|
||||
56 2080768 0
|
||||
78 2080768 0
|
||||
102 2080768 0
|
||||
|
||||
|
@@ -1,6 +1,5 @@
|
||||
8 2064 0
|
||||
32 2064 0
|
||||
55 2064 0
|
||||
79 2064 0
|
||||
101 2064 0
|
||||
125 2064
|
||||
9 2080768 0
|
||||
31 2080768 0
|
||||
57 2080768 0
|
||||
83 2080768 0
|
||||
105 2080768 0
|
||||
|
||||
|
@@ -1,6 +1,5 @@
|
||||
7 2064 0
|
||||
32 2064 0
|
||||
56 2064 0
|
||||
78 2064 0
|
||||
102 2064 0
|
||||
120 0 0
|
||||
8 2080768 0
|
||||
31 2080768 0
|
||||
55 2080768 0
|
||||
77 2080768 0
|
||||
100 2080768 0
|
||||
|
||||
|
@@ -1,6 +1,5 @@
|
||||
8 2048 0
|
||||
33 2064 0
|
||||
55 2064 0
|
||||
79 2064 0
|
||||
101 2064 0
|
||||
122 2064 0
|
||||
10 2080768 0
|
||||
35 2080768 0
|
||||
58 2080768 0
|
||||
83 2080768 0
|
||||
107 2080768 0
|
||||
|
||||
|
@@ -1,3 +1 @@
|
||||
9 1776 0
|
||||
32 1776 8
|
||||
53 0 0
|
||||
7 1556480
|
||||
|
||||
|
@@ -1,2 +1 @@
|
||||
8 1792 0
|
||||
32 1792 7
|
||||
6 0 0
|
||||
|
||||
|
@@ -1,2 +1 @@
|
||||
9 1792 0
|
||||
32 1792 0
|
||||
3 0 0
|
||||
|
||||
|
@@ -1,2 +1 @@
|
||||
9 1792 0
|
||||
32 1792 0
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
8 1632 0
|
||||
8 1884160
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
6 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
6 0 0
|
||||
|
||||
|
@@ -1,2 +1 @@
|
||||
10 1520 0
|
||||
34 11872 0
|
||||
8 753664 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
7 10800 0
|
||||
8 12025856 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
9 10800 1
|
||||
7 12025856 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
8 10800 0
|
||||
7 12025856 0
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
9 1984 0
|
||||
33 2032 0
|
||||
56 2032 0
|
||||
80 2032 0
|
||||
107 2032 0
|
||||
8 2048000 0
|
||||
30 2048000 0
|
||||
53 2048000 0
|
||||
76 2048000 0
|
||||
99 2048000 0
|
||||
123 2048000 0
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
8 2032 0
|
||||
30 2032 0
|
||||
9 2048000 0
|
||||
32 2048000 0
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2016 0
|
||||
36 2016 0
|
||||
8 2048000 0
|
||||
33 2048000
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2016 0
|
||||
35 2016 0
|
||||
9 2048000 0
|
||||
33 2048000 0
|
||||
|
||||
|
@@ -1,25 +1,8 @@
|
||||
7 2048 0
|
||||
32 2048 0
|
||||
54 2048 0
|
||||
77 2048 0
|
||||
103 2048 0
|
||||
127 2048 0
|
||||
150 2048 0
|
||||
178 2048 0
|
||||
202 2048 0
|
||||
224 2048 0
|
||||
249 2048 0
|
||||
271 2048 0
|
||||
295 2048 0
|
||||
317 2048 0
|
||||
340 2048 0
|
||||
365 2048 0
|
||||
388 2048 0
|
||||
415 2048 0
|
||||
443 2048 0
|
||||
467 2048 0
|
||||
490 2048 0
|
||||
515 2048 0
|
||||
537 2048 0
|
||||
561 2048 0
|
||||
583 2048 0
|
||||
8 2080768 0
|
||||
32 2080768 0
|
||||
54 2080768 0
|
||||
76 2080768 0
|
||||
101 2080768 0
|
||||
123 2080768 0
|
||||
148 2080768 0
|
||||
170 2080768 0
|
||||
|
||||
|
@@ -1,21 +1,3 @@
|
||||
8 2048 0
|
||||
33 2048 0
|
||||
65 2048 0
|
||||
90 2048 0
|
||||
114 2048 0
|
||||
138 2048 0
|
||||
161 2048 0
|
||||
186 2048 0
|
||||
209 2048 0
|
||||
232 2048 0
|
||||
257 2048 0
|
||||
281 2048 0
|
||||
304 2048 0
|
||||
338 2048 0
|
||||
361 2048 0
|
||||
385 2048 0
|
||||
406 2048 0
|
||||
429 2048 0
|
||||
452 2048 0
|
||||
476 2048 0
|
||||
494 0 0
|
||||
9 2080768 0
|
||||
34 2080768 0
|
||||
60 2080768 0
|
||||
|
||||
|
@@ -1,22 +1,3 @@
|
||||
9 2048 0
|
||||
32 2048 0
|
||||
57 2048 0
|
||||
84 2048 0
|
||||
108 2048 0
|
||||
130 2048 0
|
||||
152 2048 0
|
||||
175 2048 0
|
||||
204 2048 0
|
||||
229 2048 0
|
||||
257 2048 0
|
||||
280 2048 0
|
||||
304 2048 0
|
||||
328 2048 0
|
||||
355 2048 0
|
||||
380 2048 0
|
||||
403 2048 0
|
||||
427 2048 0
|
||||
451 2048 0
|
||||
472 2048 0
|
||||
493 2048 0
|
||||
512 0 0
|
||||
8 2080768 0
|
||||
33 2080768 0
|
||||
57 2080768 0
|
||||
|
||||
|
@@ -1,22 +1,3 @@
|
||||
9 2048 0
|
||||
32 2048 0
|
||||
55 2048 0
|
||||
84 2048 0
|
||||
108 2048 0
|
||||
132 2048 0
|
||||
155 2048 0
|
||||
179 2048 0
|
||||
202 2048 0
|
||||
226 2048 0
|
||||
252 2048 0
|
||||
276 2048 0
|
||||
297 2048 0
|
||||
322 2048 0
|
||||
348 2048 0
|
||||
373 2048 0
|
||||
396 2048 0
|
||||
418 2048 0
|
||||
443 2048 0
|
||||
466 2048 0
|
||||
488 2048 0
|
||||
507 0 0
|
||||
10 2080768 0
|
||||
35 2080768 0
|
||||
59 2080768 0
|
||||
|
||||
|
+33
-34
@@ -1,34 +1,33 @@
|
||||
8 2048 0
|
||||
32 2048 0
|
||||
55 2048 0
|
||||
77 2048 0
|
||||
102 2048 0
|
||||
124 2048 0
|
||||
149 2048 0
|
||||
171 2048 0
|
||||
195 2048 0
|
||||
219 2048 0
|
||||
243 2048 0
|
||||
268 2048 0
|
||||
293 2048 0
|
||||
317 2048 0
|
||||
342 2048 0
|
||||
366 2048 0
|
||||
390 2048 0
|
||||
413 2048 0
|
||||
436 2048 0
|
||||
464 2048 0
|
||||
486 2048 0
|
||||
506 2048 0
|
||||
530 2048 0
|
||||
553 2048 0
|
||||
582 2048 0
|
||||
605 2048 0
|
||||
630 2048 0
|
||||
652 2048 0
|
||||
675 2048 0
|
||||
699 2048 0
|
||||
722 2048 0
|
||||
753 2048 0
|
||||
785 2048 0
|
||||
807 0 0
|
||||
8 2080768 0
|
||||
30 2080768 0
|
||||
54 2080768 0
|
||||
77 2080768 0
|
||||
101 2080768 0
|
||||
130 2080768 0
|
||||
154 2080768 0
|
||||
176 2080768 0
|
||||
201 2080768 0
|
||||
223 2080768 0
|
||||
245 2080768 0
|
||||
273 2080768 0
|
||||
295 2080768 0
|
||||
319 2080768 0
|
||||
342 2080768 0
|
||||
366 2080768 0
|
||||
387 2080768 0
|
||||
411 2080768 0
|
||||
434 2080768 0
|
||||
455 2080768 0
|
||||
478 2080768 0
|
||||
516 2080768 0
|
||||
593 1277952 0
|
||||
621 1277952 0
|
||||
658 1277952 0
|
||||
684 1277952 0
|
||||
708 1277952 0
|
||||
733 1277952 0
|
||||
755 1277952 0
|
||||
778 1277952 0
|
||||
832 1277952 0
|
||||
993 1277952 0
|
||||
1018 1261568 0
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
8 2048 0
|
||||
32 2048 0
|
||||
58 2048 0
|
||||
82 2048 0
|
||||
110 2048 0
|
||||
135 2048 0
|
||||
11 2097152 0
|
||||
48 2097152 0
|
||||
90 2097152 1
|
||||
160 2097152 1
|
||||
191 2031616 1
|
||||
218 2031616 0
|
||||
248 2031616 0
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
8 2048 0
|
||||
33 2048 0
|
||||
56 2048 0
|
||||
81 2048 0
|
||||
103 2048 0
|
||||
128 2048 0
|
||||
8 2015232 0
|
||||
31 2080768 0
|
||||
58 2080768 0
|
||||
89 2080768 0
|
||||
115 2080768 0
|
||||
141 2080768 0
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
8 2048 0
|
||||
34 2048 0
|
||||
61 2048 0
|
||||
85 2048 0
|
||||
107 2048 0
|
||||
137 2048 0
|
||||
10 2080768 0
|
||||
34 2080768 0
|
||||
59 2080768 0
|
||||
83 2080768 0
|
||||
106 2080768 0
|
||||
131 2080768 0
|
||||
|
||||
|
@@ -1,3 +1,8 @@
|
||||
8 1968 0
|
||||
34 2016 0
|
||||
56 2016 0
|
||||
18 2048000 0
|
||||
45 2048000 0
|
||||
70 2048000 0
|
||||
98 2048000 0
|
||||
122 2048000 0
|
||||
144 2048000 0
|
||||
167 2048000 0
|
||||
194 2048000 0
|
||||
|
||||
|
@@ -1,3 +1,2 @@
|
||||
8 2016 0
|
||||
34 2016 0
|
||||
59 2016
|
||||
8 2048000 0
|
||||
33 2048000 0
|
||||
|
||||
|
@@ -1,3 +1,2 @@
|
||||
9 2016 0
|
||||
35 2016 0
|
||||
53 0 0
|
||||
8 2048000 0
|
||||
34 2048000 0
|
||||
|
||||
|
@@ -1,3 +1,2 @@
|
||||
10 2016 0
|
||||
36 2016 0
|
||||
59 0 0
|
||||
10 2048000 0
|
||||
38 2048000 0
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
12 2080 0
|
||||
39 2080 0
|
||||
62 2080 0
|
||||
81 0 0
|
||||
8 2080768 0
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
9 2048 0
|
||||
31 2048 0
|
||||
57 2048 0
|
||||
80 2048
|
||||
9 2080768
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
8 2048 0
|
||||
32 2048 0
|
||||
54 2048 0
|
||||
76 2048
|
||||
8 2097152 0
|
||||
|
||||
|
@@ -1,4 +1 @@
|
||||
8 2048 0
|
||||
28 2048 0
|
||||
50 2048 0
|
||||
71 2048 0
|
||||
8 2080768
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
8 2128 0
|
||||
5 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 2384 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 2368 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 2368 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
5 0 0
|
||||
5 5308416 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
6 0 0
|
||||
7 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
6 0 0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
10 2288 0
|
||||
7 0 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 4096 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 4096 0
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
8 4176 1
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
11 2032 0
|
||||
98 2032 0
|
||||
140 2032 0
|
||||
163 2032 0
|
||||
184 2032 0
|
||||
206 2032 0
|
||||
8 2080768 0
|
||||
31 2080768 0
|
||||
52 2080768 0
|
||||
75 2080768 0
|
||||
97 2080768 0
|
||||
121 2080768 0
|
||||
|
||||
|
@@ -1,3 +1,3 @@
|
||||
8 2032 0
|
||||
32 2032 0
|
||||
55 2032
|
||||
8 2080768 0
|
||||
32 2080768 0
|
||||
53 0 0
|
||||
|
||||
|
@@ -1,3 +1,3 @@
|
||||
8 2032 0
|
||||
28 2032 0
|
||||
52 2032 0
|
||||
12 2080768 0
|
||||
35 2080768 0
|
||||
61 2080768 0
|
||||
|
||||
|
@@ -1,3 +1,3 @@
|
||||
8 2032 0
|
||||
32 2032 0
|
||||
53 2032 0
|
||||
9 2080768 0
|
||||
35 2080768 0
|
||||
56 2080768 0
|
||||
|
||||
|
@@ -1,9 +1,2 @@
|
||||
8 2016 0
|
||||
36 2016 0
|
||||
65 2016 0
|
||||
89 2016 0
|
||||
112 2016 0
|
||||
135 2016 0
|
||||
158 2016 0
|
||||
183 2016 0
|
||||
201 0 0
|
||||
8 2048000 0
|
||||
33 2048000 0
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
8 2000 0
|
||||
30 2000 0
|
||||
8 2048000 0
|
||||
31 2048000
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 1984 0
|
||||
32 2000
|
||||
11 2064384 0
|
||||
34 2064384
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
8 2000 0
|
||||
30 2000 0
|
||||
8 2048000 0
|
||||
31 2048000
|
||||
|
||||
|
@@ -1,3 +1,3 @@
|
||||
11 1968 0
|
||||
37 2016 0
|
||||
57 0 0
|
||||
8 2048000 0
|
||||
30 2048000 0
|
||||
54 2048000 0
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2000 0
|
||||
31 2000
|
||||
9 2048000 0
|
||||
32 2048000
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
9 2000 0
|
||||
32 2000
|
||||
11 2064384 0
|
||||
42 2064384
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user