פורסם: 30/10/2004 - 12:40
נושא ההודעה: perl, python, C benchmarks (תוקן, תודה שלומי)
|
לפני הכל, את כל הבדיקות ערכתי על המערכת הבאה:
קוד: |
$ python -V
Python 2.3.4
$ perl -v
This is perl, v5.8.5 built for i686-linux
Copyright 1987-2004, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.
$ gcc --version
gcc (GCC) 3.4.2 20041025 (Gentoo Linux 3.4.2-r3, ssp-3.4.1-1, pie-8.7.6.5)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
קוד: |
$ cat /proc/version
Linux version 2.6.8.1 (root@omri) (gcc version 3.4.1 20040803 (Gentoo Linux 3.4.1-r2, ssp-3.4-2, pie-8.7.6.5)) #1 Sat Sep 18 14:34:29 IDT 2004
CFLAGS="-march=pentium4 -O2 -pipe"
|
קוד: |
total used free shared buffers cached
Mem: 501 468 33 0 34 231
-/+ buffers/cache: 202 299
Swap: 972 7 965
|
קוד: |
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 2
model name : Intel(R) Pentium(R) 4 CPU 2.40GHz
stepping : 7
cpu MHz : 2411.618
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid
bogomips : 4784.12
|
קוד: | omri@omri ~/notes/benchmarks $ time perl prime.pl
real 0m22.713s
user 0m22.313s
sys 0m0.004s
omri@omri ~/notes/benchmarks $ time python prime.py
real 0m13.439s
user 0m12.808s
sys 0m0.007s
omri@omri ~/notes/benchmarks $ time python prime+psyco.py
real 0m2.415s
user 0m2.221s
sys 0m0.008s
omri@omri ~/notes/benchmarks $ gcc -lm -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m0.621s
user 0m0.587s
sys 0m0.001s
omri@omri ~/notes/benchmarks $ gcc -lm -ffast-math -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m0.662s
user 0m0.613s
sys 0m0.001s
omri@omri ~/notes/benchmarks $ gcc -march=pentium4 -lm -ffast-math -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m0.676s
user 0m0.613s
sys 0m0.000s
omri@omri ~/notes/benchmarks $ gcc -march=pentium4 -omit-frame-pointer -lm -ffast-math -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m0.661s
user 0m0.610s
sys 0m0.000s
omri@omri ~/notes/benchmarks $ gcc -march=pentium4 -omit-frame-pointer -lm -ffast-math -O2 -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m0.581s
user 0m0.537s
sys 0m0.000s
omri@omri ~/notes/benchmarks $ gcc -march=pentium4 -omit-frame-pointer -lm -ffast-math -O3 -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m0.585s
user 0m0.531s
sys 0m0.002s
|
הקוד של כל התוכנות נמצא פה:
http://ftp1.sam-hosting.co.il/~omri/benchmarks/
ובכן, התוצאות מדברות בעד עצמן
_________________ Sure linux is user-friendly, it's just picky about who its friends are
נערך לאחרונה על-ידי omri בתאריך 30/10/2004 - 17:28, סך-הכל נערך 2 פעמים
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 12:53
נושא ההודעה:
|
לא הבנתי מה בדיוק הקטע פה
התוכנית שלך רצה מאד מהר ב c ו python קרובה לזה בעוד ש perl זוחלת? זה המסר?
צר לי, אבל הbranchmark שלך רחוק מלהצביע על משהו. אתה צריך לבחון מגוון רחב מאד של פעולות ובעיות. לא רק לולאה וחיבור.
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 12:56
נושא ההודעה:
|
Anonymous : | לא הבנתי מה בדיוק הקטע פה
התוכנית שלך רצה מאד מהר ב c ו python קרובה לזה בעוד ש perl זוחלת? זה המסר?
צר לי, אבל הbranchmark שלך רחוק מלהצביע על משהו. אתה צריך לבחון מגוון רחב מאד של פעולות ובעיות. לא רק לולאה וחיבור. |
אני יודע שזה לא benchmark אמין מפני שלא בחנתי יותר מדי דברים,
_אבל_, הרעיון של ה benchmark התחיל מתוכנית בפייטון שהפעלתי עם ובלי psyco
ראיתי את השיפור ביצועים האדיר אז החלטתי להשוות את זה לפרל,
אחרי דיון ב #linux.il החלטתי גם להשוות ל C
ככה הכל התפתח...
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:03
נושא ההודעה:
|
מה בדיוק ניסית לבדוק פה?
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:15
נושא ההודעה:
|
תוסיף עוד אפס, כך שזה יבדוק על 10 מיליון בשביל לקבל תוצאות אמיתיות יותר (במיוחד בשביל הג'אווה שאני מקווה שתבדוק).
זה יהיה נחמד אם תבדוק את זה (אני לא יודע כ"כ טוב ג'אווה. אולי אפשר ליעל את התוכנית שכתבתי) גם עם סאן ג'אווה 5:
קוד: |
public class Prime
{
public static void main(String[] args)
{
int prime=0;
long i=0,ii=0;
for (i=3; i<=10000000; i=i+2) {
prime=1;
for (ii=3; ii<=Math.sqrt(i); ii=ii+2) {
if (i % ii== 0) {
prime=0;
break;
}
}
if (prime!=0) {
}
}
}
}
|
ודרך אגב, על האת'לון 1820Mhz (זה BARTON 2500 עם באס גבוה, ומכפלה נמוכה) שלי C לקח 1.307s ופייטון-פסיקו לקח 1.879s.
38.509s לפייטון-פיכו עם 10 מליון.
1m37.021s לג'אווה 5 עם 10 מליון.
32.447s לC עם 10 מליון.
_________________ קוד: | $ uname --operating-system
GNU/Linux |
נערך לאחרונה על-ידי IP בתאריך 30/10/2004 - 13:34, סך-הכל נערך 2 פעמים
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:20
נושא ההודעה:
|
IP : | תוסיף עוד אפס, כך שזה יבדוק על 10 מיליון בשביל לקבל תוצאות אמיתיות יותר (במיוחד בשביל הג'אווה שאני מקווה שתבדוק).
זה יהיה נחמד אם תבדוק את זה (אני לא יודע כ"כ טוב ג'אווה. אולי אפשר ליעל את התוכנית שכתבתי) גם עם סאן ג'אווה 5:
קוד: |
public class Prime
{
public static void main(String[] args)
{
int prime=0;
long i=0,ii=0;
for (i=3; i<=10000000; i=i+2) {
prime=1;
for (ii=3; ii<=Math.sqrt(i); ii=ii+2) {
if (i % ii== 0) {
prime=0;
break;
}
}
}
}
}
|
ודרך אגב, על האת'לון 1820Mhz (זה BARTON 2500 עם באס גבוה, ומכפלה נמוכה) שלי C לקח 1.307s ופייטון-פסיקו לקח 1.879s.
38.509s לפייטון-פיכו עם 10 מליון.
1m35.689s לג'אווה 5 עם 10 מליון. |
ה IF שלא עושה כלום נמצא בכל התוכניות מסיבה כלשהי, כשאתה לא שם אותו בתוכנית ג'אווה שלך אתה "מרמה"
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:20
נושא ההודעה:
|
wliad : | מה בדיוק ניסית לבדוק פה? |
את הביצועים של כל אחת מהשפות
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:31
נושא ההודעה:
|
omri : | wliad : | מה בדיוק ניסית לבדוק פה? |
את הביצועים של כל אחת מהשפות |
הייתי אומר את הביצועים של כל אחד מהקומפילרים.
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:38
נושא ההודעה:
|
omri, אופס... תיקנתי ועדכנתי את התוצאות (עוד שנייה וחצי).
וההשוואה הזאת בודקת כמובן רק על התוכנית המסויימת הזאת. יכול מאוד להיות שביצועים של תוכניות אחרות בשפות/מהדרים שונים יהיו שונים.
_________________ קוד: | $ uname --operating-system
GNU/Linux |
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:42
נושא ההודעה:
|
Anonymous : | omri : | wliad : | מה בדיוק ניסית לבדוק פה? |
את הביצועים של כל אחת מהשפות |
הייתי אומר את הביצועים של כל אחד מהקומפילרים. |
python ו perl הינן שפות סקריפט, ללא קומפיילר...
בקשר ל C, זו השוואת ביצועים עם אופטימיזציות שונות
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:43
נושא ההודעה:
|
IP : | omri, אופס... תיקנתי ועדכנתי את התוצאות (עוד שנייה וחצי).
וההשוואה הזאת בודקת כמובן רק על התוכנית המסויימת הזאת. יכול מאוד להיות שביצועים של תוכניות אחרות בשפות/מהדרים שונים יהיו שונים. |
כמובן, אין לי ספק
אבל סתם בשביל לקבל מושג על הביצועים..
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 13:52
נושא ההודעה:
|
אגב, לבדיקה קצת יותר אמינה, מומלץ להריץ כל פקודה בדיקה של time פעמיים בגלל caching ולהשוות שוב. בכל מקרה, דווקא אהבתי את הרעיון, למרות שהתוצאה היתה ברורה לכולם עוד לפני הקריאה
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 14:07
נושא ההודעה:
|
omri : | Anonymous : | omri : | wliad : | מה בדיוק ניסית לבדוק פה? |
את הביצועים של כל אחת מהשפות |
הייתי אומר את הביצועים של כל אחד מהקומפילרים. |
python ו perl הינן שפות סקריפט, ללא קומפיילר...
בקשר ל C, זו השוואת ביצועים עם אופטימיזציות שונות |
באמת? אז מה לדעתך הקומפילר עושה?
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 14:16
נושא ההודעה:
|
Anonymous : | omri : | Anonymous : | omri : | wliad : | מה בדיוק ניסית לבדוק פה? |
את הביצועים של כל אחת מהשפות |
הייתי אומר את הביצועים של כל אחד מהקומפילרים. |
python ו perl הינן שפות סקריפט, ללא קומפיילר...
בקשר ל C, זו השוואת ביצועים עם אופטימיזציות שונות |
באמת? אז מה לדעתך הקומפילר עושה? |
קומפיילר הופך את הקוד לקובץ בינארי בר-הרצה (executeable)
interpreter מריץ את הקוד בלי קימפול
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 14:29
נושא ההודעה: התוכנית של פרל אינה אופטימלית
|
בתוכנית של פרל, ההשמה ל-prime נמצאת בתוך הלולאה הפנימית ולא מחוצה לה. בשאר התוכניות היא נמצאת לפני הלולאה הפנימית. כך יש הרבה השמות מיותרות. בנוסף, אתה מחשב שוב ושוב את
int(sqrt($i))
שזה דבר יקר. בנוסף מאוד רצוי להשתמש ב-use integer, כי אחרת כל הפעולות הן במספרי נקודה-צפה.
התוכנית הזאת, שהיא יותר אופטימילית מהבחינות האלה:
קוד: |
#!/usr/bin/perl
use integer;
for ($i=3; $i<=1000000; $i+=2) {
$limit = int(sqrt($i));
$prime = 1;
for ($ii=3; $ii<=$limit; $ii+=2) {
#print "i=", $i, ", ii=", $ii, "\n";
if (!($i % $ii)) {
#print $i, " / ", $ii, " = ", $i/$ii, "\n";
$prime = 0;
last;
}
}
if ( $prime ) {
#print $i, " is prime\n";
}
}
|
רצה ב28.9- שניות במקום 47.89 שניות על המחשב שלי.
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 14:43
נושא ההודעה: Re: התוכנית של פרל אינה אופטימלית
|
shlomif : | בתוכנית של פרל, ההשמה ל-prime נמצאת בתוך הלולאה הפנימית ולא מחוצה לה. בשאר התוכניות היא נמצאת לפני הלולאה הפנימית. כך יש הרבה השמות מיותרות. בנוסף, אתה מחשב שוב ושוב את
int(sqrt($i))
שזה דבר יקר. בנוסף מאוד רצוי להשתמש ב-use integer, כי אחרת כל הפעולות הן במספרי נקודה-צפה.
התוכנית הזאת, שהיא יותר אופטימילית מהבחינות האלה:
קוד: |
#!/usr/bin/perl
use integer;
for ($i=3; $i<=1000000; $i+=2) {
$limit = int(sqrt($i));
$prime = 1;
for ($ii=3; $ii<=$limit; $ii+=2) {
#print "i=", $i, ", ii=", $ii, "\n";
if (!($i % $ii)) {
#print $i, " / ", $ii, " = ", $i/$ii, "\n";
$prime = 0;
last;
}
}
if ( $prime ) {
#print $i, " is prime\n";
}
}
|
רצה ב28.9- שניות במקום 47.89 שניות על המחשב שלי. |
באמת הייתה לי שם טעות עם ההשמה של prime, לא שמתי לב לזה
בקשר לחישוב של sqrt(), לא ידעתי שפרל עובדת ככה (אני מניח שגם הקוד ב C יכול להשתפר כשאני אתקן את זה)
כשאני אחזור אני אבצע את הבדיקות מחדש
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 15:59
נושא ההודעה: Re: התוכנית של פרל אינה אופטימלית
|
omri : |
כשאני אחזור אני אבצע את הבדיקות מחדש |
ואני אומר: למה לבזבז את הזמן? אפשר לעשות השוואות הרבה יותר מעניינות, כמו למשל מה יותר מהיר: טרקטור, מכונית פרטית או מכונית מרוץ.
או עם מה יותר קל להכניס מסמר לקיר: מברג, פטיש או צבט?
וכולי וכולי. שעות של הנאה!
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 16:03
נושא ההודעה:
|
אוי. זה כל מה שיש לי לומר בתגובה.
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 16:50
נושא ההודעה:
|
בפייתון אתה יכול "לקמפל" את הקוד לקובץ pyc שהוא bytecode ויותר קל לקריאה על ידי ה interpreter , תנסה לבדוק גם את ההרצה של קובץ כזה, יכול להיות שיהיה שיפור.
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 16:59
נושא ההודעה:
|
shlomi-l : | בפייתון אתה יכול "לקמפל" את הקוד לקובץ pyc שהוא bytecode ויותר קל לקריאה על ידי ה interpreter , תנסה לבדוק גם את ההרצה של קובץ כזה, יכול להיות שיהיה שיפור. |
בקרוב נצפה ממך לbenchmarks רציניים ב smalltalk
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 17:03
נושא ההודעה:
|
shlomi-l : | בפייתון אתה יכול "לקמפל" את הקוד לקובץ pyc שהוא bytecode ויותר קל לקריאה על ידי ה interpreter , תנסה לבדוק גם את ההרצה של קובץ כזה, יכול להיות שיהיה שיפור. |
הרעיון מאחורי זה הוא תוכנית קטנה שמריצה תוכנית גדולה
רק את המודולים אפשר לקמפל ל pyc
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 17:09
נושא ההודעה:
|
omri : | shlomi-l : | בפייתון אתה יכול "לקמפל" את הקוד לקובץ pyc שהוא bytecode ויותר קל לקריאה על ידי ה interpreter , תנסה לבדוק גם את ההרצה של קובץ כזה, יכול להיות שיהיה שיפור. |
הרעיון מאחורי זה הוא תוכנית קטנה שמריצה תוכנית גדולה
רק את המודולים אפשר לקמפל ל pyc |
לא יודע מה לגבי linux, אבל ב windows אני הצלחתי לקמפל את התוכנית שלי ל exe עם py2exe. עובד נפלא.
זכור לי שקיים משהו דומה גם ללינוקס...
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 17:21
נושא ההודעה:
|
Anonymous : | omri : | shlomi-l : | בפייתון אתה יכול "לקמפל" את הקוד לקובץ pyc שהוא bytecode ויותר קל לקריאה על ידי ה interpreter , תנסה לבדוק גם את ההרצה של קובץ כזה, יכול להיות שיהיה שיפור. |
הרעיון מאחורי זה הוא תוכנית קטנה שמריצה תוכנית גדולה
רק את המודולים אפשר לקמפל ל pyc |
לא יודע מה לגבי linux, אבל ב windows אני הצלחתי לקמפל את התוכנית שלי ל exe עם py2exe. עובד נפלא.
זכור לי שקיים משהו דומה גם ללינוקס... |
הרעיון מאחורי py2exe הוא להכניס את כל הקבצים שהתוכנית שלך דורשת לקובץ EXE אחד
אם תראה, לפני שזה הופך ל EXE זה יוצר תיקייה עם כמה קבצים (python23.dll ביניהם)
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 17:36
נושא ההודעה:
|
מכיוון שהייתה טעות בקוד של C ושל פרל (sqrt חושב כל פעם במקום פעם אחת בהתחלה) ואחרי התיקון ראיתי שהתוצאות מאוד דומות בין האופטימיזציות ב C, החלטתי לעשות סיבוב שני ל C
הפעם, במקום מיליון נלך על עשרה מיליון
והנה התוצאות:
קוד: | omri@omri ~/notes/benchmarks $ gcc -lm -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m14.445s
user 0m14.025s
sys 0m0.001s
omri@omri ~/notes/benchmarks $ gcc -lm -ffast-math -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m15.166s
user 0m14.715s
sys 0m0.001s
omri@omri ~/notes/benchmarks $ gcc -lm -march=pentium4 -ffast-math -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m15.355s
user 0m14.847s
sys 0m0.002s
omri@omri ~/notes/benchmarks $ gcc -lm -march=pentium4 -omit-frame-pointer -ffast-math -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m15.289s
user 0m14.835s
sys 0m0.003s
omri@omri ~/notes/benchmarks $ gcc -lm -march=pentium4 -omit-frame-pointer -ffast-math -O2 -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m13.161s
user 0m12.735s
sys 0m0.004s
omri@omri ~/notes/benchmarks $ gcc -lm -march=pentium4 -omit-frame-pointer -ffast-math -O3 -o prime prime.c
omri@omri ~/notes/benchmarks $ time ./prime
real 0m13.141s
user 0m12.744s
sys 0m0.000s
|
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 17:54
נושא ההודעה:
|
אתה יכול לשים את התוצאות בטבלה מסודרת באתר שלך בבקשה?
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 18:01
נושא ההודעה:
|
פשוט לקחת לולאות מקוננות ומדדת כמה זמן הן רצות בכל שפה. אך לכשעצמו הבדיקות האלה חסרות משמעות ואינן מתארות כלום, במיוחד ביישום במציאות.
ניקח את פייתון לדוגמא:
- השתמשת בטווח, ניסית במקום להשתמש בלולאת while שמגדילה ב-1 במקום
- פייתון תומכת ב-else על לולאה, אפשר היה להשתמש בה
- לפייתון יש מודול לטיפול בדברים כאלה, numpy והיורש שלו numarray המשמשים ביישומים מדעיים ומשפרים ביצועים משמעותית. לא השתמשת בהם. גם ל-java יש ספריות כאלה ככל הזכור לי.
בנוסף דבר כזה לא מתאר כלום במציאות. אם היינו מנסים ליישם את הבעיה במציאות, מן הסתם הייתה מתבקשת פונקציה שמחזירה מערך או רשימה של המספרים הראשוניים עבור טווח מבוקש. איך היית מיישם ב-c מה ההשפעה על הביצועים לעומת שפות שרשימות הן דבר טבעי עבורן
ואם הייתי מבקש לשמור את המערך על הדיסק ולשחזר אותו כדי לעשות בו שימוש חוזר עבור ערכים שכבר נמצאו (כדי לא לבזבז זמן עבור כאלה שכבר נמצאו בסטים ענקיים) איך זה היה משפיע על היישום בשפות השונות
ובמקרים שמיישמים את התכונות הנוספות, איך זה משפיע על תחזוקת הקוד קלות הקריאה בחירת שפה בפרט ופיתוח תוכנה בכלל זה לא רק מה רץ הכי מהר עבור מצב מסויים.
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 18:05
נושא ההודעה:
|
_________________ Sure linux is user-friendly, it's just picky about who its friends are
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 18:08
נושא ההודעה:
|
זמן הביצוע של התוכנית הוא ארוך מספיק, כך שזמן הקומפילציה זניח. אתה מוזמן להשוות גרסאות שונות של gcc וגם שימוש ב־tcc כדי להפוך את גרסת ה־C לסקריפט
|
|
חזרה לתוכן הדיון |
פורסם: 30/10/2004 - 18:26
נושא ההודעה:
|
עוד הערה בקשר לקוד הפרל:
לפרל יש אופטימיזציה למקרה הסביר שבו משתנה שלולאה מקודם או מחוסר ב־1 כל פעם. לכן לולאת foreach תעבוד יותר מהר:
foreach my $i (1 .. 10)
במקום מה שתוכניתני C רגילים לכתוב:
for (my $i=1; $i<10; $i++)
במקרה הזה יש כאן לולאה לא שגרתית במיוחד שבה רצוי לדלג על כל מספר שני במינימום הוראות ולכן לולאת for רגילה עדיין יותר מהירה. אבל זה בגלל שפרל לא כוללת אופטימיזציה למקרה הלא שכיח במיוחד הזה.
|
|
חזרה לתוכן הדיון |
|