Ngôn ngữ máy tính là gì?

Ngày nay, khi công nghệ ngày càng phát triển, các thiết bị điện tử đóng vai trò quan trọng trong cuộc sống và công việc của mỗi người, vì vậy việc sử dụng máy tính trong công việc đã trở thành nhu cầu thiết yếu của mọi người và là yếu tố quyết định giúp chúng ta làm việc nhanh chóng và hiệu quả hơn. Kết quả là dù hàng ngày vẫn sử dụng ngôn ngữ máy tính nhưng nhiều người vẫn thắc mắc chúng là gì. Tuy nhiên, không phải lúc nào họ cũng nhận thức được định nghĩa

Ngôn ngữ máy tính là gì?

CPU sử dụng một tập hợp các hướng dẫn được gọi là ngôn ngữ máy tính, còn được gọi là ngôn ngữ lập trình, để thực hiện từng chức năng, chẳng hạn như tính toán số nguyên trên mỗi đơn vị dữ liệu của bộ nhớ và tải dữ liệu. Phần mềm dịch thuật này phải có khả năng dịch bất kỳ chương trình máy tính nào được viết bằng ngôn ngữ khác hiện đang chạy, vì các hướng dẫn này đều được nêu tuần tự trong các chương trình do CPU điều hành. Các lệnh được viết là các bit hoặc các biến thể của ngôn ngữ máy tính cơ sở 16. Người học sẽ có thể lập trình bằng cách sử dụng tự động hóa các hành động của máy tính với sự trợ giúp của Cobol, Algol, C, C ++, Java và các ngôn ngữ lập trình nổi tiếng khác

Một tập hợp các hướng dẫn được CPU sử dụng để thực hiện từng chức năng được gọi là ngôn ngữ máy tính, còn được gọi là ngôn ngữ lập trình

Phân loại ngôn ngữ máy tính

Ngôn ngữ lập trình, cụ thể, được chia thành ba loại chính như sau. Ngôn ngữ máy tính là một lĩnh vực rất phức tạp và có nhiều ngôn ngữ lập trình khác nhau

Ngôn ngữ máy [Machine Language]

Ưu điểm chính của ngôn ngữ máy là khả năng tương tác và sử dụng phần cứng của máy tính. Ngôn ngữ máy là cách tạm dịch của ngôn ngữ máy; . Ngôn ngữ duy nhất mà máy tính có thể đọc, viết và thực hiện yêu cầu chương trình để đáp ứng lệnh là ngôn ngữ này

Hợp ngữ

Bởi vì Hợp ngữ [Assembly Language] là ngôn ngữ lập trình phức tạp hơn ngôn ngữ máy, nên nó cho phép người dùng tạo cả chương trình và máy chỉ bằng các từ [trong trường hợp này là tiếng Anh], các chữ cái và từ. Hợp ngữ và ngôn ngữ máy được kết hợp với nhau để tạo ra một ngôn ngữ bậc thấp, tuy nhiên ngôn ngữ này không được sử dụng rộng rãi và chỉ quen thuộc với một bộ phận nhỏ người dùng. Mặc dù hợp ngữ chỉ sử dụng các khả năng của phần cứng, nhưng nó sẽ cho phép người lập trình diễn đạt các lệnh bằng cách sử dụng một số từ

Ngôn ngữ cấp cao

Ngôn ngữ này có tính độc lập cao và phụ thuộc nhiều vào máy và các ngôn ngữ cấp cao sẽ sử dụng các lệnh ngắn hơn với ngôn ngữ tự nhiên hơn. Các ngôn ngữ cấp cao phổ biến nhất là Fortran, Cobol, Algol, Basi Pascal, C, C++ và Java. Ngôn ngữ bậc cao hay còn gọi là phần mềm dịch chuyên dụng để chuyển các chương trình viết bằng ngôn ngữ này thành mã máy cho mọi người hiểu. Fortran , Cobol, Algol, Basi Pascal, C, C++, Java.

Những lợi ích và hạn chế của ngôn ngữ lập trình là gì?

Một trong những ngôn ngữ rất khó sử dụng là ngôn ngữ máy tính, tuy nhiên đối với những người chuyên ngành thì ngôn ngữ máy tính sẽ có những ưu nhược điểm sau

Ưu điểm của ngôn ngữ máy

Bất kỳ máy tính nào cũng phải có khả năng giao tiếp và đáp ứng nhu cầu của phần cứng dễ dàng hơn so với các ngôn ngữ cấp cao khác vì ngôn ngữ máy là ngôn ngữ giao tiếp giữa máy tính và phần cứng

Bạn sẽ không cần biên dịch mã khi sử dụng ngôn ngữ máy tính vì máy tính sẽ hiểu ngay những gì bạn viết. Ngoài ra, ngôn ngữ máy tính cũng sẽ phát huy tối đa tiềm năng của phần cứng khi sử dụng

Nhược điểm của ngôn ngữ máy

Toàn bộ hoạt động và mã hoạt động phải được người dùng giữ lại

Ngoài ra, tất cả các vị trí bộ nhớ phải được lưu

Bởi vì ngôn ngữ máy tính quá phức tạp đối với mọi người để học, không phải ai cũng có thể giải quyết vấn đề một cách hiệu quả khi chúng phát sinh

Quy trình nào được sử dụng để tạo ra ngôn ngữ máy tính?

Khi thời đại công nghệ ngày càng phát triển thì việc thiết kế một ngôn ngữ máy tính sao cho phù hợp với sở thích của từng đối tượng khác nhau là vô cùng quan trọng bởi học một ngôn ngữ máy tính đã là một nhiệm vụ rất khó khăn, nhưng học cách tạo ra một ngôn ngữ máy tính sẽ còn khó khăn hơn và đòi hỏi sự chuyên nghiệp. . Sau đây là một số kỹ thuật để tạo ngôn ngữ máy tính cụ thể

Chọn ngôn ngữ lập trình bạn sẽ sử dụng

Đây là bước đầu tiên khi người lập trình hoặc người dùng cần tìm hiểu hoặc chọn một ngôn ngữ lập trình, đây cũng là một quá trình rất khó khăn vì làm như vậy sẽ quyết định máy tính sẽ hoạt động như thế nào trong tương lai. Để sử dụng máy tính, bạn phải chọn ngôn ngữ lập trình. Mặc dù ngôn ngữ lập trình có thể được viết bằng nhiều ngôn ngữ khác nhau hoặc dễ hiểu, nhưng việc chọn ngôn ngữ lập trình là một cách để tổ chức và sắp xếp các ký tự khác nhau

Để giúp máy tính đọc hiểu và phong phú nhất có thể, với mỗi ngôn ngữ khác nhau có thể sử dụng để xây dựng các ngôn ngữ lập trình khác nhau, nhưng điều đó đòi hỏi phải làm quen với nhiều ngôn ngữ và cách đọc khác nhau.

Bắt đầu học ngôn ngữ

Một cách để học ngôn ngữ máy tính là thông qua trường học, bạn nên làm điều này ngay khi quyết định chọn một ngôn ngữ máy tính. trung tâm dạy tin học, tự học tại nhà hoặc quan sát người khác

Bắt đầu luyện tập

Để tránh trường hợp bạn không hiểu sự khác biệt giữa lý thuyết và thực hành, bạn cần thực hành khi học ngôn ngữ máy tính. Trên thực tế, thực tế thường khác với lý thuyết nên không thể áp dụng hoàn toàn giống nhau.

Mặc dù học một ngôn ngữ máy tính đã khó, nhưng việc tạo ra một ngôn ngữ máy tính mới thậm chí còn khó hơn và đòi hỏi những lập trình viên lành nghề

Ứng dụng của ngôn ngữ máy tính

Khi mạng internet lan rộng toàn cầu và mọi thông tin đều phải tìm kiếm trực tuyến thì sự phát triển của khoa học công nghệ là rất quan trọng. Ngôn ngữ máy tính là ngôn ngữ chuyên ngành được sử dụng rộng rãi trong đời sống hàng ngày và ứng dụng công nghệ thông tin

Vẫn còn nhiều ngành sử dụng ngôn ngữ máy để đọc nội dung của phần cứng và máy tính khi chúng được con người sử dụng, nhưng hiện tại, chỉ một số ít trong số đó làm được, bao gồm tự động hóa, công nghệ thông tin, khoa học máy tính và cơ điện.

Để tiết kiệm thời gian và hiện đại hóa, điều quan trọng đối với các ngành là sử dụng ngôn ngữ máy tính để tạo ra phần mềm mới hoặc hệ thống quản lý thông tin

Chức năng của ngôn ngữ máy tính trong xã hội hiện đại

Đối với những ngành quan trọng, ngôn ngữ máy tính là thứ không thể thiếu để bộ máy vận hành trơn tru, không rối rắm. Vì ngôn ngữ máy tính là ngôn ngữ chuyên biệt cho từng ngành nên nó đóng vai trò vô cùng quan trọng để tạo nên hệ thống cũng như thúc đẩy việc sử dụng ngôn ngữ lập trình một cách hiệu quả.

Nếu không có ngôn ngữ máy tính, con người sẽ gặp rất nhiều khó khăn khi sử dụng máy tính bởi nó vừa là công cụ gián tiếp hỗ trợ con người vận hành máy móc, vừa là phương thức để con người giao tiếp với máy móc một cách thiết thực nhất.

Ngôn ngữ máy tính đóng một vai trò cực kỳ quan trọng trong cuộc sống và công việc của kẻ lừa đảo. Đây là một điều kiện thiết yếu bắt buộc phải có trong mỗi chiếc máy tính nếu muốn phát huy hết tác dụng của chiếc máy tính

Ngôn ngữ lập trình là một hệ thống ký hiệu để viết các chương trình máy tính. Hầu hết các ngôn ngữ lập trình là ngôn ngữ chính thức dựa trên văn bản, nhưng chúng cũng có thể là ngôn ngữ đồ họa. Chúng là một loại ngôn ngữ máy tính

Mô tả của ngôn ngữ lập trình thường được chia thành hai thành phần cú pháp [hình thức] và ngữ nghĩa [ý nghĩa], thường được xác định bởi một ngôn ngữ chính thức. Một số ngôn ngữ được xác định bởi tài liệu đặc tả [ví dụ: ngôn ngữ lập trình C được chỉ định bởi Tiêu chuẩn ISO] trong khi các ngôn ngữ khác [chẳng hạn như Perl] có triển khai chi phối được coi là tài liệu tham khảo. Một số ngôn ngữ có cả hai, với ngôn ngữ cơ bản được xác định bởi một tiêu chuẩn và các phần mở rộng được lấy từ triển khai chi phối là phổ biến

Lý thuyết ngôn ngữ lập trình là một lĩnh vực con của khoa học máy tính nghiên cứu thiết kế, triển khai, phân tích, mô tả đặc điểm và phân loại ngôn ngữ lập trình

Định nghĩa[sửa]

Có nhiều cân nhắc khi xác định những gì cấu thành một ngôn ngữ lập trình

Ngôn ngữ máy tính so với ngôn ngữ lập trình[sửa | sửa mã nguồn]

Thuật ngữ ngôn ngữ máy tính đôi khi được sử dụng thay thế cho ngôn ngữ lập trình. Tuy nhiên, việc sử dụng cả hai thuật ngữ khác nhau giữa các tác giả, bao gồm phạm vi chính xác của từng thuật ngữ. Một cách sử dụng mô tả ngôn ngữ lập trình như một tập hợp con của ngôn ngữ máy tính. Tương tự như vậy, các ngôn ngữ được sử dụng trong máy tính có mục tiêu khác với các chương trình máy tính thể hiện là các ngôn ngữ máy tính được chỉ định chung. Chẳng hạn, ngôn ngữ đánh dấu đôi khi được gọi là ngôn ngữ máy tính để nhấn mạnh rằng chúng không được dùng để lập trình. Một cách để phân loại ngôn ngữ máy tính là dựa vào khả năng tính toán mà chúng có khả năng diễn đạt, như được mô tả trong lý thuyết tính toán. Phần lớn các ngôn ngữ lập trình thực tế là Turing hoàn chỉnh và tất cả các ngôn ngữ hoàn chỉnh Turing đều có thể triển khai cùng một bộ thuật toán. ANSI/ISO SQL-92 và Charity là những ví dụ về các ngôn ngữ không phải là Turing hoàn chỉnh, nhưng thường được gọi là ngôn ngữ lập trình. Tuy nhiên, một số tác giả hạn chế thuật ngữ "ngôn ngữ lập trình" đối với ngôn ngữ hoàn chỉnh Turing

Một cách sử dụng khác coi ngôn ngữ lập trình là cấu trúc lý thuyết để lập trình máy trừu tượng và ngôn ngữ máy tính là tập hợp con chạy trên máy tính vật lý, có tài nguyên phần cứng hữu hạn. John C. Reynolds nhấn mạnh rằng các ngôn ngữ đặc tả chính thức cũng giống như các ngôn ngữ lập trình cũng như các ngôn ngữ dành cho thực thi. Ông cũng lập luận rằng các định dạng đầu vào văn bản và thậm chí cả đồ họa ảnh hưởng đến hành vi của máy tính là ngôn ngữ lập trình, mặc dù thực tế là chúng thường không hoàn chỉnh Turing và nhận xét rằng việc thiếu hiểu biết về các khái niệm ngôn ngữ lập trình là lý do dẫn đến nhiều lỗi trong định dạng đầu vào.

Tên miền và mục tiêu[sửa | sửa mã nguồn]

Trong hầu hết các bối cảnh thực tế, ngôn ngữ lập trình liên quan đến máy tính; . Ngôn ngữ lập trình khác với ngôn ngữ tự nhiên ở chỗ ngôn ngữ tự nhiên chỉ được sử dụng để tương tác giữa con người với nhau, trong khi ngôn ngữ lập trình cũng cho phép con người truyền đạt hướng dẫn cho máy

Miền của ngôn ngữ cũng đáng được xem xét. Các ngôn ngữ đánh dấu như XML, HTML hoặc troff, xác định dữ liệu có cấu trúc, thường không được coi là ngôn ngữ lập trình. Tuy nhiên, ngôn ngữ lập trình có thể chia sẻ cú pháp với ngôn ngữ đánh dấu nếu ngữ nghĩa tính toán được xác định. Ví dụ, XSLT là một ngôn ngữ Turing hoàn chỉnh hoàn toàn sử dụng cú pháp XML. Hơn nữa, LaTeX, chủ yếu được sử dụng để cấu trúc tài liệu, cũng chứa một tập hợp con hoàn chỉnh Turing

Trừu tượng[sửa]

Các ngôn ngữ lập trình thường chứa các khái niệm trừu tượng để xác định và thao tác cấu trúc dữ liệu hoặc kiểm soát luồng thực thi. Sự cần thiết thực tế là một ngôn ngữ lập trình hỗ trợ trừu tượng hóa đầy đủ được thể hiện bằng nguyên tắc trừu tượng hóa. Nguyên tắc này đôi khi được xây dựng như một khuyến nghị cho lập trình viên để sử dụng hợp lý các trừu tượng như vậy

Lịch sử[sửa]

Những phát triển ban đầu[sửa | sửa mã nguồn]

Những chiếc máy tính rất sớm, chẳng hạn như Colossus, được lập trình mà không cần sự trợ giúp của chương trình được lưu trữ, bằng cách sửa đổi mạch của chúng hoặc thiết lập các dãy điều khiển vật lý.

Một chút sau, các chương trình có thể được viết bằng ngôn ngữ máy, trong đó lập trình viên viết từng lệnh ở dạng số mà phần cứng có thể thực hiện trực tiếp. Ví dụ: lệnh thêm giá trị vào hai vị trí bộ nhớ có thể bao gồm 3 số. một "opcode" chọn thao tác "thêm" và hai vị trí bộ nhớ. Các chương trình, ở dạng thập phân hoặc nhị phân, được đọc từ thẻ đục lỗ, băng giấy, băng từ hoặc bật công tắc trên bảng mặt trước của máy tính. Ngôn ngữ máy sau này được gọi là ngôn ngữ lập trình thế hệ thứ nhất [1GL]

Bước tiếp theo là sự phát triển của cái gọi là ngôn ngữ lập trình thế hệ thứ hai [2GL] hoặc hợp ngữ, vẫn gắn chặt với kiến ​​trúc tập lệnh của máy tính cụ thể. Những điều này phục vụ để làm cho chương trình dễ đọc hơn với con người và giúp lập trình viên giảm bớt các phép tính địa chỉ tẻ nhạt và dễ bị lỗi.

Ngôn ngữ lập trình cấp cao đầu tiên, hay ngôn ngữ lập trình thế hệ thứ ba [3GL], được viết vào những năm 1950. Ngôn ngữ lập trình cấp cao ban đầu được thiết kế cho máy tính là Plankalkül, được Konrad Zuse phát triển cho Z3 của Đức trong khoảng thời gian từ 1943 đến 1945. Tuy nhiên, nó đã không được thực hiện cho đến năm 1998 và 2000

Mã ngắn của John Mauchly, được đề xuất vào năm 1949, là một trong những ngôn ngữ cấp cao đầu tiên từng được phát triển cho máy tính điện tử. Không giống như mã máy, các câu lệnh Mã ngắn thể hiện các biểu thức toán học ở dạng dễ hiểu. Tuy nhiên, chương trình phải được dịch sang mã máy mỗi khi chạy, khiến quá trình này chậm hơn nhiều so với chạy mã máy tương đương

Tại Đại học Manchester, Alick Glennie đã phát triển Autocode vào đầu những năm 1950. Là ngôn ngữ lập trình, nó sử dụng trình biên dịch để tự động chuyển đổi ngôn ngữ thành mã máy. Mã và trình biên dịch đầu tiên được phát triển vào năm 1952 cho máy tính Mark 1 tại Đại học Manchester và được coi là ngôn ngữ lập trình cấp cao được biên dịch đầu tiên

Mã tự động thứ hai được phát triển cho Mark 1 bởi R. Một. Brooker vào năm 1954 và được gọi là "Mark 1 Autocode". Brooker cũng đã phát triển mã tự động cho Ferranti Mercury vào những năm 1950 cùng với Đại học Manchester. Phiên bản cho EDSAC 2 được phát minh bởi D. F. Phòng thí nghiệm toán học Hartley của Đại học Cambridge năm 1961. Được gọi là EDSAC 2 Autocode, đây là sự phát triển trực tiếp từ Mercury Autocode được điều chỉnh cho phù hợp với hoàn cảnh địa phương và được chú ý nhờ khả năng tối ưu hóa mã đối tượng và chẩn đoán ngôn ngữ nguồn tiên tiến vào thời điểm đó. Một luồng phát triển hiện đại nhưng riêng biệt, Atlas Autocode được phát triển cho máy Atlas 1 của Đại học Manchester

Năm 1954, FORTRAN được phát minh tại IBM bởi John Backus. Đây là ngôn ngữ lập trình đa năng cấp cao được sử dụng rộng rãi đầu tiên có triển khai chức năng, thay vì chỉ là một thiết kế trên giấy. Nó vẫn là ngôn ngữ phổ biến cho điện toán hiệu suất cao và được sử dụng cho các chương trình đánh giá và xếp hạng các siêu máy tính nhanh nhất thế giới

Một ngôn ngữ lập trình ban đầu khác được phát minh bởi Grace Hopper ở Mỹ, được gọi là FLOW-MATIC. Nó được phát triển cho UNIVAC I tại Remington Rand trong khoảng thời gian từ 1955 đến 1959. Hopper nhận thấy rằng các khách hàng xử lý dữ liệu kinh doanh không thoải mái với ký hiệu toán học, và vào đầu năm 1955, bà và nhóm của mình đã viết một đặc điểm kỹ thuật cho một ngôn ngữ lập trình tiếng Anh và triển khai một mẫu thử nghiệm. Trình biên dịch FLOW-MATIC được phổ biến rộng rãi vào đầu năm 1958 và về cơ bản đã hoàn thành vào năm 1959. FLOW-MATIC có ảnh hưởng lớn đến thiết kế của COBOL, vì chỉ có nó và hậu duệ trực tiếp của nó là AIMACO được sử dụng thực tế vào thời điểm đó

Sàng lọc [ chỉnh sửa ]

Việc sử dụng ngày càng nhiều các ngôn ngữ cấp cao đã đưa ra yêu cầu đối với ngôn ngữ lập trình cấp thấp hoặc ngôn ngữ lập trình hệ thống. Các ngôn ngữ này, ở các mức độ khác nhau, cung cấp cơ sở giữa hợp ngữ và ngôn ngữ cấp cao. Chúng có thể được sử dụng để thực hiện các tác vụ yêu cầu quyền truy cập trực tiếp vào cơ sở phần cứng nhưng vẫn cung cấp các cấu trúc kiểm soát và kiểm tra lỗi cấp cao hơn

Giai đoạn từ những năm 1960 đến cuối những năm 1970 đã mang lại sự phát triển của các mô hình ngôn ngữ chính hiện đang được sử dụng

Mỗi ngôn ngữ này sinh ra con cháu và hầu hết các ngôn ngữ lập trình hiện đại đều tính ít nhất một trong số chúng trong tổ tiên của chúng

Những năm 1960 và 1970 cũng chứng kiến ​​cuộc tranh luận đáng kể về giá trị của lập trình có cấu trúc và liệu các ngôn ngữ lập trình có nên được thiết kế để hỗ trợ nó hay không. Edsger Dijkstra, trong một bức thư nổi tiếng năm 1968 đăng trên tạp chí Communications of the ACM, lập luận rằng câu lệnh Goto nên được loại bỏ khỏi tất cả các ngôn ngữ lập trình "cấp cao hơn".

Hợp nhất và tăng trưởng[sửa | sửa mã nguồn]

Một lựa chọn nhỏ của sách giáo khoa ngôn ngữ lập trình

Những năm 1980 là những năm hợp nhất tương đối. C++ kết hợp hướng đối tượng và lập trình hệ thống. Chính phủ Hoa Kỳ đã chuẩn hóa Ada, một ngôn ngữ lập trình hệ thống có nguồn gốc từ Pascal và dành cho các nhà thầu quốc phòng sử dụng. Ở Nhật Bản và những nơi khác, người ta đã chi một số tiền lớn để nghiên cứu cái gọi là ngôn ngữ "thế hệ thứ năm" kết hợp các cấu trúc lập trình logic. Cộng đồng ngôn ngữ chức năng chuyển sang tiêu chuẩn hóa ML và Lisp. Thay vì phát minh ra các mô hình mới, tất cả các phong trào này được xây dựng dựa trên các ý tưởng được phát minh trong các thập kỷ trước.

Một xu hướng quan trọng trong thiết kế ngôn ngữ để lập trình các hệ thống quy mô lớn trong những năm 1980 là tập trung nhiều hơn vào việc sử dụng các mô-đun hoặc các đơn vị mã tổ chức quy mô lớn. Modula-2, Ada và ML đều đã phát triển các hệ thống mô-đun đáng chú ý vào những năm 1980, thường được kết hợp với các cấu trúc lập trình chung

Sự phát triển nhanh chóng của Internet vào giữa những năm 1990 đã tạo cơ hội cho các ngôn ngữ mới. Perl, ban đầu là một công cụ viết kịch bản Unix được phát hành lần đầu tiên vào năm 1987, đã trở nên phổ biến trong các trang web động. Java được sử dụng để lập trình phía máy chủ và các máy ảo mã byte lại trở nên phổ biến trong môi trường thương mại với lời hứa "Viết một lần, chạy mọi nơi" [UCSD Pascal đã phổ biến một thời gian vào đầu những năm 1980]. Những phát triển này về cơ bản không phải là tiểu thuyết;

Sự phát triển của ngôn ngữ lập trình vẫn tiếp tục, trong cả ngành công nghiệp và nghiên cứu. Các hướng hiện tại bao gồm xác minh bảo mật và độ tin cậy, các loại mô đun mới [mixin, đại biểu, khía cạnh] và tích hợp cơ sở dữ liệu như LINQ của Microsoft

Ngôn ngữ lập trình thế hệ thứ tư [4GL] là ngôn ngữ lập trình máy tính nhằm cung cấp mức độ trừu tượng cao hơn cho các chi tiết phần cứng máy tính bên trong so với 3GL. Ngôn ngữ lập trình thế hệ thứ năm [5GL] là ngôn ngữ lập trình dựa trên việc giải quyết vấn đề bằng cách sử dụng các ràng buộc được cung cấp cho chương trình, thay vì sử dụng thuật toán do lập trình viên viết

Các yếu tố [ chỉnh sửa ]

Tất cả các ngôn ngữ lập trình đều có một số khối xây dựng nguyên thủy để mô tả dữ liệu và các quy trình hoặc phép biến đổi được áp dụng cho chúng [như phép cộng hai số hoặc lựa chọn một mục từ bộ sưu tập]. Những nguyên thủy này được xác định bởi các quy tắc cú pháp và ngữ nghĩa mô tả cấu trúc và ý nghĩa của chúng tương ứng

Dạng bề mặt của một ngôn ngữ lập trình được gọi là cú pháp của nó. Hầu hết các ngôn ngữ lập trình hoàn toàn là văn bản; . Mặt khác, một số ngôn ngữ lập trình có bản chất đồ họa hơn, sử dụng các mối quan hệ trực quan giữa các ký hiệu để chỉ định một chương trình.

Cú pháp của một ngôn ngữ mô tả sự kết hợp có thể có của các ký hiệu tạo thành một chương trình đúng về mặt cú pháp. Ý nghĩa được đưa ra cho sự kết hợp của các ký hiệu được xử lý theo ngữ nghĩa [chính thức hoặc mã hóa cứng trong triển khai tham chiếu]. Vì hầu hết các ngôn ngữ là văn bản, bài viết này thảo luận về cú pháp văn bản

Cú pháp ngôn ngữ lập trình thường được xác định bằng cách sử dụng kết hợp các biểu thức chính quy [đối với cấu trúc từ vựng] và dạng Backus–Naur [đối với cấu trúc ngữ pháp]. Dưới đây là ngữ pháp đơn giản, dựa trên Lisp

expression ::= atom | list
atom       ::= number | symbol
number     ::= [+-]?['0'-'9']+
symbol     ::= ['A'-'Z''a'-'z'].*
list       ::= '[' expression* ']'

Ngữ pháp này chỉ định như sau

  • một biểu thức là một nguyên tử hoặc một danh sách;
  • một nguyên tử là một con số hoặc một ký hiệu;
  • một số là một chuỗi không bị gián đoạn gồm một hoặc nhiều chữ số thập phân, tùy ý đứng trước dấu cộng hoặc dấu trừ;
  • một biểu tượng là một chữ cái theo sau bởi 0 hoặc nhiều hơn bất kỳ ký tự nào [không bao gồm khoảng trắng];
  • một danh sách là một cặp dấu ngoặc đơn phù hợp, không có hoặc nhiều biểu thức bên trong nó

Sau đây là các ví dụ về chuỗi mã thông báo được định dạng tốt trong ngữ pháp này.

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
2,
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
3 và
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
4

Không phải tất cả các chương trình đúng cú pháp đều đúng ngữ nghĩa. Tuy nhiên, nhiều chương trình đúng cú pháp vẫn chưa được định dạng đúng theo quy tắc của ngôn ngữ; . Trong một số trường hợp, các chương trình như vậy có thể thể hiện hành vi không xác định. Ngay cả khi một chương trình được xác định rõ ràng trong một ngôn ngữ, nó vẫn có thể có một ý nghĩa mà người viết nó không mong đợi

Sử dụng ngôn ngữ tự nhiên làm ví dụ, có thể không gán nghĩa cho một câu đúng ngữ pháp hoặc câu có thể sai

Đoạn ngôn ngữ C sau đây đúng về mặt cú pháp, nhưng thực hiện các thao tác không được xác định về mặt ngữ nghĩa [thao tác

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
5 không có ý nghĩa đối với một giá trị có kiểu phức tạp và
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
6 không được xác định vì giá trị của
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
7 là con trỏ null]

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];

Nếu khai báo kiểu trên dòng đầu tiên bị bỏ qua, chương trình sẽ gây ra lỗi trên biến không xác định

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
7 trong quá trình biên dịch. Tuy nhiên, chương trình vẫn đúng về mặt cú pháp vì các khai báo kiểu chỉ cung cấp thông tin ngữ nghĩa.

Ngữ pháp cần thiết để xác định ngôn ngữ lập trình có thể được phân loại theo vị trí của nó trong hệ thống phân cấp Chomsky. Cú pháp của hầu hết các ngôn ngữ lập trình có thể được chỉ định bằng ngữ pháp Loại 2, tôi. e. , chúng là những ngữ pháp phi ngữ cảnh. Một số ngôn ngữ, bao gồm Perl và Lisp, chứa các cấu trúc cho phép thực thi trong giai đoạn phân tích cú pháp. Các ngôn ngữ có cấu trúc cho phép lập trình viên thay đổi hành vi của trình phân tích cú pháp khiến cho việc phân tích cú pháp trở thành một vấn đề không thể giải quyết được và thường làm mờ đi sự khác biệt giữa phân tích cú pháp và thực thi. Trái ngược với hệ thống macro của Lisp và các khối

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
9 của Perl, có thể chứa các tính toán chung, các macro C chỉ là sự thay thế chuỗi và không yêu cầu thực thi mã

Ngữ nghĩa [ chỉnh sửa ]

Thuật ngữ đề cập đến ý nghĩa của các ngôn ngữ, trái ngược với hình thức của chúng []

Ngữ nghĩa tĩnh[sửa]

Ngữ nghĩa tĩnh xác định các hạn chế về cấu trúc của các văn bản hợp lệ khó hoặc không thể diễn đạt bằng các hình thức cú pháp tiêu chuẩn. Đối với các ngôn ngữ được biên dịch, ngữ nghĩa tĩnh về cơ bản bao gồm các quy tắc ngữ nghĩa có thể được kiểm tra tại thời điểm biên dịch. Các ví dụ bao gồm việc kiểm tra xem mọi mã định danh đã được khai báo trước khi nó được sử dụng chưa [trong các ngôn ngữ yêu cầu khai báo như vậy] hoặc các nhãn trên nhánh của câu lệnh tình huống có khác biệt không. Nhiều hạn chế quan trọng thuộc loại này, chẳng hạn như kiểm tra xem mã định danh có được sử dụng trong ngữ cảnh thích hợp không [e. g. không thêm số nguyên vào tên hàm], hoặc lệnh gọi chương trình con có số lượng và loại đối số thích hợp, có thể được thực thi bằng cách định nghĩa chúng dưới dạng các quy tắc trong logic được gọi là hệ thống kiểu. Các hình thức phân tích tĩnh khác như phân tích luồng dữ liệu cũng có thể là một phần của ngữ nghĩa tĩnh. Các ngôn ngữ lập trình mới hơn như Java và C# có phân tích gán xác định, một dạng phân tích luồng dữ liệu, như một phần ngữ nghĩa tĩnh của chúng

Ngữ nghĩa động[sửa]

Khi dữ liệu đã được chỉ định, máy phải được hướng dẫn để thực hiện các thao tác trên dữ liệu. Ví dụ: ngữ nghĩa có thể xác định chiến lược theo đó các biểu thức được đánh giá thành các giá trị hoặc cách thức mà các cấu trúc điều khiển thực hiện các câu lệnh có điều kiện. Ngữ nghĩa động [còn được gọi là ngữ nghĩa thực thi] của một ngôn ngữ xác định cách thức và thời điểm các cấu trúc khác nhau của ngôn ngữ sẽ tạo ra một hành vi của chương trình. Có nhiều cách định nghĩa ngữ nghĩa thực thi. Ngôn ngữ tự nhiên thường được dùng để đặc tả ngữ nghĩa thực thi của các ngôn ngữ thường dùng trong thực tế. Một số lượng đáng kể các nghiên cứu học thuật đã đi vào ngữ nghĩa chính thức của các ngôn ngữ lập trình, cho phép ngữ nghĩa thực thi được chỉ định một cách chính thức. Kết quả từ lĩnh vực nghiên cứu này đã cho thấy ứng dụng hạn chế đối với thiết kế và triển khai ngôn ngữ lập trình bên ngoài học viện

Hệ thống loại[sửa]

Một hệ thống kiểu xác định cách ngôn ngữ lập trình phân loại các giá trị và biểu thức thành các kiểu, cách nó có thể thao tác các kiểu đó và cách chúng tương tác. Mục tiêu của một hệ thống loại là xác minh và thường thực thi một mức độ chính xác nhất định trong các chương trình được viết bằng ngôn ngữ đó bằng cách phát hiện một số hoạt động không chính xác. Bất kỳ hệ thống loại có thể quyết định nào cũng liên quan đến sự đánh đổi. trong khi nó từ chối nhiều chương trình không chính xác, nó cũng có thể cấm một số chương trình đúng, mặc dù không bình thường. Để khắc phục nhược điểm này, một số ngôn ngữ có lỗ hổng loại, thường không được kiểm tra mà lập trình viên có thể sử dụng để cho phép rõ ràng một hoạt động thường không được phép giữa các loại khác nhau. Trong hầu hết các ngôn ngữ được nhập, hệ thống loại chỉ được sử dụng để nhập các chương trình kiểm tra, nhưng một số ngôn ngữ, thường là các ngôn ngữ chức năng, suy luận các loại, giúp lập trình viên không cần phải viết chú thích loại. Thiết kế chính thức và nghiên cứu các hệ thống loại được gọi là lý thuyết loại

Ngôn ngữ được nhập và không được nhập [ chỉnh sửa ]

Một ngôn ngữ được nhập nếu đặc điểm kỹ thuật của mọi hoạt động xác định loại dữ liệu mà hoạt động được áp dụng. Ví dụ: dữ liệu được đại diện bởi

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
0 là một chuỗi và trong nhiều ngôn ngữ lập trình, việc chia một số cho một chuỗi không có nghĩa và sẽ không được thực thi. Hoạt động không hợp lệ có thể được phát hiện khi chương trình được biên dịch [kiểm tra kiểu "tĩnh"] và sẽ bị trình biên dịch từ chối với thông báo lỗi biên dịch hoặc nó có thể được phát hiện trong khi chương trình đang chạy [kiểm tra kiểu "động"] . Nhiều ngôn ngữ cho phép một hàm được gọi là trình xử lý ngoại lệ xử lý ngoại lệ này và, ví dụ, luôn trả về kết quả là "-1"

Một trường hợp đặc biệt của ngôn ngữ đánh máy là ngôn ngữ đánh máy đơn. Đây thường là các ngôn ngữ viết mã hoặc ngôn ngữ đánh dấu, chẳng hạn như REXX hoặc SGML và chỉ có một loại dữ liệu[ – ]–—các chuỗi ký tự phổ biến nhất được sử dụng cho cả dữ liệu tượng trưng và dữ liệu số

Ngược lại, một ngôn ngữ không định kiểu, chẳng hạn như hầu hết các hợp ngữ, cho phép thực hiện bất kỳ thao tác nào trên bất kỳ dữ liệu nào, thường là các chuỗi bit có độ dài khác nhau. Các ngôn ngữ chưa nhập cấp cao bao gồm BCPL, Tcl và một số loại Forth

Trong thực tế, trong khi một số ngôn ngữ được coi là được gõ từ lý thuyết loại [xác minh hoặc từ chối tất cả các hoạt động], hầu hết các ngôn ngữ hiện đại đều cung cấp một mức độ gõ. Nhiều ngôn ngữ sản xuất cung cấp các phương tiện để vượt qua hoặc lật đổ hệ thống loại, loại an toàn giao dịch để kiểm soát tốt hơn việc thực thi chương trình [xem phần ]

Gõ tĩnh so với gõ động[sửa]

Trong kiểu gõ tĩnh, tất cả các biểu thức đều có kiểu được xác định trước khi chương trình được thực thi, thường là tại thời điểm biên dịch. Ví dụ: 1 và [2+2] là các biểu thức số nguyên;

Các ngôn ngữ được gõ tĩnh có thể được gõ rõ ràng hoặc suy luận kiểu. Trong trường hợp thứ nhất, người lập trình phải viết tường minh các kiểu tại các vị trí văn bản nhất định [ví dụ tại các khai báo biến]. Trong trường hợp thứ hai, trình biên dịch suy ra các loại biểu thức và khai báo dựa trên ngữ cảnh. Hầu hết các ngôn ngữ được nhập tĩnh chính thống, chẳng hạn như C ++, C # và Java, đều được nhập rõ ràng. Suy luận kiểu hoàn chỉnh theo truyền thống được liên kết với các ngôn ngữ ít chính thống hơn, chẳng hạn như Haskell và ML. Tuy nhiên, nhiều ngôn ngữ được gõ rõ ràng hỗ trợ suy luận kiểu một phần; . Ngoài ra, một số ngôn ngữ lập trình cho phép một số loại được tự động chuyển đổi sang các loại khác;

Nhập động, còn được gọi là nhập tiềm ẩn, xác định loại an toàn của các hoạt động trong thời gian chạy; . Cũng giống như các ngôn ngữ suy luận kiểu, các ngôn ngữ kiểu động không yêu cầu lập trình viên viết các chú thích kiểu rõ ràng trên các biểu thức. Trong số những thứ khác, điều này có thể cho phép một biến duy nhất tham chiếu đến các giá trị thuộc các loại khác nhau tại các điểm khác nhau trong quá trình thực thi chương trình. Tuy nhiên, lỗi loại không thể được tự động phát hiện cho đến khi một đoạn mã thực sự được thực thi, có khả năng khiến việc gỡ lỗi trở nên khó khăn hơn. Lisp, Smalltalk, Perl, Python, JavaScript và Ruby đều là những ví dụ về ngôn ngữ kiểu động

Đánh máy yếu và mạnh[sửa]

Nhập yếu cho phép một giá trị của một loại được coi là một loại khác, ví dụ: coi một chuỗi là một số. Điều này đôi khi có thể hữu ích, nhưng nó cũng có thể cho phép một số loại lỗi chương trình không bị phát hiện tại thời điểm biên dịch và thậm chí trong thời gian chạy

Gõ mạnh ngăn ngừa các lỗi chương trình này. Nỗ lực thực hiện một thao tác trên loại giá trị sai sẽ gây ra lỗi. Các ngôn ngữ được gõ mạnh thường được gọi là an toàn hoặc an toàn

Một định nghĩa thay thế cho "gõ yếu" đề cập đến các ngôn ngữ, chẳng hạn như Perl và JavaScript, cho phép một số lượng lớn chuyển đổi kiểu ngầm định. Ví dụ, trong JavaScript, biểu thức

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
1 ngầm chuyển đổi
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
2 thành một số và quá trình chuyển đổi này thành công ngay cả khi
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
2 là
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
4,
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
5, một
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
6 hoặc một chuỗi ký tự. Những chuyển đổi ngầm định như vậy thường hữu ích, nhưng chúng có thể che dấu các lỗi lập trình. Mạnh mẽ và tĩnh hiện nay thường được coi là các khái niệm trực giao, nhưng cách sử dụng trong tài liệu khác nhau. Một số người sử dụng thuật ngữ được gõ mạnh để có nghĩa là gõ mạnh, gõ tĩnh, hoặc thậm chí gây nhầm lẫn hơn, có nghĩa đơn giản là gõ tĩnh. Vì vậy, C đã được gọi là cả kiểu mạnh và kiểu yếu, kiểu tĩnh

Có vẻ lạ đối với một số lập trình viên chuyên nghiệp rằng C có thể được "gõ tĩnh, yếu". Tuy nhiên, lưu ý rằng việc sử dụng con trỏ chung, con trỏ void*, không cho phép truyền con trỏ tới các con trỏ khác mà không cần thực hiện phép truyền rõ ràng. Điều này cực kỳ giống với việc bằng cách nào đó truyền một mảng byte tới bất kỳ loại kiểu dữ liệu nào trong C mà không sử dụng phép truyền rõ ràng, chẳng hạn như

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
7 hoặc
complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
8

Thư viện tiêu chuẩn và hệ thống thời gian chạy[sửa | sửa mã nguồn]

Hầu hết các ngôn ngữ lập trình đều có một thư viện lõi liên quan [đôi khi được gọi là "thư viện chuẩn", đặc biệt nếu nó được đưa vào như một phần của tiêu chuẩn ngôn ngữ đã xuất bản], thư viện này thường được cung cấp bởi tất cả các triển khai ngôn ngữ. Các thư viện cốt lõi thường bao gồm các định nghĩa cho các thuật toán, cấu trúc dữ liệu và cơ chế cho đầu vào và đầu ra thường được sử dụng

Ranh giới giữa một ngôn ngữ và thư viện cốt lõi của nó khác với ngôn ngữ này sang ngôn ngữ khác. Trong một số trường hợp, các nhà thiết kế ngôn ngữ có thể coi thư viện là một thực thể riêng biệt với ngôn ngữ. Tuy nhiên, thư viện cốt lõi của ngôn ngữ thường được người dùng coi là một phần của ngôn ngữ và một số đặc tả ngôn ngữ thậm chí còn yêu cầu thư viện này phải khả dụng trong tất cả các triển khai. Thật vậy, một số ngôn ngữ được thiết kế sao cho ý nghĩa của một số cấu trúc cú pháp thậm chí không thể được mô tả nếu không tham khảo thư viện lõi. Ví dụ, trong Java, một chuỗi ký tự được định nghĩa là một thể hiện của lớp

complex *p = NULL;
complex abs_p = sqrt[*p >> 4 + p->im];
9; . Ngược lại, Scheme chứa nhiều tập hợp con nhất quán đủ để xây dựng phần còn lại của ngôn ngữ dưới dạng macro thư viện và do đó, các nhà thiết kế ngôn ngữ thậm chí không buồn nói phần nào của ngôn ngữ phải được triển khai dưới dạng cấu trúc ngôn ngữ và phần nào phải được triển khai dưới dạng các phần

Thiết kế và triển khai[sửa | sửa mã nguồn]

Các ngôn ngữ lập trình chia sẻ các thuộc tính với các ngôn ngữ tự nhiên liên quan đến mục đích của chúng là phương tiện giao tiếp, có dạng cú pháp tách biệt với ngữ nghĩa của nó và hiển thị các họ ngôn ngữ của các ngôn ngữ liên quan phân nhánh từ ngôn ngữ này sang ngôn ngữ khác. Nhưng với tư cách là những cấu trúc nhân tạo, chúng cũng có những điểm khác biệt cơ bản so với các ngôn ngữ đã phát triển thông qua việc sử dụng. Một sự khác biệt đáng kể là một ngôn ngữ lập trình có thể được mô tả đầy đủ và nghiên cứu toàn bộ vì nó có một định nghĩa chính xác và hữu hạn. Ngược lại, ngôn ngữ tự nhiên có ý nghĩa thay đổi do người dùng của họ trong các cộng đồng khác nhau đưa ra. Mặc dù các ngôn ngữ được xây dựng cũng là các ngôn ngữ nhân tạo được thiết kế từ đầu với một mục đích cụ thể, nhưng chúng thiếu định nghĩa ngữ nghĩa chính xác và đầy đủ mà một ngôn ngữ lập trình có.

Nhiều ngôn ngữ lập trình đã được thiết kế từ đầu, thay đổi để đáp ứng nhu cầu mới và kết hợp với các ngôn ngữ khác. Nhiều người cuối cùng đã rơi vào tình trạng không sử dụng. Mặc dù đã có những nỗ lực thiết kế một ngôn ngữ lập trình "phổ quát" phục vụ cho mọi mục đích, nhưng tất cả chúng đều không được chấp nhận chung để đảm nhận vai trò này. Nhu cầu về các ngôn ngữ lập trình đa dạng phát sinh từ sự đa dạng của ngữ cảnh trong đó các ngôn ngữ được sử dụng

  • Các chương trình bao gồm từ các tập lệnh nhỏ được viết bởi những người có sở thích cá nhân đến các hệ thống khổng lồ được viết bởi hàng trăm lập trình viên
  • Các lập trình viên có nhiều chuyên môn từ những người mới bắt đầu cần sự đơn giản hơn tất cả cho đến các chuyên gia có thể cảm thấy thoải mái với sự phức tạp đáng kể
  • Các chương trình phải cân bằng tốc độ, kích thước và tính đơn giản trên các hệ thống từ vi điều khiển đến siêu máy tính
  • Các chương trình có thể được viết một lần và không thay đổi trong nhiều thế hệ hoặc chúng có thể trải qua quá trình sửa đổi liên tục
  • Các lập trình viên có thể chỉ đơn giản là khác nhau về sở thích của họ. họ có thể quen với việc thảo luận các vấn đề và diễn đạt chúng bằng một ngôn ngữ cụ thể

Một xu hướng phổ biến trong việc phát triển các ngôn ngữ lập trình là bổ sung thêm khả năng giải quyết vấn đề bằng cách sử dụng mức độ trừu tượng cao hơn. Các ngôn ngữ lập trình sớm nhất được gắn rất chặt chẽ với phần cứng cơ bản của máy tính. Khi các ngôn ngữ lập trình mới đã phát triển, các tính năng đã được thêm vào để cho phép các lập trình viên thể hiện các ý tưởng xa hơn từ việc dịch đơn giản sang các hướng dẫn phần cứng cơ bản. Bởi vì các lập trình viên ít bị ràng buộc bởi sự phức tạp của máy tính, các chương trình của họ có thể thực hiện nhiều tính toán hơn với ít nỗ lực hơn từ lập trình viên. Điều này cho phép họ viết nhiều chức năng hơn trên mỗi đơn vị thời gian

Lập trình ngôn ngữ tự nhiên đã được đề xuất như một cách để loại bỏ nhu cầu về một ngôn ngữ lập trình chuyên biệt. Tuy nhiên, mục tiêu này vẫn còn xa vời và những lợi ích của nó vẫn còn đang tranh luận. Edsger Nữ. Dijkstra cho rằng việc sử dụng một ngôn ngữ chính thức là điều cần thiết để ngăn chặn việc đưa ra các cấu trúc vô nghĩa và bác bỏ lập trình ngôn ngữ tự nhiên là "ngu ngốc". Alan Perlis cũng bác bỏ ý tưởng này một cách tương tự. Các phương pháp kết hợp đã được thực hiện trong tiếng Anh có cấu trúc và SQL

Các nhà thiết kế và người dùng của một ngôn ngữ phải xây dựng một số tạo phẩm chi phối và cho phép thực hành lập trình. Điều quan trọng nhất của những tạo phẩm này là đặc tả và triển khai ngôn ngữ

Đặc tả của ngôn ngữ lập trình là một tạo phẩm mà người dùng ngôn ngữ và người triển khai có thể sử dụng để thống nhất xem một đoạn mã nguồn có phải là một chương trình hợp lệ trong ngôn ngữ đó hay không và nếu có thì hành vi của nó sẽ như thế nào

Một đặc tả ngôn ngữ lập trình có thể có nhiều dạng, bao gồm các dạng sau

Thực hiện[sửa]

Việc triển khai ngôn ngữ lập trình cung cấp cách viết chương trình bằng ngôn ngữ đó và thực thi chúng trên một hoặc nhiều cấu hình phần cứng và phần mềm. Nhìn chung, có hai cách tiếp cận để triển khai ngôn ngữ lập trình. biên soạn và giải thích. Nói chung có thể thực hiện một ngôn ngữ bằng một trong hai kỹ thuật

Đầu ra của trình biên dịch có thể được thực thi bởi phần cứng hoặc chương trình được gọi là trình thông dịch. Trong một số triển khai sử dụng phương pháp thông dịch viên, không có ranh giới khác biệt giữa biên dịch và thông dịch. Chẳng hạn, một số triển khai BASIC biên dịch và sau đó thực thi từng dòng nguồn một

Các chương trình được thực thi trực tiếp trên phần cứng thường chạy nhanh hơn nhiều so với các chương trình được diễn giải trong phần mềm. [cần nguồn tốt hơn]

Một kỹ thuật để cải thiện hiệu suất của các chương trình được giải thích là biên dịch đúng lúc. Ở đây, máy ảo, ngay trước khi thực thi, sẽ dịch các khối mã byte sẽ được sử dụng thành mã máy để thực thi trực tiếp trên phần cứng

Ngôn ngữ độc quyền [ chỉnh sửa ]

Mặc dù hầu hết các ngôn ngữ lập trình được sử dụng phổ biến nhất đều có các thông số kỹ thuật và triển khai hoàn toàn mở, nhưng nhiều ngôn ngữ lập trình chỉ tồn tại dưới dạng ngôn ngữ lập trình độc quyền với việc triển khai chỉ có sẵn từ một nhà cung cấp duy nhất, nhà cung cấp này có thể tuyên bố rằng ngôn ngữ độc quyền đó là tài sản trí tuệ của họ. Ngôn ngữ lập trình độc quyền thường là ngôn ngữ dành riêng cho miền hoặc ngôn ngữ kịch bản nội bộ cho một sản phẩm;

Một số ngôn ngữ lập trình tồn tại trên ranh giới giữa độc quyền và mở;

Nhiều ngôn ngữ độc quyền được sử dụng rộng rãi, bất chấp bản chất độc quyền của chúng; . Một số ngôn ngữ có thể thực hiện quá trình chuyển đổi từ đóng sang mở;

Hàng ngàn ngôn ngữ lập trình khác nhau đã được tạo ra, chủ yếu trong lĩnh vực điện toán. Các dự án phần mềm riêng lẻ thường sử dụng năm ngôn ngữ lập trình trở lên

Ngôn ngữ lập trình khác với hầu hết các hình thức diễn đạt khác của con người ở chỗ chúng yêu cầu mức độ chính xác và đầy đủ cao hơn. Khi sử dụng ngôn ngữ tự nhiên để giao tiếp với người khác, người viết và người nói có thể mơ hồ và mắc lỗi nhỏ, và vẫn mong muốn ý định của họ được hiểu. Tuy nhiên, nói theo nghĩa bóng, máy tính "làm chính xác những gì chúng được bảo phải làm" và không thể "hiểu" mã mà lập trình viên định viết. Sự kết hợp giữa định nghĩa ngôn ngữ, chương trình và đầu vào của chương trình phải xác định đầy đủ hành vi bên ngoài xảy ra khi chương trình được thực thi, trong miền kiểm soát của chương trình đó. Mặt khác, ý tưởng về thuật toán có thể được truyền đạt cho con người mà không cần độ chính xác cần thiết để thực thi bằng cách sử dụng mã giả, mã này xen kẽ ngôn ngữ tự nhiên với mã được viết bằng ngôn ngữ lập trình

Ngôn ngữ lập trình cung cấp một cơ chế có cấu trúc để xác định các phần dữ liệu và các hoạt động hoặc chuyển đổi có thể được thực hiện tự động trên dữ liệu đó. Một lập trình viên sử dụng các khái niệm trừu tượng có trong ngôn ngữ để biểu diễn các khái niệm liên quan đến tính toán. Các khái niệm này được biểu diễn dưới dạng một tập hợp các phần tử đơn giản nhất có sẵn [được gọi là nguyên hàm]. Lập trình là quá trình mà các lập trình viên kết hợp các nguyên mẫu này để soạn thảo các chương trình mới hoặc điều chỉnh các chương trình hiện có để sử dụng mới hoặc thay đổi môi trường

Các chương trình dành cho máy tính có thể được thực thi theo quy trình hàng loạt mà không có sự tương tác của con người hoặc người dùng có thể nhập lệnh trong phiên tương tác của trình thông dịch. Trong trường hợp này, "lệnh" chỉ đơn giản là các chương trình, việc thực thi của chúng được xâu chuỗi lại với nhau. Khi một ngôn ngữ có thể chạy các lệnh của nó thông qua một trình thông dịch [chẳng hạn như Unix shell hoặc giao diện dòng lệnh khác], mà không cần biên dịch, thì nó được gọi là ngôn ngữ kịch bản

Đo lường việc sử dụng ngôn ngữ[sửa | sửa mã nguồn]

Việc xác định đâu là ngôn ngữ lập trình được sử dụng rộng rãi nhất là rất khó vì định nghĩa về cách sử dụng thay đổi theo ngữ cảnh. Một ngôn ngữ có thể chiếm số giờ lập trình nhiều hơn, một ngôn ngữ khác có nhiều dòng mã hơn và ngôn ngữ thứ ba có thể tiêu tốn nhiều thời gian nhất của CPU. Một số ngôn ngữ rất phổ biến cho các loại ứng dụng cụ thể. Ví dụ: COBOL vẫn mạnh trong trung tâm dữ liệu của công ty, thường là trên các máy tính lớn; . Các ngôn ngữ khác thường được sử dụng để viết nhiều loại ứng dụng khác nhau

Nhiều phương pháp đo lường mức độ phổ biến của ngôn ngữ, mỗi phương pháp có một sai lệch khác nhau so với những gì được đo lường, đã được đề xuất

  • đếm số lượng quảng cáo việc làm đề cập đến ngôn ngữ
  • số lượng sách bán ra dạy hoặc mô tả ngôn ngữ
  • ước tính số lượng dòng mã hiện có được viết bằng ngôn ngữ – có thể đánh giá thấp các ngôn ngữ thường không được tìm thấy trong tìm kiếm công khai
  • số lượng tài liệu tham khảo ngôn ngữ [i. e. , tên của ngôn ngữ] được tìm thấy bằng công cụ tìm kiếm trên web

Kết hợp và lấy trung bình thông tin từ các trang web khác nhau, stackify. com đã báo cáo mười ngôn ngữ lập trình phổ biến nhất [theo thứ tự giảm dần theo mức độ phổ biến chung]. Java, C, C++, Python, C#, JavaScript, VB. NET, R, PHP và MATLAB

Phương ngữ, mùi vị và cách triển khai[sửa | sửa mã nguồn]

Phương ngữ của ngôn ngữ lập trình hoặc ngôn ngữ trao đổi dữ liệu là một biến thể hoặc phần mở rộng [tương đối nhỏ] của ngôn ngữ không thay đổi bản chất bên trong của nó. Với các ngôn ngữ như Scheme và Forth, những người triển khai có thể coi là không đầy đủ, không phù hợp hoặc không hợp pháp, vì vậy họ thường sẽ đi chệch khỏi tiêu chuẩn, tạo ra một phương ngữ mới. Trong các trường hợp khác, một phương ngữ được tạo để sử dụng trong ngôn ngữ dành riêng cho miền, thường là một tập hợp con. Trong thế giới Lisp, hầu hết các ngôn ngữ sử dụng cú pháp biểu thức S cơ bản và ngữ nghĩa giống Lisp đều được coi là phương ngữ Lisp, mặc dù chúng rất khác nhau, ví dụ như Racket và Clojure. Vì thông thường một ngôn ngữ có nhiều phương ngữ, lập trình viên thiếu kinh nghiệm có thể gặp khó khăn trong việc tìm tài liệu phù hợp. Ngôn ngữ lập trình BASIC có nhiều phương ngữ

Phân loại[sửa]

Không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình. Một ngôn ngữ lập trình nhất định thường không có một ngôn ngữ tổ tiên duy nhất. Các ngôn ngữ thường phát sinh bằng cách kết hợp các yếu tố của một số ngôn ngữ tiền thân với những ý tưởng mới đang lưu hành vào thời điểm đó. Những ý tưởng bắt nguồn từ một ngôn ngữ sẽ lan tỏa trong một họ ngôn ngữ có liên quan, rồi đột ngột vượt qua khoảng cách gia đình để xuất hiện trong một họ ngôn ngữ hoàn toàn khác.

Nhiệm vụ phức tạp hơn bởi thực tế là các ngôn ngữ có thể được phân loại theo nhiều trục. Ví dụ, Java vừa là ngôn ngữ hướng đối tượng [vì nó khuyến khích tổ chức hướng đối tượng] vừa là ngôn ngữ đồng thời [vì nó chứa các cấu trúc dựng sẵn để chạy nhiều luồng song song]. Python là một ngôn ngữ kịch bản hướng đối tượng

Nói một cách khái quát, các ngôn ngữ lập trình được phân loại theo mô hình lập trình và miền dự định sử dụng, với các ngôn ngữ lập trình mục đích chung được phân biệt với các ngôn ngữ lập trình miền cụ thể. Theo truyền thống, các ngôn ngữ lập trình được coi là mô tả tính toán dưới dạng các câu mệnh lệnh, tức là. e. ra lệnh. Chúng thường được gọi là ngôn ngữ lập trình mệnh lệnh. Rất nhiều nghiên cứu về ngôn ngữ lập trình đã nhằm mục đích làm mờ đi sự khác biệt giữa chương trình như một tập hợp các hướng dẫn và chương trình như một khẳng định về câu trả lời mong muốn, đây là đặc điểm chính của lập trình khai báo. Các mô hình tinh tế hơn bao gồm lập trình thủ tục, lập trình hướng đối tượng, lập trình chức năng và lập trình logic; . Ngôn ngữ hợp ngữ không phải là một mô hình mà là một mô hình trực tiếp của kiến ​​trúc máy bên dưới. Theo mục đích, ngôn ngữ lập trình có thể được coi là mục đích chung, ngôn ngữ lập trình hệ thống, ngôn ngữ kịch bản, ngôn ngữ dành riêng cho miền hoặc ngôn ngữ đồng thời/phân tán [hoặc kết hợp những ngôn ngữ này]. Một số ngôn ngữ có mục đích chung được thiết kế chủ yếu với mục tiêu giáo dục

Một ngôn ngữ lập trình cũng có thể được phân loại theo các yếu tố không liên quan đến mô hình lập trình. Chẳng hạn, hầu hết các ngôn ngữ lập trình đều sử dụng các từ khóa tiếng Anh, trong khi một số ít thì không. Các ngôn ngữ khác có thể được phân loại là bí truyền có chủ ý hoặc không

Ngôn ngữ máy tính có nghĩa là gì?

Ngôn ngữ máy tính là ngôn ngữ trang trọng được sử dụng để giao tiếp với máy tính . Các loại ngôn ngữ máy tính bao gồm. Ngôn ngữ xây dựng – tất cả các hình thức giao tiếp mà con người có thể chỉ định một giải pháp vấn đề thực thi được cho máy tính.

Ngôn ngữ máy tính với ví dụ là gì?

Ngôn ngữ lập trình là một loại ngôn ngữ viết cho máy tính biết phải làm gì. Ví dụ là. Python, Ruby, Java, JavaScript, C, C++ và C# . Ngôn ngữ lập trình được sử dụng để viết tất cả các chương trình máy tính và phần mềm máy tính.

Ngôn ngữ máy tính và các loại của nó là gì?

Ngôn ngữ máy tính được định nghĩa là mã hoặc cú pháp được sử dụng để viết chương trình hoặc bất kỳ ứng dụng cụ thể nào. Nó được sử dụng để giao tiếp với máy tính. Nhìn chung, ngôn ngữ máy tính có thể được phân thành ba loại. - hợp ngữ, ngôn ngữ máy và ngôn ngữ cấp cao .

4 loại ngôn ngữ máy tính là gì?

5 loại ngôn ngữ lập trình chính .
C và C++
pascal
NỀN TẢNG

Chủ Đề