Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
438,82 KB
Nội dung
Nguyên lý 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 trình phát triển Pascal 18521204: Nguyễn Huỳnh Nhi TÌm hiểu q trình phát triển C I Quá trình phát triển Pascal A Ngôn ngữ PASCAL tiền đề cho đời ngôn ngữ Pascal (phiên âm tiếng Việt: Pát-xcan) ngơn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh thủ tục, Niklaus Wirth phát triển vào năm 1970 Pascal 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 cấu trúc liệu, ngơn ngữ lập trình đặt theo tên nhà toán học, triết gia nhà vật lí người Pháp Blaise Pascal Pascal phát triển theo khn mẫu ngơn ngữ lập trình ALGOL 60 Lúc đầu, Wirth phát triển ngôn ngữ với cải tiến phần đề xuất cho phiên ALGOL X, chúng không chấp nhận nên ơng phát triển cách riêng biệt đặt cho “đứa con” tên mới, Pascal, phát hành vào năm 1970 B Những đặc điểm PASCAL phiên PASCAL Những đặc điểm Pascal Wirh tạo ngôn ngữ lập trình mang tính hiệu cao (cả tốc độ biên dịch, cách viết code chương trình tạo ra) dựa lập trình có cấu trúc Nguyên lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN Pascal cho phép lập trình viên xác định kiểu liệu phức tạp dễ dàng việc xây dựng cấu trúc liệu động đệ quy Chẳng hạn danh sách, sơ đồ đồ thị Các tính quan trọng đưa vào ghi, liệt kê, phân nhóm, biến phân bổ động với trỏ liên quan tập hợp Để đảm bảo cho điều kể trên, Pascal ngơn ngữ lập trình strong typing, có nghĩa loại liệu chuyển đổi hiểu loại liệu khác mà khơng có chuyển đổi rõ ràng Các chế chặt chẽ tương tự tiêu chuẩn nhiều ngôn ngữ lập trình ngày Các ngơn ngữ khác ảnh hưởng đến phát triển Pascal Simula 67 ALGOL W Wirth Pascal, giống nhiều ngôn ngữ lập trình ngày nay, cho phép định nghĩa hàm hay chương trình lồng mức độ sâu Điều cho phép cú pháp Pascal đơn giản mạch lạc chương trình hồn chỉnh gần giống hệt với thủ tục hàm Pascal trở nên thành công vào năm 1970, giai đoạn mà thị trường máy tính nhỏ máy tính cá nhân hay hệ thống máy chủ có quy mơ nhỏ hay trung bình phát triển Pascal sử dụng rộng rãi ngơn ngữ giảng dạy khóa học lập trình cấp đại học vào năm 1980, sử dụng thiết lập sản xuất để viết phần mềm thương mại thời gian Tuy nhiên, Pascal dần bị thay ngơn ngữ lập trình C vào cuối năm 1980 đầu năm 1990 hệ thống dựa UNIX trở nên phổ biến đặc biệt đời C++ Những phiên PASCAL Một thành công Pascal UCSD Pascal, mắt năm 1977, phiên chạy hệ điều hành tùy chỉnh chuyển sang tảng khác Một tảng quan trọng Apple II, tảng mà UCSD Pascal sử dụng rộng rãi Điều giúp Pascal ngơn ngữ lập trình cấp cao sử dụng để phát triển Apple Lisa – phiên máy tính để bàn Apple, sau hệ điều hành Macintosh Các phận hệ điều hành ban đầu dịch sang ngôn ngữ asembly Mororola 68000 nguồn Pascal Phần mềm chỉnh sửa ảnh tiếng giới Adobe Photoshop viết hội thảo lập trình Macintosh Pascal Một phiên cải tiến gọi Object Pascal thiết kế cho lập trình hướng đối tượng phát triển vào năm 1985, sử dụng Apple Computer Borland vào cuối năm 1980 sau phát triển thành ngơn ngữ Delphi tảng Microsoft Windows Các ứng dụng Total Commander, Skype Macromedia Captivate viết Delphi (Object Pascal) Apollo Nguyên lý 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 hệ điều hành năm 1980 Các biến thể Pascal thường sử dụng lĩnh vực từ dự án nghiên cứu tới trị chơi máy tính cá nhân 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, công cụ chuyển mã viết Zurich bao gồm trình biên dịch sang “mã máy ảo” (có thể hiểu loại mã trung gian mã máy mã nguồn), giả lập cho loại máy Bộ công cụ sau biết đến với tên hệ P-system (hệ thống Pascal-P) Các trình biên dịch hệ thống P nhóm Zurich gọi PascalP1, Pascal-P2, Pascal-P3 Pascal-P4 Pascal-P1 phiên Sau thiết kế lại để nâng cao tính di động phát hành tên Pascal-P2 Sau tiếp tục cải tiến để trở thành Pascal-P3, với mã trung gian giúp phiên có khả tương thích ngược với Pascal-P2 Pascal-P4 Trình biên dịch Pascal-P4 phiên cuối nhóm, chạy biên dịch hệ thống tương thích với Pascal gốc Tuy nhiên, chấp nhận tập ngôn ngữ Pascal Pascal-P5, tạo bên ngồi nhóm Zurich, sử dụng ngôn ngữ Pascal đầy đủ bao gồm khả tương thích ISO 7185 Kenneth Bowles sử dụng Pascal-P2 để tạo UCSD p-system Đây ba hệ điều hành có sẵn phiên IBM PC mắt UCSD Pascal sử dụng mã trung gian dựa giá trị byte, trình biên dịch mã byte Pascal-P1 không thông qua PascalP4, mà dựa chiều dài từ CDC 6600 60 bit Trình biên dịch dựa trình biên dịch Pascal-P4, tạo tệp nhị phân gốc, phát hành cho máy tính lớn IBM System / 370 Ủy ban Năng lượng Nguyên tử Úc (Australian Atomic Energy Commission); gọi "AAEC Pascal Compiler" Vào đầu năm 1980, Watcom Pascal phát triển, cho hệ thống IBM 370 Vào năm 1990, Pascal chạy thiết bị VAX Đại học George Mason để dạy lập trình máy tính Nguyên lý 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 Lịch sử Apple Object Pascal phiên cải tiến Pascal hỗ trợ lập trình hướng đối tượng mắt vào năm 1986, biết đến chủ yếu với vai trị ngơn ngữ lập trình Delphi Object Pascal phát triển Apple Computer nhóm Larry Tesler đứng đầu với tham vấn Niklaus Wirth, người tạo nên ngôn ngữ Pascal Nó xuất phát từ phiên hướng đối tượng Pascal có tên gọi Classcal, cài sẵn máy tính Lisa Object Pascal cần thiết để hỗ trợ cho MacApp, phần mở rộng khung ứng dụng Macintosh mà gọi thư viện lớp Một phần mở rộng Object Pascal triển khai Think Pascal IDE IDE bao gồm trình biên dịch trình soạn thảo với khả kiểm tra tơ sáng cú pháp, trình gỡ lỗi mạnh mẽ thư viện lớp Nhiều lập trình viên thích Think Pascal cách triển khai Object Pascal Apple Think Pascal cung cấp tích hợp chặt chẽ với cơng cụ Tuy nhiên, trình phát triển dừng lại sau phiên 4.01 cơng ty phát triển bị mua lại Symantec Sau lập trình viên dần rời khỏi dự án Apple bỏ hỗ trợ cho Object Pascal họ chuyển từ chip Motorola 68K sang kiến trúc PowerPC IBM vào năm 1994 MacApp 3.0, cho tảng sau viết lại C++ Đây đoạn code mẫu cho chương trình “Hello World” viết Object Pascal Apple: program ObjectPascalExample; type THelloWorld = object procedure Put; end; var HelloWorld: THelloWorld; procedure THelloWorld.Put; begin ShowMessage('Hello, World!'); end; begin New(HelloWorld); Nguyên lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN HelloWorld.Put; Dispose(HelloWorld); end Thời đại Borland CodeGear Borland định cần phải có nhiều tính hướng đối tượng tinh vi phức tạp hơn, bắt đầu sản phẩm Delphi, sử dụng sơ đồ thiết kế Object Pascal Apple đưa làm sở (Sơ đồ Apple chưa phải chuẩn.) Borland gọi Object Pascal phiên Delphi đầu tiên, đổi tên thành Delphi phiên sau Quá trình phát triển Delphi bắt đầu vào năm 1993 phiên Delphi 1.0 thức mắt Hoa Kỳ vào ngày 14 tháng năm 1995 Trong mã nguồn sử dụng mơ hình đối tượng Turbo Pascal biên dịch, Delphi giới thiệu cú pháp với từ khóa class để thay cho object, hàm tạo Create hàm hủy ảo Destroy (và ngược lại phải gọi thủ tục New Dispose procedures), thuộc tính, trỏ hàm, thứ khác Những điều lấy cảm hứng từ thảo soạn thảo 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, có nhiều khác biệt với phương ngữ Turbo Pascal (ví dụ yêu cầu thảo tất phương thức phải ảo) bị bỏ qua Ngôn ngữ Delphi tiếp tục phát triển qua nhiều năm để hỗ trợ cho cấu trúc mảng động, tổng quát phương thức ảo Các phiên Object Pascal Borland sử dụng tên gọi Object Pascal cho ngôn ngữ lập trình phiên đầu Delphi, sau đổi tên thành ngơn ngữ lập trình Delphi Tuy nhiên, 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 đăng kí nhãn hiệu, trình biên dịch tương thích 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 Object Pascal sang Windows macOS, iOS, Android Web NET hỗ trợ từ Delphi đến Delphi 2005, Delphi 2006 Delphi 2007, thay 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 phát triển RemObjects Software nhắm đến Common Language Infrastructure, [[Java (công nghệ)]|Java] Runtime Environment khung Cocoa Apple cho iOS macOS Nguyên lý 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ữ biên dịch sang loạt hệ điều hành—bao gồm Linux (32-bit 64-bit), FreeBSD, Classic Mac OS/macOS, Solaris, Win32, Win64 Windows CE—cũng cho kiến trúc phần cứng khác Phiên đầu Free Pascal cho iPhone SDK 2.x mắt vào ngày 17 tháng năm 2009 Hiện có hỗ trợ cho ISA ARM Ngơn ngữ lập trình Smart Pascal nhắm đến JavaScript/ECMAScript sử dụng Smart Mobile Studio, viết Jon Lennart Aasenden công bố Optimale Systemer (2012) Ngôn ngữ đơ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 RAD (phát triển ứng dụng nhanh) Smart Pascal tích hợp chặt chẽ với công nghệ thiết lập node.js, Embarcadero DataSnap Remobjects SDK để mang đến ứng dụng web máy khách/máy chủ hiệu suất cao Nó cho phép dễ dạo tạo thành phần trực quan thư việc dễ sử dụng lại Phương ngữ Smart Pascal bắt nguồn từ ngôn ngữ DWScript- mở rộng để tích hợp tơt shown với mơi trường thư viện JavaScript, phần "asm" vốn JavaScript có khả truy cập đến kí hiệu Pascal, hay lớp "ngoài" ("external") vốn ánh xạ trực tiếp tới lớp JavaScript nguyên mẫu Smart Pascal giới thiệu tính thừa kế thực sự, lớp, lớp phần, giao diện, bảng phương thức ảo nhiều cấu trúc nâng cap khác vốn phần mặc định JavaScript MIDletPascal tập trung vào tảng Java byte-code Lưu ý Free Pascal nhắm đến máy ảo Java (JVM), với nhiều tính phong phú Ngơn ngữ lập trình Morfik Pascal phát triển Morfik nhắm đến ứng dụng web có hỗ trợ Ajax trình biên dịch Morfik tính hợp vào IDE AppsBuilder công ty cho phép mã Object Pascal sử dụng để thực thực mã thực thi trình duyệt máy chủ Nó sử dụng trình biên dịch Free Pascal để sinh tập tin nhị phân nguyên từ Object Pascal Trình biên dịch mã nguồn mở GNU Pascal có sẵn từ front-end GNU sưu tập trình biên dịch, thực tiêu chuẩn ISO 7185 Pascal, "hầu hết" tiêu chuẩn ISO 10206 Extended Pascal Ngoài cịn có trình biên dịch miễn phí Turbo51, dùng để sản xuất mã cho chip Intel 8051 WDSibyl IDE trình biên dịch mã nguồn mở tựa Delphi dành cho Microsoft Windows OS/2, mơi trường thương mại tương thích với Borland Pascal phát hành công ty tên Speedsoft mà sau phát triển thành môi trường RAD giống Delphi với tên gọi Sybil sau mã nguồn mở theo giấy phép GPL cơng ty đóng cửa Hiện Ngun lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN Wolfgang Draxler (WD) trì phần mềm (Trình biên dịch sử dụng nằm tập tin DLL không mã nguồn mở) E TURBO PASCAL – trình biên dịch IDE tiếng cho PASCAL Lịch sử hình thành Turbo Pascal trình biên dịch mơi trường phát triển tích hợp (IDE) cho ngơn ngữ Pascal chạy hệ điều hành MS-DOS CP/M, phát triển hãng Borland Cái tên Borland Pascal dành riêng cho phiên tốt Turbo Pascal (với nhiều thư viện chuẩn mã nguồn hơn) Borland Pascal dùng để trình biên dịch Pascal hãng Borland Turbo Pascal xây dựng trình biên dịch Blue Label Pascal viết cho hệ điều hành NasSys NasCom vào năm 1981 Anders Hejlsberg Đây lần viết lại trình biên dịch Compas Pascal cho hệ điều hành CP/M trình biên dịch Turbo Pascal cho hệ điều hành MS-DOS CP/M Một phiên Turbo Pascal viết cho máy Apple Macintosh từ năm 1986 cuối bị bỏ dở năm 1992 Một phiên khác viết cho máy DEC Rainbow sau vài lần phát hành Các phiên Turbo Pascal sửa lại thư viện đồ họa Turbo Pascal đưa vào khái niệm unit (đơn vị chương trình) Turbo Pascal có tính lập trình hướng đối tượng (OOP) Turbo Pascal có số tính IDE cải thiện, cho phép mở nhiều cửa sổ soạn thảo lúc (Multi-document interface) (MDI) Turbo Pascal có số tính có cải thiện IDE có hỗ trợ đổi màu mã lệnh (color-coding) Các phiên Turbo Pascal có kèm theo Turbo Vision, GUI framework phát triển Borland, dành cho C++ Pascal Turbo Pascal giáo dục Borlan Pascal giảng dạy số quốc gia cấp trung học, đại học Nó giảng dạy trường cao đẳng đại học Costa Rica, Thổ Nhĩ Kỳ, Đức, Liên bang Nga, Mỹ, Malta 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 Việt Nam (nay chuyển sang Free Pascal) Đó ngơn ngữ lập trình giáo dục nhà nước phê duyệt cho tất trường trung học Nam Phi năm 2002 Ngày nay, tiếp tục giảng dạy số trường đại học giới giới thiệu lập trình máy tính, thường tiến tới C Java hai Nguyên lý 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 Turbo Pascal 5.5 tính đơn giản so với IDE đại Microsoft Visual Studio Borland JBuilder, giới thiệu cho sinh viên khơng quen với việc tính tốn với tác vụ thơng thường sử dụng phím tắt bàn phím (TP 5.5 khơng có hỗ trợ chuột), làm quen với lệnh DOS (phần lớn giống dấu nhắc lệnh Microsoft Windows) 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ạng tải xuống miễn phí từ Borland Đây chương trình Hello world kinh điển Turbo Pascal: program HelloWorld; begin WriteLn('Hello World') end F PASCAL chuẩn hóa ISO/IEC 7185: 1990 Pascal Năm 1983, ngôn ngữ chuẩn hoá, theo tiêu chuẩn quốc tế IEC/ISO 7185 số tiêu chuẩn cụ thể quốc gia khác bao gồm ANSI/IEEE770X3.97-1983 ISO 7185:1983 Mỹ Hai tiêu chuẩn khác chỗ tiêu chuẩn ISO bao gồm phần mở rộng "cấp 1" ANSI không cho phép phần mở rộng vào gốc (Wirth) Năm 1989, ISO 7185 sửa đổi Chuẩn ISO 7185 phát triển với mục đích chọn lọc ngôn ngữ 1974 Writh, đề cập chi tiết "Hướng dẫn sử dụng Báo cáo Jensen Wirth", bổ sung đáng kể "Các tham số mảng phù hợp" coi mức tiêu chuẩn, mức Pascal khơng có mảng phù hợp Trên máy tính lớn mà Pascal xuất phát (mainframe minicomputer), tiêu chuẩn thường tuân theo Tuy IBM-PC ngược lại Trên máy tính IBM-PC, chuẩn Turbo Pascal Delphi Borland có lượng người dùng nhiều Do vậy, biết liệu phiên riêng biệt tương ứng với ngôn gữ Pascal ban đầu, hay ngôn ngữ riêng Borland quan trọng ISO/IEC 10206: Mở rộng Pascal 1990 Năm 1990, chuẩn Pascal mở rộng tạo dựa theo tiêu chuẩn ISO/IEC 10206, giống hệt nội dung kỹ thuật cho IEEE/ANSI 770X3.160-1989 G PASCAL thời điểm Pascal dù đời từ lâu, đến năm 2020 vừa trịn 50 năm, điểm mạnh ngơn ngữ lập trình người cơng nhận Với cấu Nguyên lý 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 quy tắc lập trình chặt chẽ, Pascal sử dụng rộng rãi “ngôn ngữ học đường” để dẫn bước chân đầy hứng thú cho hệ trẻ đường lập trình cịn ngồi ghế cấp 2, cấp Nhưng, với đời, thay đổi, phát triển liên tục mạnh mẽ ngơn ngữ lập trình ngày Từ lâu, Pascal khơng cịn phù hợp sử dụng nhiều thực tế, việc dạy học Tuy nhiên, sau tất cả, Pascal ngơn ngữ lập trình thành cơng mặt thương mại khoảng thời gian Cùng ngơn ngữ lập trình giờ, Pascal đặt móng đầu tiên, mang cách nhìn mới, dễ tiếp cận, thu ngắn khoảng cách người dịng code khơ khan, cho nhiều hệ học sinh, sinh viên thời điểm tận nhận nét đẹp lập trình! Nguyên lý 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 Q trình phát triển ban đầu ngơn ngữ lập trình C Phát triển khởi đầu C diễn phịng thí nghiệm Bell AT&T (Hoa Kỳ) giữ năm 1969 1973, thực Brian W.Kernighan Dennis Ritchie Được đặt tên C có nhiều đặc tính rút từ ngơn ngữ B trước Mục đích: tạo ngơn ngữ lập trình bậc cao có khả chuyển đổi từ hệ thống sang hệ thống khác thay cho hợp ngữ lập trình hệ thống 1973, C dùng viết nhân cho UNIX thay cho Assembly trước máy PDP-11/20 Đây lần mà nhân hệ điều hành lắp thành ngôn ngữ khác Assembly B K&R C đời Năm 1978 Ritchie Brian Kernighan xuất lần đầu The C Programing Language Cuốn người lập trình biết đến K&R đặc tả khơng thức C K&R giới thiệu chức sau: + Kiểu liệu struct + Kiểu liệu long int + Kiểu liệu unsigned int + Toán tử =+ đổi thành +=, tương tự cho toán tử khác để tránh gây hiểu nhầm cho phân tích từ vựng trình dịch C K&R C xem phần ngôn ngữ mà cần phải có cho trình biên dịch C sau ANSI C giới thiệu.Vì khơng phải trình biên dịch hỗ trợ tồn ANSI C mã viết K&R C mã hợp lệ ANSI 10 Nguyên lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN Các phiên trước, hàm trả số khác nguyên khai báo trước dùng.Nếu khơng khai báo mặc định trả số nguyên Bởi nguyên mẫu K&R khơng bao gồm thơng tin tham số hàm, chức kiểm tra kiểu đối số không tiến hành Sau nhiều năm, tái K&R C nhiều chức “ khơng thức” thêm vào cho ngơn ngữ, hỗ trợ trình dịch AT&T số khác Trong bao gồm: + Các hàm có kiểu void liệu kiểu void * + Các hàm trả kiểu struct hay union + Tên miền không gian tên cho kiểu struct + Phép gán cho kiểu liệu struct + Hằng const xem đối tượng cho phép đọc + Một thư viện chuẩn hợp tác để xây dựng nhiều nhà sản xuất + Các kiểu enumeration + Kiểu xác đơn float C Chuẩn ANSI C 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 tiêu chuẩn dặc tả C Sau q trình khó khăn lâu dài, tiêu chuẩn hồn tất vào 1989 cơng nhận "Programming Language C" ANSI X3.159-1989 Phiên ngôn ngữ thường nhắc đến ANSI C D C99 Khái niệm: tên khơng thức 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 năm 2000 Là phiên nâng cao phiên C90 với tính bổ sung cho ngôn ngữ thư viện tiêu chuẩn để sử dụng tốt phần cứng máy tính có sẵn cơng nghệ số, trình biên dịch IEEE Các tính quan trọng phiên C99 + Một số tính giống phần mở rộng cho C90 trình biên dịch GNU cung cấp, chẳng hạn macro có số lượng đối số thay đổi + Con trỏ hạn chế thêm vào C99 11 Nguyên lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN + Có số từ khóa định danh + Kỹ thuật bình luận + 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 từ khóa mới, tính quan trọng C99 + complex: Được sử dụng để khai báo biến kiểu số phức để lưu trữ số phức tốn học Dùng thư viện Ví dụ + Imaginary: Được sử dụng để khai báo biển kiểu ảo lưu trữ số ảo tốn học Dùng thư viện Ví dụ: 12 Ngun lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN Input: #include #include 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 hàm cụ thể đối tượng việc khai triển nội tuyến (inline expansion); có nghĩa là, đề nghị chương trình biên dịch nên chèn tồn thân hàm vào ngữ cảnh, nơi hàm sử dụng Ví dụ: + restrict: Chỉ sử dụng cho trỏ Một trỏ đủ điều kiện với từ khóa “restricted” gọi “restricted pointer” Restricted pointer khai báo sau: 13 Nguyên lý phương pháp lập trình - CS111.K21.KHCL + GV: TRỊNH QUỐC SƠN Khai báo biến: Việc khai báo biến điểm chương trình dấu ngoặc nhọn hàm main() hợp lệ Ví dụ: + Độ dài mảng biến: C99 cho phép khai báo kích thước mảng biến số nguyên biểu thức số nguyên hợp lệ Đây gọi mảng chiều dài biến Ví dụ: 14 Nguyên lý 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 cách sử dụng dấu gạch chéo kép(//) thực C++ trình biên dịch C khơng hiển thị lỗi khơng thể xảy ANSI C Ví dụ: //Đây bình luận E C11 Khái niệm Là tên khơng thức cho tiêu chuẩn ISO/IEC 9899: 2011 Nó thay C99 thay C18 Bản dự thảo cuối cùng, N1570, xuất vào tháng năm 2011 Tiêu chuẩn thông qua đánh giá dự thảo cuối vào ngày 10 tháng 10 năm 2011 ISO thức phê chuẩn xuất dạng ISO / IEC 9899: 2011 vào ngày tháng 12 năm 2011 C11 chủ yếu chuẩn hóa tính hỗ trợ trình biên dịch đại phổ biến bao gồm mơ hình nhớ chi tiết để hỗ trợ tốt cho nhiều luồng thực thi Do khả tuân thủ C99 bị chậm trễ, C11 làm cho số tính định tùy chọn, để giúp tuân thủ tiêu chuẩn ngôn ngữ cốt lõi dễ dàng Các thay đổi so với C99: Thay đổi số thông số thư viện ngôn ngữ C99 chẳng hạn: + Alignment specification(_Alignas specifier, _Alignof operator, aligned_alloc function, header file) + Hàm noneturn: Chỉ định hàm khơng trở điểm gọi Có thể xuất nhiều lần khai báo hàm, cách xử lí giống xuất lần Thư viện gọi hàm + Hỗ trợ đa luồng(_Thread_localbộ xác định lớp lưu trữ, tiêu đề bao gồm chức quản lý / tạo luồng, mutex , biến điều kiện chức lưu trữ dành riêng cho luồng , [10] cho hoạt động ngun tử hỗ trợ mơ hình 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) cbrtf(x) tùy thuộc vào loại x: + Hỗ trợ Unicode cải thiện dựa Báo cáo kỹ thuật C Unicode ISO / IEC TR 19769: 2004 ( char16_tvà char32_tcác loại để lưu trữ liệu mã hóa UTF-16 / UTF-32 , bao gồm hàm chuyển đổi và 15 Nguyên lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN tiền tố chữ uvà Uchuỗi tương ứng , u8tiền tố cho UTF-8 mã hóa chữ) + Loại bỏ gets, khơng dùng 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 phân tích + Nhiều macro để truy vấn đặc điểm dấu phẩy động,liên quan đến số dấu phẩy động bất thường số chữ thập phân lưu trữ + Các struct unions, sử dụng unions struct lồng vào Ví dụ: struct T { int tag; union { float x; int n; }; }; + Static assertions đánh giá trình dịch giai đoạn muộn #if #error kiểu dịch người dịch hiểu + Chế độ tạo mở cho fopen.Sử dụng tệp + quick_exit: cách thứ ba để chấm dứt chương tình nhằm làm deinitianlzation tối thiểu chấm dứt với exit thất bại + Một timespec_getchức cấu trúc tương ứng với mức độ tương thích POSIX + marco để xây dụng giá trị phức tạp ( real + imaginary*I khơng mang lại giá trị mong đợi imaginary vô hạn NaN) Tính tùy chọn: Đặc tính Kiểm tra tính macro Tính khả dụng C99 Khả 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 ( ) STDC_NO_THREADS Khơng có sẵn Atomic primitives loại ( vòng _Atomic loại định tính) STDC_NO_ATOMICS Khơng có sẵn 16 Ngun lý 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 ( ) STDC_NO_COMPLEX Mảng chiều dài thay đổi STDC_NO_VLA Bắt buộc thực lưu trữ Bắt buộc F C18: Khái niệm: C18 (trước gọi C17 ) tên khơng thức cho ISO / IEC 9899: 2018 , [1] tiêu chuẩn gần cho ngơn ngữ lập trình C , xuất vào tháng năm 2018 Nó thay C11 (tiêu chuẩn ISO / IEC 9899: 2011) Thay đổi so với C11: C18 giải khiếm khuyết C11 mà không giới thiệu tính _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: tên khơng thức cho lần sửa đổi tiêu chuẩn ngôn ngữ C (sau C18) Dự định áp dụng thức tiêu chuẩn sửa đổi vào cuối năm 2021 xuất vào năm 2022 Tính đề 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ự hàm tìm thấy phần mở rộng POSIX SVID C 17 Nguyên lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN + Loại char8_t, mạch với char16_t char32_t thêm vào C11 Nguyên tắc mới: Nó bổ sung nguyên tắc cho “Nguyên tắc gốc ” C: Giao diện lập trình ứng dụng (API) nên tự ghi lại tài liệu Cụ thể, thứ tự tham số khai báo hàm nên xếp cho kích thước mảng xuất trước mảng Mục đích phép ký hiệu Mảng có độ dài thay đổi (VLA) sử dụng Điều không làm cho mục đích mã rõ ràng người đọc mà cịn giúp phân tích tĩnh dễ dàng Bất kỳ API thêm vào Tiêu chuẩn nên xem xét điều Trình biên dịch hỗ trợ: Clang 9.0, GCC compiler has -std=c2x H Quan hệ với C++: C++ nguyên kết thừa từ C Mặc dù vậy, khơng phải chương trình C hợp lệ C++ Vì hai ngơn ngữ độc lập, số lượng khơng tương thích hai ngơn ngữ tăng lên Phiên cuối C99 tạo thêm nhiều tính xung đột (giữa C C++) Các khác tạo khó khăn để viết chương trình thư viện đẻ dịch hoạt động xác hai loại mã C hay C++, đồng thời gây nhầm lẫn cho người lập trình dùng hai ngơn ngữ Sự chênh lệch gây khó khăn cho ngơn ngữ tiếp thu tính ngơn ngữ Những khác bản, không kể mở rộng thêm vào C++ lớp, tiêu bản, không gian tên, tải, hai ngôn ngữ là: inline — hàm inline có giá trị tồn cục C++ có giá trị phạm vi tập tin C Từ khóa bool C99 có riêng tập tin tiêu dề Các chuẩn C trước không định nghĩa kiểu boolean nhiều phương pháp khơng tương thích dùng để mô kiểu boolean Các ký tự (được đặt dấu ') có độ lớn int C có độ lớn char C++ Mặc dù vậy, C hàng không vượt giá trị char, việc chuyển đổi kiểu (char)'a' hồn tồn an tồn Nhừng từ khóa thêm vào C++ khơng thể dược dùng làm tên C trước (Ví dụ: try, catch, template, new, delete, ) Trong C++, trình dịch tự động tạo "thẻ" cho struct, union hay enum, vậy, struct S {}; C++ tương đương với typedef struct S {} S; C 18 Nguyên lý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN C99 tiếp thu số tính mà xuất C++ Trong số là: Bắt khai báo nguyên mẫu hàm Thêm từ khóa inline Hủy bỏ "hiểu ngầm" trả có kiểu int J Các trình biên dịch quan trọng: Những trình dịch C ngày thương cung cấp kèm chung với C++ Những sản phẩm trình dịch bán phổ biến thị trường thường cung cấp thêm nhiều cơng cụ trợ giúp cho người lập trình 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 Ngôn ngữ PASCAL tiền đề cho đời PASCAL Niklaus Wirth, 1976, Algorithms + Data Structures = Programs Những đặc điểm PASCAL phiên PASCAL Marco Cantù, 2017, Essential Pascal Hệ thống PASCAL – P Charles Babbage Institute, 2004, An Interview with John Brackett and Doug Ross 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.) TURBO PASCAL – trình biên dịch IDE PASCAL tiếng Intersimone, David (2000-02-01) "Antique Software: Turbo Pascal v1.0" Intersimone, David (2002-02-21) "Antique Software: Turbo Pascal v5.5" PASCAL 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ý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN B C Q trình phát triển ban đầu 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 K&R C đời Kernighan, Brian W.; Ritchie, Dennis M (February 1978) The C Programming Language (1st ed) Chuẩn ANSI C ISO C ISO/IEC 9899:1990/AMD 1:1995 Programming languages — C — Amendment 1: C Integrity C99 Seebach, Peter (24 March 2004) "Open source development using C99" 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" C18 "ISO/IEC 9899:2018 - Information technology Programming languages C" Gustedt, Jens (17 April 2018) "C17" C2x Michael Larabel(14 May 2019 ) "LLVM Clang 9.0 Picks Up Initial C2x Language Mode" Michael Larabel(18 October 2018 ) "GCC Compiler Adds -std=c2x And -std=gnu2x For Future C Language Update" 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ý phương pháp lập trình - CS111.K21.KHCL GV: TRỊNH QUỐC SƠN 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 ... TURBO PASCAL – trình biên dịch IDE tiếng cho PASCAL Lịch sử hình thành Turbo Pascal trình biên dịch mơi trường phát triển tích hợp (IDE) cho ngôn ngữ Pascal chạy hệ điều hành MS-DOS CP/M, phát triển. .. liệu kh? ?c mà khơng c? ? chuyển đổi rõ ràng C? ?c chế chặt chẽ tương tự tiêu chuẩn nhiều ngơn ngữ lập trình ngày C? ?c ngôn ngữ kh? ?c ảnh hưởng đến phát triển Pascal Simula 67 ALGOL W Wirth Pascal, giống... CS111.K21.KHCL GV: TRỊNH QU? ?C SƠN tr? ?c chương trình rõ ràng, dễ h? ?c, dễ đ? ?c quy t? ?c lập trình chặt chẽ, Pascal sử dụng rộng rãi ? ?ngôn ngữ h? ?c đường” để dẫn bư? ?c chân đầy hứng thú cho hệ trẻ đường lập trình