PDA

View Full Version : [Dis] P code và Native Code



quaitieutu
06-11-2002, 18:05
:) :D
I)Giới thiệu :D lol
Bất cứ ai mỗi khi lập trình bằng VB đều đã gặp qua hoặc đã nghe nói đến khái niệm P code và Native Code nhưng cũng có một số bạn chỉ nghe nói nhưng vẫn chưa nắm rõ và hiểu về nó.Bài viết này sẽ giúp bạn hiểu rõ thêm về vấn đề này
Khi lập trình thì ta có hai loại ngôn ngữ lập trình là ‘Lập trình cấp thấp’ và ‘Lập trình cấp cao’.Với lập trình cấp thấp thì khả năng ‘Tiếp cận máy tính’ cao hơn là lập trình cấp cao,nói một cách nôm na tức là những câu lệnh lập trình sẽ ‘ánh xạ một một’ với lệnh điều khiển máy tính, tức là một câu lệnh sẽ ra lệnh cho máy tính thực hiện một công việc gì đó. Đại diện cho loại ngôn ngữ này là Assembly nổi tiếng mà chúng ta ai cũng biết và chắc cũng đã học có học qua.
Còn đối với ngôn ngữ lập trình cấp cao mà ta đã biết như Visual C++/Visual Basic /Java…là loại ngôn ngữ lập trình mà trong đó tập hợp lệnh để viết chương trình có những từ khóa gần gủi,dễ đọc và dể hiểu hơn cho người lập trình : Ví dụ như If….then…..Else .Khi đọc những từ này thì các programmer sẽ có thể hiểu được chương trình dễ dàng hơn so với hợp ngữ
:D lol

II)Các khái niệm

Native Code :D lol
Khi đọc bài này có lẽ bạn đã làm quen với một số ngôn ngữ lập trình như VC++,Borlan Turbor Pascal…Trong các ngôn ngữ lập trình đó luôn có một trình biên dịch để chuyển các câu lệnh của các lập trình viên sang ngôn ngữ máy để cho máy hiểu và thực hiện,ngôn ngữ để ra lệnh cho máy ta thường gọi là ngôn ngữ máy tức Native Code .Ngôn ngữ này chỉ có máy tính mới hiểu được,nó gồm một chuổi 0 và một mà khi đọc nó ta không tài nào hiểu được.Mã máy bao gồm một loạt những câu lệnh để ra lệnh cho CPU thực hiện
lol
Đối với máy tính dùng chip Intel thì những câu lệnh đó là dịch chuyển dữ liệu,thao tác chuỗi,số học,các cờ điều khiển…..Định dạng mã có hai phần một phần là mã thao tác còn một phần chỉ đến địa chỉ trong bộ nhớ nơi mà dữ liệu được sử dụng trong thao tác được cất giữ.Tuy nhiên nếu ta chạy chương trình trên máy tính dùng chip Motorola(ví dụ như máy Apple)thì sẽ không cho kết quả giống như máy dùng chip Intel chạy hệ điều hành Windows.Chính vì vậy mà mỗi chương trình được viết chạy trên hệ điều hành nào thì phải được dịch sang mã máy tương ứng với hệ điều hành đó .Trước khi được các Programmer dịch sang mã máy thì máy tính vẫn chưa thể làm gì được với chương trình . Ở đây xuất hiện các khái niệm mới như trình biên dịch và trình thông dịch.Sự khác nhau giữa hai trình này chính là điểm mà bản dịch xuất hiện

:D
Với một trình biên dịch thì việc tạo ra một file thực thi exe gồm có hai bước chính .Bước đầu tiên là bước biên dịch ,nếu như bạn chọn chế độ dịch thẳng từ source ra dạng mã máy(Native Code) thì trình biên dịch sẽ tạo ra một số file trung gian từ source code .Các file trung gian này được gọi là các Object file và các trình biên dịch đã dịch thành file có phần mở rộng là .Ojb.Mặc dù các Obj file này bao gồm cả mã máy nhưng nó vẫn không thể chạy được mà phải qua một bước nữa đó chính là phần dịch sang file EXE.Trong quá trình tạo file exe thì trình biên dịch sẽ kết nối đoạn mã khởi động chương trình của mình viết với hệ điều hành để báo cho hệ điều hành biết để tải chương trình của mình vào bộ nhớ để chạy
Thông thường đối với các obj file bạn sẽ không tìm thấy vì chúng đã được xóa ngay sau khi thực hiên bước hai (tạo exe file).

:cool: Interpreted CodeP :
Còn gọi là trình thông dịch.Nó hoạt động theo cơ chế ‘thông dịch’ tức là trình này sẽ dịch từng dòng code sang mã máy chứ không như trình biên dịch là dịch từ đầu đến cuối cùng của source.Nó cứ đọc một dòng code rồi chuyển thành một dòng mã máy tương ứng,sau đó lại đọc hàng tiếp theo và lại dịch…..Chíng vì phải dịch từng dòng code một nên mỗi lần chạy chương trình thì sẽ phải… dịch lại nên chương trình sẽ chạy chậm.Nhưng điều này chỉ đúng vào thời chúng ta dùng máy tính thế hệ 386 chứ như hiện nay thì việc chạy chậm này khó phát hiện được . Đổi lại thì ưu điểm của nó chính là : Khả năng tương tác để kiểm tra và sữa lỗi trong Code bất kỳ thời gian nào.Chính vì cơ chế ‘dịch từng dòng’ ,dòng nào chạy thì dịch dòng nào không chạy thì để đó nên khi có bug ở một chổ nào đó trong code(buton chẳng hạn) mà ta chưa click vô Button thì nó cũng không báo lỗi
:mad: :evil:
Sự khác nhau giữa một trình biên dịch và một trình thông dịch chính là ‘quá trình dịch’. Đối với trình biên dịch thì khi dịch toàn bộ source được đọc và dịch ra mã máy trước khi chạy,‘bản dịch từ các ngôn ngữ lập trình cấp cao’ được dịch ra và để dành cho việc ‘tái sử dụng’để chạy chương trình.Chính vì dịch một lần nên thời gian chạy chương trình so với trình thông dịch sẽ nhan hơn
Nếu ứng dụng của bạn là ứng dụng chạy trên mạng thì tốc độ của chương trình không chỉ phụ thuộc vào code hay trình dịch mà còn phụ thuộc vào các yếu tố bên ngoài như : tài nguyên mạng,khả năng đáp ứng yêu cầu của cơ sở dữ liệu….
Sang Version 5 thì Vb không còn dịch sang mã máy và cũng không phụ thuộc vào trình thông dịch nữa mà sử dụng một cơ chế mới là P code

Pseudocode:D lol

Hay còn gọi là P code tức là Giả code không phải là ‘code thật’.P code là một kĩ thuật dùng để biểu thị những thao tác của một chương trình máy tính hay một giải thuật bằng cách dùng các ngôn ngữ của chúng ta(như tiếng Anh ).Nó vẫn là những câu lệnh điều khiển máy tính như các ngôn ngữ lập trình khác nhưng thay thế bằng các ngôn ngữ mô tả cấp cao trực quan hơn gần gủi hơn bằng các từ khóa như Do Repeat,Until…..Ví dụ
open book to first page
DO
read page
turn to next page
UNTIL end of book
Nhìn vào đoạn code trên ta có thể hiểu được ý nghĩa của nó do nó được viết bằng ngôn ngữ của chúng ta(tiếng Anh ),ngôn ngữ rất Visual ..với P Code thì chỉ có Vb mới hiểu được nó .
Chính vì là “ngôn ngữ giả” nên việc để máy tính hiểu được các lệnh do Programmer đưa ra thì cần một người dịch từ P code sang cho máy hiểu, đó chính là công việc của các file thư viện dll mà Vb lúc nào cũng trang bị theo cho ta khi tạo bộ set up MSVBVM60.DLL và CTL3D32.DLL.Khi bạn thiếu các file thư viện thì khi install trên máy khác(nếu không cài Vb) sẽ báo lỗi thiếu file
lol :rolleyes: :D :) ;)
Compiling to P-Code
Để compline ra dạng P Code bạn chọn Project trong hàng menu của Vb ,chọn tiếp mục Project Properties và chuyển qua Tab Comline và check vào Opiton Compline to P Code
Tuy mặc định của VB là compline to Native Code nhưng trong một số trường hợp ta cũng cần comline to P code để giảm dung lượng Project trong việc phân phối software
Thứ nữa là việc Comline ra Native Code thường không phải là một lợi thế lớn so với việc Compline ra P code
Và cuối cùng P Code có thể đơn giản hóa việc phân phối những đặc tính chung giữa nhiều chương trình .Micosoft đã dùng cơ chế này để xây dựng các macro và các VBA .Với những ứng dụng như Word hay Excel chạy trên máy khác như trên máy Apple thì quả thật P Code đã thể được tính hiệu dụng của mình


:confused: :.( :D

Compiling to Native Code
Tuy P Code có những lợi thế của nó nhưng các Programmer vẫn thường dùng chức năng Compline to Native Code bởi nó cho phép sự tối ưu hóa bổ sung .Một số ngôn ngữ lập trình có thể tạo các file exe độc lập thì VB lại cần có file thư viện đi kèm mới chạy được.Sự khác nhau về tốc độ của Native Code và P Code ở chổ Native chạy nhanh hơn.Tuy nhiên với tốc độ phát triển phần cứng như hiện nay thì vấn đề tốc độ giữa hai cái thật khó mà nhận ra
Để chọn tùy chọn Compline to Native Code(mặc định) bạn cũng vào Project menu->Project Properties-> chọn tab Compile và đánh dấu vào Option Comoline to Native Code

:rolleyes: :rolleyes:
Kết Luận:
Cả P code và Native đều có những ưu khuyết điểm của riêng mình nên việc chọn cái nào là tùy vào từng trường hợp cụ thể mà Lập trình viên sẽ có những lựa chọn thích hợp.Hi vọng bài viết này có thể giúp bạn ít nhiều trong việc học cũng như tham khảo
:rolleyes: :D :)
Quái Tiểu Tử chân thành cám ơn bạn dã đọc bài

KEM_WALL
06-11-2002, 18:14
ui, với cái máy cà khổ 100Mhz của walls thì n-code nhanh hơn p-code thấy rõ luôn ;)

quaitieutu
06-11-2002, 18:27
Tội Wall thật.Ráng bán kem để đổi máy học cho sướng nhé