✨Trình biên dịch

Trình biên dịch

phải|Biểu đồ hoạt động của một trình biên dịch lý tưởng.

Trình biên dịch () hay phần mềm biên dịch là một chương trình máy tính làm công việc dịch một chuỗi các câu lệnh được viết bằng một ngôn ngữ lập trình (gọi là ngôn ngữ nguồn hay mã nguồn), thành một chương trình tương đương nhưng ở dưới dạng một ngôn ngữ máy tính mới (gọi là ngôn ngữ đích) và thường là ngôn ngữ ở cấp thấp hơn, như ngôn ngữ máy. Chương trình mới được dịch này gọi mã đối tượng.

Dẫn nhập

Hầu hết các trình biên dịch sẽ chuyển dịch mã nguồn viết trong một ngôn ngữ cấp cao thành mã đối tượng hay ngôn ngữ máy mà có thể được thi hành trực tiếp bởi một máy tính hay bởi một máy ảo. Dù vậy, việc chuyển dịch từ một ngôn ngữ cấp thấp sang một ngôn ngữ cấp cao hơn cũng có thể xảy ra; quá trình này thường được hiểu như là bộ biên dịch ngược nếu nó có thể tái tạo lại một chương trình trong ngôn ngữ cấp cao. Cũng tồn tại các trình biên dịch chuyển đổi từ ngôn ngữ cao này sang ngôn ngữ cao khác, hay là chuyển đổi sang một ngôn ngữ mà nó cần để tiếp tục xử lý về sau; những trình biên dịch như vậy được biết như là bộ biên dịch phân tầng.

Các loại trình biên dịch cho kết quả là mã đối tượng thì một cách cơ bản bao gồm mã máy tăng cường thêm các thông tin về tên vị trí của các ngõ vào và các gọi ngoài (đến các hàm mà không có sẵn bên trong của nó). Một tập hợp của các tập tin đối tượng, mà không hẳn được cung cấp từ cùng một trình biên dịch, thì vẫn có thể được liên kết với nhau để tạo nên các chương trình khả thi cuối cùng cho một người dùng. Dĩ nhiên, để làm được như vậy thì các tập tin đối tượng đó phải được thiết kế chung nhau về dạng thức. Ví dụ của kiểu tập đối tượng này là các tập có đuôi là .obj có thể dùng chung giữa ASM, C/C++, Fortran,... hay các tập tin .DLL trong các kiến trúc Windows dùng chung được cho nhiều ngôn ngữ.

Lịch sử

Nhiều trình biên dịch thử nghiệm đã được phát triển từ thập niên 1950. Tuy vậy chỉ có nhóm làm việc với FORTRAN dẫn đầu bởi John Backus ở IBM thành công trong việc giới thiệu trình biên dịch hoàn bị đầu tiên trong năm 1957. COBOL là một ngôn ngữ sớm có được trình biên dịch trên nhiều loại kiến trúc trong năm 1960.

Ý kiến về sự biên dịch được nhiều người chú ý và hầu hết các nguyên lý của thiết kế trình biên dịch đã được phát triển từ suốt thập niên 1960.

Một trình biên dịch tự nó là một chương trình máy tính được viết từ vài ngôn ngữ thực thi. Ban đầu các trình biên dịch đều viết trong ngôn ngữ ASM (tức là Assembler).

Trình biên dịch tự lập là trình biên dịch có khả năng được biên dịch và được tạo ra từ mã nguồn trong ngôn ngữ cấp cao bởi chính nó. Trình biên dịch tự lập đầu tiên đã được dùng cho Lisp bởi Hart và Levin ở MIT trong năm 1962.

Việc sử dụng ngôn ngữ cấp cao để tạo ra các trình biên dịch bắt đầu ra đời vào đầu thập niên 1970 khi mà trình biên dịch Pascal và C đã được tạo nên từ chính ngôn ngữ của chúng. Xây dựng một trình biên dịch tự lập là một vấn đề về bẫy khởi động. Nghĩa là, phiên bản đầu tiên của trình biên dịch tự lập này cho một ngôn ngữ phải được biên dịch từ một trình biên dịch mà được viết trong một ngôn ngữ khác hay là, bắt chước theo cách của Hart va Levin trong trình biên dịch Lisp, biên dịch bằng cách thi hành trình biên dịch này trong một phần mềm thông dịch.

Trong suốt thập niên 1980 và thập niên 1990 hàng loạt các trình biên dịch miễn phí và các công cụ phát triển trình biên dịch đã được tạo ra cho mọi loại ngôn ngữ. Cả hai như là một phần của đề án GNU và của những khởi xướng về nguồn mở khác. Một số trong chúng được xem là có chất lượng cao và nguồn mở tạo nên hứng khởi cho bất kì ai quan tâm trong các nguyên lý về trình biên dịch hiện đại.

Các kiểu trình biên dịch

Trình biên dịch cùng bản và trình biên dịch chéo bản

Tất cả các trình biên dịch đều hoặc là biên dịch cùng bản hoặc là biên dịch chéo bản.

Một trình biên dịch có thể sản xuất ra mã chủ định để chạy trên cùng một kiểu máy tính và một kiểu hệ điều hành như là chạy trên máy mà trình biên dịch tự nó tiến hành được gọi là một trình biên dịch cùng bản.

Một loại khác, trình biên dịch có thể sản xuất ra mã mà được thiết kế để chạy trên các kiểu máy tính khác hay hệ điều hành khác. Trường hợp này gọi là trình biên dịch chéo bản. Các trình biên dịch chéo bản thì rất có ích khi gặp một hệ thống phần cứng mới trong lần đầu tiên. Trình biên dịch chéo bản cũng rất cần khi việc phát triển phần mềm cho các hệ thống vi điều khiển, mà chúng chỉ có vừa đủ kho lưu trữ cho mã máy cuối, không đủ để tải trình biên dịch. (như trường hợp dịch chương trình để chạy trên các palmtop và các điện thoại di động chẳng hạn).

Số bước chuyển dịch

Tất cả các trình biên dịch thì có thể là một bước hay nhiều bước

  • Trình biên dịch một bước: Với loại này, sự chuyển dịch hoàn tất trong một bước và do đó rất nhanh. ::Ví dụ của các trình biên dịch trước đây cho Pascal hay Borland C là trình biên dịch một bước.

Các trình biên dịch cần nhiều hơn một bước để hoàn tất gọi là trình biên dịch nhiều bước. Các kiểu trình biên dịch nhiều bước bao gồm: : Trình biên dịch nguồn sang nguồn là loại trình biên dịch nhận vào mã nguồn là một ngôn ngữ cấp cao và chuyển dịch thành một ngôn ngữ cấp cao khác. :::Ví dụ: Một trình biên dịch tự động song song hoá sẽ thường xuyên lấy chương trình trong ngôn ngữ cấp cao ở ngõ vào và chuyển dạng mã nguồn và chú giải nó với các chú giải mã song song (như OpenMP hay cấu trúc ngôn ngữ (như các câu lệnh DOALL của Fortran)). : Trình biên dịch phân đoạn biên dịch sang ngôn ngữ ASM của một máy lý thuyết như là vài tiến hành của Prolog. Loại máy Prolog này còn được gọi là máy trừu tượng Warren (hay WAM). :::Ví dụ: Các trình biên dịch bytecode cho Java, Python và nhiều trình biên dịch khác nữa là một kiểu con của kiểu này. : Trình biên dịch động hay còn gọi là trình biên dịch JIT sẽ chuyển dịch các ứng dụng sang bytecode, sau đó, bytecode sẽ được dịch sang mã của ngôn ngữ máy tương thích trước khi thi hành. :::Ví dụ: Trình biên dịch JIT được dùng bởi Smalltalk, Java, cũng như dùng bởi Ngôn ngữ trung gian thông dụng của Microsoft.NET.

Các đặc tính khác

Đặc biệt, một trình biên dịch có thể có thêm các chức năng sau đây:

  • Trình biên dịch mã liên kết là loại trình biên dịch cho phép thay thế các dòng ký tự trong (mã) nguồn bằng các khối mã nhị phân sẵn có. Các khối mã nhị phân này có thể có nhiều cấp độ khác nhau. ::Ví dụ: các trình biên dịch trong hầu hết các kiến trúc của FORTH. Trong thực tế, một vài trình biên dịch FORTH có thể dịch các chương trình mà không cần đến hệ điều hành.
  • Trình biên dịch tăng tiến. Trong trình biên dịch tăng tiến, các hàm riêng lẻ có thể được dịch trong thời gian thi hành (runtime) mà các hàm này cũng bao gồm các chức năng thông dịch. ::Ví dụ: Kiến trúc dịch tăng tiến xuất hiện từ 1962 và vẫn còn được sử dụng trong các hệ thống Lisp.
  • Trình biên dịch đa năng là trình biên dịch có thể được điều chỉnh để tạo ra mã cho các kiến trúc CPU khác nhau một cách tương đối dễ dàng. Mã đối tượng làm ra bởi các trình biên dịch này thường có chất lượng kém hơn là các mã được tạo ra từ các trình biên dịch chỉ chuyên dùng cho đúng loại CPU. Trình biên dịch đa năng thường cũng là trình biên dịch chéo bản. ::Ví dụ: GCC là một loại trình biên dịch đa năng miễn phí rất phổ biến. : :
  • Trình biên dịch song song hóa là loại trình biên dịch có khả năng chuyển đổi một chương trình vào được viết theo kiểu liên tục sang một dạng thuận tiện trên kiến trúc của máy tính song song.

So sánh với phần mềm thông dịch

Nhiều người còn phân chia các ngôn ngữ lập trình cấp cao thành các ngôn ngữ biên dịch và các ngôn ngữ thông dịch. Mặc dù vậy, rất hiếm khi một ngôn ngữ lại đòi hỏi là loại biên dịch hay loại thông dịch. Các trình biên dịch và các phần mềm thông dịch là các sự thực hiện của các ngôn ngữ chứ không phải bản thân ngôn ngữ.

Việc phân chia này chỉ phản ánh thực trạng phổ biến của sự thực hiện của các ngôn ngữ chẳng hạn như BASIC được nhiều người cho là một ngôn ngữ thông dịch và C thì lại được xem là ngôn ngữ biên dịch nhưng thực tế ra vẩn tồn tại các trình biên dịch cho BASIC và các phần mềm thông dịch cho C.

Thiết kế trình biên dịch

Trong quá khứ, các trình biên dịch thường chia quá trình biên dịch thành nhiều bước để tiết kiệm kho chứa. Mỗi bước trong nghĩa vừa nêu của một trình biên dịch, thông qua mã nguồn của chương trình, là một sự thực thi dẫn tới kết quả trong việc dựng nên một bộ dữ liệu nội tại (chẳng hạn như là sự tham gia của các bảng ký hiệu và các dữ liệu hướng dẫn cho việc chuyển dịch). Khi một bước hoàn tất, thì trình biên dịch có thể xóa các dữ liệu nội tại không cần nữa trong suốt bước đó nhằm tiết kiệm chỗ trống. Như vậy phương pháp nhiều bước là kỹ thuật thông dụng ở thời đó, và nó cũng nhằm giải quyết các khó khăn về khối lượng các bộ nhớ của máy chủ còn nhỏ so với khối lượng mã nguồn và dữ liệu.

Nhiều trình biên dịch hiện đại chia sẻ chung một dạng thiết kế hai mặt. Mặt ngoài chuyển dịch ngôn ngữ nguồn sang một sự biểu trưng trung gian. Mặt thứ nhì là mặt trong, mà trong đó, chủ yếu là sự làm việc với các biểu trưng nội tại (như là các bảng ký hiệu và các dữ liệu cần thiết khác) để làm ra kết quả là mã trong ngôn ngữ đích. Mặt ngoài và mặt trong lại có thể tiến hành trong nhiều bước và có cả trường hợp mặt ngoài gọi mặt trong như là một chương trình con, và chuyển vào đó những biểu trưng trung gian.

Phương thức trên giảm nhẹ sự phức tạp. Mặt ngoài thường lo về các xử lý xung quanh về ý nghĩa ngôn ngữ. Trong khi mặt trong sẽ chú trọng đến việc làm ra các kết quả phải đạt hiệu quả và dúng. Điểm mạnh của phương thức này còn bao gồm việc cho phép dùng chung một mặt trong từ nhiều ngôn ngữ (nguồn) khác nhau và ngược lại là việc cho phép sử dụng các mặt trong khác nhau để phục vụ cho những mụch tiêu khác nhau.

Thường thì các bộ phận tối ưu hóa và các bộ phận kiểm lỗi có thể chia sẻ chung các mặt ngoài và mặt trong nếu chúng được thiết kế để hoạt động trên ngôn ngữ trung gian mà nó được chuyển từ mặt ngoài sang mặt trong. Điều này có thể dẫn đến việc nhiều trình biên dịch (kết hợp của các mặt ngoài và mặt trong) tái sử dụng được một lượng lớn công việc mà thường được tiến hành trong các bộ phận tối ưu hóa và bộ phận kiểm tra lỗi.

Có nhiều ngôn ngữ, dựa vào thiết kế của ngôn ngữ và các quy tắc dùng cho việc khai báo các biến và các đối tượng khác cũng như là dùng cho sự khai báo trước khi sử dụng hay trước khi tham chiếu của các hàm hay thủ tục, có khả năng được dùng trong một bước. ::Ví dụ: Pascal là ngôn ngữ được biết nhiều đến do khả năng này. Ngôn ngữ C cũng có thể dùng trong cách dịch một bước và đạt được ngay các tệp khả thi.

Mặt ngoài của trình biên dịch

Mặt ngoài của trình biên dịch tự nó bao gồm nhiều pha. Các pha theo lý thuyết ngôn ngữ là:

Phân tích từ vựng - Chia nhỏ các dòng mã nguồn thành những phần tử nhỏ gọi là thẻ khóa. Mỗi thẻ khóa đại diện cho một đơn vị không thể chia nhỏ của ngôn ngữ. Ví dụ: một từ khóa, một ký hiệu nhận dạng hay một tên ký hiệu. Các thẻ khoá có thể nhận biết được bởi việc dùng máy hữu hạn trạng thái. Pha này còn gọi là pha đọc từ ngữ hay pha quét.

Phân tích cú pháp - Nhận diện các cấu trúc cú pháp của mã nguồn. Nó chỉ tập trung lên cấu trúc. Nói cách khác, nó nhận diện trật tự sắp xếp của các thẻ khóa và hiểu cấu trúc thứ bậc trong bộ mã.

Phân tích ý nghĩa - dùng để nhận biết ý nghĩa của chương trình (mã nguồn) và bắt đầu chuẩn bị cho ra kết quả. Trong pha này, sự kiểm tra về kiểu được hoàn tất và hầu hết các lỗi dịch được nêu ra.

Biểu trưng trung gian - Đây là một dạng tương đương của chương trình nguyên thủy đã được chuyển thành và gọi là biểu trưng trung gian. Biểu trưng này có thể là một cấu trúc dữ liệu (thường là dạng cây hay dạng biểu đồ hay một dạng ngôn ngữ trung gian.)

Mặt trong của trình biên dịch

Một trình biên dịch hoàn bị sẽ chuyển giao biểu trưng trung gian được làm ra bởi mặt ngoài cho mặt trong. Nhiệm vụ của mặt trong là sản xuất ra chương trình tương đương về chức năng ở ngôn ngữ đích. Việc này bao gồm các giai đoạn:

Phân tích về biên dịch - Quá trình này thu nhặt thông tin về chương trình từ biểu trưng trung gian của các tập tin của nguồn vào. Các phân tích đặc trưng bao gồm phân tích việc sử dụng của định nghĩa biến, phân tích quan hệ giữa các định nghĩa của các biến và việc sử dụng của chúng trong một chuỗi các phép gán giá trị, phân tích sự phụ thuộc của dữ liệu, phân tích các nhãn thay thế, và vân vân. Sự phân tích chính xác là căn bản cho mọi sự tối ưu hóa về biên dịch. Đồ thị gọi và đồ thị dòng điều khiển thường được xây dựng trong pha phân tích này.

Tối ưu hóa về biên dịch - Ngôn ngữ trung gian biểu trưng được chuyển dạng thành các dạng tương đương về chức năng nhưng nhanh hay gọn hơn. Những việc tối ưu hoá thông dụng là mở rộng nội tuyến, triệt tiêu mã chết, phép thế hằng, chuyển dạng vòng lặp, phân phối thanh ghi và ngay cả song song hoá tự động.

Tạo mã - Chuyển dịch ngôn ngữ trung gian sang ngôn ngữ đích, thường tạo mã cho một hệ thống có cùng ngôn ngữ máy. Việc này bao gồm các quyết định về tài nguyên và kho lưu trữ chẳng hạn như là quyết định xem biến nào thì nên đặt vào thanh ghi hay đặt vào kho nhớ, quyết định sự lựa chọn cũng như việc đặt thời biểu của các chỉ thị máy, và theo đó quyết định về các chế độ địa chỉ hoá tương ứng (xem thêm Thuật toán Sethi-Ullman).

👁️ 0 | 🔗 | 💖 | ✨ | 🌍 | ⌚
phải|Biểu đồ hoạt động của một trình biên dịch lý tưởng. **Trình biên dịch** () hay **phần mềm biên dịch** là một chương trình máy tính làm công việc dịch một chuỗi các câu lệnh
**Babel** là một trình biên dịch Javascript mã nguồn mở và miễn phí có chức năng chính dùng để biên dịch ECMAScript thành phiên bản tương thích ngược cho JavaScript có thể chạy trên các
Một "trình biên dịch của trình biên dịch" hay "chương trình sinh trình biên dịch" (tiếng Anh: compiler-compiler) là một công cụ tạo ra bộ phân tích cú pháp, trình thông dịch hoặc trình biên
Trong khoa học máy tính, **trình thông dịch** () là một chương trình máy tính trực tiếp thực thi các lệnh được viết bằng một ngôn ngữ lập trình hay ngôn ngữ kịch bản, mà
**D** là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế
**Bộ trình dịch GNU** ( - thường được viết tắt thành **GCC**) là một tập hợp các trình biên dịch được thiết kế cho nhiều ngôn ngữ lập trình khác nhau. GCC là một thành
**Ngôn ngữ biên dịch** (tiếng Anh: _compiled language_) là ngôn ngữ lập trình có triển khai thường là trình biên dịch (bộ dịch tạo ra mã máy từ mã nguồn), chứ không phải trình thông
**Go** là một ngôn ngữ lập trình mới do Google thiết kế và phát triển. Nó được kỳ vọng sẽ giúp ngành công nghiệp phần mềm khai thác tối đa nền tảng đa lõi của
nhỏ|Ribônuclêôtit thứ 7 trong chuỗi mã hoá là guanin (G) bị mất, dẫn đến khung đọc mã bị lệch, làm thay đổi toàn bộ trình tự amino acid. **Đột biến dịch khung** là đột biến
**Bộ công cụ Biên dịch Google** (Google Translator Toolkit) là một ứng dụng web được thiết kế để hỗ trợ dịch giả chỉnh sửa các văn bản được dịch tự động bởi Google Translate. Sử
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
nhỏ|Cbmain Trong khoa học máy tính, một **ngôn ngữ lập trình bậc cao** (tiếng Anh: _high-level programming language_) là một ngôn ngữ lập trình có sự trừu tượng hóa mạnh mẽ khỏi các chi tiết
**Java** (phiên âm Tiếng Việt: "_Gia-va_") là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ
nhỏ| Chương trình máy tính "Xin chào, thế giới" của [[Brian Kernighan (1978) ]] **Chương trình máy tính** là tập hợp các câu lệnh thực hiện một tác vụ cụ thể khi được máy tính
**Free Pascal Compiler** (**FPC**) là một trình biên dịch cho các ngôn ngữ lập trình có liên quan chặt chẽ, Pascal và Object Pascal. Nó là phần mềm tự do được phát hành theo Giấy
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
**PowerBASIC**, tên cũ: **Turbo Basic**, là một thương hiệu các trình biên dịch của công ty PowerBASIC Inc. chuyên biên dịch một phiên bản của ngôn ngữ lập trình BASIC.Có các phiên bản cho cả
Trong lập trình máy tính, một **triển khai của ngôn ngữ lập trình** là một hệ thống để thực thi chương trình máy tính. Có hai cách tiếp cận chung để triển khai một ngôn
Trong ngành khoa học máy tính, **lập trình hàm** (**lập trình chức năng**) là một mô hình lập trình xem việc tính toán là sự đánh giá các hàm toán học và tránh sử dụng
**C#** (**C Sharp**, đọc là _"xi-sáp"_) là một ngôn ngữ lập trình hướng đối tượng đa năng, mạnh mẽ được phát triển bởi Microsoft, C# là phần khởi đầu cho kế hoạch .NET của họ.
**Turbo C++** là một trình biên dịch C++ và môi trường phát triển tích hợp và ngôn ngữ máy tính đã ngừng hoạt động, do Borland phát triển. Gần đây nhất nó được công ty
**Chrome V8**, hay đơn giản là **V8**, là một JavaScript engine mã nguồn mở phát triển bởi The Chromium Project cho trình duyệt web Google Chrome và Chromium. Người sáng lập dự án là Lars
**Kotlin** là một ngôn ngữ lập trình kiểu tĩnh chạy trên máy ảo Java (JVM) và có thể được biên dịch sang mã nguồn Java hay sử dụng cơ sở hạ tầng trình biên dịch
**Clang** là một front-end trình biên dịch (_compiler front end_) cho các ngôn ngữ lập trình C, C ++, Objective-C , cũng như khung OpenMP, OpenCL, RenderScript và CUDA. Nó sử dụng cơ sở
**Dev-C++** là một môi trường phát triển tích hợp (IDE) đầy đủ tính năng miễn phí được phân phối theo Giấy phép Công cộng GNU để lập trình trong C và C++. Ban đầu nó
thumb|**[[Phép tính lambda** là một hệ thống hình thức để định nghĩa hàm, ứng dụng hàm và đệ quy được Alonzo Church đề xuất vào những năm 193x.]] **Lý thuyết ngôn ngữ lập trình** (thường
**Standard Portable Intermediate Representation** (**SPIR-V**) là ngôn ngữ máy tính trung gian xách tay tiêu chuẩn cho tính toán song song, tính toán thông dụng trên bộ xử lý đồ họa và đồ họa 3D
**Turbo Pascal** là một trình biên dịch và một môi trường phát triển tích hợp (IDE) cho ngôn ngữ Pascal chạy trên nền hệ điều hành MS-DOS và CP/M, được phát triển bởi hãng Borland.
Quá trình phân tích từ vựng trong các giai đoạn xử lý. Trong ngành khoa học máy tính, **phân tích từ vựng** (Tiếng Anh: **lexical analysis**, còn được gọi là _scanning_ hoặc _lexing_) là một
nhỏ Trong lập trình máy tính, **hằng số** (tiếng Anh: _constant_) là một giá trị mà không thể bị thay đổi bởi chương trình trong thời gian thực thi thông thường, ví dụ giá trị
**Trình sinh bộ phân tích cú pháp** (tiếng Anh: _Parser Generator_) là một chương trình lấy dữ liệu nhập là một bộ văn phạm và cho ra kết quả là một bộ phân tích cú
thumb|Dịch địa chỉ mạng giữa mạng riêng và Internet **Biên dịch địa chỉ mạng** ( - **NAT**) trong mạng máy tính là quá trình thay đổi thông tin địa chỉ IP trong gói tin đang
**HipHop for PHP (HPHPc)** là một transpiler PHP tạo ra bởi Facebook. Bằng cách sử dụng HPHPc làm trình biên dịch source-to-source, mã PHP được dịch sang C ++, biên dịch thành một binary và
Trong trình biên dịch GCC (_GNU Compiler Collection_), **GIMPLE** là một mã trung gian của chương trình mà trong đó các biểu thức phức tạp đã được tách ra thành mã địa chỉ ba dùng
Một **biến chưa khai báo** (tiếng Anh: **undefined variable**) trong mã nguồn của một chương trình máy tính là một biến được sử dụng trong mã nguồn nhưng chưa được chương trình khai báo trước
Trong lập trình, **tham số** là biến được thu nhận bởi một chương trình con. Tại thời gian chạy, chương trình con sử dụng các giá trị được gán cho các tham số để thay
**Scala** ( ) là một ngôn ngữ lập trình đa mẫu hình, được thiết kế để tích hợp các tính năng của lập trình hướng đối tượng với lập trình hàm Nó cũng có thể
Trong lập trình hướng đối tượng dựa trên lớp, **hàm tạo** (tiếng Anh: _constructor_, viết tắt: _ctor_) trong một lớp là một kiểu chương trình con đặc biệt được dùng để tạo ra đối tượng.
**Lập trình meta** hay còn gọi là **siêu lập trình** là việc tiến hành một trong hai thao tác (hay cả hai) sau: * Công việc viết một chương trình máy tính mà chương trình
**Romcc** là một trình biên dịch C tạo ra mã chỉ sử dụng các thanh ghi để lưu trữ các biến, thay vì dùng RAM. Nó được thiết kế để bổ trợ cho khởi đầu
Trong ngành khoa học máy tính, **mã địa chỉ ba** - với cái tên chính xác hơn là dạng thức ba địa chỉ (_three address code_) là một biểu thức được trình biên dịch sử
**Dylan** là một ngôn ngữ lập trình đa mẫu hình có hỗ trợ hàm, lập trình hướng đối tượng (OOP), động và phục hồi trong khi cung cấp một mô hình lập trình được thiết
**F** là một ngôn ngữ lập trình số mô đun, biên dịch và số, được thiết kế cho lập trình khoa học và tính toán khoa học. F được phát triển như một phiển bản
**Dart** là một ngôn ngữ lập trình web do Google phát triển. Nó được chính thức công bố tại [http://gotocon.com/aarhus-2011/ Hội thảo GOTO] ngày 10-12 tháng 10 năm 2011 tại Aarhus. Mục đích của Dart
**GNU Pascal** (GPC) là một trình biên dịch Pascal được dùng như một frontend của GCC, giống như cách Fortran và các ngôn ngữ khác được thêm vào GCC. GNU Pascal tương thích với ISO
Cũng như mọi sự trên đời, các ý tưởng đều trải qua tiến trình biến dịch, đổi thay, thích nghi và sửa đổi, để đáp ứng với thực tại mỗi ngày một mới và thích
Cũng như mọi sự trên đời, các ý tưởng đều trải qua tiến trình biến dịch, đổi thay, thích nghi và sửa đổi, để đáp ứng với thực tại mỗi ngày một mới và thích
**Gecko** là một bộ máy trình bày được phát triển bởi Mozilla. Nó được sử dụng trong trình duyệt Firefox, email client Thunderbird và nhiều dự án khác Gecko được thiết kế để hỗ trợ
**Oberon** là một ngôn ngữ lập trình đa năng được xuất bản lần đầu tiên vào năm 1987 bởi Niklaus Wirth và là thành viên mới nhất của gia đình Wirth gồm các ngôn ngữ