Я был немного обескуражен такой огромной разницей в производительности при работе на 32-битных машинах с 32-разрядными целыми числами на языке Dart.Можно ли написать в Dart высокопроизводительный код, который работает на 32-битных машинах с 32-разрядными целыми числами?
Это означает, что Dart VM все еще не оптимизирован для целочисленной арифметики?
Вот мой довольно простой тест.
void main() {
var tests = new List();
tests.add({"name" : "16-bit", "result" : 0});
tests.add({"name" : "32-bit", "result" : 0});
tests[0]["result"] = test1(0x8000);
tests[1]["result"] = test1(0x80000000);
int best;
for(var test in tests) {
var result = test["result"];
if(best == null) {
best = result;
} else if(best > result) {
best = result;
}
}
for(var test in tests) {
var result = test["result"];
var percent = (result/best * 100).round();
print("${test["name"]}: $percent%");
}
}
int test1(int value) {
int result = 0;
var count = 10000000;
var sw = new Stopwatch();
sw.start();
for(var i = 0; i < count; i++) {
var result = value + i;
}
sw.stop();
return sw.elapsedMicroseconds;
}
Выход:
16-bit: 100%
32-bit: 13285%
Это означает, что в некоторых случаях real
производительность может быть медленнее в 130 раз?
Ваш тест, если недостатки. 'test2' не может использовать 32-битные целые числа, так как число становится большим. – ronag
Я думаю, что программисты, которые не понимают, когда и что происходит, когда числа превышают лимит, являются «неправильными для программистов». – ronag
Я бы сказал тем программистам, что Дарт не может быть подходящим инструментом для работы, если у них такие ОЧЕНЬ особые требования. Я не уверен, в какой момент вы пытаетесь сделать свое разглашение ... – ronag