SO SÁNH TỐC ĐỘ GIỮA CÁC NGÔN NGỮ LẬP TRÌNH

1,496 views
Skip to first unread message

TheLos

unread,
Sep 22, 2009, 7:12:57 AM9/22/09
to DESIGN WEBPAGE
Chúng ta thường nghe nói ngôn ngữ C là một trong những ngôn ngữ chạy
nhanh nhất, ở đây chúng ta đề cập là tốc độ chạy chương trịnh của tập
tin nhị phân sau khi đă biên dịch.
Vậy điều đó căn cứ vào đâu khi cùng là ngôn ngữ C nhưng lại có nhiều
bản của nhiều hăng khác nhau như của Borland,Microsoft…
Người ta lại nói rằng ngôn ngữ Pascal chạy chậm hơn ngôn ngữ C trong
khi ta có bản Borland Pascal và bản Borland C cùng của hăng Borland.
Mà ta lại biết rằng tất cả các sản phẩm của 1 ngôn ngữ lập tŕnh lại
chỉ là tập tin nhị phân có đuôi là Exe hay Com.Vậy th́ tốc độ nhanh
hay chậm được đánh giá từ đâu:
Thứ nhất có thể là hiệu quả chưa cao của việc biên dịch từ mă nguồn
sang tập tin nhị phân(thật ra th́ c̣n bước trung gian là chuyển sang
mă asembly) vậy th́ giữa Borland Pascal và Borland C tại sao lại khác
nhau về tốc độ chứ.
Cách giải thích thứ hai là các bản khác nhau của C đều dùng một “lơi
biên dịch chung” nào đó,do đó mà nó có tốc độ nhanh hơn Pascal.Nhưng
ta lại đặt ra câu hỏi rằng tại sao một hăng phần mềm nổi tiếng như
Borland lại không thể tối ưu hóa Pascal cho nó chạy nhanh như C.
Nếu so sánh tốc độ giữa ngôn ngữ Asembler với các ngôn ngữ bậc cao th́
ta thấy rằng khi viết bằng Asembler th́ mă lệnh sẽ chặt chẽ với công
việc yêu cầu của chương tŕnh và sẽ không có các lệnh “dư thừa” như
với ngôn ngữ bậc cao do đó tốc độ thực thi của chương tŕnh sẽ nhanh
hơn hơn.
Các bạn nghĩ sao xin hăy góp ư kiến .

hoanglong

unread,
Sep 22, 2009, 7:15:55 AM9/22/09
to DESIGN WEBPAGE
Mà ta lại biết rằng tất cả các sản phẩm của 1 ngôn ngữ lập tŕnh lại
chỉ là tập tin nhị phân có đuôi là Exe hay Com.Vậy th́ tốc độ nhanh
hay chậm được đánh giá từ đâu:

Chính xác là ra mã máy, và tuỳ hệ điều hành mà cấu trúc của file nhị
phân này ra sao
Việc đo tốc độ thực thi của file nhị phân có tool đấy, hơn nữa việc
chuyển từ mã con người có thể đọc sang mã máy của mỗi ngôn ngữ dùng
thuật toán khác nhau - thế nên mới gọi C,Pascal là trình biên dịch :).

Nếu so sánh tốc độ giữa ngôn ngữ Asembler với các ngôn ngữ bậc cao th́
ta thấy rằng khi viết bằng Asembler th́ mă lệnh sẽ chặt chẽ với công
việc yêu cầu của chương tŕnh và sẽ không có các lệnh “dư thừa” như
với ngôn ngữ bậc cao do đó tốc độ thực thi của chương tŕnh sẽ nhanh
hơn hơn.

Đúng là thế nhưng nêu bạn lập trình hướng đối tượng = hợp ngữ thì hơi
mệt (quá mệt chứ), tuy C++ cũng đưa code của bạn xuống hợp ngữ thôi
nhưng người ta có thuật toán hẳn hoi. Cái giá phải trả là chẳng có gì
dư cả, mà làm sao bạn biết nó dư nhỉ ;)
Cuối cùng , dùng mã kiểu con người đọc được thì dễ bảo trỉ và sữa chữa
hơn chứ

zZzChipzZz

unread,
Sep 22, 2009, 7:16:20 AM9/22/09
to DESIGN WEBPAGE
Nói thì cũng phải nói cho rõ nhé. Ai bảo là Pascal ko thể chạy nhanh
bằng C đấy? Cứ lạm dụng quá nhiều các cấu trúc dữ liệu và các hàm có
sẵn rùi bảo rằng Pascal chậm hơn C. Muốn có sự tiện dụng trong lập
trình thì phải hy sinh kích thước mã và tốc độ thui. Đã thử Delphi
chưa? Chương trình viết bằng Delphi tối ưu thì chạy chẳng kém cạnh gì
so với chương trình viết bằng VC++ cả. Mà đâu phải thằng nào cũng dịch
trung gia quan asm rùi mới chuyển sang ngôn ngữ máy đâu.

MTCafeDA

unread,
Sep 22, 2009, 7:16:38 AM9/22/09
to DESIGN WEBPAGE
Pascal chậm hơn C một chút vì bộ biên dịch chèn range checks vào mã
máy. Cũng vì thế mà Pascal an toàn hơn C.

Hieu Nguyen Quang

unread,
Sep 22, 2009, 7:17:04 AM9/22/09
to DESIGN WEBPAGE
Pascal vẫn có tùy chọn bỏ range check đấy chứ.

KQFore

unread,
Sep 22, 2009, 7:17:25 AM9/22/09
to DESIGN WEBPAGE
Ngày 4/6/1996, Ariane 5 -- tên lửa đẩy mạnh nhất của cơ quan thám hiểm
không gian châu Âu (ESA), đóng góp lớn nhất của châu Âu vào chương
trình trạm không gian quốc tế (ISS) -- trong chuyến bay ra mắt trình
làng đã nổ tung sau 37 giây rời bệ phóng.

Cuộc điều tra sau đó đã nhanh chóng xác định được nguyên nhân. Máy hoa
tiêu đã cố tăng công suất động cơ để hiệu chỉnh quĩ đạo. Thực ra quĩ
đạo đúng mà nó tưởng là sai vì máy định vị bằng quán tính đã tính sai
vị trí của tên lửa do một biến ghi gia tốc bị tràn.

Ở một phần mềm bình thường, tràn số được phát hiện và loan truyền nhờ
range check. Ngoại lệ loan truyền tới một điểm thích hợp trong chương
trình thì được xử lý và dập tắt.

Nhưng phần mềm điều khiển tên lửa được thiết kế theo một tiêu chuẩn
cao. Mọi tính chất của phần mềm đều phải được chứng minh bằng toán
học. Trong tài liệu thiết kế có một định lý, rằng mọi ngoại lệ, kể cả
ngoại lệ tràn, đều không thể xảy ra. Vậy dĩ nhiên mọi check, kể cả
range check, đều là thừa và người ta đã tắt chúng đi.

Chứng minh định lý đó không chứa một lỗi nào. Vấn đề là người ta đã
dựa trên giả thiết sai. Phần mềm đó được thiết kế cho phần cứng trong
thế hệ tên lửa Ariane 4 và đã chạy rất êm. Chuyển lên thế hệ Ariane 5
với gia tốc lớn hơn gấp nhiều lần, một người nào đó đã bệ nguyên xi
phần mềm cũ sang mà "quên" mất rằng giả thiết về các thông số phần
cứng mới đã khác. Việc verification họ đã làm hoàn hảo, nhưng ai đó đã
"quên" còn một việc nữa gọi là validation.

Vụ Ariane 5 để lại vết nhục muôn đời cho ESA.

Thấy gì qua đó?

Mọi bài giảng về High-Integrity Software Engineering đều nói: không
những phải làm việc đúng (do things right), mà còn phải làm đúng việc
(do right things).

Riêng QL còn có một cảm nhận nữa: Bất chấp rigor và formality, tắt
check là tự sát.

Reply all
Reply to author
Forward
0 new messages