Câu hng ập ủa nc nào toâu hng ập ủa ngôn ngữ lập trìnhập trình phổ biểnn các tính bảo mật và an toàn ngôn ngôn ngữ lập thiết kế Web App có hỗ trợ, đợhỗ Appn ngôn ngôn ngữ lập trìn hay k
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN MÔN CS111 – NGUYÊN LÝ VÀ PHƯƠNG PHÁP LẬP TRÌNH
Đề tài: CÁC TIÊU CHUẨN ĐÁNH GIÁ NGÔN NGỮ LẬP TRÌNH
Giảng viên hướng dẫn: Thầy Trịnh Quốc Sơn
Sinh viên thực hiện: Lê Nguyễn Khánh Nam
MSSV: 20520073
TP HỒ CHÍ MINH, Tháng 6 Năm 2022 NHẬN XÉT CỦA GIẢNG VIÊN
Trang 2
-TPHCM, Ngày … Tháng … Năm …
Người nhận xét
(Ký tên)
Trang 3M C L C Ụ Ụ
Phần 1: Mở đầu 4
1 Lý do chọn đề tài 4
2 Đối tượng nghiên cứu 4
3 Cơ cấu đồ án 4
Phần 2: Các tiêu chí đánh giá ngôn ngữ lập trình và tổng quan các ngôn ngữ lập trình phổ biến .5
I Các tiêu chí đánh giá ngôn ngữ lập trình 5
1 Tiêu chí về mặt ngôn ngữ 5
2 Tiêu chí về mặt lập trình, ứng dụng 5
Error! Hyperlink reference not valid.II Tổng quan các ngôn ngữ lập trình phổ biến 6
1 C++ 7
2 Java 7
3 C# 7
4 JavaScript 7
5 Python 7
Phần 3: So sánh, đánh giá một số ngôn ngữ lập trình phổ biển 8
I Tính bảo mật của ngôn ngữ lập trình 8
II Lập trình Web 9
III.Lập trình Game 11
IV Lập trình AI 12
KẾT LUẬN 14
Trang 4Phần 1: Mở đầu
1 Lý do chọn đề tài
Việc c hiệco chọn đề ủa ngôn mà đáp chọn đề ủa ngôn ng một vtp chọn đề
ủa ngôn ngữ lập trìnhập trình phổ biểnn các ngôn ngữ lập trình phổ biến.g dp chọn đề ủa ngôn ngữ lập trìnhập trình phổ ngôn ngữ lập trình thích h lập ủa ngôn ngữ lập trì, phích h lập ủa ngôn ngữ lập trìnhập trình phổ biểnn các ta
ngôn ngữ lập trình phổ biến.hphích h lập ủa ngôn ngữ lập trìnhập tcác lớp
trích h lập ủa ngôn ngữ lập trìnhập trình thực hiện các thu lậtoán phức tạp và
một sốthì nhì vào ngưu ungphổ thông hơn Câu hng ập ủa nc nào toâu hng
ập ủa ngôn ngữ lập trìnhập trình phổ biểnn các tính bảo mật và an toàn ngôn ngôn ngữ lập thiết kế Web App có hỗ trợ, đợhỗ Appn ngôn ngôn ngữ lập trìn
hay khả năng lập trình mobile, lập trình Game cũng là nhập trìnhôn ngữ lập trìnhập trình phổ biểnn các ngôn ngữ lập t Trong bài báo cáo này, chúng ta sẽ
th gáo cáo p trìnhôn ngữ lập trìnhập trình phổ biểnn các ngôn ngữ lập trình phổ b.
2 Đối tượng nghiên cứu
Đồ án chủ yếu nghiên cứu về các tiêu chí để đánh giá một ngôn ngữ lập
trình, bao gồm tiêu chí về mặt ngôn ngữ và tiêu chí về mặt ứng dụng, đồng thời so sánh các ngôn ngữ lập trình phổ biển hiện nay qua các tiêu chí đó
3 Cơ cấu đồ án
Nội dung của bản báo cáo gồm 3 phần:
Phần 1: Khái quát chung về đề tài
Phần 2: Các tiêu chí đánh giá ngôn ngữ lập trình và tổng quan các ngôn ngữ lập trình phổ biển
Phần 3: So sánh, đánh giá các ngôn ngữ lập trình phổ biển với các tiêu chí đã nêu
Trang 5Phần 2: Các tiêu chí đánh giá ngôn ngữ lập trình và tổng quan các ngôn ngữ lập trình phổ biến.
I. Các tiêu chí đánh giá ngôn ngữ lập trình:
1. Tiêu chí vêề m t ngôn ng : ặ ữ
Các tiêu chí này chủ yếu đánh giá về mặt bản chất của ngôn ngữ lập trình, bao gồm các tiêu chuẩn chính:
Readability: Mã phải đơn giản và dễ hiễu, không nên bao gồm các cú pháp phức tạp, tránh việc có nhiều cách để viết một chức năng đơn giản Ngôn ngữ phải có tính trực quan, đồng thời phải có cơ chế điều khiển đơn giản như for, while thay vì go to sẽ rất khó đọc
Writability: Đánh giá độ phức tạp khi viết mã Ngôn ngữ lập trình không nên chứa các cú pháp phức tạp, nên hỗ trợ các lớp trừu tượng cho dữ liệu và tiến trình để việc lập trình trở nên đơn giản
Reliability: Ngôn ngữ lập trình nên hỗ trợ việc kiểm tra kiểu dữ liệu ngay cả trước và trong khi biên dịch, nên hỗ trợ cơ chế Exception Handling để kiểm soát các lỗi xảy ra trong run time
Cost: Các chi phí như : thời gian viết mã, chi phí biên dịch chương trình, chi phí sử dụng phần cứng và chi phí bảo trì phải được thiết kế tối ưu
Mặc dù đây là những tiêu chí quan trọng để đánh giá bản chất các ngôn ngữ lập trình nhưng với sự phát triển vượt bậc của ngành công nghệ thông tin lẫn phần cứng máy tính, thì các ngôn ngữ lập trình phổ biến đã đáp ứng rất tốt những tiêu chí này, cái mà người ta thật sự quan tâm tới là tính năng của ngôn ngữ đó sẽ đáp ứng được gì cho công việc của họ
Trang 62 Tiêu chí vêề m t l p trình, ng d ng: ặ ậ ứ ụ
Về các tiêu chí đánh giá mặt ứng dụng của ngôn ngữ lập trình thì rất đa dạng, bao gồm khả năng bảo mật và an ninh, khả năng lập trình tính toán thuật toán phức tạp hoặc xây dựng hệ thống phân tán, hệ thống cơ sở dữ liệu hay không, trong đồ án này thì em sẽ tập trung vào 4 tiêu chí chính:
Tính bảo mật và an ninh của ngôn ngữ lập trình:
- Bảo mật là vấn đề quan trọng cho việc thiết kế và cài đặt ngôn ngữ lập trình
- Một ngôn ngữ lập trình được coi là bảo mật nếu thoả mãn 2 tiêu chí:
o Type safety: Định dạng kiểu dữ liệu phải rõ ràng, minh bạch
o Memory safety: Có khả năng kiểm soát bộ nhớ, nên có cơ chế tự động dọn rác để giảm chi phí lập trình
Lập trình Web App:
- Một Web App là ứng dụng có thể được người dùng tương tác trực tiếp trên trình duyệt trong khi server lưu trữ và xử lý thông tin, web app có thể chia nhỏ làm 2 phần:
• Phần hiển thị của web app, có thể là một file html đã được xử lý ( thông qua client-rendering hoặc sever-rendering) rồi được browser biểu diễn các thành phần web lên cho người dùng tương tác
• Phần logic của web app, xử lý các yêu cầu của người dùng trả về server
Lập trình Game:
Game là một trong những sản phẩm của ngành phần mềm được tiêu thụ nhiều nhất và có lợi nhuận nhất Việc một ngôn ngữ có khả năng tính toán và xử lý đồ hoạ tốt là một điểm mạnh trong thị trường cạnh tranh của các ngôn ngữ lập trình hiện nay
Trang 7 Lập trình AI :
- Với sự phát triển mạnh mẽ của trí tuệ nhân tạo, ngôn ngữ lập trình cần có khả năng thêm vào chương trình các chức năng AI để thu hút người dung, đồng thời cũng có khả năng xử lý dữ liệu, chạy các mô hình học máy, học sâu
II. Tổng quan một số ngôn ngữ lập trình phổ biển hiện nay.
1. C++
• Xuất hiện lần đầu năm 1985, kế thừa phát triển từ ngôn ngữ C
• Là ngôn ngữ biên dịch, có mặt hầu hết trên các hệ điều hành thông dụng như Windows, MacOs, Linux, …
• Vượt trội về hiệu năng, hướng tới lập trình hệ thống máy tính và hệ thống nhúng
2. Java
• Được công ty Sun Microsystems (sau đó được Oracle mua lại ) phát hành đầu tiên vào năm 1995 với giấy phép độc quyền
• Là ngôn ngữ lập trình hướng đối tượng mạnh mẽ, với mục đích tạo ra cho phép nhà phát triển viết một lần, chạy ở mọi nơi
• Phổ biển nhất trong việc xây dựng web app
3. C#
• Được phát triển bởi Mircosoft, xuất hiện lần đầu năm 2000
• Xây dựng, kế thừa từ nền tảng C++, Java
• Là ngôn ngữ lập trình hướng đối tượng đa năng, có rất nhiều ứng dụng trải dài trên nhiều lĩnh vực như lập trình web, desktop app, thực tế ảo VR, phát triển game 2D, 3D, ứng dụng đồ hoạ, mobile app, điện toán đám mây, blockchain, AI, IOT, …
4. JavaScript
• Xuất hiện lần đầu năm 1995
Trang 8• Là ngôn ngữ lập trình thông dịch, với phong cách hướng đối tượng theo kiểu nguyên mẫu (prototype – based) kết hợp với lập trình hàm
• Được dùng rộng rãi cho các trang web (phía người dùng) cũng như phía máy chủ (với Nodejs)
• Top 1 ngôn ngữ phổ biển nhất hiện nay (theo stackoverflow).
5 Python
• Python là một ngôn ngữ lạp trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991
• Được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình và là ngôn ngữ lập trình dễ học
• Được sử dụng rộng rãi nhất trong xử lý dữ liệu và trí tuệ nhân tạo
l p trình ph bi n ậ ổ ể
Em sẽ đánh giá, so sánh 5 ngôn ngữ lập trình phổ biến hiện nay đã nêu ra ở mục II phần 2 với 4 tiêu chí về mặt ứng dụng, lập trình đã nêu ở mục I phần 2
I. Tính bảo mật của ngôn ngữ lập trình:
1. C++
• Về mặt type-safety, C++ hỗ trợ mạnh về các định dạng kiểu dữ liệu
• C++ rất gần với hệ điều hành, với con trỏ cung cấp khả năng truy cập vùng nhớ, làm cho nó trở nên không an toàn
• Việc cấp phát và thu hồi bộ nhớ nếu không được code đúng sẽ gây ra nhiều lỗi như memory leak…
• Đòi hỏi lập trình viên phải có tay nghề cao
Trang 92. Java
• Type-safety: Java hỗ trợ mạnh trong việc định dạng kiểu dữ liệu
• Memory- safety: Java có cơ chế tự động quản lý bộ nhớ - Garbage Collector
mà cụ thể là Java RMI collector
• Có hệ thống thư viện hỗ trợ bảo mật đồ sộ
• Vẫn còn khó khăn trong việc xây dựng hệ thống bảo mật nghiêm ngặt, chi phí cao do cơ chế tự động thu gom rác, ảnh hưởng đến thời gian chạy của hệ thống
3. C#
Với sự kết hợp cân bằng giữa C++ và Java, C# bảo đảm 2 tiêu chí :
• Type-safety: Hỗ trợ cả static-type và dynamic-type
• Memory-safety: Có cơ chế tự động thu gom rác, giảm tải công việc cho lập trình viên
• Hỗ trợ xử lý dọn dẹp các tài nguyên thừa sau khi đọc file, kết nối database,
… bằng interface IDisposable
4. JavaScript
• JavaScript cung cấp khả năng dynamic type, không đảm bảo được tiêu chí type- safety
• JavaScript có cơ chế Garbage Collectors giúp quản lý tốt bộ nhớ
• Không có giới hạn bộ nhớ cho array, string Do đó array và string trong JavaScript có thể được cung cấp bộ nhớ tuỳ ý
5. Python
• Với dynamic type, Python không đảm bảo được tiêu chí type- safety
Trang 10• Quản lý bộ nhớ tốt với cơ chế Garbage Collectors
II Lập trình Web
1 C++
Với thư viện Wt C++ Toolkit, C++ có thể được dùng để làm ra một web app hoàn chỉnh, bao gồm 2 thành phần:
• Thư viện Wt cung cấp Web Widget cho phép C++ xử lý cây DOM trong HTML trên server (server-side rendering)
• Với hiệu năng cao, C++ mạnh trong việc xử lý logic, thao tác và xử lý thông tin nhanh chóng
Do bản chất ngôn ngữ khá khó, C++ ít được lập trình viên ưa chuộng trong việc lập trình web app
Trang 112. JavaScript
JavaScript là ngôn ngữ phổ biển dùng để lập trình web app, với các chức năng:
• Front-end: Với khả năng xử lý trực tiếp file HTML trên browser của người dùng, JS có thể thực hiện việc thay đổi nội dung trang web một cách linh hoạt mà không cần tải lại trang (client-side-rendering), từ đó giảm tải công việc của server, cùng với sự hỗ trợ mạnh mẽ của nhiều thư viện, framework như React, Angular, Vuejs
• Back-end: JavaScript có thể thực hiện xử lý logic dưới nền server, kết nối database, với nodejs
3. Java
Java xây dựng web app chất lượng cao thông qua các API:
• Xây dựng mô hình web MVC với Java Bean làm model, JSP làm các mẫu view template và các thành phần servlet làm controller để xử lý, tính toán data
• Java EE hỗ trợ việc bảo mật, định danh, xác thực
• Quản lý kết nối database với JNDI API
• Xử lý file XML với JAXP sử dụng Document Object Model (DOM)
4. C#
V i công ngh ASP Net, C# đớ ệ ượ ử ục s d ng r ng rãi đ t o ra các web app v i ộ ể ạ ớ
hi u năng cao : ệ
Trang 12• V i môỗi file ASPX ho c CSHTML đớ ặ ược nhúng các C# Class, class này có thể
ch a các biêến kh i t o, x lý s ki n đ có th thay đ i n i dung trang ứ ở ạ ử ự ệ ể ể ổ ộ
web, sau đó được các View Engine xuấết ra file HTML đích đ browser đ c ể ọ
được Ho c v i công ngh web form có th đặ ớ ệ ể ược dùng làm các web đ ng.ộ
• X lý logic băằng ASP Net MVC ho c ASP Net Web API s d ng đa m c ử ặ ử ụ ụ
đích (dùng cho browser ho c các thiêết b di đ ng) ặ ị ộ
5. Python
Python với sự đơn giản trong cú pháp và cộng đồng ủng hộ rất lớn, có khả năng lập trình web ở Server-side với nhiều Framework như bottle.py, Flask, CherryPy, Pyramid, Django, tạo nên nhiều trang web lớn như Spotify, Mozilla, Reddit, the Washington Post…
III. Lập trình Game
1. C#
• Với công nghệ Unity Game Engine và NET, C# là ngôn ngữ phổ biển nhất
để lập trình game
• Là một ngôn ngữ lập trình hướng đối tượng chặt chẽ, đa năng và tốc độ tính toán, xử lý logic nhanh, C# có thể tạo ra những game từ nhỏ đến những game đòi hỏi cấu hình đồ hoạ rất lớn
Trang 13• Unity Game Engine cung cấp một lương lớn công cụ khiến cho việc xây dựng và phát triển một sản phẩm game với C# trở nên dễ dàng và nhanh chóng
2. C++
• C++ là ngôn ngữ mạnh trong việc lập trình game với hiệu năng cao, phù hợp với những game từ nhẹ đến nặng về đồ hoạ
• Lập trình đa nền tảng hệ điều hành: Windows, Linux, iOS, Android
• Game Engine Unity được viết bằng c# nhưng runtime của nó lại được chạy bởi c++
3 JavaScript
• Cùng với ngôn ngữ văn bản HTML và CSS, JavaScript có thể lập trình được game chạy ngay trên trình duyệt
• Các games chạy trên các trang web nổi tiếng như y8.com, game24h.vn zing.vn (xưa) đa số được viết bằng JavaScript để có thể chạy được ngay trên trình duyệt
• Cùng với sự phổ biển ngày càng tăng của JavaScript, nhiều thư viện, Game Engine đã như GDevelop, melonJS, PixiJS, PlayCanvas, đã được phát triển làm cho việc lập trình game trên JavaScript trở nên dễ dàng hơn
4. Python
• Python là ngôn ngữ thông dịch với cú pháp đơn giản, cùng với cộng đồng lớn nên lập trình game trong python cũng rất dễ dàng, nhanh chóng kể cả là người mới
Trang 14• Điểm yếu của python là tốc độ thực thi chậm của nó, nên python thường được sử dụng để lập trình những game nhỏ, 2D
• Python có nhiều thư viện hỗ trợ việc lập trình games như Pygame, PyKyra, Pyglet, PyOpenGL, Kivy
IV. Lập trình AI
1. Python
Với cú pháp đơn giản, cùng với cộng đồng lớn cung cấp một nguồn thư viện khổng
lồ, python hiện tại là lựa chọn phổ biển nhất để lập trình AI:
• Xử lý dữ liệu với thư viện Pandas, Matplotlib, xử lý Big Data với PyShark
• Xử lý tính toán logic với Numpy
• Xây dựng các mô hình học máy, học sâu với thư viện Scikit-learn,
Tensorflow
2. C++
Nhờ có hiệu năng cao, C++ là xương sống xây dựng các thư viện xử lý data, tính toán các model trong Machine Learning, Deep Learning :
• Những thư viện Deep Learning phổ biển trong python phần lớn đều được code bằng C++, ví dụ như Tensorflow( 62.7% code bằng C++), PyTorch ( 52.4% code bằng C++)
• C++ được dùng nhiều để lập trình Computer Vision, ứng dụng cho các xe tự lái hay robot tự hành- là những thiết bị với tài nguyên phần cứng hạn chế
Trang 153. JavaScript
JavaScript với sự phát triển ngày càng mạnh của mình, nó có thể lập trình được đa dạng lĩnh vực từ Web, Mobile, Desktop App và kể cả là lập trình AI:
• Cộng đồng lớn, có nhiều thư viện được dùng để phát triển ứng dụng AI bằng JavaScript như Brain.js, TensorFlow, ml5.js
• Nhờ thư viện Tensorflow.js, JavaScript có thể tạo ra các web app chạy các chương trình AI, Deep Learning ngay trên trình duyệt của người dùng, nhờ
đó giảm tải rất nhiều tài nguyên cho server đồng thời cũng làm cho ứng dụng chạy nhanh hơn
4. Java
Do điểm mạnh là Web Service và tốc độ nhanh, Java chủ yếu phát triển các ứng dụng AI chạy trên nền Server Java có nhiều thư viện hỗ trợ để lập trình AI, Machine Learning, Deep Learning như TensorFlow, DL4J, MAHOUT
Sau khi so sánh 5 ngôn ngữ lập trình với 4 tiêu chí, ta có thể kết luận được rằng, về mặt bảo mật thì C++ với con trỏ có khả năng truy cập bộ nhớ mạnh mẽ có khả năng gây lỗi trong thời gian chạy Python với JavaScript có cơ chế định kiểu dữ liệu động nên được đánh giá là không an toàn C# và Java là 2 ngôn ngữ hiện đại
và an toàn, với định kiểu tĩnh và cơ chế dọn rác tự động và hệ thống thư viện bảo mật lớn
Đa số ngôn ngữ lập trình mà chúng ta nghiên cứu đều có khả năng lập trình Web JavaScript là ngôn ngữ duy nhất có thể lập trình được cả client-side lẫn server-side