Cách tạo ngôn ngữ lập trình của riêng bạn: lý thuyết, công cụ và lời khuyên từ chuyên gia. Các ngôn ngữ lập trình khác nhau và lĩnh vực ứng dụng của chúng. Bài giảng trên Yandex

Lập trình viên William W. Vold kể câu chuyện

Trong sáu tháng qua, tôi đã nghiên cứu tạo ra một ngôn ngữ lập trình (PL) có tên là Pinecone. Tôi không dám gọi nó là hoàn chỉnh, nhưng bạn đã có thể sử dụng nó - nó chứa đủ các yếu tố cho việc này, chẳng hạn như các biến, hàm và cấu trúc dữ liệu tùy chỉnh. Nếu bạn muốn kiểm tra trước khi đọc, tôi khuyên bạn nên truy cập trang và kho lưu trữ chính thức trên GitHub.

Giới thiệu

Tôi không phải là một chuyên gia. Khi tôi bắt đầu thực hiện dự án này, tôi không biết mình đang làm gì và đến giờ tôi vẫn chưa biết. Tôi chưa bao giờ có mục đích nghiên cứu các nguyên tắc tạo ra một ngôn ngữ - tôi chỉ đọc một số tài liệu trên Internet và ngay cả trong đó tôi cũng không tìm thấy hầu hết bất cứ điều gì hữu ích cho bản thân.

Tuy nhiên, tôi đã viết một ngôn ngữ hoàn toàn mới. Và nó hoạt động. Tôi phải làm gì đó ngay.

Trong bài viết này, tôi sẽ cố gắng chỉ ra cách Pinecone (và các ngôn ngữ lập trình khác) biến mã nguồn thành thứ mà nhiều người coi là phép thuật. Tôi cũng sẽ tập trung vào những tình huống mà tôi phải thỏa hiệp và giải thích lý do tại sao tôi lại đưa ra những quyết định như vậy.

Chắc chắn văn bản này không phải là một hướng dẫn đầy đủ để tạo ra một ngôn ngữ lập trình, nhưng đối với những người tò mò thì đây sẽ là điểm khởi đầu tốt.

Những bước đầu tiên

“Tôi phải bắt đầu từ đâu đây?” là câu hỏi mà các nhà phát triển khác thường hỏi khi biết tôi viết ngôn ngữ của riêng mình. Phần này tôi sẽ cố gắng giải đáp chi tiết.

Biên soạn hoặc giải thích?

Trình biên dịch phân tích toàn bộ chương trình, biến nó thành mã máy và lưu trữ để thực hiện sau này. Trình thông dịch phân tích cú pháp và thực thi từng dòng chương trình trong thời gian thực.

Về mặt kỹ thuật, bất kỳ ngôn ngữ nào cũng có thể được biên dịch và thông dịch. Nhưng đối với mỗi ngôn ngữ, một phương pháp phù hợp hơn phương pháp kia và việc lựa chọn mô hình ở giai đoạn đầu sẽ quyết định thiết kế tiếp theo. Theo nghĩa chung, việc diễn giải rất linh hoạt và việc biên dịch mang lại hiệu suất cao, nhưng đây chỉ là phần nổi của một chủ đề rất phức tạp.

Tôi muốn tạo ra một ngôn ngữ đơn giản nhưng mạnh mẽ, hiếm có, vì vậy tôi quyết định biên dịch Pinecone ngay từ đầu. Tuy nhiên, Pinecone cũng có một trình thông dịch - lúc đầu, việc khởi chạy chỉ có thể thực hiện được với sự trợ giúp của nó, sau này tôi sẽ giải thích lý do.

Ghi chú dịch Nhân tiện, chúng ta có một cái nhìn tổng quan nhanh - đây là một bài tập tuyệt vời cho những người học Python.

Sự lựa chọn ngôn ngữ

Một loại bước meta: bản thân ngôn ngữ lập trình là một chương trình phải được viết bằng một số ngôn ngữ. Tôi chọn C++ vì hiệu năng của nó, bộ chức năng phong phú của nó và đơn giản vì tôi thích nó.

Nhưng nói chung, có thể đưa ra lời khuyên sau:

  • ngôn ngữ có thể giải thích được Rất khuyến khíchviết bằng ngôn ngữ được biên dịch (C, C++, Swift). Nếu không, chi phí hiệu suất sẽ tăng vọt trong khi trình thông dịch meta diễn giải trình thông dịch của bạn;
  • ngôn ngữ biên dịch bạn có thể viết bằng ngôn ngữ thông dịch (Python, JS). Thời gian biên dịch sẽ tăng nhưng thời gian thực hiện chương trình thì không.

Thiết kế kiến ​​trúc

Cấu trúc của ngôn ngữ lập trình có nhiều giai đoạn từ mã nguồn đến tệp thực thi, tại mỗi giai đoạn dữ liệu được định dạng theo một cách nhất định, cũng như các chức năng chuyển đổi giữa các giai đoạn này. Hãy nói về điều này chi tiết hơn.

Máy phân tích từ vựng/từ vựng

Dòng mã nguồn được chuyển qua từ vựng và chuyển thành danh sách mã thông báo.

Bước đầu tiên trong hầu hết các ngôn ngữ là phân tích từ vựng. Nói một cách đơn giản, nó thể hiện sự phân chia văn bản thành các mã thông báo, tức là các đơn vị ngôn ngữ: biến, tên hàm (mã định danh), toán tử, số. Do đó, bằng cách cung cấp cho lexer một chuỗi có mã nguồn làm đầu vào, chúng ta sẽ nhận được danh sách đầu ra gồm tất cả các mã thông báo có trong đó.

Mã nguồn sẽ không còn được truy cập trong các giai đoạn tiếp theo, vì vậy lexer phải cung cấp tất cả thông tin cần thiết cho chúng.

Uốn cong

Khi tạo ngôn ngữ, điều đầu tiên tôi làm là viết một từ vựng. Sau đó, tôi khám phá các công cụ có thể giúp việc phân tích từ vựng trở nên dễ dàng hơn và giảm số lượng lỗi phát sinh.

Một trong những công cụ chính như vậy là Flex - một trình tạo bộ phân tích từ vựng. Nó lấy đầu vào là một tệp mô tả ngữ pháp ngôn ngữ, sau đó tạo một chương trình C, từ đó phân tích chuỗi và tạo ra kết quả mong muốn.

Quyết định của tôi

Tôi quyết định giữ lại máy phân tích mà tôi đã viết. Cuối cùng, tôi không thấy bất kỳ lợi thế cụ thể nào cho Flex và việc sử dụng nó sẽ chỉ tạo ra các phần phụ thuộc bổ sung khiến quá trình xây dựng trở nên phức tạp. Ngoài ra, lựa chọn của tôi cho phép linh hoạt hơn - ví dụ: bạn có thể thêm câu lệnh vào ngôn ngữ mà không cần phải chỉnh sửa nhiều tệp.

Trình phân tích cú pháp/trình phân tích cú pháp

Danh sách mã thông báo đi qua trình phân tích cú pháp và chuyển thành dạng cây.

Giai đoạn tiếp theo là trình phân tích cú pháp. Nó biến đổi văn bản nguồn, nghĩa là danh sách các mã thông báo (có tính đến dấu ngoặc đơn và thứ tự thực hiện các thao tác), thành một cây cú pháp trừu tượng, cho phép bạn biểu diễn một cách có cấu trúc các quy tắc của ngôn ngữ đã tạo. Bản thân quá trình này có thể được gọi là đơn giản, nhưng với sự gia tăng số lượng cấu trúc ngôn ngữ, nó trở nên phức tạp hơn nhiều.

Bò rừng

Ở bước này, tôi cũng đang nghĩ đến việc sử dụng thư viện của bên thứ ba, xem Bison để tạo trình phân tích cú pháp. Nó rất giống Flex - một tệp tùy chỉnh với các quy tắc cú pháp được cấu trúc bằng chương trình C. Nhưng một lần nữa, tôi quyết định không sử dụng các công cụ tự động hóa.

Ưu điểm của chương trình tùy chỉnh

Với lexer, quyết định viết và sử dụng mã của riêng mình (dài khoảng 200 dòng) là khá rõ ràng: Tôi thích các câu đố và câu đố này cũng tương đối tầm thường. Trình phân tích cú pháp lại là một câu chuyện khác: bây giờ độ dài mã của nó là 750 dòng và đây đã là lần thử thứ ba (hai lần đầu tiên đơn giản là khủng khiếp).

Tuy nhiên, tôi quyết định tự mình tạo trình phân tích cú pháp. Dưới đây là những lý do chính:

  • giảm thiểu chuyển đổi ngữ cảnh;
  • đơn giản hóa việc lắp ráp;
  • mong muốn đương đầu với nhiệm vụ một cách độc lập.

Tôi đã bị thuyết phục về tính khả thi của giải pháp bởi tuyên bố của Walter Bright (người tạo ra ngôn ngữ D) trong một bài viết của ông:

Tôi không khuyên bạn nên sử dụng trình tạo lexer và trình phân tích cú pháp, cũng như cái gọi là "trình biên dịch trình biên dịch" khác. Việc viết một từ vựng và trình phân tích cú pháp sẽ không mất nhiều thời gian và việc sử dụng trình tạo sẽ gắn chặt bạn với nó trong công việc sau này (điều này rất quan trọng khi chuyển trình biên dịch sang nền tảng mới). Ngoài ra, máy phát điện có đặc điểm là đưa ra các thông báo lỗi không liên quan.

Biểu đồ ngữ nghĩa trừu tượng

Chuyển đổi từ cây cú pháp sang biểu đồ ngữ nghĩa

Trong phần này, tôi đã triển khai một cấu trúc về cơ bản gần nhất với “biểu diễn trung gian” trong LLVM. Có một sự khác biệt nhỏ nhưng quan trọng giữa cây cú pháp trừu tượng (AST) và biểu đồ ngữ nghĩa trừu tượng (ASG).

ASG và ASD

Nói một cách đại khái, biểu đồ ngữ nghĩa là một cây cú pháp có ngữ cảnh. Nghĩa là, nó chứa thông tin như kiểu hàm trả về hoặc vị trí của cùng một biến được sử dụng. Bởi vì biểu đồ cần nhận biết và ghi nhớ tất cả ngữ cảnh này nên mã tạo ra nó cần được hỗ trợ dưới dạng nhiều bảng giải thích khác nhau.

Phóng

Sau khi vẽ xong biểu đồ, việc chạy chương trình là một công việc khá đơn giản. Mỗi nút chứa phần triển khai của một hàm nhận một số đầu vào, thực hiện những gì nó được lập trình để thực hiện (bao gồm các lệnh gọi có thể có đến các hàm trợ giúp) và trả về một kết quả. Đây là thông dịch viên đang hoạt động.

Tùy chọn biên dịch

Bạn có thể thắc mắc trình thông dịch đến từ đâu, vì ban đầu tôi định nghĩa Pinecone là một ngôn ngữ được biên dịch. Vấn đề là việc biên dịch khó hơn nhiều so với việc diễn giải - tôi đã đề cập trước đó rằng tôi gặp phải một số vấn đề với bước này.

Viết trình biên dịch của riêng bạn

Lúc đầu, tôi thích ý tưởng này - tôi thích tự mình làm mọi việc và tôi đã muốn học ngôn ngữ lắp ráp từ lâu. Nhưng việc tạo một trình biên dịch đa nền tảng từ đầu khó hơn việc viết mã máy cho từng thành phần của ngôn ngữ. Tôi thấy ý tưởng này hoàn toàn không thực tế và không xứng đáng với nguồn lực đã bỏ ra.

Lập trình là toàn bộ khoa học cho phép bạn tạo ra các chương trình máy tính. Nó bao gồm một số lượng lớn các hoạt động và thuật toán khác nhau tạo thành một ngôn ngữ lập trình duy nhất. Vậy nó là gì và các ngôn ngữ lập trình khác nhau là gì? Bài viết đưa ra câu trả lời đồng thời cung cấp danh sách tổng quan về các ngôn ngữ lập trình.

Lịch sử xuất hiện và thay đổi của ngôn ngữ chương trình cần được nghiên cứu cùng với lịch sử phát triển của công nghệ máy tính, bởi những khái niệm này có liên quan trực tiếp với nhau. Nếu không có ngôn ngữ lập trình thì sẽ không thể tạo ra bất kỳ chương trình nào để máy tính hoạt động, điều đó có nghĩa là việc tạo ra máy tính sẽ trở thành một công việc vô nghĩa.

Ngôn ngữ máy đầu tiên được phát minh vào năm 1941 bởi Konrad Zuse, người phát minh ra Công cụ phân tích. Một thời gian sau, vào năm 1943, Howard Aiken đã tạo ra chiếc máy Mark 1, có khả năng đọc hướng dẫn ở cấp độ mã máy.

Vào những năm 1950, nhu cầu phát triển phần mềm bắt đầu và ngôn ngữ máy không thể xử lý số lượng lớn mã, do đó một cách mới để giao tiếp với máy tính đã được tạo ra. "Assembler" là ngôn ngữ ghi nhớ đầu tiên thay thế các lệnh máy. Qua nhiều năm, danh sách các ngôn ngữ lập trình ngày càng tăng lên vì phạm vi công nghệ máy tính ngày càng rộng hơn.

Phân loại ngôn ngữ lập trình

Hiện tại có hơn 300 ngôn ngữ lập trình. Mỗi người trong số họ có những đặc điểm riêng và phù hợp cho một nhiệm vụ cụ thể. Tất cả các ngôn ngữ lập trình có thể được chia thành nhiều nhóm:

  • Hướng theo khía cạnh (ý tưởng chính là tách chức năng để tăng hiệu quả của các mô-đun phần mềm).
  • Cấu trúc (dựa trên ý tưởng tạo cấu trúc phân cấp của các khối chương trình riêng lẻ).
  • Logic (dựa trên lý thuyết về bộ máy logic toán học và các quy tắc giải quyết).
  • Hướng đối tượng (trong lập trình như vậy, thuật toán không còn được sử dụng nữa mà là các đối tượng thuộc về một lớp nhất định).
  • Đa mô hình (kết hợp một số mô hình và chính lập trình viên sẽ quyết định sử dụng ngôn ngữ nào trong trường hợp cụ thể).
  • Chức năng (các phần tử chính là các hàm thay đổi giá trị tùy thuộc vào kết quả tính toán của dữ liệu nguồn).

Lập trình cho người mới bắt đầu

Nhiều người thắc mắc lập trình là gì? Về cơ bản, đó là một cách để giao tiếp với máy tính. Nhờ ngôn ngữ lập trình, chúng ta có thể giao nhiệm vụ cụ thể cho nhiều thiết bị khác nhau bằng cách tạo các ứng dụng hoặc chương trình đặc biệt. Khi nghiên cứu khoa học này ở giai đoạn đầu, điều quan trọng nhất là chọn ngôn ngữ lập trình phù hợp (thú vị với bạn). Danh sách dành cho người mới bắt đầu dưới đây:

  • Basic được phát minh vào năm 1964, thuộc họ ngôn ngữ cấp cao và được sử dụng để viết các chương trình ứng dụng.
  • Python khá dễ học do cú pháp đơn giản, dễ đọc nhưng ưu điểm là nó có thể được sử dụng để tạo cả chương trình máy tính để bàn thông thường và ứng dụng web.
  • Pascal là một trong những ngôn ngữ lâu đời nhất (1969) được tạo ra để dạy học sinh. Bản sửa đổi hiện đại của nó được điển hình hóa và có cấu trúc chặt chẽ, nhưng Pascal là một ngôn ngữ hoàn toàn logic, có thể hiểu được ở cấp độ trực quan.

Đây không phải là danh sách đầy đủ các ngôn ngữ lập trình dành cho người mới bắt đầu. Có một số lượng lớn các cú pháp dễ hiểu và chắc chắn sẽ có nhu cầu trong những năm tới. Mọi người đều có quyền độc lập lựa chọn hướng đi mà họ thấy thú vị.

Người mới bắt đầu có cơ hội tăng tốc việc học lập trình và các nguyên tắc cơ bản của nó nhờ các công cụ đặc biệt. Trợ lý chính là môi trường phát triển tích hợp cho các chương trình, ứng dụng Visual Basic (“Visual Basic” cũng là ngôn ngữ lập trình kế thừa phong cách của ngôn ngữ Basic những năm 1970).

Các cấp độ của ngôn ngữ lập trình

Tất cả các ngôn ngữ hình thức nhằm tạo, mô tả chương trình và thuật toán giải quyết vấn đề trên máy tính được chia thành hai loại chính: ngôn ngữ lập trình cấp thấp (danh sách được đưa ra dưới đây) và ngôn ngữ lập trình cấp cao. Hãy nói về từng người trong số họ một cách riêng biệt.

Ngôn ngữ cấp thấp được thiết kế để tạo hướng dẫn máy cho bộ xử lý. Ưu điểm chính của chúng là sử dụng các ký hiệu ghi nhớ, tức là thay vì một chuỗi số 0 và số 1 (từ hệ thống số nhị phân), máy tính sẽ ghi nhớ một từ viết tắt có ý nghĩa trong tiếng Anh. Các ngôn ngữ cấp thấp nổi tiếng nhất là “Assembler” (có một số kiểu con của ngôn ngữ này, mỗi kiểu có nhiều điểm chung nhưng chỉ khác nhau ở một tập hợp các lệnh và macro bổ sung), CIL (có sẵn trong .Net platform) và mã byte JAVA.

Ngôn ngữ lập trình cấp cao: danh sách

Ngôn ngữ cấp cao được tạo ra để thuận tiện và mang lại hiệu quả cao hơn cho ứng dụng, chúng hoàn toàn trái ngược với ngôn ngữ cấp thấp. Đặc điểm nổi bật của chúng là sự hiện diện của các cấu trúc ngữ nghĩa mô tả ngắn gọn và chính xác cấu trúc và thuật toán của chương trình. Trong các ngôn ngữ cấp thấp, mô tả của chúng trong mã máy sẽ quá dài và khó hiểu. Ngôn ngữ cấp cao độc lập với nền tảng. Thay vào đó, trình biên dịch thực hiện chức năng dịch: chúng dịch văn bản chương trình thành các lệnh máy cơ bản.

Danh sách các ngôn ngữ lập trình sau: C ("C"), C# ("C-sharp"), "Fortran", "Pascal", Java ("Java") - là một trong những cú pháp cấp cao được sử dụng nhiều nhất. Nó có các đặc tính sau: các ngôn ngữ này hoạt động với các cấu trúc phức tạp, hỗ trợ các kiểu dữ liệu chuỗi và các thao tác với thông tin I/O tệp, đồng thời cũng có ưu điểm là dễ làm việc hơn nhiều do tính dễ đọc và cú pháp dễ hiểu.

Ngôn ngữ lập trình được sử dụng nhiều nhất

Về nguyên tắc, bạn có thể viết chương trình bằng bất kỳ ngôn ngữ nào. Câu hỏi đặt ra là: liệu nó có hoạt động hiệu quả và không gặp sự cố không? Đó là lý do tại sao bạn nên chọn ngôn ngữ lập trình phù hợp nhất để giải quyết các vấn đề khác nhau. Danh sách theo mức độ phổ biến có thể được mô tả như sau:

  • Ngôn ngữ OOP: Java, C++, Python, PHP, VisualBasic và JavaScript;
  • nhóm ngôn ngữ cấu trúc: Basic, Fortran và Pascal;
  • đa mô hình: C#, Delphi, Curry và Scala.

Phạm vi chương trình và ứng dụng

Việc lựa chọn ngôn ngữ để viết một chương trình cụ thể phần lớn phụ thuộc vào phạm vi ứng dụng của nó. Vì vậy, ví dụ, để làm việc với chính phần cứng máy tính (viết trình điều khiển và chương trình hỗ trợ), tùy chọn tốt nhất sẽ là C (“C”) hoặc C++, được bao gồm trong các ngôn ngữ lập trình chính (xem danh sách ở trên) . Và để phát triển các ứng dụng di động, trong đó có game, bạn nên chọn Java hoặc C# (“C-sharp”).

Nếu bạn vẫn chưa quyết định nên theo hướng nào, chúng tôi khuyên bạn nên bắt đầu học với C hoặc C++. Chúng có cú pháp rất rõ ràng và sự phân chia cấu trúc rõ ràng thành các lớp và hàm. Ngoài ra, biết C hoặc C++, bạn có thể dễ dàng học bất kỳ ngôn ngữ lập trình nào khác.

Phân loại ngôn ngữ lập trình

Vào buổi bình minh của kỷ nguyên máy tính, mã máy là phương tiện giao tiếp duy nhất giữa con người và máy tính. Thành tựu to lớn của những người tạo ra ngôn ngữ lập trình là họ có thể khiến chính máy tính hoạt động như một công cụ dịch từ các ngôn ngữ này sang mã máy.

Các ngôn ngữ lập trình hiện tại có thể được chia thành hai nhóm: thủ tục và phi thủ tục (xem Hình 4.1).

Các chương trình thủ tục (hoặc thuật toán) là một hệ thống hướng dẫn để giải quyết một vấn đề cụ thể. Vai trò của máy tính được giảm xuống thành việc thực hiện các lệnh này một cách máy móc.

Ngôn ngữ thủ tục được chia thành ngôn ngữ cấp thấp và ngôn ngữ cấp cao.

Các loại bộ xử lý khác nhau có các tập lệnh khác nhau. Nếu một ngôn ngữ lập trình tập trung vào một loại bộ xử lý cụ thể và tính đến các tính năng của nó thì nó được gọi là ngôn ngữ lập trình cấp thấp.
Điều này có nghĩa là các toán tử ngôn ngữ gần với mã máy và tập trung vào các lệnh xử lý cụ thể.

Cơm. 4.1. Phân loại chung các ngôn ngữ lập trình

Ngôn ngữ cấp thấp (hướng máy) cho phép bạn tạo chương trình từ mã máy, thường ở dạng thập lục phân. Rất khó để làm việc với chúng, nhưng các chương trình được tạo ra bởi một lập trình viên có tay nghề cao với sự trợ giúp của chúng sẽ chiếm ít dung lượng bộ nhớ hơn và chạy nhanh hơn. Sử dụng các ngôn ngữ này sẽ thuận tiện hơn cho việc phát triển các chương trình hệ thống, trình điều khiển (chương trình điều khiển thiết bị máy tính) và một số loại chương trình khác.

Ngôn ngữ cấp thấp (hướng máy) là Trình biên dịch, đơn giản biểu thị từng lệnh mã máy, không phải dưới dạng số mà sử dụng các ký hiệu tượng trưng được gọi là
sự ghi nhớ.

Các ngôn ngữ cấp thấp tạo ra các chương trình rất hiệu quả và nhỏ gọn vì nhà phát triển có quyền truy cập vào tất cả các khả năng của bộ xử lý.

Ngôn ngữ lập trình cấp cao gần gũi và dễ hiểu hơn với con người hơn là với máy tính. Chúng không tính đến các tính năng của kiến ​​​​trúc máy tính cụ thể, do đó, các chương trình được tạo ở cấp độ văn bản nguồn có thể dễ dàng di chuyển sang các nền tảng khác mà trình dịch ngôn ngữ này đã được tạo. Việc phát triển chương trình bằng ngôn ngữ cấp cao sẽ dễ dàng hơn nhiều bằng cách sử dụng các lệnh rõ ràng và mạnh mẽ, đồng thời ít mắc lỗi hơn khi tạo chương trình.

Ưu điểm chính của ngôn ngữ thuật toán cấp cao là khả năng mô tả các chương trình giải quyết vấn đề ở dạng thuận tiện nhất có thể cho nhận thức của con người. Nhưng vì mỗi họ máy tính có ngôn ngữ (máy) nội bộ cụ thể của riêng mình và chỉ có thể thực thi các lệnh được viết bằng ngôn ngữ này, nên các chương trình dịch đặc biệt được sử dụng để dịch chương trình nguồn sang ngôn ngữ máy.

Công việc của tất cả các dịch giả đều dựa trên một trong hai nguyên tắc: diễn giải hoặc biên soạn.

Diễn dịch ngụ ý dịch từng câu lệnh và thực hiện tiếp theo câu lệnh đã dịch của chương trình nguồn. Về vấn đề này, có thể lưu ý hai nhược điểm của phương pháp phiên dịch: thứ nhất, chương trình phiên dịch phải nằm trong bộ nhớ máy tính trong toàn bộ quá trình thực hiện chương trình gốc, tức là chiếm một lượng bộ nhớ nhất định; thứ hai, quá trình dịch cùng một toán tử được lặp lại nhiều lần khi lệnh này phải được thực thi trong chương trình, điều này làm giảm đáng kể hiệu suất của chương trình.

Bất chấp những thiếu sót này, biên dịch viênđã trở nên khá phổ biến vì chúng thuận tiện cho việc phát triển và gỡ lỗi các chương trình nguồn.

Tại biên soạn Quá trình dịch và thực thi được phân tách theo thời gian: đầu tiên, chương trình nguồn được dịch hoàn toàn sang ngôn ngữ máy (sau đó sự hiện diện của trình dịch trong RAM trở nên không cần thiết), sau đó chương trình đã dịch có thể được thực thi nhiều lần. Do đó, đối với cùng một chương trình, việc dịch bằng phương pháp biên dịch sẽ mang lại hiệu suất cao hơn cho hệ thống máy tính đồng thời giảm lượng RAM cần thiết.

Sự phức tạp lớn trong việc phát triển trình biên dịch so với trình thông dịch từ cùng một ngôn ngữ được giải thích là do việc biên dịch chương trình bao gồm hai hành động: phân tích, tức là xác định tính chính xác của chương trình nguồn theo các quy tắc xây dựng cấu trúc ngôn ngữ của đầu vào. ngôn ngữ và tổng hợp - tạo ra các chương trình tương đương trong mã máy. Việc phát sóng bằng phương pháp biên dịch yêu cầu phải "xem" nhiều lần chương trình phát sóng, tức là. biên dịch-biên dịch là nhiều lượt: ở lượt đầu tiên, họ kiểm tra tính đúng đắn về cú pháp của các cấu trúc ngôn ngữ của các toán tử riêng lẻ độc lập với nhau, ở lượt tiếp theo, tính đúng đắn của các mối quan hệ cú pháp giữa các toán tử, v.v.

Chương trình thu được nhờ dịch thuật bằng phương pháp biên dịch được gọi là mô-đun đối tượng, là một chương trình tương đương trong mã máy, nhưng không bị “gắn” với các địa chỉ RAM cụ thể. Do đó, trước khi thực thi, mô-đun đối tượng phải được xử lý bằng chương trình hệ điều hành đặc biệt (Trình soạn thảo liên kết) và chuyển đổi thành tải mô-đun.

Cùng với các trình biên dịch-thông dịch và trình biên dịch-biên dịch đã thảo luận ở trên, trình biên dịch cũng được sử dụng trong thực tế. trình thông dịch-biên dịch, kết hợp ưu điểm của cả hai nguyên tắc dịch: ở giai đoạn phát triển và gỡ lỗi chương trình, trình dịch hoạt động ở chế độ trình thông dịch và sau khi hoàn thành quá trình gỡ lỗi, chương trình nguồn được dịch lại thành mô-đun đối tượng (tức là sử dụng phương pháp biên dịch ). Điều này cho phép bạn đơn giản hóa và tăng tốc đáng kể quá trình soạn thảo và gỡ lỗi chương trình, đồng thời bằng cách lấy mô-đun đối tượng sau đó, đảm bảo thực thi chương trình hiệu quả hơn.

Lập trình thủ tục cổ điển yêu cầu người lập trình cung cấp mô tả chi tiết về cách giải quyết vấn đề, nghĩa là xây dựng thuật toán và ký hiệu đặc biệt của nó. Trong trường hợp này, các thuộc tính dự kiến ​​​​của kết quả thường không được chỉ định. Khái niệm cơ bản về ngôn ngữ của các nhóm này là toán tử và dữ liệu.
Trong cách tiếp cận thủ tục, các toán tử được kết hợp thành các nhóm - thủ tục. Lập trình có cấu trúc nói chung không đi xa hơn hướng này; nó chỉ nắm bắt thêm một số kỹ thuật hữu ích;
các công nghệ lập trình.

Một hướng khác về cơ bản trong lập trình gắn liền với các phương pháp luận (đôi khi được gọi là “mô hình”) của lập trình phi thủ tục. Chúng bao gồm lập trình hướng đối tượng và khai báo. Ngôn ngữ hướng đối tượng tạo ra một môi trường dưới dạng nhiều đối tượng độc lập. Mỗi đối tượng hoạt động giống như một máy tính riêng biệt; chúng có thể được sử dụng để giải quyết vấn đề dưới dạng “hộp đen” mà không cần đi sâu vào cơ chế hoạt động bên trong của chúng. Trong số các ngôn ngữ lập trình đối tượng phổ biến trong giới chuyên môn, C++ nên được nhắc đến đầu tiên; đối với nhiều lập trình viên hơn, các môi trường như Delphi và Visual Basic được ưu tiên hơn.



Khi sử dụng ngôn ngữ khai báo, lập trình viên chỉ định cấu trúc thông tin ban đầu, mối quan hệ giữa chúng và những thuộc tính mà kết quả cần có. Đồng thời, lập trình viên không xây dựng quy trình để lấy nó (“thuật toán”) (ít nhất là lý tưởng). Những ngôn ngữ này không có khái niệm “toán tử” (“lệnh”). Ngôn ngữ khai báo có thể được chia thành hai họ - logic (đại diện điển hình là Prolog) và chức năng (Lisp).

Hãy để chúng tôi mô tả các ngôn ngữ lập trình nổi tiếng nhất.

1.Fortran(Hệ thống DỊCH CÔNG THỨC – hệ thống dịch công thức); ngôn ngữ lâu đời nhất vẫn được sử dụng tích cực để giải các bài toán định hướng toán học. Nó là một ngôn ngữ cổ điển để lập trình máy tính về các vấn đề toán học và kỹ thuật.

2.NỀN TẢNG(Mã hướng dẫn ký hiệu đa năng dành cho người mới bắt đầu - một mã hướng dẫn ký hiệu phổ quát dành cho người mới bắt đầu); mặc dù có nhiều thiếu sót và có rất nhiều phiên bản tương thích kém nhưng nó được sử dụng rộng rãi nhất xét về số lượng người dùng.

3.ALGOL(Ngôn ngữ thuật toán - ngôn ngữ thuật toán); đóng một vai trò lớn trong lý thuyết, nhưng hiện nay hầu như không bao giờ được sử dụng trong lập trình thực tế.

4.PL/1(Ngôn ngữ lập trình PL/1 – ngôn ngữ lập trình đầu tiên); ngôn ngữ đa năng; bây giờ hầu như không bao giờ được sử dụng.

5.Pascal(Pascal – được đặt theo tên nhà khoa học Blaise Pascal); cực kỳ phổ biến cả khi học lập trình và trong giới chuyên gia. Được tạo ra vào đầu những năm 70 bởi nhà khoa học Thụy Sĩ Niklaus Wirth. Ngôn ngữ Pascal ban đầu được phát triển như một ngôn ngữ giáo dục và thực sự, hiện nay nó là một trong những ngôn ngữ chính để giảng dạy lập trình trong các trường phổ thông và đại học. Tuy nhiên, chất lượng tổng thể của nó hóa ra cao đến mức các lập trình viên chuyên nghiệp sẵn sàng sử dụng nó. Không kém phần ấn tượng, bao gồm cả thành công về mặt tài chính, Philip Kahn, người Pháp đã phát triển hệ thống Turbo-Pascal, đã đạt được thành công. Bản chất ý tưởng của ông là kết hợp các giai đoạn xử lý chương trình liên tiếp - biên dịch, chỉnh sửa liên kết, gỡ lỗi và chẩn đoán lỗi - trong một giao diện duy nhất. Các phiên bản Turbo Pascal đã có mặt ở hầu hết các cơ sở giáo dục, trung tâm lập trình và các công ty tư nhân. Một số ngôn ngữ mạnh hơn đã được tạo dựa trên ngôn ngữ Pascal (Modula, Ada, Delphi).

6.COBOL(Ngôn ngữ định hướng kinh doanh phổ thông - ngôn ngữ định hướng kinh doanh nói chung); phần lớn đã không còn được sử dụng. Nó được coi là ngôn ngữ chính để xử lý dữ liệu hàng loạt trong lĩnh vực quản lý
và kinh doanh.

7.ADA;là ngôn ngữ chiến thắng (tháng 5 năm 1979) trong cuộc thi ngôn ngữ toàn cầu của Lầu Năm Góc kể từ năm 1975. Các nhà phát triển là một nhóm các nhà khoa học do Jean Ikhbia đứng đầu. Ngôn ngữ chiến thắng được đặt tên là ADA, để vinh danh Augusta Ada Lovelace. Ngôn ngữ ADA là hậu duệ trực tiếp của ngôn ngữ
Pascal. Ngôn ngữ này dành cho việc tạo và bảo trì lâu dài (dài hạn) các hệ thống phần mềm lớn; nó cho phép xử lý song song, kiểm soát quy trình theo thời gian thực và hơn thế nữa, những điều khó hoặc không thể đạt được khi sử dụng các ngôn ngữ đơn giản hơn.

8.(C – “si”); được sử dụng rộng rãi trong việc tạo ra phần mềm hệ thống. Ông đã để lại dấu ấn lớn cho lập trình hiện đại (phiên bản đầu tiên ra mắt năm 1972) và rất được các nhà phát triển hệ thống phần mềm (bao gồm cả hệ điều hành) ưa chuộng. C kết hợp các tính năng của cả ngôn ngữ cấp cao và ngôn ngữ hướng máy, cho phép lập trình viên truy cập vào tất cả tài nguyên máy mà các ngôn ngữ như BASIC và Pascal không cung cấp.

9.C++(C++); một phần mở rộng hướng đối tượng của ngôn ngữ C được tạo bởi Bjarne Stroustrup vào năm 1980. Nhiều tính năng mạnh mẽ mới giúp tăng đáng kể năng suất của lập trình viên đã được áp dụng trên một tính chất cấp thấp nhất định được kế thừa từ ngôn ngữ C.

10.Delphi(Delphi); ngôn ngữ lập trình “trực quan” hướng đối tượng; cực kỳ phổ biến ở thời điểm hiện tại. Được tạo ra trên cơ sở ngôn ngữ Pascal bởi các chuyên gia Borland, ngôn ngữ Delphi, có sức mạnh và tính linh hoạt của ngôn ngữ C và C++, vượt trội hơn chúng về sự tiện lợi và đơn giản của giao diện khi phát triển các ứng dụng cung cấp khả năng tương tác với cơ sở dữ liệu và hỗ trợ nhiều loại cơ sở dữ liệu khác nhau. các loại công việc trong mạng công ty và Internet.

11.Java(Java); Ngôn ngữ lập trình hướng đối tượng độc lập với nền tảng cực kỳ hiệu quả để tạo các trang web tương tác. Ngôn ngữ này được Sun tạo ra vào đầu những năm 90 dựa trên SI++. Nó được thiết kế để đơn giản hóa việc phát triển các ứng dụng dựa trên C++ bằng cách loại bỏ tất cả các tính năng cấp thấp khỏi nó.

12.nói ngọng(Lisp) là một ngôn ngữ lập trình chức năng. Nó tập trung vào cấu trúc dữ liệu dưới dạng danh sách và cho phép bạn tổ chức xử lý hiệu quả khối lượng lớn thông tin văn bản.

13.Lời mở đầu(Lập trình logic - lập trình logic). Mục đích chính của ngôn ngữ là phát triển các chương trình và hệ thống thông minh. Prolog là ngôn ngữ lập trình được tạo riêng để làm việc với các cơ sở tri thức dựa trên các sự kiện và quy tắc (một trong những yếu tố của hệ thống trí tuệ nhân tạo). Ngôn ngữ thực hiện cơ chế quay lui để thực hiện một chuỗi lý luận ngược, trong đó những suy luận hoặc kết luận nhất định được coi là đúng và sau đó những giả định này được kiểm tra dựa trên cơ sở tri thức chứa các sự kiện và quy tắc suy luận.
Nếu giả định không được xác nhận, thì kết quả trả về sẽ được thực hiện và một giả định mới sẽ được thực hiện. Ngôn ngữ này dựa trên mô hình toán học của lý thuyết tính toán vị từ.

Ngôn ngữ lập trình cho Internet:

1. HTML. Một ngôn ngữ nổi tiếng để chuẩn bị tài liệu. Nó rất đơn giản và chứa các lệnh cơ bản để định dạng văn bản, thêm hình ảnh, đặt phông chữ và màu sắc, sắp xếp các liên kết và bảng.

2. PERL. Nó được thiết kế như một phương tiện để xử lý hiệu quả các tệp văn bản lớn, tạo báo cáo văn bản và quản lý tác vụ.
Perl mạnh hơn đáng kể so với các ngôn ngữ như C. Nó bao gồm nhiều hàm được sử dụng thường xuyên để làm việc với chuỗi, mảng, quản lý bộ xử lý và làm việc với thông tin hệ thống.

3. Tcl/Tk. Ngôn ngữ này tập trung vào việc tự động hóa các quy trình thông thường và bao gồm các lệnh mạnh mẽ. Nó độc lập với hệ thống và vẫn cho phép bạn tạo các chương trình có giao diện đồ họa.

4. VRML.Được tạo ra để tổ chức các giao diện ba chiều ảo trên Internet. Nó cho phép bạn mô tả các cảnh ba chiều, ánh sáng và bóng tối cũng như kết cấu khác nhau ở dạng văn bản.

Việc lựa chọn ngôn ngữ lập trình phụ thuộc vào nhiều yếu tố: mục đích, tính dễ viết chương trình nguồn, hiệu quả của các chương trình đối tượng thu được, v.v. Sự đa dạng của các vấn đề được máy tính giải quyết quyết định sự đa dạng của ngôn ngữ lập trình.

Câu hỏi kiểm soát

1. Hệ thống lập trình là gì và chúng thuộc lớp chương trình nào?

2. Hệ thống lập trình bao gồm những gì?

3. Các chương trình đầu tiên được tạo ra bằng ngôn ngữ lập trình nào?

4. Ngôn ngữ thủ tục được chia thành những ngôn ngữ nào?

5. Mô tả các ngôn ngữ cấp thấp.

6. Ngôn ngữ nào là ngôn ngữ cấp thấp?

7. Ưu điểm của ngôn ngữ cấp thấp.

8. Mô tả các ngôn ngữ cấp cao.

9. Ưu điểm của ngôn ngữ cấp cao.

10. Cho ví dụ về ngôn ngữ bậc cao.

11. Mục đích của người phiên dịch là gì?

12. Trình biên dịch khác với trình thông dịch như thế nào?

13. Nhược điểm của việc phiên dịch (với tư cách là một loại dịch giả).

14. Quá trình biên dịch một chương trình là gì?

15. Những hành động nào được thực hiện trong quá trình biên dịch?

16. Mô-đun tải khác với mô-đun đối tượng như thế nào?

17. Lập trình thủ tục khác với lập trình phi thủ tục như thế nào?

18. Những loại chương trình nào là phi thủ tục?
lập trình?

19. Đặc điểm của ngôn ngữ khai báo.

20. Mô tả ngắn gọn các ngôn ngữ lập trình: Fortran, BASIC, Pascal, Cobol.

21. Mô tả ngắn gọn các ngôn ngữ lập trình: Ada, C, C++, Delphi, Java.

22. Cho ví dụ về ngôn ngữ hướng đối tượng.

23. Ngôn ngữ Lisp thuộc loại ngôn ngữ nào?

24. Prolog thuộc loại ngôn ngữ nào?

Ngôn ngữ lập trình được chia thành 2 lớp:

  1. Máy hoặc hướng máy (mức độ thấp)
  2. Thuật toán (mức cao)

Ngôn ngữ cấp thấp tập trung vào một loại bộ xử lý cụ thể và được viết bằng mã máy (0 hoặc 1). Ngôn ngữ này máy tính có thể hiểu được nhưng con người không thể hiểu được. Ví dụ: ngôn ngữ ASSEMBLY

Ngôn ngữ lập trình cấp cao– viết bằng các từ và cụm từ tiếng Anh. Đó là, một ngôn ngữ như vậy có thể hiểu được đối với một người, nhưng

máy tính không hiểu được. Những ngôn ngữ này cần được dịch sang mã máy. Người dịch được sử dụng cho việc này. Chúng được chia thành:

  1. Trình biên dịch ngay lập tức dịch mã nguồn của chương trình thành mã máy. Sau đó, một tệp bó (.exe hoặc .com) được tạo và bản thân chương trình gốc không còn cần thiết nữa.
  2. Thông dịch viên - họ dịch mã nguồn của chương trình từng bước. Và mỗi khi bạn khởi động nó, bạn sẽ truy cập được văn bản nguồn. Rất thuận tiện khi gỡ lỗi chương trình.

Ngoài ra còn có khái niệm “liên kết” của các chương trình, tức là tập hợp các phần tử được biên dịch thành một mô-đun chương trình duy nhất.

Các giai đoạn của mô hình máy tính:

  1. Phát biểu bài toán và định nghĩa đối tượng mô hình hóa
  2. Phát triển mô hình khái niệm, xác định các yếu tố chính và mối quan hệ của chúng
  3. Chính thức hóa và chuyển đổi sang mô hình
  4. Xây dựng thuật toán và viết chương trình
  5. Lập kế hoạch và tiến hành thí nghiệm trên máy tính
  6. Phân tích và giải thích kết quả

Mảngđề cập đến các loại dữ liệu tổng hợp. Một phần tử mảng được truy cập bằng tên mảng và số phần tử. Các phần tử của mảng trong bộ nhớ máy tính được sắp xếp theo chỉ số tăng dần.

Thuộc tính biến trong ngôn ngữ lập trình: tên, địa chỉ, giá trị và loại

Tiêu chuẩn chất lượng Hệ thống phần mềm: độ tin cậy, tính chính xác, tính dễ hiểu, tính linh hoạt, hiệu quả

Ngôn ngữ lập trình :

Perl - ngôn ngữ kịch bản

Ngôn ngữ lập trình thủ tục thiếu kiểu dữ liệu phức tạp

Máy ảo Java - Phiên dịch

Prolog là ngôn ngữ lập trình logic có chức năng thông dịch

JavaSCRIPT – ngôn ngữ kịch bản

SQL là ngôn ngữ thao tác dữ liệu được sử dụng để truy xuất, chèn và xóa thông tin trong cơ sở dữ liệu quan hệ.

Ngôn ngữ lập trình khai báo bao gồm ngôn ngữ logic

HTML và XML – ngôn ngữ đánh dấu dữ liệu

C là ngôn ngữ được sử dụng để lập trình có cấu trúc

Các thành phần chính của hướng đối tượng lập trình là:

  1. Lớp học
  2. Đối tượng - một thể hiện của một lớp
  3. Một sự kiện xảy ra với một đối tượng
  4. Phương thức được thực thi trên một đối tượng
  5. Tài sản

Các khái niệm cơ bản của lập trình hướng đối tượng là:

  1. Đa hình là việc sử dụng một tên duy nhất để xác định các hành động chung cho một lớp, có nghĩa là khả năng các đối tượng chọn một phương thức nội bộ dựa trên kiểu dữ liệu
  2. Kế thừa là một thuộc tính của OOP có thể được mô hình hóa bằng cách sử dụng sơ đồ phân loại phân loại (phân cấp)
  3. Đóng gói có nghĩa là khả năng bao bọc các thủ tục làm việc với một đối tượng trong một mô-đun riêng biệt

Cơ sở của phương pháp lập trình có cấu trúc là: (lập trình từ trên xuống)

Nói cách khác, đây là lập trình không có “GoTo”

  1. Sử dụng sự kết hợp của ba phần tử cơ bản: phân nhánh, cấu trúc tuyến tính và vòng lặp
  2. Sử dụng chương trình con

sử dụng chương trình con không cần phải đạt được số lượng người vận hành tối thiểu. Việc truyền dữ liệu đầu vào khi gọi chương trình con xảy ra bằng cách sử dụng các tham số. Các tham số được chỉ định tại thời điểm gọi chương trình con từ chương trình chính được gọi là thật sự.

Các ngôn ngữ phù hợp nhất để lập trình hệ thống là C, C++ và Assembly.

Trong quá trình dịch thuật, giai đoạn phân tích ngữ nghĩa được sử dụng để kiểm tra các loại biểu thức.

Ở giai đoạn phân tích cú pháp trong quá trình dịch, phát hiện các lỗi như “thiếu dấu chấm phẩy”

Việc đưa máy tính vào mọi lĩnh vực hoạt động của con người đòi hỏi các chuyên gia thuộc nhiều lĩnh vực khác nhau phải thành thạo các kỹ năng sử dụng công nghệ máy tính. Trình độ đào tạo sinh viên đại học ngày càng tăng, những người ngay từ năm đầu tiên đã được làm quen với việc sử dụng máy tính và các phương pháp số đơn giản, chưa kể đến việc khi hoàn thành các khóa học và đồ án cấp bằng, việc sử dụng công nghệ máy tính đang trở thành tiêu chuẩn trong đại đa số các trường đại học.

Công nghệ máy tính hiện nay không chỉ được sử dụng trong tính toán kỹ thuật và khoa học kinh tế mà còn trong các chuyên ngành truyền thống phi toán học như y học, ngôn ngữ học và tâm lý học. Về vấn đề này, có thể nói rằng việc sử dụng máy tính đã trở nên phổ biến. Một nhóm lớn các chuyên gia đã xuất hiện - những người dùng máy tính cần kiến ​​thức về cách sử dụng máy tính trong ngành của họ - kỹ năng làm việc với phần mềm hiện có cũng như tạo ra phần mềm của riêng họ được điều chỉnh để giải quyết một vấn đề cụ thể. Và ở đây các mô tả về ngôn ngữ lập trình sẽ hỗ trợ người dùng.

2. Ngôn ngữ lập trình là gì

Ngôn ngữ lập trình- một hệ thống ký hiệu chính thức được thiết kế để mô tả các thuật toán ở dạng thuận tiện cho người thực hiện (ví dụ: máy tính). Ngôn ngữ lập trình xác định một tập hợp các quy tắc từ vựng, cú pháp và ngữ nghĩa được sử dụng để soạn thảo một chương trình máy tính. Nó cho phép lập trình viên xác định chính xác những sự kiện nào máy tính sẽ phản ứng, cách dữ liệu sẽ được lưu trữ và truyền đi cũng như những hành động nào sẽ được thực hiện trên máy tính trong các trường hợp khác nhau.

Kể từ khi tạo ra những cỗ máy lập trình đầu tiên, nhân loại đã nghĩ ra hơn hai nghìn rưỡi ngôn ngữ lập trình. Mỗi năm số lượng của họ được bổ sung thêm những cái mới. Một số ngôn ngữ chỉ được sử dụng bởi một số ít nhà phát triển của riêng họ, trong khi những ngôn ngữ khác được hàng triệu người biết đến. Các lập trình viên chuyên nghiệp đôi khi sử dụng hơn chục ngôn ngữ lập trình khác nhau trong công việc của mình.

Người sáng tạo ngôn ngữ diễn giải khái niệm này theo cách khác ngôn ngữ lập trình. Trong số những điểm chung được hầu hết các nhà phát triển công nhận là:

· Chức năng: Ngôn ngữ lập trình được dùng để viết các chương trình máy tính được sử dụng để truyền hướng dẫn đến máy tính nhằm thực hiện một quy trình tính toán cụ thể và tổ chức điều khiển các thiết bị riêng lẻ.

· Nhiệm vụ: Ngôn ngữ lập trình khác với ngôn ngữ tự nhiên ở chỗ nó được thiết kế để truyền lệnh và dữ liệu từ người sang máy tính, trong khi ngôn ngữ tự nhiên chỉ được sử dụng để con người giao tiếp với nhau. Về nguyên tắc, chúng ta có thể khái quát định nghĩa về “ngôn ngữ lập trình” - đây là cách truyền tải mệnh lệnh, mệnh lệnh, hướng dẫn hành động rõ ràng; trong khi ngôn ngữ của con người cũng dùng để trao đổi thông tin.

· Chấp hành: Ngôn ngữ lập trình có thể sử dụng các cấu trúc đặc biệt để xác định và thao tác các cấu trúc dữ liệu cũng như kiểm soát quá trình tính toán.

3. Các bước giải một bài toán trên máy tính.

VT đã tìm thấy ứng dụng hiệu quả nhất của mình khi thực hiện các phép tính tốn nhiều công sức trong nghiên cứu khoa học và tính toán kỹ thuật. Khi giải một bài toán trên máy tính, vai trò chính vẫn thuộc về con người. Máy chỉ thực hiện nhiệm vụ của mình theo chương trình đã được lập sẵn. Vai trò của con người và máy móc rất dễ hiểu nếu quá trình giải quyết một vấn đề được chia thành các giai đoạn được liệt kê dưới đây.

Xây dựng vấn đề. Giai đoạn này bao gồm việc hình thành vấn đề (vật lý) có ý nghĩa và xác định các giải pháp cuối cùng.

Xây dựng mô hình toán học. Mô hình phải mô tả chính xác (đầy đủ) các định luật cơ bản của quá trình vật lý. Việc xây dựng hoặc lựa chọn một mô hình toán học từ các mô hình toán học hiện có đòi hỏi sự hiểu biết sâu sắc về bài toán và kiến ​​thức về các ngành toán học liên quan.

Sự phát triển của World Cup. Vì máy tính chỉ có thể thực hiện những thao tác đơn giản nhất nên nó “không hiểu” cách trình bày bài toán, ngay cả trong công thức toán học. Để giải quyết nó, phải tìm ra một phương pháp số có thể đơn giản hóa vấn đề thành một số thuật toán tính toán. Trong mỗi trường hợp cụ thể, cần lựa chọn giải pháp phù hợp từ những giải pháp tiêu chuẩn đã được xây dựng.

Phát triển thuật toán. Quá trình giải một bài toán (quy trình tính toán) được viết dưới dạng một chuỗi các phép toán số học và logic cơ bản dẫn đến kết quả cuối cùng và được gọi là thuật toán giải bài toán.

Lập trình. Thuật toán giải quyết vấn đề được viết bằng ngôn ngữ mà máy có thể hiểu được dưới dạng một chuỗi thao tác được xác định chính xác - một chương trình. Quá trình này thường được thực hiện bằng cách sử dụng một số ngôn ngữ trung gian và việc dịch ngôn ngữ đó được thực hiện bởi chính máy và hệ thống của nó.

Điều chỉnh chương trình. Chương trình được biên dịch có nhiều loại lỗi, lỗi không chính xác và lỗi văn thư. Gỡ lỗi bao gồm giám sát chương trình, chẩn đoán (tìm kiếm và xác định nội dung) lỗi và loại bỏ chúng. Chương trình được kiểm tra bằng cách giải các bài toán kiểm soát (kiểm tra) để có được sự tin cậy về độ tin cậy của kết quả.

Tiến hành tính toán.Ở giai đoạn này, dữ liệu ban đầu để tính toán được chuẩn bị và việc tính toán được thực hiện bằng chương trình được thiết lập tốt. Đồng thời, để giảm bớt lao động thủ công trong việc xử lý kết quả, có thể sử dụng rộng rãi các hình thức đưa ra kết quả thuận tiện dưới dạng văn bản và thông tin đồ họa, dưới dạng dễ hiểu đối với con người.

Phân tích kết quả. Các kết quả tính toán được phân tích cẩn thận và soạn thảo các tài liệu khoa học kỹ thuật.

4. Ngôn ngữ lập trình để làm gì?

Quá trình vận hành máy tính bao gồm việc thực thi một chương trình, tức là một tập hợp các lệnh rất cụ thể theo một thứ tự rất cụ thể. Dạng lệnh máy, bao gồm số 0 và số 1, cho biết chính xác hành động mà bộ xử lý trung tâm sẽ thực hiện. Điều này có nghĩa là để cung cấp cho máy tính một chuỗi hành động mà nó phải thực hiện, bạn cần chỉ định một chuỗi mã nhị phân cho các lệnh tương ứng. Các chương trình mã máy bao gồm hàng nghìn lệnh. Viết những chương trình như vậy là một công việc khó khăn và tẻ nhạt. Người lập trình phải nhớ sự kết hợp giữa số 0 và số 1 trong mã nhị phân của mỗi chương trình, cũng như mã nhị phân của địa chỉ dữ liệu được sử dụng khi thực thi chương trình. Việc viết một chương trình bằng một số ngôn ngữ gần với ngôn ngữ tự nhiên của con người sẽ dễ dàng hơn nhiều và giao phó công việc dịch chương trình này sang mã máy cho máy tính. Đây là cách phát sinh các ngôn ngữ được thiết kế đặc biệt để viết chương trình - ngôn ngữ lập trình.

Có rất nhiều ngôn ngữ lập trình khác nhau có sẵn. Trên thực tế, bạn có thể sử dụng bất kỳ cách nào trong số đó để giải quyết hầu hết các vấn đề. Các lập trình viên có kinh nghiệm biết nên sử dụng ngôn ngữ nào là tốt nhất để giải quyết từng vấn đề cụ thể, vì mỗi ngôn ngữ có khả năng, định hướng riêng cho một số loại vấn đề nhất định và cách mô tả các khái niệm và đối tượng được sử dụng trong giải quyết vấn đề riêng.

Tất cả nhiều ngôn ngữ lập trình có thể được chia thành hai nhóm: ngôn ngữ cấp thấpcác ngôn ngữ bậc cao.

Ngôn ngữ cấp thấp bao gồm các ngôn ngữ hợp ngữ (từ tiếng Anh sangassemble - lắp ráp, lắp ráp). Hợp ngữ sử dụng các lệnh tượng trưng, ​​dễ hiểu và dễ nhớ. Thay vì một chuỗi các mã lệnh nhị phân, các ký hiệu tượng trưng của chúng được viết và thay vì địa chỉ nhị phân của dữ liệu được sử dụng khi thực thi lệnh, tên tượng trưng của dữ liệu này do lập trình viên chọn sẽ được viết. Hợp ngữ đôi khi còn được gọi là mã ghi nhớ hoặc mã tự động.

Hầu hết các lập trình viên đều sử dụng ngôn ngữ cấp cao để viết chương trình. Giống như ngôn ngữ thông thường của con người, ngôn ngữ này có bảng chữ cái riêng - một tập hợp các ký hiệu được sử dụng trong ngôn ngữ đó. Những ký hiệu này được sử dụng để tạo nên cái gọi là từ khóa của ngôn ngữ. Mỗi từ khóa thực hiện chức năng riêng của nó, giống như trong ngôn ngữ quen thuộc của chúng ta, các từ được tạo thành từ các chữ cái trong bảng chữ cái của một ngôn ngữ nhất định có thể thực hiện các chức năng của các phần khác nhau của lời nói. Các từ khóa được liên kết với nhau thành câu theo những quy tắc cú pháp nhất định của ngôn ngữ. Mỗi câu xác định một chuỗi hành động nhất định mà máy tính phải thực hiện.

Ngôn ngữ cấp cao đóng vai trò trung gian giữa con người và máy tính, cho phép con người giao tiếp với máy tính theo cách quen thuộc hơn với con người. Thông thường ngôn ngữ như vậy giúp chọn phương pháp phù hợp để giải quyết vấn đề.

Trước khi viết chương trình bằng ngôn ngữ bậc cao, người lập trình phải viết thuật toán giải quyết một vấn đề, tức là một kế hoạch hành động từng bước cần được hoàn thành để giải quyết vấn đề này. Vì vậy, các ngôn ngữ yêu cầu biên dịch sơ bộ thuật toán thường được gọi là các ngôn ngữ thuật toán.