في مناقشة مع اﻷخ فادي حول موضوع (هل يمكن ل Go أو Rust أن تتفوق على ++C في المستقبل )
http://tiny.cc/w6t64yاقترحنا أن نقوم بتجربة عملية لمقارنة سرعات لغات البرمجة، بحيث نبدأ بمثال بسيط ثم نقوم بالتعقيد لبرامج أكثر تقدماً.
البرنامج اﻷول هو لحساب هل الرقم أولي أما لا.
قمت بكتابة كود بالجافا ولغة Go فكانت النتيجة أن السرعة تقريباً واحدة، في معالج Core i3-5005U
هذه نتيجة برنامج جافا:
6673214311 Is prime
Operation took 56 seconds
وهذه نتيجة لغة Go:
6673214311 is Prime
Execution took: 52 seconds
نجد أن لغة Go أسرع فقط بأربع ثواني.
هذا كود الجافا:
public static void main(String[] args) {
Date starttime = new Date();
long number = 6673214311L;
System.out.print(number + " Is ");
if (isPrime(number)){
System.out.println("prime");
} else {
System.out.println("not prime");
}
Date endtime = new Date();
long elapsed = (endtime.getTime() - starttime.getTime());
System.out.println("Operation took " + (elapsed/ 1000) + " seconds");
}
public static boolean isPrime(long number) {
boolean prime = true;
for(long i = 2; i <= number/2; ++i)
{
// condition for nonprime number
if(number % i == 0) {
prime = false;
break;
}
}
return prime;
}
وهذا كود لغة Go:
package main
import ("time")
func main() {
starttime := time.Now()
var number int64
number = 6673214311
print(number, " is ")
if isPrime(number) {
println("Prime")
} else {
println("not prime")
}
elapsed := time.Since(starttime) / 1000000
println("Execution took: ", elapsed/1000, "seconds")
}
func isPrime(number int64) bool {
var prime = true
var i int64
for i = 2; i <= number/2; i++ {
if number%i == 0 {
prime = false
break
}
}
return prime
}
ويمكن تحميل الكود الناتج من جافا ولغة Go من هذا الرابط:
http://code.sd/share/Prime.zipوهو يحتوي على ملف تنفيذي بلغة Go لنظم لينكس 64 بت، وآخر لوندوز 64 بت، وثالث جافا 8 لتشغيل برنامج الجافا:
java -jar JavaPrimeNumber.jar
ننتظر اﻷخ @فادى لكتابة برنامج بلغة C أو ++C
التعليقات