Ngôn ngữ nào dụng để viết các chương trình máy tính

Ngôn ngữ lập trình là ngôn ngữ hình thức bao gồm một tập hợp các lệnh tạo ra nhiều loại đầu ra khác nhau. Ngôn ngữ lập trình được sử dụng trong lập trình máy tính để thực hiện các thuật toán.

Công cụ tô màu cú pháp [syntax highlighting] dùng màu sắc để giúp lập trình viên thấy nhiệm vụ của các từ khóa, số, và dòng chú thích [comment] trong mã nguồn. Chương trình này được viết trong ngôn ngữ Python, nó tính ra thể tích của hình nón.

Từ khóa trong ngôn ngữ lập trình là các từ hay ký hiệu mà đã được ngôn ngữ đó gán cho một ý nghĩa xác định. Người lập trình sẽ không được phép dùng lại các từ khóa này dưới một ý nghĩa khác. Thường các từ khóa này được ngôn ngữ xác định dùng trong các kiểu dữ liệu cơ bản hay trong các dòng điều khiển. Ví dụ một số từ khóa trong C và C++: auto, float, return, char, if else, static, void...

Các tên chuẩn hay tên cho trướcSửa đổi

Ngoài các từ khóa, một ngôn ngữ lập trình còn có khối lượng khá lớn các tên đã được định nghĩa hay được gán cho các ý nghĩa chuyên biệt gọi là các tên chuẩn. Các tên này có thể được dùng lại cho một ý nghĩa khác tùy theo người viết mã. Trong nhiều trường hợp sẽ phải có một cơ chế gọi để phân biệt là người lập trình muốn ám chỉ các tên đã bị tái dụng này dưới ý nghĩa nguyên thủy hay dưới ý nghĩa mới. Thường các tên được phép định nghĩa lại nằm trong hai loại chính là:

  1. Các hàm hay thủ tục chuẩn.
  2. Các biến toàn cục [global]

Ví dụ

Trong C thì sin là tên của một hàm tính giá trị sin [trong thư viện math.h] nhưng người lập trình hoàn toàn có thể định nghĩa lại hàm này để cho nó có chức năng khác. Trong văn lệnh BASH thì biến toàn cục $PATH có thể được định nghĩa lại để dùng như là một biến địa phương.

Các ký hiệuSửa đổi

Trong mỗi ngôn ngữ đều cung cấp một hệ thống ký hiệu hay ký tự có ý nghĩa riêng. Tùy theo ngôn ngữ mà các ký hiệu này được phép định nghĩa lại hay không. Những ký hiệu được dùng trong hai trường hợp thường thấy nhất là

  1. Dùng để chỉ các phép toán.
  2. Dùng trong cú pháp. Trường hợp này thì các ký hiệu này giữ vai trò tương tự như các dấu chấm câu trong các ngôn ngữ tự nhiên.

Ví dụ:

Trong C/C++/Java/PHP thì các dấu ký hiệu '+', '-', '*', '/', '=' được dùng trong các phép toán theo thứ tự là cộng, trừ, nhân, chia và phép toán gán giá trị. Trong C thì các dấu '+', '-', '*', '/',... là không thể dùng lại cho ý nghĩa khác. Trong khi đó nếu dùng C++ thì người lập trình hoàn toàn có khả năng định nghĩa chúng lại thành những phép toán mới theo ý riêng và áp dụng cho các đối tượng mà người lập trình mong muốn [chẳng hạn như dùng phương pháp "quá tải toán tử"]. Trong C, C++, PHP, Perl, Java và Pascal thì kết thúc các câu lệnh đơn giản thường bắt buộc phải dùng dấu ';'. Và điều này thì không nhất thiết nếu dùng văn lệnh BASH. Dấu ';' này giữ vai trò tương tự như dấu '.' trong Việt ngữ hay Anh ngữ. [Có điều là đại đa số các ngôn ngữ lập trình sẽ tuyệt đối không cho phép việc viết sai cú pháp.]

Các luật cấm và ngoại lệSửa đổi

Mỗi ngôn ngữ, do hạn chế của môi trường và bản thân ngôn ngữ cũng như do mục tiêu sử dụng, có thể có một số luật cấm mà người lập trình không thể vi phạm. Những luật cấm này có thể có những cách xử lý khác nhau như là:

  • Nhiều ngôn ngữ cho phép dùng các câu lệnh đặc biệt để lập trình viên có toàn quyền xử lý lỗi và thường được gọi là ngoại lệ [hay exception]. Những ngoại lệ này nếu không xử lý đúng mức sẽ có thể gây ra những sai sót trong thời gian thi hành hay ngay cả trong thời gian dịch. Dĩ nhiên, người viết mã có thể tùy theo tình huống mà viết các câu lệnh rẽ nhánh tránh không để cho mã vi phạm các lỗi. Hay là dùng các câu lệnh xử lý các ngoại lệ này.
  • Một số ngôn ngữ không cung cấp khả năng xử lý ngoại lệ thì người viết mã buộc phải tự mình phán đoán hết các tình huống có thể vi phạm lỗi và dùng câu lệnh điều kiện để loại trừ.

Các loại lỗi về ngôn ngữ khi lập trình thường xảy ra là

Lỗi cú phápSửa đổi

  • Vi phạm khi đặt hay gọi tên biến và hàm: Lỗi loại này thường rất dễ tìm ra trong lúc phát triển mã. Thường người ta có thể đọc lại các bảng tham chiếu về ngôn ngữ để tránh sai cú pháp mẫu [prototype] của hàm hay tránh dùng các ký tự đặc biệt bị cấm không cho dùng trong khi đặt tên. Trong không ít trường hợp người lập trình có thể đã định nghĩa cùng một tên cho nhiều hơn một đối tượng khác nhau và lại có giá trị toàn cục. Trong nhiều trường hợp chúng tạo thành lỗi ý nghĩa.
  • Lỗi chính tả: người viết mã có thể viết hay gọi sai tên hàm, tên biến. Trong nhiều ngôn ngữ có kiểu tĩnh thì các lỗi này sẽ rất dễ bị phát hiện. Còn đối với ngôn ngữ có kiểu động hay có kiểu yếu thì nó có thể dẫn đến sai sót nghiêm trọng vì bản thân phần mềm dịch không hề phát hiện ra.
  • Vượt quá khả năng tính toán: Bản thân máy tính và hệ điều hành cũng có rất nhiều giới hạn về phần cứng, phần mềm và các đặc điểm chuyên biệt. Khi người lập trình yêu cầu máy làm quá khả năng sẽ gây ra các lỗi mà đôi khi không xác định được như
    • Lỗi thời gian [timing error] thường thấy trong các hệ thống đa luồng hay đa nhiệm.
    • Lỗi chia cho 0: Bản thân phần cứng máy tính sẽ ở trạng thái bất định khi thực hiện phép chia cho 0; trong nhiều trường hợp, mã sau khi dịch mới phát hiện ra trong lúc thi hành và được đặt tên là lỗi division by 0.
    • Dùng hay gọi tới các địa chỉ hay các thiết bị mà bản thân máy hay hệ điều hành đang thực thi lại không có hay không thể đạt tới. Đây là trường hợp rất khó lường. Bởi vì thường người lập trình có thể viết mã trên một máy nhưng lại cho thi hành trong các máy khác và các máy này lại không thỏa mãn các yêu cầu. Để giảm trừ các lỗi loại này thường người lập trình nên xác định trước các điều kiện mà phần mềm làm ra sẽ hỗ trợ.
Ví dụ: trong nhiều phần mềm ngày nay ở trong vỏ hộp đều được ghi rõ các yêu cầu về vận tốc, bộ nhớ tối thiểu, và quan trọng là hệ điều hành nào mà phần mềm đó hỗ trợ.
  • Gán sai dữ liệu: Tức là dùng một dữ liệu có kiểu khác với kiểu của biến để gán cho biến đó một cách không chủ ý. Đối với các ngôn ngữ tĩnh hay có kiểu mạnh thì lỗi này dễ tìm thấy hơn. Còn những ngôn ngữ động hay ngôn ngữ có kiểu yếu thì lỗi tạo ra sẽ có thể khó phát hiện và thường xảy ra lúc thi hành.
  • Các lỗi biên: Lỗi biên thường xảy ra khi người viết mã không chú ý đến các giá trị ở biên của các biến, các hàm. Những lỗi để thấy có thể là:
    • Gán giá trị của một số [hay một chuỗi] lên một biến mà nó vượt ngoài sự cho phép của định nghĩa.
      Ví dụ: Gán một giá trị lớn hơn 255 cho một biến có kiểu là short trong ngôn ngữ C
    • Tạo nên các lỗi khi biến chạy trong vòng lặp đạt giá trị ở biên.
      Ví dụ: đoạn mã C/C++ sau đây sẽ gây ra lỗi biênChia cho 0
for [m=10; m >= 0, m--] { x= 8+ 2/m; }

Lỗi ý nghĩaSửa đổi

  • Lỗi về quản lý bộ nhớ. Trong nhiều loại ngôn ngữ người lập trình có thể xin đăng ký một lượng nào đó của bộ nhớ để dùng làm chỗ chứa giá trị cho một biến [một hàm hay một đối tượng]. Thường thì sau khi dùng xong người viết mã phải có phần lệnh trả về các phần bộ nhớ mà nó đã đăng ký dùng. Nếu không, sự trả về này chỉ xảy ra ở giai đoạn kết thúc việc thi hành. Trong nhiều trường hợp, số lượng bộ nhớ xin đăng ký quá nhiều và không được dùng đúng chỗ có thể làm cho máy kiệt quệ về mặt tài nguyên bộ nhớ và gây ra treo máy. Điển hình nhất là việc xin đăng ký các phần của bộ nhớ trong các vòng lặp lớn để gán cho các đối tượng bên trong vòng lặp nhưng không trả về sau khi sử dụng. Người ta thường gọi lỗi kiểu này là lỗi rò rỉ bộ nhớ [memory leaking].
  • Sai sót trong thuật toán: Trước khi viết một chương trình, để giảm thiểu sai sót về mặt lập luận thì người ta có nhiều biện pháp để làm giảm lỗi trong đó có các phương pháp vẽ lưu đồ, vẽ sơ đồ khối, hay viết mã giả. Những biện pháp này nhằm tạo nên các thuật toán để giải quyết vấn đề. Tuy nhiên, một thuật toán không chặt chẽ, xử lý không rốt ráo mọi trường hợp có thể xảy ra, không dự đoán được sự thay đổi trong lúc thi hành thì có thể tạo nên các lỗi và các lỗi này thường khó thấy bởi vì nó chỉ xảy ra ở những chỗ, những thời điểm mà người lập trình không ngờ trước. Một trong những phương pháp đơn giản làm giảm thiểu lỗi thuật toán là phải chú ý xử lý mọi tình huống khi dùng câu lệnh điều kiện [hay chẻ nhánh] mặc dù có thể có các trường hợp tưởng như hiển nhiên.
  • Lỗi về lập luận: Đây có thể xem là trường hợp đặc biệt của sai sót trong thuật toán. Trong các biểu thức tính giá trị, đôi khi không quen dùng đại số Bool [nhất là khi dùng luật De Morgan để phủ định một biểu thức phức tạp] nên người lập trình có thể tính toán sai, hay định nghĩa sai các phép toán. Do đó, giá trị trả về của các biểu thức logic hay biểu thức nhị phân sẽ bị sai trong một vài trường hợp hay toàn bộ biểu thức. Trong những tình huống như vậy phần mềm dịch sẽ không thể nào phát hiện ra cho đến khi chương trình được thi hành và lọt vào tình huống tính sai của người lập trình.

Các thành tố đặc trưng của ngôn ngữ OOPSửa đổi

Bài chi tiết: Lập trình hướng đối tượng

OOP là chữ viết tắt của Object Oriented Programming có nghĩa là Lập trình hướng đối tượng được phát minh năm 1965 bởi Ole-Johan Dahl và Kristen Nygaard trong ngôn ngữ Simula. So với phương pháp lập trình cổ điển, thì triết lý chính bên trong loại ngôn ngữ loại này là để tái dụng các khối mã nguồn và cung ứng cho các khối này một khả năng mới: chúng có thể có các hàm [gọi là các phương thức] và các dữ liệu [gọi là thuộc tính] nội tại. Khối mã như vậy được gọi là đối tượng. Các đối tượng thì độc lập với môi trường và có khả năng trả lời với yêu cầu bên ngoài tùy theo thiết kế của người lập trình. Với cách xây dựng này, mỗi đối tượng sẽ tương đương với một chương trình riêng có nhiều đặc tính mới mà quan trọng nhất là tính đa hình, tính đóng, tính trừu tượng và tính thừa kế.

Thừa kếSửa đổi

Đây là đặc tính cho phép tạo các đối tượng mới từ đối tượng ban đầu và lại có thể có thêm những đặc tính riêng mà đối tượng ban đầu không có. Cơ chế này cho phép người lập trình có thể tái sử dụng mã nguồn cũ và phát triển mã nguồn mới bằng cách tạo ra các đối tượng mới thừa kế đối tượng ban đầu.

Đa hìnhSửa đổi

Tính đa hình được thể hiện trong lập trình hướng đối tượng rất đặc biệt. Người lập trình có thể định nghĩa một thuộc tính [chẳng hạn thông qua tên của các phương thức] cho một loạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương ứng theo từng đối tượng không bị nhầm lẫn.

Ví dụ: khi định nghĩa hai đối tượng "hinh_vuong" và "hinh_tron" thì có một phương thức chung là "chu_vi". Khi gọi phương thức này thì nếu đối tượng là "hinh_vuong" nó sẽ tính theo công thức khác với khi đối tượng là "hinh_tron".

Trừu tượngSửa đổi

Đặc tính này cho phép xác định một đối tượng trừu tượng, nghĩa là đối tượng đó có thể có một số đặc điểm chung cho nhiều đối tượng nhưng bản thân đối tượng này có thể không có các biện pháp thi hành.

Ví dụ: người lập trình có thể định nghĩa đối tượng "hinh" hoàn toàn trừu tượng không có đặc tính mà chỉ có các phương thức được đặt tên chẳng hạn như "chu_vi", "dien_tich". Để thực thi thì người lập trình buộc phải định nghĩa thêm các đối tượng cụ thể chẳng hạn định nghĩa "hinh_tron" và "hinh_vuông" dựa trên đối tượng "hinh" và hai định nghĩa mới này sẽ thừa kế mọi thuộc tính và phương thức của đối tượng "hinh".

Đóng góiSửa đổi

Tính đóng gói ở đây dược hiểu là các dữ liệu [thuộc tính] và các hàm [phương thức] bên trong của mỗi đối tượng sẽ không cho phép người gọi dùng hay thay đổi một cách tự do mà chỉ có thể tương tác với đối tượng đó qua các phương thức được người lập trình cho phép. Tính đóng gói ở đây có thể so sánh với khái niệm "hộp đen", nghĩa là người ta có thể thấy các hành vi của đối tượng tùy theo yêu cầu của môi trường nhưng lại không thể biết được bộ máy bên trong thi hành ra sao.

Một số thành tố thường thấy khác của một ngôn ngữ lập trình hiện đạiSửa đổi

Nhiều ngôn ngữ lập trình hiện đại, nhất là các ngôn ngữ viết cho Windows, thường có cung cấp thêm một số lượng rất lớn các thư viện bao gồm nhiều hàm để hỗ trợ giao diện người dùng và các thiết bị đầu cuối.

Giao diện đồ họaSửa đổi

Các ngôn ngữ chuẩn thường không đề cập tới sự cung cấp thư viện giúp cho việc thiết lập giao diện đồ họa [graphic interface]. Nhưng hầu hết trong các ngôn ngữ hiện đại mà nhà sản xuất cung cấp cho các hệ điều hành đều có thêm thư viện các hàm và các biến toàn cục có thể dùng để nhanh chóng viết mã có giao diện phù hợp.

Ví dụ như GDK [cho Linux], Java [cho mọi hệ], Visual C/C++/C# [cho Windows],... Và các thư viện này ngày nay đã trở thành các thành tố không thể thiếu cho người lập trình.

Điều khiển theo sự kiệnSửa đổi

Tương tự trên, triết lý đằng sau của việc điều khiển theo sự kiện là để hỗ trợ cho việc đồng bộ sử dụng cùng lúc nhiều thiết bị đầu cuối như là chuột, bàn phím, máy in,... Việc nhận một mệnh lệnh từ chuột hay từ bàn phím phải được lập tức đồng bộ và thay đổi giao diện tức thời để cập nhật hoá.

Thời gian thựcSửa đổi

Bản thân một ngôn ngữ sẽ không nói rõ là có hỗ trợ cho tính năng này hay không. Phản ứng và cập nhật dữ liệu theo thời gian thực là một hướng phát triển nhằm đáp ứng các nhu cầu đồng bộ hoá nhanh dữ liệu mà chúng có thể chia sẻ cho nhiều nơi hay là để thỏa mãn nhu cầu cần thiết đồng bộ hóa dữ liệu của các dịch vụ [ngân hàng, hàng không và quân sự chẳng hạn].

Hỗ trợ hệ điều hànhSửa đổi

Ngoài các hỗ trợ cho các giao diện thì ngày nay hầu hết các hệ điều hành [Linux/UNIX, Netware và Windows] đều có khả năng đa luồng [multithreading] hay đa nhiệm [multitasking]. Những khả năng này nâng cao hiệu quả của máy tính. Các ngôn ngữ, do đó thường có thêm các hàm, thủ tục hay các biến cho phép người lập trình tận dụng chúng. Việc viết mã cho kiến trúc đa luồng và đa nhiệm không đơn giản như viết mã cho các hệ thống thông thường. Người lập trình ngoài kỹ năng viết mã, còn phải luyện tập cách xử lý và đồng bộ nhiều thao tác được thi hành đồng thời trong một chương trình mà không gây ra ách tắc hay vi phạm các nguyên tắc quản lý bộ nhớ hay các quy tắc lập trình theo đa luồng hay đa nhiệm.

Lưu ý: Hầu hết các hệ điều hành hỗ trợ kiến trúc đa luồng hay đa nhiệm đều có khả năng thực thi những chương trình được tạo ra từ mã viết theo kiểu thông thường mà không đá động tới các chức năng đa luồng hay đa nhiệm. Điểm khác nhau là khi không dùng tới các ưu điểm đa luồng hay đa nhiệm thì chương trình đó sẽ không tận dụng được ưu thế phần cứng và phần mềm hỗ trợ [thường thì chương trình đó chạy chậm hơn]

Phương ngữ và hiện thựcSửa đổi

Một phương ngữ [tiếng Anh: dialect] của một ngôn ngữ lập trình hay ngôn ngữ trao đổi dữ liệu là một biến thể [tương đổi nhỏ] hay phần mở rộng của ngôn ngữ đó mà không làm thay đổi bản chất bên trong của nó.

Lịch sửSửa đổi

Bài chi tiết: Lịch sử các ngôn ngữ lập trình

Xem thêmSửa đổi

  • Danh sách các ngôn ngữ lập trình

Chỉ dẫnSửa đổi

Tham khảoSửa đổi

  1. ^ Ettinger, James [2004] Jacquard's Web, Oxford University Press
  2. ^ a b Aaby, Anthony [2004]. Introduction to Programming Languages. Bản gốc lưu trữ ngày 8 tháng 11 năm 2012. Truy cập ngày 29 tháng 9 năm 2012.
  3. ^ In mathematical terms, this means the programming language is Turing-complete MacLennan, Bruce J. [1987]. Principles of Programming Languages. Oxford University Press. tr.1. ISBN978-0-19-511306-8.
  4. ^ ACM SIGPLAN [2003]. Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery. Bản gốc lưu trữ ngày 22 tháng 6 năm 2006., "The scope of SIGPLAN is the theory, design, implementation, description, and application of computer programming languages languages that permit the specification of a variety of different computations, thereby providing the user with significant control [immediate or delayed] over the computer's operation."
  5. ^ Dean, Tom [2002]. Programming Robots. Building Intelligent Robots. Brown University Department of Computer Science. Bản gốc lưu trữ ngày 29 tháng 10 năm 2006.
  6. ^ R. Narasimahan, Programming Languages and Computers: A Unified Metatheory, pp. 189247 in Franz Alt, Morris Rubinoff [eds.] Advances in computers, Volume 8, Academic Press, 1994, ISBN 0-12-012108-5, p.193: "a complete specification of a programming language must, by definition, include a specification of a processoridealized, if you willfor that language." [the source cites many references to support this statement]
  7. ^ Ben Ari, Mordechai [1996]. Understanding Programming Languages. John Wiley and Sons. Programs and languages can be defined as purely formal mathematical objects. However, more people are interested in programs than in other mathematical objects such as groups, precisely because it is possible to use the programthe sequence of symbolsto control the execution of a computer. While we highly recommend the study of the theory of programming, this text will generally limit itself to the study of programs as they are executed on a computer.
  8. ^ David A. Schmidt, The structure of typed programming languages, MIT Press, 1994, ISBN 0-262-19349-3, p. 32
  9. ^ Pierce, Benjamin [2002]. Types and Programming Languages. MIT Press. tr.339. ISBN978-0-262-16209-8.
  10. ^ Digital Equipment Corporation. Information Technology Database Language SQL [Proposed revised text of DIS 9075]. ISO/IEC 9075:1992, Database Language SQL. Bản gốc lưu trữ ngày 21 tháng 6 năm 2006. Truy cập ngày 29 tháng 6 năm 2006.
  11. ^ The Charity Development Group [tháng 12 năm 1996]. The CHARITY Home Page. Bản gốc lưu trữ ngày 18 tháng 7 năm 2006., "Charity is a categorical programming language...", "All Charity computations terminate."
  12. ^ XML in 10 points Error in Webarchive template: Empty url. W3C, 1999, "XML is not a programming language."
  13. ^ Powell, Thomas [2003]. HTML & XHTML: the complete reference. McGraw-Hill. tr.25. ISBN978-0-07-222942-4. HTML is not a programming language.
  14. ^ Dykes, Lucinda; Tittel, Ed [2005]. XML For Dummies [ấn bản 4]. Wiley. tr.20. ISBN978-0-7645-8845-7. ...it's a markup language, not a programming language.
  15. ^ What kind of language is XSLT?. IBM.com. 20 tháng 4 năm 2005. Bản gốc lưu trữ ngày 11 tháng 5 năm 2011.
  16. ^ XSLT is a Programming Language. Msdn.microsoft.com. Bản gốc lưu trữ ngày 3 tháng 2 năm 2011. Truy cập ngày 3 tháng 12 năm 2010.
  17. ^ Scott, Michael [2006]. Programming Language Pragmatics. Morgan Kaufmann. tr.802. ISBN978-0-12-633951-2. XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language.
  18. ^ Oetiker, Tobias; Partl, Hubert; Hyna, Irene; Schlegl, Elisabeth [ngày 20 tháng 6 năm 2016]. The Not So Short Introduction to LATEX 2ε [PDF]. tobi.oetiker.ch. tr.1157. Bản gốc [Version 5.06] lưu trữ ngày 14 tháng 3 năm 2017.
  19. ^ Syropoulos, Apostolos; Antonis Tsolomitis; Nick Sofroniou [2003]. Digital typography using LaTeX. Springer-Verlag. tr.213. ISBN978-0-387-95217-8. TeX is not only an excellent typesetting engine but also a real programming language.
  20. ^ Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91
  21. ^ Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, Towards a General Ontology of Computer Programs Lưu trữ 2015-07-07 tại Wayback Machine, ICSOFT 2007, pp. 163170
  22. ^ S.K. Bajpai, Introduction To Computers And C Programming, New Age International, 2007, ISBN 81-224-1379-X, p. 346
  23. ^ R. Narasimahan, Programming Languages and Computers: A Unified Metatheory, pp. 189247 in Franz Alt, Morris Rubinoff [eds.] Advances in computers, Volume 8, Academic Press, 1994, ISBN 0-12-012108-5, p.215: "[...] the model [...] for computer languages differs from that [...] for programming languages in only two respects. In a computer language, there are only finitely many namesor registerswhich can assume only finitely many valuesor statesand these states are not further distinguished in terms of any other attributes. [author's footnote:] This may sound like a truism but its implications are far reaching. For example, it would imply that any model for programming languages, by fixing certain of its parameters or features, should be reducible in a natural way to a model for computer languages."
  24. ^ John C. Reynolds, "Some thoughts on teaching programming and programming languages", SIGPLAN Notices, Volume 43, Issue 11, November 2008, p.109
  25. ^ Rojas, Raúl, et al. [2000]. "Plankalkül: The First High-Level Programming Language and its Implementation". Institut für Informatik, Freie Universität Berlin, Technical Report B-3/2000. [full text] Error in Webarchive template: Empty url.
  26. ^ Sebesta, W.S Concepts of Programming languages. 2006;M6 14:18 pp.44. ISBN 0-321-33025-0
  27. ^ Knuth, Donald E.; Pardo, Luis Trabb. Early development of programming languages. Encyclopedia of Computer Science and Technology. 7: 419493.
  28. ^ Peter J. Bentley [2012]. Digitized: The Science of Computers and how it Shapes Our World. Oxford University Press. tr.87. ISBN9780199693795. Bản gốc lưu trữ ngày 29 tháng 8 năm 2016.
  29. ^ Fortran creator John Backus dies - Tech and gadgets. NBC News. 20 tháng 3 năm 2007. Truy cập ngày 25 tháng 4 năm 2010.
  30. ^ CSC-302 99S: Class 02: A Brief History of Programming Languages. Math.grin.edu. Bản gốc lưu trữ ngày 15 tháng 7 năm 2010. Truy cập ngày 25 tháng 4 năm 2010.
  31. ^ Eugene Loh [ngày 18 tháng 6 năm 2010]. The Ideal HPC Programming Language. Queue. 8 [6]. Bản gốc lưu trữ ngày 4 tháng 3 năm 2016.
  32. ^ HPL A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers. Bản gốc lưu trữ ngày 15 tháng 2 năm 2015. Truy cập ngày 21 tháng 2 năm 2015.
  33. ^ Hopper [1978] p.16.
  34. ^ Sammet [1969] p.316
  35. ^ Sammet [1978] p.204.

Nguồn tham khảoSửa đổi

  • PC Assembly LanguagePaul MorneauWestISBN 0-314-01003-3
  • Mastering Borland C++ -- Tom SwanSAMSISBN 0-672-30274-8
  • Java Programer's LibrarySuleiman "Sam" Lalani & Kris JamsaJPISBN 1-884133-26-6]
  • New C Primer PlusThe Waite Group's -- SAms PublishingISBN 0-672-30319-1
  • C++ How To ProgramH.M. Deitel & P.J. DeitelPrentice HallISBN 0-13-117334-0

Đọc thêmSửa đổi

  • Abelson, Harold; Sussman, Gerald Jay [1996]. Structure and Interpretation of Computer Programs [ấn bản 2]. MIT Press. Bản gốc lưu trữ ngày 9 tháng 3 năm 2018. Truy cập ngày 22 tháng 10 năm 2011. Đã bỏ qua tham số không rõ |df= [trợ giúp]; Đã bỏ qua tham số không rõ |url-status= [trợ giúp]
  • Raphael Finkel: Advanced Programming Language Design, Addison Wesley 1995.
  • Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: Essentials of Programming Languages, The MIT Press 2001.
  • Maurizio Gabbrielli and Simone Martini: "Programming Languages: Principles and Paradigms", Springer, 2010.
  • David Gelernter, Suresh Jagannathan: Programming Linguistics, The MIT Press 1990.
  • Ellis Horowitz [ed.]: Programming Languages, a Grand Tour [3rd ed.], 1987.
  • Ellis Horowitz: Fundamentals of Programming Languages, 1989.
  • Shriram Krishnamurthi: Programming Languages: Application and Interpretation, online publication.
  • Bruce J. MacLennan: Principles of Programming Languages: Design, Evaluation, and Implementation, Oxford University Press 1999.
  • John C. Mitchell: Concepts in Programming Languages, Cambridge University Press 2002.
  • Benjamin C. Pierce: Types and Programming Languages, The MIT Press 2002.
  • Terrence W. Pratt và Marvin V. Zelkowitz: Programming Languages: Design and Implementation [4th ed.], Prentice Hall 2000.
  • Peter H. Salus. Handbook of Programming Languages [4 vols.]. Macmillan 1998.
  • Ravi Sethi: Programming Languages: Concepts and Constructs, 2nd ed., Addison-Wesley 1996.
  • Michael L. Scott: Programming Language Pragmatics, Morgan Kaufmann Publishers 2005.
  • Robert W. Sebesta: Concepts of Programming Languages, 9th ed., Addison Wesley 2009.
  • Franklyn Turbak và David Gifford with Mark Sheldon: Design Concepts in Programming Languages, The MIT Press 2009.
  • Peter Van Roy và Seif Haridi. Concepts, Techniques, and Models of Computer Programming, The MIT Press 2004.
  • David A. Watt. Programming Language Concepts and Paradigms. Prentice Hall 1990.
  • David A. Watt and Muffy Thomas. Programming Language Syntax and Semantics. Prentice Hall 1991.
  • David A. Watt. Programming Language Processors. Prentice Hall 1993.
  • David A. Watt. Programming Language Design Concepts. John Wiley & Sons 2004.
  • Các ngôn ngữ lập trình
Wikimedia Commons có thêm hình ảnh và phương tiện truyền tải về Ngôn ngữ lập trình.

Liên kết ngoàiSửa đổi

Video liên quan

Chủ Đề