Last active
December 18, 2023 21:37
-
-
Save VAndrJ/74971788fd4d966d7ff63493491bde1f to your computer and use it in GitHub Desktop.
Swift built performance benchmark. Results using Xcode 14.3.1.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import os | |
filenames = ["a", "b"] | |
code = [ | |
'someFunc(SomeStruct(str: "Foo"))', | |
'someFunc(.init(str: "Foo"))' | |
] | |
for (i, filename) in enumerate(filenames): | |
with open(filename + ".swift", "w") as f: | |
s = 'struct SomeStruct {\nlet str: String\n}\nfunc someFunc(_ value: SomeStruct) {}\n' | |
for j in range(5000): | |
s += (code[i] + '\n') | |
f.write(s) | |
os.system("hyperfine 'xcrun swiftc -typecheck {}'".format(filename + ".swift")) | |
#Benchmark 1: xcrun swiftc -typecheck a.swift | |
# Time (mean ± σ): 1.726 s ± 0.009 s [User: 1.611 s, System: 0.049 s] | |
# Range (min … max): 1.704 s … 1.735 s 10 runs | |
# | |
#Benchmark 1: xcrun swiftc -typecheck b.swift | |
# Time (mean ± σ): 1.056 s ± 0.009 s [User: 0.934 s, System: 0.057 s] | |
# Range (min … max): 1.037 s … 1.066 s 10 runs | |
codeClass = [ | |
'someFunc(SomeClass())', | |
'someFunc(.init())' | |
] | |
for (i, filename) in enumerate(filenames): | |
with open(filename + ".swift", "w") as f: | |
s = 'struct SomeClass {}\nfunc someFunc(_ value: SomeClass) {}\n' | |
for j in range(5000): | |
s += (codeClass[i] + '\n') | |
f.write(s) | |
os.system("hyperfine 'xcrun swiftc -typecheck {}'".format(filename + ".swift")) | |
#Benchmark 1: xcrun swiftc -typecheck a.swift | |
# Time (mean ± σ): 1.675 s ± 0.011 s [User: 1.569 s, System: 0.042 s] | |
# Range (min … max): 1.662 s … 1.702 s 10 runs | |
# | |
#Benchmark 1: xcrun swiftc -typecheck b.swift | |
# Time (mean ± σ): 995.9 ms ± 5.5 ms [User: 887.5 ms, System: 45.9 ms] | |
# Range (min … max): 989.8 ms … 1007.5 ms 10 runs | |
codeNested = [ | |
'someFunc(SomeStruct.Nested1.Nested2(str: "Foo"))', | |
'someFunc(.init(str: "Foo"))' | |
] | |
for (i, filename) in enumerate(filenames): | |
with open(filename + ".swift", "w") as f: | |
s = 'struct SomeStruct {\nstruct Nested1 {\nstruct Nested2 {\nlet str: String\n}\n}\n}\nfunc someFunc(_ value: SomeStruct.Nested1.Nested2) {}\n' | |
for j in range(5000): | |
s += (codeNested[i] + '\n') | |
f.write(s) | |
os.system("hyperfine 'xcrun swiftc -typecheck {}'".format(filename + ".swift")) | |
#Benchmark 1: xcrun swiftc -typecheck a.swift | |
# Time (mean ± σ): 1.724 s ± 0.006 s [User: 1.617 s, System: 0.045 s] | |
# Range (min … max): 1.715 s … 1.736 s 10 runs | |
# | |
#Benchmark 1: xcrun swiftc -typecheck b.swift | |
# Time (mean ± σ): 1.038 s ± 0.008 s [User: 0.924 s, System: 0.051 s] | |
# Range (min … max): 1.030 s … 1.060 s 10 runs | |
codePoints = [ | |
'someFunc(point: CGPoint(x: {}, y: {}))', | |
'someFunc(point: .init(x: {}, y: {}))' | |
] | |
for (i, filename) in enumerate(filenames): | |
with open(filename + ".swift", "w") as f: | |
s = 'import CoreGraphics\nfunc someFunc(point: CGPoint) {}\n' | |
for j in range(5000): | |
s += (codePoints[i] + '\n').format(j, j) | |
f.write(s) | |
os.system("hyperfine 'xcrun swiftc -typecheck {}'".format(filename + ".swift")) | |
#Benchmark 1: xcrun swiftc -typecheck a.swift | |
# Time (mean ± σ): 2.007 s ± 0.012 s [User: 1.828 s, System: 0.115 s] | |
# Range (min … max): 1.988 s … 2.024 s 10 runs | |
# | |
#Benchmark 1: xcrun swiftc -typecheck b.swift | |
# Time (mean ± σ): 1.310 s ± 0.009 s [User: 1.127 s, System: 0.121 s] | |
# Range (min … max): 1.298 s … 1.324 s 10 runs | |
codeMixed = [ | |
'someFunc(data: SomeClass(data: SomeStruct(data: SomeStruct.Nested1.Nested2(point: CGPoint(x: {}, y: {})))))', | |
'someFunc(data: .init(data: .init(data: .init(point: .init(x: {}, y: {})))))' | |
] | |
for (i, filename) in enumerate(filenames): | |
with open(filename + ".swift", "w") as f: | |
s = """ | |
import CoreGraphics | |
struct SomeStruct { | |
struct Nested1 { | |
struct Nested2 { | |
let point: CGPoint | |
} | |
} | |
let data: Nested1.Nested2 | |
} | |
class SomeClass { | |
let data: SomeStruct | |
init(data: SomeStruct) { | |
self.data = data | |
} | |
} | |
func someFunc(data: SomeClass) { | |
_ = data.data.data.point | |
} | |
""" | |
for j in range(5000): | |
s += (codeMixed[i] + '\n').format(j, j) | |
f.write(s) | |
os.system("hyperfine 'xcrun swiftc -typecheck {}'".format(filename + ".swift")) | |
#Benchmark 1: xcrun swiftc -typecheck a.swift | |
# Time (mean ± σ): 5.959 s ± 0.066 s [User: 5.470 s, System: 0.400 s] | |
# Range (min … max): 5.879 s … 6.049 s 10 runs | |
# | |
#Benchmark 1: xcrun swiftc -typecheck b.swift | |
# Time (mean ± σ): 1.695 s ± 0.014 s [User: 1.474 s, System: 0.156 s] | |
# Range (min … max): 1.675 s … 1.713 s 10 runs |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment