- Ban đầu được phát triển như một đề xuất cho cải tiến của phiên bản ALGOL X, nhưng sau đó đã được phát triển riêng biệt thành ngôn ngữ lập trình mới... Lịch sử đầu tiên tại Apple - Obje
Trang 1ĐỒ ÁN MÔN HỌC:
Tìm hiểu quá trình phát triển của hai ngôn ngữ lập trình
Pascal và C
Trang 2Môn học:
Nguyên lý và phương pháp lập trình - CS111.K21.KHCL
Giảng viên hướng dẫn:
Trịnh Quốc Sơn
Thành viên thực hiện:
- Nguyễn Hữu Nghĩa – 18521144
- Nguyễn Huỳnh Nhi – 18521204
2
Trang 3Tóm tắt nội dung
I Tìm hiểu quá trình phát triển của Pascal
A Ngôn ngữ PASCAL và tiền đề cho sự ra đời của PASCAL
B Những đặc điểm cơ bản của PASCAL và các phiên bản PASCAL
C Hệ thống PASCAL – P.
D OBJECT PASCAL – Hỗ trợ lập trình hướng đối tượng.
E TURBO PASCAL – trình biên dịch và IDE PASCAL nổi tiếng nhất
F PASCAL được chuẩn hóa.
G PASCAL trong thời điểm hiện tại.
Trang 4Tóm tắt nội dung
II Tìm hiểu 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
Trang 5I Tìm hiểu quá trình phát triển của Pascal
Trang 6A Ngôn ngữ PASCAL và tiền đề cho sự ra đời
của ngôn ngữ này
- Được Niklaus Wirth phát triển vào năm 1970.
- Được đặt tên theo nhà toán học, triết gia và nhà vật lý người Pháp
Blaise Pascal.
- Được phát triển theo khuôn mẫu của ngôn ngữ lập trinh ALGOL
60
- Thích hợp với kiểu lập trinh cấu trúc và cấu trúc dữ liệu
- Ban đầu được phát triển như một đề xuất cho cải tiến của phiên bản ALGOL X, nhưng sau đó đã được phát triển riêng biệt thành ngôn ngữ lập trình mới
6
Trang 7B Những đặc điểm cơ bản của PASCAL và các phiên bản PASCAL
1 Những điểm cơ bản
- Ngôn ngữ lập trình mang tính hiệu quả cao dựa trên lập trình
có cấu trúc.
- Là ngôn ngữ lập trình strong typing.
- Cho phép định nghĩa các hàm hay chương trinh con (thủ tục) ở
bất kỳ độ sâu nào
- Trở nên rất thành công vào những năm 1970
- Được giảng dạy tại các trường đại học vào những năm 1980
Trang 8B Những đặc điểm cơ bản của PASCAL và các phiên bản PASCAL
2 Những phiên bản của Pascal
- UCSD Pascal, 1997, cho phép chuyển sang các nền tảng khác
nhau
- Object Pascal, 1985, được thiết kế hỗ trợ lập trinh hướng đối
tượng, sau đó được phát triển thành Delphi
- 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 trò chơi trên máy tinh cá nhân và các hệ thống nhúng
8
Trang 9C Hệ thống PASCAL – P
- 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” và một bộ giả lập cho loại máy này được gọi là P – system (Hệ thống Pascal – P).
- Nhóm cơ bản gồm: Pascal – P1, Pascal – P2, Pascal – P3,
Pascal – P4
- Pascal – P3 được phát triển với khả năng tương thích ngược với
Pascal – P2 và Pascal – P4
- Pascal – P5 được tạo ra có thể sử dụng đầy đủ ngôn ngữ Pascal và
có khả năng tương thích ISO 7185
Trang 10C Hệ thống PASCAL – P
- 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
- 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 được sử dụng trên các thiết bị
tại Đại học George Mason để dạy lập trinh máy tinh
10
Trang 11D 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à 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 nhiều nhất với vai trò là ngôn ngữ lập trinh chinh của Delphi
- Tại Apple Computer, Object Pascal được phát triển với sự tham
vấn của chinh Niklaus Wirth Lúc này Object Pascal là thành phần cần thiết cho MacApp
Trang 12D OBJECT PASCAL – Hỗ trợ lập trình hướng đối tượng.
1 Lịch sử đầu tiên tại Apple
- Một phần mở rộng của Object Pascal cũng được phát triển trong Think Pascal IDE
- Vào năm 1994, Apple chuyển từ chip Motorola 68K sang kiến
trúc PowerPC của IBM vào năm 1994 MacApp 3.0, sau đó đã được viết lại bằng C++
12
Trang 13D OBJECT PASCAL – Hỗ trợ lập trình hướng đối tượng.
2 Thời đại của Borland và CodeGear
- Công ty Borland phát triển Delphi với sơ đồ thiết kế Object
Pascal của Apple làm cơ sở
- Phiên bản Delphi 1.0 chinh thức ra mắt ở Hoa Kỳ vào ngày
14/02/1995
- Delphi có những thay đổi như sử dụng từ khóa “class” để thay
“object”, hàm tạo Create, hàm hủy ảo Destroy, các thay đổi về thuộc tính, con trỏ hàm,…
- Delphi vẫn được phát triển tiếp tục nhiều năm sau đó
Trang 14E 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 trinh biên dịch và IDE cho Pascal chạy trên
hệ điều hành MS-DOS và CP/M, được phát triển bởi hãng phần mềm
Borland
- Cái tên Borland Pascal là tên gọi cho phiên bản tốt hơn của Turbo Pascal, ngoài ra cũng được dùng để chỉ trinh biên dịch Pascal của hãng Borland
14
Trang 15E TURBO PASCAL – trình biên dịch và IDE
nổi tiếng nhất cho PASCAL.
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)
Trang 16E TURBO PASCAL – trình biên dịch và IDE
nổi tiếng nhất cho PASCAL.
3 Turbo Pascal trong giáo dục
- Borland Pascal vẫn được sử dụng để giảng dạy ở một số quốc gia
ở cấp trung học và đại học Một số trường đại học trên thế giới dùng
Turbo Pascal như cách để giới thiệu về lập trình máy tinh trước khi
giảng dạy sâu cho sinh viên về C hay Java
- Một số giảng viên thích sử dụng Borland Pascal 7 hoặc Turbo
Pascal 5.5 hơn là các IDE hiện đại như MVS
- Phù hợp với các sinh viên không quen với việc tinh toan với các tác
vụ thông thường như sử dụng phím tắt và bàn phím hoặc làm quen với các lệnh DOS
16
Trang 17F.PASCAL được chuẩn hóa.
1 ISO/IEC 7185: 1990 Pascal
- Năm 1983, Pascal được chuẩn hóa, 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ỹ
- Năm 1989, ISO 7185 được sửa đổi
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
Trang 18G PASCAL trong thời điểm hiện tại.
- Các điểm mạnh của ngôn ngữ lập trinh này vẫn được công nhận
- Vẫn được sử dụng rộng rãi như một “ngôn ngữ lập trình học
đường” tại các trường trung học tại nhiều quốc gia
- 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
18
Trang 19II Tìm hiểu quá trình phát triển của C
Trang 20A 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
20
Trang 21B 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
Trang 22B K&R C ra đời
- 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
22
Trang 23C 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 quá
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
Trang 2424
Trang 25D C99
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.+ C99 cho phép sử dụng số tinh vi và bộ khởi tạo được chỉ định
+ Con trỏ hạn chế cũng được thêm vào trong C99
+ 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
Trang 26D C99
Các từ khóa mới: C99 đã thêm các 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>
+ Imaginary: Được sử dụng để khai báo các biển kiểu ảo trong lưu trữ các số ảo trong toán học Dùng thư viện <complex.h>
+ 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)
+ 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”
26
Trang 27D C99
Ngoài ra, còn có một số thay đổi như sau:
+ 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ệ
+ Độ 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
+ 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
Trang 28E C11
- 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
28
Trang 29- 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
Trang 30G 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
+ 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.
30
Trang 31G C2x
- 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
Trang 3232
Trang 33+ 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ẽ
Trang 34H Quan hệ với C++
+ 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.
+ 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.
34
Trang 35J.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++
…
Trang 36III Tài liệu tham khảo
Trang 37A Tài liệu tham khảo về Pascal
+ Niklaus Wirth, 1976, Algorithms + Data Structures = Programs
+ Marco Cantù, 2017, Essential Pascal
+ Charles Babbage Institute, 2004, An Interview with John Brackett and Doug Ross
+ Gibson, Steve (May 8, 1989) "Borland and Microsoft Enter the
Object-Oriented Pascal Ring" Infoworld p 28.
+ Lischner, Ray (2000) Delphi in a nutshell: a desktop quick reference (1st ed.) + Intersimone, David (2000-02-01) "Antique Software: Turbo Pascal v1.0"
+ Intersimone, David (2002-02-21) "Antique Software: Turbo Pascal v5.5“
Trang 38B Tài liệu tham khảo về 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.
+ Kernighan, Brian W.; Ritchie, Dennis M (February 1978) The C Programming Language (1st ed).
+ ISO/IEC 9899:1990/AMD 1:1995 Programming languages — C — Amendment 1: C
Integrity.
+ Seebach, Peter (24 March 2004) "Open source development using C99".
+ John Benito, Convener "C - The C1X Charter".
+ "ISO/IEC 9899:2018 - Information technology Programming languages C"
+ Michael Larabel(14 May 2019 ) "LLVM Clang 9.0 Picks Up Initial C2x Language Mode“ + B.Stroustrup (July 2002) "C and C++: Siblings The C/C++ Users Journal “
+ O’Regan, Gerard(September 24, 2015) “Pillars of computing: a compendium of select, pivotal technology firms.” 38