Khi ai đó viết một ngôn ngữ lập trình mới, họ viết nó vào cái gì?


162

Xin thứ lỗi cho sự thiếu hiểu biết của tôi. Tôi đang say mê PHP và bị ướt chân khi duyệt SO, và cảm thấy bắt buộc phải hỏi một câu hỏi mà tôi đã tự hỏi trong nhiều năm:

Khi bạn viết một ngôn ngữ lập trình hoàn toàn mới, bạn viết nó bằng gì?

Điều này có lẽ nghe có vẻ thực sự ngớ ngẩn đối với tất cả các lập trình viên, những người mà tôi rất kính trọng, nhưng đó là một điều khó hiểu đối với tôi. Bạn làm nghề gì? Nói với chính mình Hôm nay tôi sẽ phát minh ra một ngôn ngữ mới! và sau đó kích hoạt ... Notepad? Có phải tất cả các trình biên dịch được xây dựng trên các ngôn ngữ hiện có trước đây, chẳng hạn như một trong những trình biên dịch có thể lập biểu đồ cho tất cả các ngôn ngữ lập trình từng được phát minh trên một cây phân nhánh khổng lồ mà cuối cùng đã phát hiện ra ... Tôi không biết, có gì cũ không?

Với trí tuệ yếu đuối của mình, tôi thấy điều này thật hấp dẫn ... Làm ơn, hãy giáo dục tôi!

Câu trả lời:


193

Nó không phải là một câu hỏi ngu ngốc. Đó là một câu hỏi tuyệt vời.

Như đã trả lời câu trả lời ngắn gọn là "Ngôn ngữ khác."

Vâng dẫn đến một số câu hỏi thú vị? Điều gì xảy ra nếu đó là ngôn ngữ đầu tiên được viết cho phần cứng cụ thể của bạn? Một vấn đề rất thực tế cho những người làm việc trên các thiết bị nhúng. Như đã trả lời "một ngôn ngữ trên máy tính khác". Trong thực tế, một số thiết bị nhúng sẽ không bao giờ có được trình biên dịch, các chương trình của chúng sẽ luôn được biên dịch trên một máy tính khác.

Nhưng bạn có thể đẩy nó trở lại hơn nữa. Những gì về các chương trình đầu tiên từng được viết?

Vâng, các trình biên dịch đầu tiên cho "ngôn ngữ cấp cao" sẽ được viết bằng thứ gọi là "ngôn ngữ hợp ngữ". Ngôn ngữ hội là ngôn ngữ mà mỗi lệnh trong ngôn ngữ tương ứng với một lệnh duy nhất cho CPU. Ngôn ngữ cấp độ rất thấp và cực kỳ dài dòng và rất tốn công sức để viết.

Nhưng ngay cả việc viết ngôn ngữ lắp ráp cũng yêu cầu một chương trình gọi là trình biên dịch để chuyển đổi ngôn ngữ lắp ráp thành "ngôn ngữ máy". Chúng tôi quay trở lại xa hơn. Các bộ lắp ráp đầu tiên được viết bằng "mã máy". Một chương trình bao gồm hoàn toàn các số nhị phân là sự tương ứng một-một trực tiếp với ngôn ngữ thô của chính máy tính.

Nhưng nó vẫn không kết thúc. Ngay cả một tập tin chỉ có số nguyên trong đó vẫn cần dịch. Bạn vẫn cần lấy các số thô đó trong một tệp vào máy tính.

Dù tin hay không thì những chiếc máy tính đời đầu có một dãy công tắc ở phía trước chúng. Bạn lật các công tắc cho đến khi chúng đại diện cho một số nhị phân, sau đó bạn bật một công tắc khác và đã nạp số đó vào bộ nhớ máy tính. Sau đó, bạn tiếp tục chuyển sang trạng thái bật cho đến khi bạn tải một chương trình máy tính tối thiểu có thể đọc các chương trình từ tệp đĩa hoặc thẻ đục lỗ. Bạn bật một công tắc khác và nó bắt đầu chương trình đang chạy. Khi tôi đến trường đại học vào những năm 80, tôi đã thấy những chiếc máy tính có khả năng đó nhưng không bao giờ được giao công việc tải chương trình với các công tắc.

Và thậm chí sớm hơn các chương trình máy tính đó phải được kết nối cứng với bảng cắm !


20
+1, tôi nghĩ câu trả lời này thực sự phù hợp với tinh thần của câu hỏi.
stderr

30
Tôi đã từng học một lớp Assembler II và prof đã hỏi tại sao chúng tôi chọn môn tự chọn. Tôi đã đi đến câu trả lời hài hước: "bởi vì tôi muốn một A. dễ dàng." Nghĩ rằng tôi đã có câu trả lời tốt nhất nhưng chúng tôi có một nhà máy Honeywell trong thị trấn và anh chàng tiếp theo nói "Tôi viết microcode cả ngày và tôi muốn học một ngôn ngữ cấp cao".
T.Rob

3
Tôi đánh giá cao Mã: Ngôn ngữ ẩn của Phần cứng và Phần mềm Máy tính . Về cơ bản, nó bao gồm các tài liệu giống như câu trả lời này, từ các ống chân không cho đến các trình biên dịch cho các ngôn ngữ cấp cao.
MatrixFrog

Máy tính đã phát triển giống như con người, mặc dù trong một khoảng thời gian tương đối vô cùng.
Gaurav Ojha

Bây giờ đây sẽ là một nhận xét không mang tính xây dựng, nhưng nó phải được viết ... đây là một câu trả lời xuất sắc tuyệt vời trong tất cả các hình dạng, hình thức và thông tin :-)
Lukáš ádek

23

Câu trả lời phổ biến nhất là C. Hầu hết các ngôn ngữ được triển khai trong C hoặc kết hợp C với các cuộc gọi lại và một "từ vựng" như Flex và trình tạo trình phân tích cú pháp như YACC . Đây là những ngôn ngữ được sử dụng cho một mục đích - để mô tả cú pháp của ngôn ngữ khác. Đôi khi, khi nói đến các ngôn ngữ được biên dịch, chúng được triển khai lần đầu tiên trong C. Sau đó, phiên bản đầu tiên của ngôn ngữ được sử dụng để tạo một phiên bản mới, v.v. (Giống như Haskell .)


1
Một số ngôn ngữ được viết bằng trình biên dịch, như picolisp. ( blog.kowalchot.info/article/picoLisp-Arc-b Before-AF.html )
Giáo sư Falken

1
Còn các chương trình lex / yacc (flex / bison) thì sao? Đây có được coi là bổ sung để tạo ngôn ngữ trong C?
Dave

1
Bạn có bất cứ điều gì để chứng minh câu trả lời phổ biến nhất là C?
RichardOD

Tôi bắt đầu lướt qua danh sách ở đây: google.com/Top/Computers/Programming/Lacular/Open_Source Sau đó, tôi vô tình đóng cửa sổ trình soạn thảo của mình ở khoảng ngôn ngữ 10 và mất động lực để đi qua. Dù sao, khoảng một nửa cho đến nay đã được thực hiện trong C và phần còn lại chủ yếu là tự khởi động.
Giáo sư Falken

3
Tôi nghĩ rằng bạn phải đề cập đến Lex / Yacc (hoặc lựa chọn thay thế). Người ta thường không bắt đầu viết một ngôn ngữ bằng C, mà là với một từ vựng và một trình phân tích cú pháp được hỗ trợ bằng mã C.
Steve Rowe

14

Rất nhiều ngôn ngữ được bootstrapping - được viết bằng chính chúng . Về lý do tại sao bạn muốn làm điều này, thường nên ăn thức ăn cho chó của riêng bạn .

Bài viết trên wikipedia tôi đề cập đến để thảo luận về vấn đề gà và trứng . Tôi nghĩ bạn sẽ thấy nó khá thú vị.


5
Điều này là không thể khi bạn mới bắt đầu.
Michael Borgwardt

1
Vâng- rõ ràng. Nhưng rất nhiều ngôn ngữ được viết theo cách này một khi có thể. Tôi muốn chỉ ra điều này như bất kỳ ai khác có, và tôi cảm thấy đó là một điểm quan trọng.
RichardOD

+1 để sử dụng thuật ngữ bootstrap. Điều thú vị là bạn phải biên dịch trình biên dịch của mình hai lần. Lần đầu tiên rõ ràng là với trình biên dịch xương sống bạn có và lần thứ hai với trình biên dịch bạn vừa xây dựng. Giả sử bạn đã thêm tối ưu hóa vào trình biên dịch của mình. Trình biên dịch bạn xây dựng có thể tạo mã với các tối ưu hóa đó, nhưng bản thân nó không chạy mã được tối ưu hóa cho đến khi bạn biên dịch lại với trình biên dịch tối ưu hóa.
Les

@ Les- Có bootstrapping là một khái niệm thú vị.
RichardOD

2
Bình luận ngẫu nhiên ở đây. Câu trả lời cho câu hỏi cũ về người đến trước (gà hay trứng) là gà đến trước. Lý do là để sao chép / sao chép một cái gì đó, trước tiên bạn phải có bộ sao chép / sao chép đã có sẵn để thực hiện sao chép / sao chép.
SpicyWeenie

10

Khá nhiều ngôn ngữ, mặc dù sử dụng một ngôn ngữ phù hợp để làm việc với biểu đồ và các cấu trúc dữ liệu phức tạp khác sẽ giúp mọi việc trở nên dễ dàng hơn. Trình biên dịch sản xuất thường được viết bằng C hoặc C ++ vì lý do hiệu suất, nhưng các ngôn ngữ như OCaml, SML, Prolog và Lisp được cho là tốt hơn để tạo mẫu ngôn ngữ.

Ngoài ra còn có một số "ngôn ngữ nhỏ" được sử dụng trong thiết kế ngôn ngữ. Ví dụ, Lex và yacc được sử dụng để chỉ định cú pháp và ngữ pháp và chúng biên dịch thành C. (Có cổng cho các ngôn ngữ khác, chẳng hạn như ocamllex / ocamlyacc và nhiều công cụ tương tự khác.)

Trong trường hợp đặc biệt, các phương ngữ Lisp mới thường được xây dựng dựa trên các triển khai Lisp hiện có, vì chúng có thể cõng trên hầu hết các cơ sở hạ tầng tương tự. Viết một trình thông dịch Scheme có thể được thực hiện trong Scheme trong một trang mã, tại đó người ta có thể dễ dàng thêm các tính năng mới.

Về cơ bản, trình biên dịch chỉ là các chương trình đọc bằng thứ gì đó và dịch nó sang thứ khác - chuyển đổi nguồn LaTeX sang DVI, chuyển đổi mã C sang lắp ráp và sau đó sang ngôn ngữ máy, chuyển đổi một đặc tả ngữ pháp sang mã C cho trình phân tích cú pháp, v.v. cấu trúc của định dạng nguồn (phân tích cú pháp), ý nghĩa của các cấu trúc đó, cách đơn giản hóa dữ liệu (tối ưu hóa) và loại đầu ra để tạo. Thông dịch viên đọc nguồn và thực hiện nó trực tiếp. (Thông dịch viên thường đơn giản hơn để viết, nhưng chậm hơn nhiều.)


4

Trên thực tế bạn có thể viết bằng hầu hết mọi ngôn ngữ bạn muốn. Không có gì ngăn cản bạn viết trình biên dịch C trong Ruby. "Tất cả" bạn phải làm là phân tích chương trình và phát ra mã máy tương ứng. Nếu bạn có thể đọc / ghi tệp, ngôn ngữ lập trình của bạn có thể sẽ đủ.

Nếu bạn đang bắt đầu từ đầu trên một nền tảng mới, bạn có thể biên dịch chéo: viết trình biên dịch cho nền tảng mới của bạn, chạy bằng Java hoặc tự nhiên trên x86. Phát triển trên PC của bạn và sau đó chuyển chương trình sang nền tảng mục tiêu mới của bạn.

Các trình biên dịch cơ bản nhất có lẽ là Trình biên dịch và C.


Tuy nhiên, ngôn ngữ "bất kỳ" này sẽ hỗ trợ các cuộc gọi đệ quy. Nếu không, việc thực hiện một trình phân tích cú pháp và trình phân tích cú pháp sẽ là một thách thức thực sự.

2
Nếu bạn chọn một ngôn ngữ không phù hợp cho một nhiệm vụ, đó là lỗi của riêng bạn. Điều này có thể xảy ra cho bất kỳ dự án, không chỉ trình biên dịch / phiên dịch.
ziggystar

4

"Viết một ngôn ngữ lập trình mới" về mặt kỹ thuật không liên quan đến bất kỳ mã nào. Nó chỉ đưa ra một đặc điểm kỹ thuật cho ngôn ngữ của bạn trông như thế nào và nó hoạt động như thế nào. Một khi bạn có ý tưởng về ngôn ngữ của bạn như thế nào, bạn có thể viết các dịch giả và thông dịch viên để thực sự làm cho ngôn ngữ của bạn "hoạt động".

Một dịch giả nhập một chương trình bằng một ngôn ngữ và xuất ra một chương trình tương đương bằng ngôn ngữ khác. Một thông dịch viên nhập một chương trình bằng một số ngôn ngữ và chạy nó.

Ví dụ, trình biên dịch C thường dịch mã nguồn C (ngôn ngữ đầu vào) sang chương trình ngôn ngữ lắp ráp (ngôn ngữ đầu ra). Trình biên dịch sau đó lấy chương trình ngôn ngữ lắp ráp và tạo ra ngôn ngữ máy. Khi bạn có đầu ra của mình, bạn không cần người dịch để chạy chương trình của bạn. Vì bây giờ bạn có chương trình ngôn ngữ máy, CPU đóng vai trò là trình thông dịch.

Nhiều ngôn ngữ được thực hiện khác nhau. Ví dụ, javaclà một trình dịch chuyển đổi mã nguồn Java thành mã byte JVM. JVM là một trình thông dịch [1] chạy mã byte Java. Sau khi bạn chạy javacvà nhận mã byte, bạn không cầnjavac nữa. Tuy nhiên, bất cứ khi nào bạn muốn chạy chương trình của mình, bạn sẽ cần JVM.

Thực tế là người dịch không cần phải ở lại để chạy chương trình là điều giúp bạn có thể "bootstrap" ngôn ngữ của bạn mà không cần phải chạy "trên cùng" lớp và lớp của các ngôn ngữ khác.

[1] Hầu hết các JVM thực hiện dịch phía sau hậu trường, nhưng chúng không thực sự là dịch giả trong đó giao diện cho JVM không phải là "ngôn ngữ đầu vào -> ngôn ngữ đầu ra".


3

Nói chung, bạn có thể sử dụng bất cứ ngôn ngữ nào bạn thích. PHP đã được viết bằng C, ví dụ. Nếu bạn không có quyền truy cập vào bất kỳ trình biên dịch nào, bạn sẽ phải dùng đến việc viết ngôn ngữ lắp ráp và biên dịch nó thành mã máy bằng tay.


2
Bạn không phải biên dịch mã máy. theo định nghĩa, nó là ngôn ngữ riêng của CPU.
Stu Thompson

1
Thật. Điều tôi muốn nói là "biên dịch mã máy từ ngôn ngữ lắp ráp hoặc thứ gì đó tương tự bằng tay". Tôi có thể sai, nhưng tôi đoán vài người chỉ cần nhập mã dưới dạng nhị phân / hex ngay lập tức.
Kaivosukeltaja

2

Nhiều ngôn ngữ lần đầu tiên được viết bằng một ngôn ngữ có sẵn khác và sau đó tự thực hiện lại và khởi động theo cách đó (hoặc chỉ giữ việc thực hiện bằng tiếng nước ngoài, như PHP và perl), nhưng một số ngôn ngữ, như trình biên dịch đầu tiên được biên dịch thành mã máy như trình biên dịch C đầu tiên được biên dịch bằng tay để lắp ráp.

Tôi đã quan tâm đến bootstrapping kể từ khi tôi đọc về nó. Để tìm hiểu thêm, tôi đã cố gắng tự mình thực hiện bằng cách viết superset BF của riêng tôi, mà tôi gọi là EBF . phiên bản đầu tiên của EBF có thêm 3 nguyên thủy và tôi đã biên soạn nhị phân đầu tiên. Tôi tìm thấy một nhịp điệu hai bước khi làm như vậy. Tôi đã triển khai một tính năng trong ngôn ngữ hiện tại trong một bản phát hành và có một bản phát hành ngọt ngào nơi tôi viết lại mã để sử dụng tính năng được triển khai. Ngôn ngữ đủ sức biểu cảm để được sử dụng để làm phiên dịch LISP .

Tôi có phiên bản được biên dịch bằng tay cùng với nguồn trong thẻ phát hành đầu tiên và mã khá nhỏ. Phiên bản cuối cùng có kích thước và mã lớn hơn 12 lần và cho phép mã nhỏ gọn hơn nên việc biên dịch bằng tay phiên bản hiện tại sẽ khó có thể lấy đúng.

Edmund Grimley Evans đã làm một cái gì đó tương tự với ngôn ngữ HEX của mình

Một trong những điều thú vị khi tự làm việc này là bạn hiểu tại sao một số thứ lại như vậy. Mã của tôi là sản phẩm nếu điều chỉnh gia tăng nhỏ, nó trông giống như nó đã phát triển hơn là được thiết kế từ đầu. Tôi ghi nhớ điều đó khi đọc mã ngày hôm nay mà tôi nghĩ có vẻ hơi sai.


1

Thông thường với ngôn ngữ lập trình đa mục đích phù hợp để phát triển hệ thống, ví dụ C, Haskell, ML, Lisp, v.v., nhưng danh sách các tùy chọn còn dài. Ngoài ra, thông thường với một số ngôn ngữ dành riêng cho miền để triển khai ngôn ngữ, ví dụ như trình phân tích cú pháp và trình phân tích từ vựng, ngôn ngữ trung gian như LLVM , v.v. Và có thể là một số tập lệnh shell, khung kiểm tra và hệ thống cấu hình xây dựng, ví dụ autoconf.


1

Hầu hết các trình biên dịch là wriiten C hoặc ac like chương trình nếu không c thì lắp ráp lang là cách để đi Tuy nhiên khi viết một lang mới từ đầu và bạn không có macro lib hoặc mã nguồn từ ngôn ngữ nguyên mẫu, bạn phải xác định các chức năng của riêng mình Bây giờ trong ngôn ngữ gì? Bạn chỉ có thể viết Biểu mẫu "mã nguồn được gọi là psedocode cho máy, nó trông giống như một ngữ pháp bnf từ đối tượng lang có cấu trúc hướng đối tượng như Fortran cơ bản algo lisp. Vì vậy, hình ảnh viết mã chéo giống với bất kỳ cú pháp ngôn ngữ nào


1
Tôi không tin mã psedo được cho là có thể đọc được bằng máy
Richard Tingle

0

Thậm chí các thao tác nhị phân hoặc lắp ráp tiếp theo phải được dịch thành các hàm, đó là công việc của trình biên dịch / trình biên dịch, sau đó thành đối tượng, từ dữ liệu và hàm, nếu bạn không có tệp nguồn để xem "cách các chức năng của các đối tượng này được thể hiện trong Thực hiện ngôn ngữ, sau đó bạn phải nhận ra "thấy" thực hiện hoặc xác định các chức năng, quy trình và cấu trúc dữ liệu của riêng bạn, điều này đòi hỏi nhiều kiến ​​thức, bạn cần tự hỏi đâu là chức năng. Tâm trí của bạn sau đó trở thành mô phỏng ngôn ngữ. Điều này tách biệt một lập trình viên Master từ phần còn lại.


0

Tôi cũng đã có câu hỏi này vài tháng trước. Và tôi đã đọc một vài bài báo và xem một số video giúp tôi bắt đầu viết ngôn ngữ của riêng mình được gọi là mềm mại. Nó chưa hoàn thành nhưng tôi đã học được rất nhiều thứ từ cuộc hành trình này.

Những điều cơ bản bạn nên biết là trình biên dịch hoạt động như thế nào khi nó phải thực thi một đoạn mã. Trình biên dịch có rất nhiều giai đoạn như phân tích từ vựng, phân tích ngữ nghĩa, AST (Cây cú pháp trừu tượng), v.v.

Những gì tôi đã làm trong ngôn ngữ mới của tôi có thể được tìm thấy ở đây - http://www.singhajit.com/writer-a-new-programming-lingu/

Nếu bạn đang viết một ngôn ngữ lần đầu tiên thì tất cả là tốt nhất và bạn còn một chặng đường dài để đi.


0

Ngôn ngữ lập trình nói chung là gì?

ngôn ngữ lập trình chỉ là một cách để nói chuyện với máy tính. nói đại khái lúc đầu vì máy tính chỉ có thể hiểu số không và số không (do thực tế là máy tính được tạo ra từ các bóng bán dẫn là công tắc chỉ có hai trạng thái, chúng tôi gọi hai trạng thái này là 0 và 1) và làm việc với 0,1 là khó Chúng ta là con người nên các nhà khoa học máy tính quyết định thực hiện ánh xạ một-một từ mọi hướng dẫn trong hệ nhị phân (0,1) sang dạng dễ đọc hơn mà họ gọi là ngôn ngữ lắp ráp.

ví dụ: nếu chúng tôi có một hướng dẫn như:

11001101

trong lắp ráp nó sẽ được gọi là:

LOAD_A 15

có nghĩa là tải nội dung đăng ký a vào vị trí bộ nhớ 15. như tôi đã nói đó chỉ là quy ước như chọn 0 và 1 cho hai trạng thái của bóng bán dẫn hoặc bất cứ thứ gì khác trong máy tính. Theo cách này, có một chương trình với 50 hướng dẫn, nhớ ngôn ngữ lắp ráp sẽ dễ dàng hơn. vì vậy người dùng sẽ viết mã lắp ráp và một số chương trình (trình biên dịch trong trường hợp này) sẽ dịch mã sang hướng dẫn nhị phân hoặc ngôn ngữ máy khi họ gọi nó.

nhưng sau đó với các máy tính được cải thiện mỗi ngày, có chỗ cho các chương trình phức tạp hơn với nhiều hướng dẫn hơn, giả sử 10000.

trong trường hợp này, một ánh xạ một-một như lắp ráp sẽ không hoạt động, vì vậy các ngôn ngữ lập trình cấp cao khác đã được tạo. họ nói ví dụ nếu liên quan đến các thiết bị I / O để in thứ gì đó trên màn hình do người dùng tạo ra có khoảng 80 hướng dẫn, chúng ta hãy làm gì đó ở đây và chúng ta có thể gói tất cả mã này vào một thư viện và gọi nó là printf và cũng tạo một chương trình khác có thể dịch printf này ở đây sang mã lắp ráp có liên quan và từ đó lắp ráp sẽ làm phần còn lại. vì vậy họ gọi nó là trình biên dịch.

Vì vậy, bây giờ mọi người dùng muốn in một cái gì đó trên màn hình, anh ta sẽ không phải viết tất cả các hướng dẫn ở dạng nhị phân hoặc lắp ráp, anh ta chỉ cần gõ printf ("cái gì đó") và tất cả các chương trình như trình biên dịch và trình biên dịch sẽ làm phần còn lại. bây giờ các mã dài hơn khác sẽ được đóng gói theo cùng một cách để tạo điều kiện thuận lợi cho công việc của người khác khi bạn thấy rằng bạn có thể đơn giản hóa hàng ngàn dòng mã thành một mã trong python và đóng gói để sử dụng cho người khác.

vì vậy hãy nói rằng bạn đã đóng gói rất nhiều mã khác nhau trong python và tạo ra một mô-đun (libray, gói hoặc bất cứ thứ gì bạn muốn gọi nó) và bạn gọi mô-đun đó là mgh (chỉ tên của tôi). bây giờ hãy nói rằng chúng tôi đã tạo ra mgh này bằng cách nào đó mà bất kỳ ai nói:

import mgh
mgh.connect(ip,port.data)...

có thể dễ dàng kết nối với một máy chủ từ xa với số ip và số cổng được chỉ định và gửi dữ liệu sau đó (hoặc một cái gì đó tương tự). bây giờ mọi người có thể thực hiện tất cả bằng một dòng duy nhất, nhưng điều xảy ra là rất nhiều mã đang được thực thi đã được lấy từ tệp mgh. và đóng gói nó không phải để tăng tốc quá trình thực hiện mà là tạo điều kiện cho các lập trình viên khác làm việc. Vì vậy, ở đây nếu ai đó muốn sử dụng mã của bạn trước tiên, anh ta nên nhập tệp và sau đó trình thông dịch python sẽ nhận ra tất cả mã trong đó và để nó có thể diễn giải mã.

Bây giờ nếu bạn muốn tạo một ngôn ngữ lập trình và bạn muốn thực thi nó, trước tiên nó cần một bản dịch, ví dụ giả sử bạn tạo một chương trình có thể hiểu cú pháp và chuyển đổi nó thành c, trong trường hợp này sau khi nó được dịch đến c, phần còn lại sẽ được chăm sóc bởi trình biên dịch c, sau đó trình biên dịch, trình liên kết, .... mặc dù bạn sẽ phải trả giá chậm hơn vì nó phải được chuyển đổi thành c trước.

bây giờ một điều khác mà bạn có thể làm là tạo một chương trình có thể dịch tất cả mã sang ngôn ngữ lắp ráp tương đương giống như những gì xảy ra với c nhưng trong trường hợp này, chương trình có thể thực hiện trực tiếp và từ đó phần còn lại sẽ được thực hiện bởi liên kết. chúng tôi biết rằng chương trình này được gọi là trình biên dịch.

Vì vậy, điều tôi đang nói là, mã duy nhất mà hệ thống hiểu là 0,1, vì vậy bằng cách nào đó bạn nên chuyển đổi cú pháp của mình sang đó, bây giờ trong các hệ điều hành của chúng tôi có rất nhiều chương trình khác nhau như trình biên dịch, trình liên kết và ... có được tạo để nói với bạn rằng nếu bạn có thể chuyển đổi mã của mình thành hội đồng thì họ có thể xử lý phần còn lại hoặc như tôi đã nói, bạn thậm chí có thể sử dụng các trình biên dịch ngôn ngữ lập trình khác bằng cách chuyển đổi mã của mình sang ngôn ngữ đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.