At 11:52 8/15/00, you wrote:
>On Sat, 12 Aug 2000, Steven Haryanto wrote:
>
> > btw, Python dan Perl sama-sama kurang efisien untuk komputasi
> > numerik, tapi karena keduanya extensible, ada extension yang
> > dibuat untuk itu. Kalau di Python ada Numeric Python, di Perl ada
> > Perl Data Language. Di Python feature arbitrary length integer
> > ada di dalam core language, di Perl ada sebagai extension
> > (Math::BigInt seperti disebut Priyadi). Jadi, kalau bisa sih,
> > jangan pula langsung mengambil kesimpulan bahwa kemampuan numerik
> > Python lebih dari Perl...
> >
><snip>
>
>Math::BigInt?..... heheheheh, nggak tau tuh mau coba dulu, tapi sepertinya
>nggak terlalu pengaruh pada masalah "SPEED". suka atau tidak, python lebih
>cepet dari perl!. Debat nggak ada juntrungnya tentang Perl vs Python
>sering terjadi. Namun kita lebih baik lebih terbuka menerima bahwa hal
>yang baru ternyata lebih baik dari yang kita cintai selama ini.
Bukan saya "tidak terbuka" lho, tapi saya pikir anda salah informasi. Saya
ngga tahu daripada Anda bisa mendapat kesimpulan di atas, tapi sejauh yang
saya tahu, SPEED *bukanlah* salah satu kekuatan Python. Berikut beberapa
tes sederhana:
Pemanasan:
$ time perl -e1
0.02user 0.01system 0:00.03elapsed 100%CPU
$ time python -c1
0.09user 0.00system 0:00.09elapsed 97%CPU
Waktu startup python jauh lebih lambat dari perl. Lihat:
http://deja.com/=dnc/getdoc.xp?AN=652983262
Loop kosong:
$ time perl -e'$i=0; while ($i<1000000) { $i++ }'
1.19user 0.00system 0:01.19elapsed 99%CPU
$ time python -c'i=0
while i<1000000: i=i+1'
2.78user 0.01system 0:02.79elapsed 99%CPU
Python lebih lambat. Salah satu penyebabnya, karena di Python tidak ada
assignment operators (++, --, +=, *=, dll). Assignment operator akan sangat
menguntungkan untuk kasus seperti:
a[b][c][d] = a[b][c][d]+1
di mana Python tidak perlu lookup lokasi memori variabel dua kali. BTW,
untuk assignment operator ini sudah ada patch-nya dan akan di-include di
versi Python mendatang.
Operasi matematik sederhana:
$ time perl -e'$i=0; while ($i<1000000) { $i/7; $i++ }'
2.11user 0.01system 0:02.12elapsed 99%CPU
$ time python -c'i=0
while i<1000000: i/7; i=i+1'
4.55user 0.01system 0:04.56elapsed 99%CPU
Di sini Python masih lebih lambat. Dan harap diingat bahwa secara default,
Perl menyimpan bilangan dan melakukan perhitungan dalam double precision
float. Sementara pada kasus di atas, Python menghitung i/7 dengan operasi
integer! Dengan operasi integer di Perl, hasilnya jelas lebih cepat lagi:
$ time perl -e'use integer; $i=0; while ($i<1000000) { $i/7; $i++ }'
1.77user 0.01system 0:01.77elapsed 100%CPU
Floating point (trigonometri):
$ time perl -e'$i=0; $x=1; while ($i<1000000){ sin($x)**2+cos($x)**2; $i++ }'
4.86user 0.03system 0:04.88elapsed 100%CPU
$ time python -c'from math import sin, cos
i=0; x=1
while i<1000000: sin(x)**2+cos(x)**2; i=i+1'
20.80user 0.00system 0:20.85elapsed 99%CPU
Ditto.
Satu perkecualian adalah Perl jauh lebih lambat dalam arbitrary integer
dengan Math::BigInt:
$ time perl -e'use Math::BigInt;
$a=new Math::BigInt "123456789";
$b=new Math::BigInt "234567890";
$i=0; while ($i<10000) { $a*$b; $i++ }'
9.41user 0.01system 0:09.47elapsed 99%CPU
$ time python -c'
a=123456789L
b=234567890L
i=0
while i<10000: a*b; i=i+1'
0.16user 0.01system 0:00.16elapsed 101%CPU
Tapi mohon dicatat, modul Math::BigInt diimplementasi dalam Perl, bukan C.
Dari manual Math::BigInt:
>>>
BUGS
The current version of this module is a preliminary version of the
real thing that is
currently (as of perl5.002) under development.
<<<
Jika Anda butuh speed, sambil menunggu Math::BigInt baru ada Math::BigInteger
yang pake library C. (Sayang, cara pakainya kurang enak karena tidak
menggunakan
operator overloading dan tidak bisa store negative number):
$ time perl -e'use Math::BigInteger;
$a = BigInteger->new(123456789);
$b = BigInteger->new(234567890);
$r = BigInteger->new;
$i=0;
while ($i<10000){ BigInteger::mul($a,$b,$r); $i++ }'
0.28user 0.03system 0:00.30elapsed 102%CPU
Well, not too bad :) I'm sure there are faster ways of doing arbitrary integer
with Perl.
Untuk perhitungan numerik, pakai extension numerik kedua language (Numerical
Python, PDL) , jangan pakai fasilitas core dari languagenya.
Karena Anda [secara implisit] mengatakan belum pernah mencoba Math::BigInt,
maka saya mengambil kesimpulan bahwa Anda mengatakan "Python lebih cepat
daripada Perl" tanpa membandingkannya lebih dahulu, karena hasil pengamatan
saya sekilas membuktikan bahwa Perl lebih cepat daripada Python.
--
sh
PS: Thread berikut di python-list membahas perbandingan kecepatan kedua bahasa.
Meski sudah cukup lama, rasanya tetap berlaku sampai sekarang:
http://www.egroups.com/message/python-list/15098
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]