CocroachDB, InfluxDB, VictoriaMetrics, Vitess, Prometheus, NATS, Minio, Caddy, Hugo, GVisor - это то, что быстро пришло на ум помимо того, что указано в статье.
К вышеперечисленны еще можно добавить Zig в котором обобщенное программирование и compile-time execution сделаны совершенно иным образом и возможно даже лучше, при этом так же исповедуя zero-cost абстракции!
В примере на C++ у вас используется 32 битный int, а в Go int не является типом с фиксированной размерностью, а по сему на 64-х битном CPU он соответствует int64 и как следствие результат «хуже»!
Ниже корректный пример который выполняется на моем i7-8565U за 1.691030168s, что практически эквивалентно C++.
package main
import (
"fmt"
"math"
"time"
)
func isPrime(num int32) bool {
if num == 2 {
return true
}
if num <= 1 || num%2 == 0 {
return false
}
to := int32(math.Sqrt(float64(num)))
for div := int32(3); div <= to; div += 2 {
if num%div == 0 {
return false
}
}
return true
}
func main() {
st := time.Now()
for i := int32(0); i < 10_000_000; i++ {
isPrime(i)
}
fmt.Printf("%+v\n", time.Since(st))
}
CocroachDB, InfluxDB, VictoriaMetrics, Vitess, Prometheus, NATS, Minio, Caddy, Hugo, GVisor - это то, что быстро пришло на ум помимо того, что указано в статье.
К вышеперечисленны еще можно добавить Zig в котором обобщенное программирование и compile-time execution сделаны совершенно иным образом и возможно даже лучше, при этом так же исповедуя zero-cost абстракции!
В примере на C++ у вас используется 32 битный int, а в Go int не является типом с фиксированной размерностью, а по сему на 64-х битном CPU он соответствует int64 и как следствие результат «хуже»!
Ниже корректный пример который выполняется на моем i7-8565U за 1.691030168s, что практически эквивалентно C++.