Tải bản đầy đủ (.docx) (21 trang)

TÌM HIỂU QUÁ TRÌNH PHÁT TRIỂN CỦA HAI NGÔN NGỮ LẬP TRÌNH PASCAL VÀ C

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (490.85 KB, 21 trang )

Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

ĐỒ ÁN MƠN HỌC:

TÌM HIỂU Q TRÌNH PHÁT TRIỂN
CỦA HAI NGƠN NGỮ LẬP TRÌNH
PASCAL VÀ C
Sinh viên thực hiện:
18521144: Nguyễn Hữu Nghĩa
Tìm hiểu về quá trình phát triển của Pascal
18521204: Nguyễn Huỳnh Nhi
TÌm hiểu về q trình phát triển của C

I.

Q trình phát triển của Pascal

A. Ngơn ngữ PASCAL và tiền đề cho sự ra đời của ngôn ngữ này
Pascal (phiên âm tiếng Việt: Pát-xcan) là một ngôn ngữ lập trình cho máy
tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào
năm 1970. Pascal là ngơn ngữ lập trình đặc biệt thích hợp với kiểu lập trình cấu
trúc và cấu trúc dữ liệu, ngơn ngữ lập trình này được đặt theo tên của nhà tốn
học, triết gia và nhà vật lí người Pháp Blaise Pascal.
Pascal được phát triển theo khuôn mẫu của ngôn ngữ lập trình ALGOL 60. Lúc
đầu, Wirth đã phát triển ngơn ngữ này với các cải tiến như một phần các đề xuất
cho phiên bản ALGOL X, nhưng chúng không được chấp nhận nên ơng đã phát
triển nó một cách riêng biệt và đặt cho “đứa con” của mình một cái tên mới, chính
là Pascal, và được phát hành vào năm 1970.


B.

Những đặc điểm cơ bản của PASCAL và các phiên bản PASCAL
1. Những đặc điểm cơ bản
Pascal được Wirh tạo ra như một ngơn ngữ lập trình mang tính hiệu quả cao (cả về
tốc độ biên dịch, cách viết code và các chương trình được tạo ra) dựa trên lập trình
có cấu trúc.

1


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

Pascal cho phép các lập trình viên xác định các kiểu dữ liệu phức tạp và cũng dễ
dàng hơn trong việc xây dựng cấu trúc dữ liệu động và đệ quy. Chẳng hạn như
danh sách, các sơ đồ cây và đồ thị. Các tính năng quan trọng được đưa vào đây là
các bản ghi, liệt kê, phân nhóm, các biến phân bổ động với con trỏ liên quan và tập
hợp. Để đảm bảo cho các điều kể trên, Pascal là một ngơn ngữ lập trình strong
typing, có nghĩa là một loại dữ liệu không thể được chuyển đổi hoặc được hiểu là
một loại dữ liệu khác mà khơng có các chuyển đổi rõ ràng. Các cơ chế chặt chẽ
tương tự là tiêu chuẩn trong nhiều ngơn ngữ lập trình ngày nay. Các ngôn ngữ
khác ảnh hưởng đến sự phát triển của Pascal là Simula 67 và ALGOL W của
Wirth.
Pascal, giống như nhiều ngơn ngữ lập trình ngày nay, cho phép định nghĩa các
hàm hay chương trình con lồng nhau ở bất kỳ mức độ sâu nào. Điều này cho phép
cú pháp của Pascal rất đơn giản và mạch lạc trong đó một chương trình hồn chỉnh
là gần như giống hệt với một thủ tục hoặc hàm duy nhất.
Pascal trở nên rất thành công vào những năm 1970, giai đoạn mà thị trường máy

tính nhỏ như máy tính cá nhân hay các hệ thống máy chủ có quy mơ nhỏ hay trung
bình đang phát triển. Pascal được sử dụng rộng rãi như một ngơn ngữ giảng dạy
trong các khóa học lập trình cấp đại học vào những năm 1980, và cũng được sử
dụng trong các thiết lập sản xuất để viết các phần mềm thương mại trong thời gian
này. Tuy nhiên, Pascal dần bị thay thế bởi ngôn ngữ lập trình C vào cuối những
năm 1980 và đầu những năm 1990 khi các hệ thống dựa trên UNIX trở nên phổ
biến và đặc biệt là sự ra đời của C++.
2. Những phiên bản của PASCAL
Một trong những thành công đầu tiên của Pascal chính là UCSD Pascal, ra mắt
năm 1977, một phiên bản chạy trên hệ điều hành tùy chỉnh có thể được chuyển
sang các nền tảng khác nhau. Một trong những nền tảng quan trọng nhất đó là
Apple II, nền tảng mà UCSD Pascal được sử dụng rất rộng rãi. Điều này giúp
Pascal là ngơn ngữ lập trình cấp cao chính được sử dụng để phát triển Apple Lisa –
một phiên bản máy tính để bàn của Apple, và sau đó là hệ điều hành Macintosh.
Các bộ phận của hệ điều hành này ban đầu được dịch sang ngôn ngữ asembly
Mororola 68000 bởi các nguồn Pascal. Phần mềm chỉnh sửa ảnh nổi tiếng nhất thế
giới là Adobe Photoshop cũng được viết trong hội thảo lập trình Macintosh Pascal.
Một phiên bản cải tiến được gọi là Object Pascal được thiết kế cho lập trình hướng
đối tượng được phát triển vào năm 1985, được sử dụng bởi Apple Computer và
Borland vào cuối những năm 1980 và sau đó phát triển thành ngôn ngữ Delphi
trên nền tảng Microsoft Windows. Các ứng dụng như Total Commander, Skype và
Macromedia Captivate cũng được viết bằng Delphi (Object Pascal). Apollo

2


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN


Computer đã sử dụng Pascal làm ngôn ngữ lập trình hệ thống cho các hệ điều hành
của mình bắt đầu từ năm 1980.
Các biến thể của Pascal cũng thường được sử dụng trong mọi lĩnh vực từ các dự
án nghiên cứu tới các trị chơi trên máy tính cá nhân và các hệ thống nhúng.

C. Hệ thống PASCAL – P
Để nhanh chóng phổ biến rộng rãi ngơn ngữ Pascal, một bộ công cụ chuyển mã
được viết tại Zurich bao gồm một trình biên dịch sang “mã máy ảo” (có thể hiểu là
một loại mã trung gian giữa mã máy và mã nguồn), và một bộ giả lập cho loại máy
này. Bộ cơng cụ này sau đó được biết đến với cái tên hệ P-system (hệ thống
Pascal-P).
Các trình biên dịch hệ thống P trong nhóm cơ bản tại Zurich được gọi là PascalP1, Pascal-P2, Pascal-P3 và Pascal-P4. Pascal-P1 là phiên bản đầu tiên. Sau đó nó
được thiết kế lại để nâng cao tính di động và được phát hành dưới tên Pascal-P2.
Sau đó được tiếp tục cải tiến để trở thành Pascal-P3, với một mã trung gian giúp
phiên bản này có khả năng tương thích ngược với Pascal-P2 và Pascal-P4. Trình
biên dịch Pascal-P4 là phiên bản cuối cùng trong nhóm, vẫn có thể chạy và biên
dịch trên các hệ thống tương thích với Pascal gốc. Tuy nhiên, nó chỉ chấp nhận
một tập con của ngôn ngữ Pascal.
Pascal-P5, được tạo ra bên ngồi nhóm Zurich, sử dụng ngơn ngữ Pascal đầy đủ và
bao gồm khả năng tương thích ISO 7185.
Kenneth Bowles đã sử dụng Pascal-P2 để tạo ra UCSD p-system. Đây là một trong
ba hệ điều hành có sẵn khi phiên bản đầu tiên của IBM PC được ra mắt. UCSD
Pascal đã sử dụng một mã trung gian dựa trên các giá trị byte, và do đó là một
trong những trình biên dịch mã byte đầu tiên. Pascal-P1 không thông qua PascalP4, mà là dựa trên chiều dài từ CDC 6600 60 bit.
Trình biên dịch dựa trên trình biên dịch Pascal-P4, đã tạo ra các tệp nhị phân gốc,
được phát hành cho máy tính lớn IBM System / 370 của Ủy ban Năng lượng
Nguyên tử Úc (Australian Atomic Energy Commission); nó được gọi là "AAEC
Pascal Compiler".
Vào đầu những năm 1980, Watcom Pascal đã được phát triển, cũng cho hệ thống
IBM 370.

Vào những năm 1990, Pascal vẫn đang chạy trên các thiết bị VAX tại Đại học
George Mason để dạy lập trình máy tính.

3


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

D. OBJECT PASCAL – Hỗ trợ lập trình hướng đối tượng.
1. Lịch sử đầu tiên tại Apple
Object Pascal là một phiên bản cải tiến của Pascal hỗ trợ lập trình hướng đối tượng
được ra mắt vào năm 1986, được biết đến chủ yếu với vai trị là ngơn ngữ lập trình
chính của Delphi.
Object Pascal được phát triển tại Apple Computer bởi một nhóm do Larry Tesler
đứng đầu với sự tham vấn của Niklaus Wirth, là người tạo ra nên ngơn ngữ Pascal.
Nó xuất phát từ một phiên bản hướng đối tượng của Pascal có tên gọi là Classcal,
được cài sẵn trên máy tính Lisa. Object Pascal cần thiết để hỗ trợ cho MacApp,
một phần mở rộng của khung ứng dụng Macintosh mà bây giờ được gọi là thư
viện lớp.
Một phần mở rộng của Object Pascal cũng được triển khai trong Think Pascal
IDE. IDE này bao gồm trình biên dịch và trình soạn thảo với khả năng kiểm tra và
tơ sáng cú pháp, một trình gỡ lỗi mạnh mẽ và thư viện lớp. Nhiều lập trình viên
thích Think Pascal hơn là cách triển khai Object Pascal của Apple bởi vì Think
Pascal cung cấp sự tích hợp chặt chẽ với các cơng cụ của mình. Tuy nhiên, q
trình phát triển dừng lại sau phiên bản 4.01 bởi vì cơng ty phát triển bị mua lại bởi
Symantec. Sau đó các lập trình viên dần rời khỏi dự án này.
Apple cũng bỏ hỗ trợ cho Object Pascal khi họ chuyển từ chip Motorola 68K sang
kiến trúc PowerPC của IBM vào năm 1994. MacApp 3.0, cho nền tảng này sau đó

đã được viết lại bằng C++.
Đây là đoạn code mẫu cho chương trình “Hello World” được viết bằng Object
Pascal của Apple:
program ObjectPascalExample;
type
THelloWorld = object
procedure Put;
end;
var
HelloWorld: THelloWorld;
procedure THelloWorld.Put;
begin
ShowMessage('Hello, World!');
end;
begin
New(HelloWorld);

4


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

HelloWorld.Put;
Dispose(HelloWorld);
end.

2. Thời đại của Borland và CodeGear
Borland quyết định cần phải có nhiều tính năng hướng đối tượng tinh vi và phức

tạp hơn, và đã bắt đầu sản phẩm Delphi, sử dụng sơ đồ thiết kế của Object Pascal
do Apple đưa ra làm cơ sở. (Sơ đồ của Apple vẫn chưa phải là chuẩn.) Borland
cũng gọi đây là Object Pascal trong phiên bản Delphi đầu tiên, nhưng đổi tên
thành Delphi trong các phiên bản sau đó.
Q trình phát triển của Delphi được bắt đầu vào năm 1993 và phiên bản Delphi
1.0 được chính thức ra mắt ở Hoa Kỳ vào ngày 14 tháng 2 năm 1995. Trong khi
mã nguồn sử dụng mơ hình đối tượng của Turbo Pascal vẫn có thể được biên dịch,
Delphi giới thiệu một cú pháp mới với từ khóa class để thay thế cho object, hàm
tạo Create và một hàm hủy ảo Destroy (và ngược lại phải gọi các thủ tục New và
Dispose procedures), thuộc tính, con trỏ hàm, và các thứ khác. Những điều này lấy
cảm hứng từ bản thảo đang được soạn thảo của Tổ chức tiêu chuẩn hóa quốc tế
(ISO) cho phần mở rộng lập trình hướng đối tượng, nhưng có nhiều khác biệt với
phương ngữ của Turbo Pascal (ví dụ như yêu cầu trong bản thảo rằng tất cả các
phương thức phải ảo) đều bị bỏ qua.
Ngôn ngữ Delphi tiếp tục phát triển qua nhiều năm để hỗ trợ cho các cấu trúc như
mảng động, tổng quát và phương thức ảo.
3.

Các phiên bản Object Pascal
 Borland sử dụng tên gọi Object Pascal cho ngơn ngữ lập trình trong các phiên
bản đầu của Delphi, nhưng sau đó đổi tên thành ngơn ngữ lập trình Delphi. Tuy
nhiên, các trình biên dịch mà tương thích với Object Pascal thường cố gắng để
tương thích với mã nguồn Delphi. Vì Delphi được đăng kí nhãn hiệu, các trình
biên dịch tương thích vẫn tiếp tục sử dụng tên Object Pascal.
 Embarcadero Technologies, đã mua lại Delphi vào năm 2008, bán Delphi IDE
dùng để biên dịch phương ngữ Delphi của Object Pascal sang Windows và
macOS, iOS, Android và Web.
 .NET hỗ trợ từ Delphi 8 đến Delphi 2005, Delphi 2006 và Delphi 2007, hiện tại
đã được thay thế bằng ngơn ngữ khác, Oxygene, vốn khơng tương thích ngược
hồn tồn.

 Ngơn ngữ lập trình Oxygene được phát triển bởi RemObjects Software nhắm
đến Common Language Infrastructure, [[Java (công nghệ)]|Java] Runtime
Environment và khung Cocoa của Apple cho iOS và macOS.
5


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

 Dự án mã nguồn mở Free Pascal cho phép ngôn ngữ được biên dịch sang một
loạt các hệ điều hành—bao gồm Linux (32-bit và 64-bit), FreeBSD, Classic
Mac OS/macOS, Solaris, Win32, Win64 và Windows CE—cũng như cho các
kiến trúc phần cứng khác nhau. Phiên bản đầu của Free Pascal cho iPhone SDK
2.x được ra mắt vào ngày 17 tháng 1 năm 2009. Hiện tại cũng có hỗ trợ cho ISA
ARM.
 Ngơn ngữ lập trình Smart Pascal nhắm đến JavaScript/ECMAScript và được sử
dụng trong Smart Mobile Studio, được viết bởi Jon Lennart Aasenden và công
bố bởi Optimale Systemer (2012). Ngôn ngữ này đơn giản hóa tốt cho việc phát
triển HTML5 thông qua cách tiếp cận OOP và RAD (phát triển ứng dụng
nhanh). Smart Pascal tích hợp chặt chẽ với các công nghệ được thiết lập như
node.js, Embarcadero DataSnap và Remobjects SDK để mang đến các ứng
dụng web máy khách/máy chủ hiệu suất cao. Nó cũng cho phép dễ dạo tạo ra
những thành phần trực quan và thư việc dễ sử dụng lại. Phương ngữ Smart
Pascal bắt nguồn từ ngôn ngữ DWScript- được mở rộng để tích hợp tơt shown
với mơi trường và thư viện JavaScript, như những phần "asm" vốn là thuần
JavaScript nhưng có khả năng truy cập đến những kí hiệu Pascal, hay những lớp
"ngồi" ("external") vốn được ánh xạ trực tiếp tới những lớp JavaScript nguyên
mẫu. Smart Pascal giới thiệu tính năng thừa kế thực sự, các lớp, lớp một phần,
giao diện, một bảng phương thức ảo và nhiều cấu trúc nâng cap khác vốn không

phải là một phần mặc định của JavaScript.
 MIDletPascal thì tập trung vào nền tảng Java byte-code. Lưu ý rằng Free Pascal
cũng nhắm đến máy ảo Java (JVM), với nhiều tính năng phong phú hơn.
 Ngơn ngữ lập trình Morfik Pascal được phát triển bởi Morfik và nhắm đến
những ứng dụng web có hỗ trợ Ajax. trình biên dịch của Morfik được tính hợp
vào trong IDE AppsBuilder của công ty và cho phép mã Object Pascal có thể
được sử dụng để hiện thực thực mã được thực thi trong cả trình duyệt và máy
chủ. Nó sử dụng trình biên dịch Free Pascal để sinh ra tập tin nhị phân nguyên
bản từ Object Pascal.
 Trình biên dịch mã nguồn mở GNU Pascal có sẵn từ front-end cho đến GNU bộ
sưu tập trình biên dịch, hiện thực tiêu chuẩn ISO 7185 Pascal, và "hầu hết" tiêu
chuẩn ISO 10206 Extended Pascal.
 Ngồi ra cịn có một trình biên dịch miễn phí Turbo51, dùng để sản xuất mã cho
các chip Intel 8051.
 WDSibyl là một IDE và trình biên dịch mã nguồn mở tựa như Delphi dành cho
Microsoft Windows và OS/2, và là một môi trường thương mại tương thích với
Borland Pascal được phát hành bởi một công ty tên là Speedsoft mà sau này
được phát triển thành một môi trường RAD giống như Delphi với tên gọi Sybil
và sau đó được mã nguồn mở theo giấy phép GPL khi cơng ty đóng cửa. Hiện

6


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

tại Wolfgang Draxler (WD) đang duy trì phần mềm. (Trình biên dịch được sử
dụng nằm trong một tập tin DLL và khơng là mã nguồn mở).


E.

TURBO PASCAL – trình biên dịch và IDE nổi tiếng nhất cho
PASCAL.
1. Lịch sử hình thành
Turbo Pascal là một trình biên dịch và một mơi trường phát triển tích hợp (IDE)
cho ngơn ngữ Pascal chạy trên nền hệ điều hành MS-DOS và CP/M, được phát
triển bởi hãng Borland. Cái tên Borland Pascal dành riêng cho phiên bản tốt hơn
của Turbo Pascal (với nhiều thư viện chuẩn và mã nguồn hơn). Borland Pascal
cũng được dùng để chỉ trình biên dịch Pascal của hãng Borland.
Turbo Pascal được xây dựng trên nền trình biên dịch Blue Label Pascal được viết
cho hệ điều hành NasSys của NasCom vào năm 1981 bởi Anders Hejlsberg. Đây
là lần viết lại đầu tiên của trình biên dịch Compas Pascal cho hệ điều hành CP/M
và trình biên dịch Turbo Pascal cho hệ điều hành MS-DOS và CP/M. Một phiên
bản của Turbo Pascal đã được viết cho máy Apple Macintosh từ năm 1986 nhưng
cuối cùng cũng bị bỏ dở năm 1992. Một phiên bản khác cũng được viết cho máy
DEC Rainbow sau một vài lần phát hành.
2. Các phiên bản
 Turbo Pascal 4 sửa lại thư viện đồ họa của Turbo Pascal 3 và đưa vào khái niệm
unit (đơn vị chương trình).
 Turbo Pascal 5 có tính năng lập trình hướng đối tượng (OOP).
 Turbo Pascal 6 có một số tính năng mới trong đó IDE được cải thiện, cho phép
mở nhiều cửa sổ soạn thảo cùng lúc (Multi-document interface) (MDI)
 Turbo Pascal 7 có một số tính năng mới trong đó có cải thiện IDE trong đó có
hỗ trợ đổi màu mã lệnh (color-coding).
 Các phiên bản mới của Turbo Pascal có kèm theo Turbo Vision, một GUI
framework phát triển bởi Borland, dành cho C++ và Pascal.
3. Turbo Pascal trong giáo dục
Borlan Pascal vẫn được giảng dạy ở một số quốc gia ở cấp trung học, và đại học.
Nó được giảng dạy tại các trường cao đẳng và đại học ở Costa Rica, Thổ Nhĩ Kỳ,

Đức, Liên bang Nga, Mỹ, Malta và tại các trường trung học ở Argentina, Bỉ,
Bulgaria, Canada, Costa Rica, Croatia, Pháp, Ý, Jamaica, Libya, Moldova,
Romania, Serbia, Tunisia, Ukraine, Cộng hòa Séc và Việt Nam (nay đã chuyển
sang Free Pascal). Đó là ngơn ngữ lập trình giáo dục được nhà nước phê duyệt cho
tất cả các trường trung học ở Nam Phi cho đến năm 2002. Ngày nay, nó tiếp tục
được giảng dạy ở một số trường đại học trên thế giới như là một giới thiệu về lập
trình máy tính, thường tiến tới C hoặc Java hoặc cả hai.
7


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

Một số giảng viên thích sử dụng Borland Pascal 7 hoặc Turbo Pascal 5.5 vì tính
đơn giản của nó so với các IDE hiện đại hơn như Microsoft Visual Studio hoặc
Borland JBuilder, vì vậy nó giới thiệu cho sinh viên khơng quen với việc tính tốn
với các tác vụ thơng thường như sử dụng phím tắt và bàn phím (TP 5.5 khơng có
hỗ trợ chuột), làm quen với các lệnh DOS (phần lớn giống như các dấu nhắc lệnh
của Microsoft Windows) và cho phép chúng viết chương trình mà không tốn nhiều
công sức để môi trường hoạt động. TP 5.5 có sẵn dưới dạng tải xuống miễn phí từ
Borland.
Đây là chương trình Hello world kinh điển trong Turbo Pascal:
program HelloWorld;
begin
WriteLn('Hello World')
end.

F. PASCAL được chuẩn hóa
1. ISO/IEC 7185: 1990 Pascal

Năm 1983, ngơn ngữ được chuẩn hố, theo tiêu chuẩn quốc tế IEC/ISO 7185 và
một số tiêu chuẩn cụ thể của quốc gia khác bao gồm ANSI/IEEE770X3.97-1983
và ISO 7185:1983 đều của Mỹ. Hai tiêu chuẩn này chỉ khác nhau ở chỗ tiêu chuẩn
ISO bao gồm phần mở rộng "cấp 1" trong đó ANSI khơng cho phép phần mở rộng
này vào bản gốc (Wirth). Năm 1989, ISO 7185 được sửa đổi.
Chuẩn ISO 7185 được phát triển với mục đích là sự chọn lọc của ngôn ngữ 1974
của Writh, được đề cập chi tiết trong cuốn "Hướng dẫn sử dụng và Báo cáo của
Jensen và Wirth", bổ sung đáng kể nhất là "Các tham số mảng phù hợp" được coi
là mức 1 của tiêu chuẩn, mức 0 là Pascal khơng có mảng phù hợp.
Trên các máy tính lớn mà Pascal xuất phát (mainframe và minicomputer), các tiêu
chuẩn này thường được tuân theo. Tuy vậy trên IBM-PC thì ngược lại. Trên các
máy tính IBM-PC, chuẩn của Turbo Pascal và Delphi của Borland có lượng người
dùng nhiều nhất. Do vậy, biết liệu một phiên bản riêng biệt tương ứng với ngôn gữ
Pascal ban đầu, hay ngôn ngữ riêng của Borland là khá quan trọng.
2. ISO/IEC 10206: Mở rộng Pascal 1990
Năm 1990, một chuẩn Pascal mở rộng được tạo ra dựa theo tiêu chuẩn ISO/IEC
10206, giống hệt về nội dung kỹ thuật cho IEEE/ANSI 770X3.160-1989.

G. PASCAL trong thời điểm hiện tại.
Pascal dù đã ra đời từ rất lâu, đến năm 2020 là vừa tròn 50 năm, nhưng những
điểm mạnh của ngơn ngữ lập trình này vẫn được mọi người công nhận. Với cấu
8


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

trúc chương trình rõ ràng, dễ học, dễ đọc và các quy tắc lập trình chặt chẽ, Pascal
vẫn đang được sử dụng rộng rãi như một “ngôn ngữ học đường” để dẫn những

bước chân đầu tiên đầy hứng thú cho các thế hệ trẻ trên con đường lập trình khi
còn ngồi trên ghế cấp 2, cấp 3.
Nhưng, với sự ra đời, thay đổi, phát triển liên tục và mạnh mẽ của các ngơn ngữ
lập trình ngày nay. Từ lâu, Pascal đã khơng cịn phù hợp và được sử dụng nhiều
trong thực tế, ngoài việc dạy học nữa.
Tuy nhiên, sau tất cả, Pascal vẫn là một trong những ngôn ngữ lập trình thành
cơng nhất về mặt thương mại trong khoảng thời gian đó. Cùng các ngơn ngữ lập
trình bấy giờ, Pascal đã đặt ra những nền móng đầu tiên, mang một cách nhìn mới,
dễ tiếp cận, thu ngắn khoảng cách giữa con người và những dịng code khơ khan,
cho rất nhiều thế hệ học sinh, sinh viên tại thời điểm đó và cho đến tận bây giờ
nhận ra nét đẹp của lập trình!

9


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

II. Quá trình phát triển của C
A. Quá trình phát triển ban đầu của ngơn ngữ lập trình C
Phát triển khởi đầu của C diễn ra tại phịng thí nghiệm Bell của AT&T (Hoa Kỳ)
giữ những năm 1969 và 1973, được thực hiện bởi Brian W.Kernighan và Dennis
Ritchie.
Được đặt tên là C vì có nhiều đặc tính rút ra từ ngơn ngữ B trước đó.
Mục đích: tạo ra ngơn ngữ lập trình bậc cao có khả năng chuyển đổi từ hệ thống
này sang hệ thống khác thay cho hợp ngữ trong lập trình hệ thống.
1973, C được dùng viết nhân cho UNIX thay cho Assembly trước đó trong các
máy PDP-11/20. Đây là lần đầu tiên mà nhân hệ điều hành được lắp thành bằng
một ngôn ngữ khác Assembly.


B. K&R C ra đời
Năm 1978 Ritchie và Brian Kernighan xuất bản lần đầu cuốn The C Programing
Language. Cuốn này được người lập trình biết đến như là K&R như một đặc tả
khơng chính thức của C.
K&R giới thiệu các chức năng sau:
+ Kiểu dữ liệu struct
+ Kiểu dữ liệu long int
+ Kiểu dữ liệu unsigned int
+ Toán tử =+ được đổi thành +=, và tương tự cho các toán tử khác để tránh gây
hiểu nhầm cho bộ phân tích từ vựng của trình dịch C.
K&R C được xem là phần cơ bản nhất của ngơn ngữ mà nó cần phải có cho một
trình biên dịch C ngay cả sau khi ANSI C được giới thiệu.Vì khơng phải mọi trình
biên dịch đều hỗ trợ toàn bộ ANSI C và mã viết trong K&R C cũng là mã hợp lệ
trong ANSI.

10


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

Các phiên bản trước, hàm trả về số khác ngun mới khai báo trước khi dùng.Nếu
khơng khai báo thì mặc định sẽ trả về số nguyên. Bởi vì nguyên mẫu của K&R
khơng bao gồm bất kì thơng tin về tham số của hàm, chức năng kiểm tra kiểu của
các đối số không được tiến hành.
Sau nhiều năm, sự tái bản của K&R C nhiều chức năng “ khơng chính thức” được
thêm vào cho ngôn ngữ, được hỗ trợ bởi trình dịch của AT&T và một số khác.
Trong đó bao gồm:

+ Các hàm có kiểu void và dữ liệu kiểu void *
+ Các hàm trả về kiểu struct hay union
+ Tên các miền trong một không gian tên cho mỗi kiểu struct
+ Phép gán cho kiểu dữ liệu struct
+ Hằng const được xem là đối tượng chỉ cho phép đọc.
+ Một thư viện chuẩn được sự hợp tác để xây dựng bởi nhiều nhà sản xuất.
+ Các kiểu enumeration
+ Kiểu chính xác đơn float

C. Chuẩn ANSI C và ISO C
Trong 1983, Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) thành lập hội đồng X3J11
để hoàn tất một tiêu chuẩn dặc tả của C. Sau một q trình khó khăn và lâu dài,
tiêu chuẩn đã hoàn tất vào 1989 và được công nhận là "Programming Language C"
ANSI X3.159-1989. Phiên bản ngôn ngữ này thường được nhắc đến như là ANSI
C.

D. C99
Khái niệm: là tên khơng chính thức của tiêu chuẩn lập trình C/ISO 9899:1999.
Được sử dụng làm tiêu chuẩn ANSI vào tháng 5 năm 2000.
Là phiên bản nâng cao và mới hơn của phiên bản C90 với các tính năng bổ sung
cho ngôn ngữ và thư viện tiêu chuẩn để sử dụng tốt hơn các phần cứng máy tính
có sẵn như cơng nghệ số, trình biên dịch của IEEE.
Các tính năng quan trọng mới phiên bản C99
+ Một số tính năng giống như các phần mở rộng cho C90 do trình biên dịch
GNU cung cấp, chẳng hạn như macro có số lượng đối số thay đổi.
+ Con trỏ hạn chế cũng được thêm vào trong C99.

11



Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

+ Có một số từ khóa và định danh mới.
+ Kỹ thuật bình luận mới
+ Hàm nội tuyến
+ Chiều dài mảng thay đổi
+ Phần tử mảng linh hoạt
+ Thêm vào cấu trúc Compound Literals
Các từ khóa mới: C99 đã thêm 5 từ khóa mới, là tính năng quan trọng nhất của
C99
+ complex: Được sử dụng để khai báo các biến kiểu số phức để lưu trữ số phức
toán học. Dùng thư viện <complex.h>
Ví dụ

+ Imaginary: Được sử dụng để khai báo các biển kiểu ảo trong lưu trữ các số
ảo trong tốn học. Dùng thư viện <complex.h>
Ví dụ:
12


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

Input:
#include <stdio.h>
#include <complex.h>
int main(void)

{
double imaginary i = 2.0*I; // pure imaginary
double f = 1.0; // pure real
double complex z = f + i; // complex number
printf("z = %.1f%+.1fi\n", creal(z),

Output:
z = 1.0+2.0i

+ Inline: Được sử dụng để đề nghị với chương trình biên dịch rằng một hàm cụ
thể nào đó là đối tượng của việc khai triển nội tuyến (inline expansion); có
nghĩa là, nó đề nghị rằng chương trình biên dịch nên chèn toàn bộ thân hàm
vào trong từng ngữ cảnh, nơi hàm đó được sử dụng.
Ví dụ:

+ restrict: Chỉ có thể sử dụng cho con trỏ. Một con trỏ khi đủ điều kiện với từ
khóa “restricted” được gọi là “restricted pointer”. Restricted pointer được
khai báo như sau:

13


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

+

GV: TRỊNH QUỐC SƠN

Khai báo các biến: Việc khai báo các biến tại bất kì điểm nào của chương
trình trong dấu ngoặc nhọn của hàm main() là hợp lệ.

Ví dụ:

+ Độ dài mảng biến: C99 cho phép khai báo kích thước mảng bằng các biến số
nguyên hoặc bất kì biểu thức số nguyên hợp lệ nào. Đây được gọi là mảng
chiều dài biến
Ví dụ:

14


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

+ Kỹ thuật bình luận: C99 cho phép đưa bình luận bằng cách sử dụng dấu gạch
chéo kép(//) được thực hiện trong C++ và trình biên dịch C khơng hiển thị lỗi
bất kì nào khơng thể xảy ra trong ANSI C
Ví dụ:

//Đây là một bình luận

E. C11
1. Khái niệm
Là tên khơng chính thức cho tiêu chuẩn ISO/IEC 9899: 2011. Nó đã thay thế C99
và được thay thế bởi C18.
Bản dự thảo cuối cùng, N1570, đã được xuất bản vào tháng 4 năm 2011. Tiêu
chuẩn mới đã thông qua bản đánh giá dự thảo cuối cùng vào ngày 10 tháng 10
năm 2011 và được ISO chính thức phê chuẩn và xuất bản dưới dạng ISO / IEC
9899: 2011 vào ngày 8 tháng 12 năm 2011.
C11 chủ yếu chuẩn hóa các tính năng đã được hỗ trợ bởi các trình biên dịch hiện

đại phổ biến và bao gồm một mơ hình bộ nhớ chi tiết để hỗ trợ tốt hơn cho nhiều
luồng thực thi. Do khả năng tuân thủ C99 bị chậm trễ, C11 làm cho một số tính
năng nhất định là tùy chọn, để giúp tuân thủ tiêu chuẩn ngôn ngữ cốt lõi dễ dàng
hơn.
2. Các thay đổi so với C99:
Thay đổi một số thông số thư viện và ngôn ngữ của C99 chẳng hạn:
+ Alignment specification(_Alignas specifier, _Alignof operator,
aligned_alloc function, <stdalign.h> header file)
+ Hàm noneturn: Chỉ định hàm không trở về điểm gọi của nó. Có thể xuất hiện
nhiều lần trong cùng một khai báo hàm, cách xử lí giống như khi nó xuất
hiện một lần..Thư viện gọi hàm <stdnoreturn.h>
+ Hỗ trợ đa luồng(_Thread_localbộ xác định lớp lưu trữ, <threads.h>tiêu đề
bao gồm các chức năng quản lý / tạo luồng, mutex , biến điều kiện và chức
năng lưu trữ dành riêng cho luồng , cũng như <stdatomic.h>[10] cho các hoạt
động ngun tử hỗ trợ mơ hình bộ nhớ C11).
+ Loại biểu thức chung sử dụng từ khóa _Generic. Ví dụ: sau macro cbrt(x)
chuyển cbrtl(x),cbrt(x) hoặc cbrtf(x) tùy thuộc vào loại x:
+ Hỗ trợ Unicode được cải thiện dựa trên Báo cáo kỹ thuật C Unicode ISO /
IEC TR 19769: 2004 ( char16_tvà char32_tcác loại để lưu trữ dữ liệu được
mã hóa UTF-16 / UTF-32 , bao gồm các hàm chuyển đổi trong <uchar.h>và

15


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

các tiền tố bằng chữ uvà Uchuỗi tương ứng , cũng như u8tiền tố cho UTF-8
được mã hóa bằng chữ).

+ Loại bỏ gets, không dùng nữa trong bản sửa đổi tiêu chuẩn ngơn ngữ C trước
đó
+ Giao diện Bounds-checking(Giao diện kiểm tra liên kết)
+ Các tính năng phân tích
+ Nhiều macro hơn để truy vấn các đặc điểm của dấu phẩy động,liên quan đến
các số dấu phẩy động bất thường và số chữ thập phân có thể lưu trữ
+ Các struct và unions, sử dụng khi các unions và struct lồng vào nhau.
Ví dụ: struct T { int tag; union { float x; int n; }; };
+ Static assertions được đánh giá trong quá trình dịch ở giai đoạn muộn hơn #if
và #error khi kiểu dịch được người dịch hiểu
+ Chế độ tạo và mở cho fopen.Sử dụng trong các tệp.
+ quick_exit: như là một cách thứ ba để chấm dứt 1 chương tình nhằm làm tại
deinitianlzation tối thiểu ít nhất nếu chấm dứt với exit thất bại.
+ Một timespec_getchức năng mới và cấu trúc tương ứng <time.h>với mức độ
tương thích POSIX .
+ marco để xây dụng giá trị phức tạp ( vì real + imaginary*I có thể khơng mang
lại giá trị mong đợi nếu imaginary là vô hạn hoặc NaN)
3. Tính năng tùy chọn:
Đặc tính

Kiểm tra tính năng macro

Tính khả dụng
trong C99

Khả năng phân tích (Phụ lục L)

__STDC_ANALYZABLE__

Khơng có sẵn


Giao diện kiểm tra giới hạn (Phụ
lục K)

__STDC_LIB_EXT1__

Khơng có sẵn

Đa luồng ( <threads.h> )

__STDC_NO_THREADS__

Khơng có sẵn

Atomic primitives và loại
( <stdatomic.h> và vịng _Atomic loại bộ
định tính)

__STDC_NO_ATOMICS__

Khơng có sẵn

16


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

Số học dấu phẩy động theo tiêu

chuẩn IEC 60559 (Phụ lục F)

__STDC_IEC_559__

Khơng bắt buộc

Số học phức tạp tương thích IEC
60559 (Phụ lục G)

__STDC_IEC_559_COMPLEX__

Không bắt buộc

Các loại phức tạp ( <complex.h> )

__STDC_NO_COMPLEX__

Mảng chiều dài thay đổi

__STDC_NO_VLA__

Bắt buộc thực hiện
lưu trữ
Bắt buộc

F. C18:
Khái niệm: C18 (trước đây gọi là C17 ) là tên khơng chính thức cho ISO / IEC
9899: 2018 , [1] tiêu chuẩn gần đây nhất cho ngôn ngữ lập trình C , được xuất bản
vào tháng 6 năm 2018. Nó đã thay thế C11 (tiêu chuẩn ISO / IEC 9899: 2011).
Thay đổi so với C11: C18 đã giải quyết được các khiếm khuyết trong C11 mà

không giới thiệu các tính năng mới.
_STDC_VERSION_ vĩ mơ tăng lên giá trị 201710L.
Trình biên dịch hỗ trợ:
+ GCC 8.1.0
+ LLVM Clang 7.0.0
+ IAR EWARM v8.40.1

G. C2x:
Khái niệm: là tên khơng chính thức cho lần sửa đổi tiếp theo của tiêu chuẩn ngôn
ngữ C (sau C18). Dự định sẽ áp dụng chính thức một tiêu chuẩn sửa đổi vào cuối
năm 2021 và sẽ xuất bản vào năm 2022
Tính năng được đề xuất:
+ Đối số đơn _Static_assert
+ Cú pháp thuộc tính kiểu C++11
+ Số học dấu phẩy động mở rộng, số học dấu phẩy động thập phân.
+ memccpy(), strdup(), strndup() tương tự như các hàm được tìm thấy trong
phần mở rộng POSIX và SVID C

17


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

+ Loại char8_t, trong cùng một mạch với char16_t và char32_t được thêm
vào trong C11.
Nguyên tắc mới:
Nó bổ sung 1 nguyên tắc mới cho “Nguyên tắc gốc ” của C:
Giao diện lập trình ứng dụng (API) nên tự ghi lại tài liệu khi có thể. Cụ thể, thứ tự

của các tham số trong khai báo hàm nên được sắp xếp sao cho kích thước của một
mảng xuất hiện trước mảng. Mục đích là để cho phép ký hiệu Mảng có độ dài thay
đổi (VLA) được sử dụng. Điều này khơng chỉ làm cho mục đích của mã rõ ràng
hơn đối với người đọc mà cịn giúp phân tích tĩnh dễ dàng hơn. Bất kỳ API mới
nào được thêm vào Tiêu chuẩn nên xem xét điều này.
Trình biên dịch hỗ trợ: Clang 9.0, GCC 9 compiler has -std=c2x

H. Quan hệ với C++:
C++ nguyên là sự kết thừa từ C. Mặc dù vậy, khơng phải mọi chương trình trong C
đều hợp lệ trong C++. Vì là hai ngơn ngữ độc lập, số lượng khơng tương thích
giữa hai ngơn ngữ này đã tăng lên. Phiên bản cuối cùng C99 đã tạo ra thêm nhiều
tính năng xung đột (giữa C và C++). Các sự khác nhau này tạo ra khó khăn để viết
các chương trình và thư viện đẻ có thể được dịch và hoạt động chính xác trong cả
hai loại mã C hay C++, đồng thời gây nhầm lẫn cho những người lập trình dùng cả
hai ngơn ngữ này. Sự chênh lệch này cũng gây khó khăn cho ngơn ngữ này có thể
tiếp thu các tính năng của ngơn ngữ kia.
Những khác nhau căn bản, không kể các mở rộng thêm vào của C++ như là các
lớp, các tiêu bản, các không gian tên, và quá tải, giữa hai ngôn ngữ là:
 inline — các hàm inline có giá trị tồn cục trong C++ và chỉ có giá trị trong
phạm vi tập tin trong C.
 Từ khóa bool trong C99 thì có riêng tập tin tiêu dề của nó là <stdbool.h>.
Các chuẩn C trước đây đã không định nghĩa kiểu boolean và nhiều phương
pháp khơng tương thích đã được dùng để mơ phỏng kiểu boolean.
 Các hằng ký tự (được đặt trong dấu ') có độ lớn của một int trong C và có
độ lớn của một char trong C++. Mặc dù vậy, ngay cả trong C các hàng này
sẽ không bao giờ vượt quá giá trị của một char, cho nên việc chuyển đổi
kiểu (char)'a' thì hồn tồn an tồn.
 Nhừng từ khóa mới thêm vào trong C++ sẽ khơng thể dược dùng làm các
tên trong C như trước đây nữa. (Ví dụ: try, catch, template, new, delete,...).
 Trong C++, trình dịch tự động tạo một "thẻ" cho mỗi struct, union hay

enum, do vậy, struct S {}; trong C++ tương đương với typedef struct S {}
S; trong C.
18


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

 C99 tiếp thu một số tính năng mà xuất hiện đầu tiên trong C++. Trong số đó
là:
 Bắt cuộc khai báo nguyên mẫu của hàm.
 Thêm từ khóa inline.
 Hủy bỏ "hiểu ngầm" của sự trả về sẽ có kiểu int.

J. Các trình biên dịch quan trọng:
Những trình dịch về C ngày nay thương được cung cấp kèm chung với C++
.Những sản phẩm trình dịch được bán phổ biến trên thị trường cũng thường cung
cấp thêm nhiều công cụ trợ giúp cho người lập trình như là IDE, debugger,...
Các trình biên dịch phổ biến: GCC,Turbo C++, Borland C/C++,Microsoft C/C++


III. Tài liệu tham khảo
A. Pascal
1.

Ngôn ngữ PASCAL và tiền đề cho sự ra đời của PASCAL
 Niklaus Wirth, 1976, Algorithms + Data Structures = Programs

2.


Những đặc điểm cơ bản của PASCAL và các phiên bản PASCAL
 Marco Cantù, 2017, Essential Pascal

3.

Hệ thống PASCAL – P
 Charles Babbage Institute, 2004, An Interview with John Brackett and
Doug Ross

4.

OBJECT PASCAL – Hỗ trợ lập trình hướng đối tượng
 Gibson, Steve (May 8, 1989). "Borland and Microsoft Enter the ObjectOriented Pascal Ring". Infoworld. p. 28.
 Lischner, Ray (2000). Delphi in a nutshell: a desktop quick reference (1st
ed.).

5.

TURBO PASCAL – trình biên dịch và IDE PASCAL nổi tiếng nhất
 Intersimone, David (2000-02-01). "Antique Software: Turbo Pascal v1.0"
 Intersimone, David (2002-02-21). "Antique Software: Turbo Pascal v5.5"

6.

PASCAL được chuẩn hóa
 N. Wirth, M. Broy, ed, and E. Denert, ed, 2002, Pascal and its Successors in
Software Pioneers: Contributions to Software Engineering. Springer-Verlag

19



Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

B. C
1. Quá trình phát triển ban đầu của ngơn ngữ lập trình C
 Ritchie, Dennis M. (March 1993). "The Development of the C Language" .
 Johnson, S. C.; Ritchie, D. M. (1978). "Portability of C Programs and the
UNIX System.
2. K&R C ra đời
 Kernighan, Brian W.; Ritchie, Dennis M. (February 1978). The C
Programming Language (1st ed).
3. Chuẩn ANSI C và ISO C
 ISO/IEC 9899:1990/AMD 1:1995 Programming languages — C —
Amendment 1: C Integrity.
4. C99
 Seebach, Peter (24 March 2004). "Open source development using C99".
5. C11
 John Benito, Convener. "C - The C1X Charter".

 Committee Draft (April 12, 2011). " The final draft of C1X ".
 WG14 N1548 Committee Draft — December 2, 2010.
"6.10.8.3 Conditional feature macros"
6. C18
 "ISO/IEC 9899:2018 - Information technology -- Programming languages
-- C"
 Gustedt, Jens (17 April 2018). "C17"
7. C2x

 Michael Larabel(14 May 2019 ). "LLVM Clang 9.0 Picks Up Initial C2x
Language Mode"
 Michael Larabel(18 October 2018 ). "GCC 9 Compiler Adds -std=c2x

And -std=gnu2x For Future C Language Update"
8. Quan hệ với C++
 B.Stroustrup (July 2002). "C and C++: Siblings. The C/C++ Users Journal.
 Stroustrup, Bjarne(1999). "An Overview of the C++ Programming

Language in The Handbook of Object Technology ".

20


Nguyên lý và phương pháp lập trình - CS111.K21.KHCL

GV: TRỊNH QUỐC SƠN

9. Các trình biên dịch quan trọng
 O’Regan, Gerard(September 24, 2015). “Pillars of computing: a
compendium of select, pivotal technology firms.”

21



×