Friday, 17 January 2014

bash vs dash vs zsh vs python cho scripting

ubuntu / debian chuyển sang dùng dash làm /bin/sh 3-4 năm trước, vì dash nhanh và nhẹ hơn
dash 0.5.7-4:
A POSIX compliant shell that aims to be as small as possible
 archlinux tiếp tục sử dụng bash và không bao giờ chuyển sang dash
hvn@archhvn: ~ () $ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug 25 19:06 /bin/sh -> bash
freebsd replace tất cả các script perl bằng POSIX shell script (perl is bloat)

dash hay bash
đây là đánh đổi giữa tốc độ / tính portable và tính năng
bash có nhiều tính năng hơn dash (ví dụ: array) nhưng nặng/chậm hơn dash, không POSIX compatible.
man 1 bash
BUGS
       It's too big and too slow.
Nhưng dash nhanh hơn là bao nhiêu?
hvn@archhvn: /tmp () $ cat stupid.sh 
for i in `seq 100000`; do
    echo > /dev/null
done
hvn@archhvn: /tmp () $ time bash stupid.sh 

real 0m1.206s
user 0m0.830s
sys 0m0.333s
hvn@archhvn: /tmp () $ time bash stupid.sh 

real 0m1.186s
user 0m0.830s
sys 0m0.347s
hvn@archhvn: /tmp () $ time dash stupid.sh 

real 0m0.406s
user 0m0.130s
sys 0m0.273s
hvn@archhvn: /tmp () $ time dash stupid.sh 

real 0m0.413s
user 0m0.153s
sys 0m0.257s
có thể thấy dash nhanh > 3 lần bash,
NHƯNG là khi bạn test với hẳn 100000 vòng loop,
liệu bạn có script nào phải loop nhiều như vậy?
nhanh hơn < 1 s như vậy có đáng để bỏ đi những tính năng không?
  • bash nhiều tài liệu hơn, phổ biến hơn
bạn có thực sự cần script của mình POSIX compliant?
=> bash wins, bạn không cần posix compliant, bạn không cần dash

bash vs zsh
viết vài dòng bash thì đơn giản, nhưng viết 1 chương trình > 30 dòng là mọi sự loằng ngoằng của bash bắt đầu lộ diện. Lúc đó là lúc bạn nên dùng 1 script language xịn hơn.
Và giữa cuộc chiến zsh vs Python, không nói ai cũng biết đâu là người chiến thắng.
(nhưng để làm shell interactive thì rõ ràng zsh > bash >> python)

Kết luận
  • dùng bash cho script đơn giản
  • dùng ngôn ngữ bạn thành thạo cho script phức tạp hơn
Lâu không viết nhảm, hết rồi :3