Làm thế nào tôi có thể nói rằng ngôn ngữ lập trình biên dịch sang các ngôn ngữ khác?


22

Làm thế nào tôi có thể nói bằng tiếng Anh, ngôn ngữ lập trình có thể được biên dịch sang các ngôn ngữ lập trình khác?

Ví dụ có thể là Haxe . Trên trang web, ngôn ngữ được giải mã là "Đa nền tảng":

Đa nền tảng: Haxe có thể được biên dịch cho tất cả các nền tảng lập trình phổ biến với trình biên dịch nhanh - JavaScript, Flash, NekoVM, PHP, C ++, C # và Java (sớm)

nhưng đa nền tảng có thể bị hiểu nhầm là nền tảng phần cứng hoặc phần mềm (win, mac, linux).

Vậy từ nào phù hợp nhất để mô tả khả năng này là gì?


3
Tôi sẽ loại bỏ "biên dịch" và chỉ cần nói rằng ngôn ngữ lập trình này có thể được chuyển đổi sang ngôn ngữ khác thông qua việc sử dụng một số trình thông dịch.
Neil

6
Bạn có thể sử dụng cùng một từ như bạn làm cho các ngôn ngữ thông thường: dịch, dịch thuật. Rõ ràng, và tôi đã nghe từ được sử dụng theo nghĩa này.
superM

4
@teresko Làm sao vậy? Cách duy nhất tôi có thể thấy bạn lập luận rằng bạn sử dụng một định nghĩa biên dịch quá hạn chế và vô dụng (điều này hạn chế đầu ra đối với mã máy).

18
@Neil: chuyển đổi một chương trình được viết bằng một ngôn ngữ này sang ngôn ngữ khác không phải là giải thích. Trong thực tế, đây là định nghĩa của biên dịch .
Jörg W Mittag

2
@Neil, biên dịch, theo định nghĩa, là một sự chuyển đổi từ ngôn ngữ này sang ngôn ngữ khác. Và "biến đổi" nghe có vẻ tối nghĩa và phức tạp như "biên dịch", miễn là người đọc của bạn không thành thạo trong việc viết lại thuật ngữ và như vậy. Vì vậy, tôi sẽ đề nghị sử dụng từ "nhắm mục tiêu", ví dụ: "Haxe đang nhắm mục tiêu JavaScript, Flash, bất cứ điều gì và như vậy".
SK-logic

Câu trả lời:


41

Thuật ngữ thông thường là "transcompilation" - không phải là một thuật ngữ phổ biến, mà là thuật ngữ chính xác. Nó không chỉ dành cho các ngôn ngữ kịch bản mới hợp thời trang (CoffeeScript -> JavaScript); trình biên dịch C ++ đầu tiên trên thực tế là các trình biên dịch sang C.


2
Cũng "transpiles" như trong "Transpiler transpiles CoffeeScript thành Javascript"

4
Tôi chưa bao giờ nghe thuật ngữ này trước đây, trong lĩnh vực này trong nhiều thập kỷ. Tâm chỉ vào nguồn gốc của nó (một liên kết đến bài báo đầu tiên nơi nó xuất hiện sẽ là tốt nhất)?
SK-logic

Từ Wikipedia : "Trình biên dịch nguồn-nguồn [aka." Transcompiler "," transpiler "] dịch giữa các ngôn ngữ lập trình hoạt động ở cùng mức độ trừu tượng, trong khi trình biên dịch truyền thống dịch từ ngôn ngữ lập trình cấp cao hơn sang ngôn ngữ thấp hơn ngôn ngữ lập trình cấp. "
l0b0

4
@ l0b0, wikipedia không bình luận gì về nguồn gốc của thuật ngữ, và nó chắc chắn là không bao giờ phải là một gốc nguồn.
SK-logic

3
... tìm kiếm "dịch thuật tổng hợp" trên google không mang lại kết quả liên quan nào ...
Bakuriu

27

Xin lỗi gents, nhưng từ này chỉ là "biên dịch" . Nó có nghĩa là biến một loại mã thành một loại mã khác. Không có sự khác biệt thực sự nếu mã đó là tiếng Anh, mã C ++, mã máy x86, mã máy ARM, Java, mã byte hoặc trở lại tiếng Anh. Chúng tôi thường sử dụng nó để có nghĩa là chuyến đi từ ngôn ngữ lập trình đến mã máy, nhưng đó là khía cạnh mà từ này đã đạt được theo thời gian. Và này, nếu đủ người bắt đầu sử dụng một từ không chính xác, thì nó thực sự đạt được ý nghĩa mới đó. Nhưng nếu bạn muốn một từ để biến Haxe thành C ++, thì từ đó là "biên dịch" .

Đa nền tảng: Haxe có thể được biên dịch thành tất cả các ngôn ngữ lập trình phổ biến với trình biên dịch nhanh - JavaScript, Flash, NekoVM, PHP, C ++, C # và Java (sớm)

(Ngoài ra, tôi đang phớt lờ Merriam-Webster, vì họ ngu ngốc vì họ không đồng ý với tôi ... hmmmm)


10

Có lẽ đây là một câu hỏi cho https://english.stackexchange.com/ nhưng tôi sẽ nói rằng quá trình biên dịch bao gồm biên dịch sang ngôn ngữ cấp cao khác và không chỉ giới hạn ở các trình biên dịch biên dịch theo mã máy gốc.

Vì một từ "Biên dịch" hoàn toàn không dành cho trình biên dịch máy tính và khá chung chung. "Biên dịch bảng" hoặc "biên dịch danh sách tên" xuất hiện trong đầu tôi, do đó nó đủ rộng cho nhiều mục đích (bộ xử lý văn bản như latex biên dịch, v.v.). Để cụ thể hơn về mục tiêu của quá trình tổng hợp, tôi sẽ sử dụng trình biên dịch mã nguồn

Bây giờ cho ví dụ cụ thể, tôi nghĩ rằng nền tảng là một từ thích hợp để sử dụng. Vì ngôn ngữ của con người vốn dĩ rất mơ hồ, bạn phải sử dụng sự dư thừa (ví dụ, diễn giải bằng các từ khác, giải thích) để hiểu ý nếu nghi ngờ.

Tôi cũng sẽ đọc câu lệnh "Haxe" theo cách bao gồm các thư viện tiêu chuẩn và những thứ tương tự. Tức là trong trường hợp đó, plattform sẽ là một siêu ngôn ngữ của "ngôn ngữ" và bạn có thể tách nó ra khỏi đó bằng cách gọi nó là "nền tảng phát triển phần mềm", v.v.


4
Tôi nghĩ bạn có nghĩa là tiếng Anh.stackexchange.com?
Suman

3

Bạn có thể nói rằng trình biên dịch có các ngôn ngữ X, Y và Z làm mục tiêu dịch thuật hoặc thiết kế một ngôn ngữ với các mục tiêu đó trong tâm trí.


2

Tôi sẽ nói rằng trình biên dịch theo định nghĩa dịch sang ngôn ngữ lập trình khác nhau (ít nhất đây là định nghĩa tôi biết - chương trình biến đổi một ngôn ngữ này sang ngôn ngữ khác). Ví dụ, hầu hết các trình biên dịch C sản xuất lắp ráp như đầu ra. Trình biên dịch hội đồng lấy đầu ra này và biến nó thành mã nhị phân cũng là ngôn ngữ (chắc chắn - có lẽ không ai viết ghi trong đó trong 40 năm qua hoặc về mặt kỹ thuật, đó là ngôn ngữ) - có thể được lấy và biên dịch lại để nói vi mô ops bởi bộ xử lý (hoặc có một số thao tác được thực hiện bởi trình liên kết trên các tệp đối tượng). Tương tự như vậyjavapbiên dịch thành mã byte. Thông thường ở cuối chuỗi như vậy có trình thông dịch thực thi mã cuối cùng (có thể là CPU, GPU hoặc chương trình thực thi). "Không có gì" như mã máy như x86 hiện đại biên dịch lại các chương trình thành các hoạt động nội bộ (micro-op) và tôi hoàn toàn có khả năng coi mã máy ARM là ngôn ngữ được giải thích trên x86 hoặc ngược lại (trong một số trường hợp thậm chí còn biên dịch lại từ dạng này sang dạng khác).

Haxe là trình biên dịch nguồn-nguồn vì nó không biến đổi ngôn ngữ cấp cao hơn thành cấp thấp hơn như các ví dụ trước. Dường như không giải quyết trực tiếp vấn đề mơ hồ đa nền tảng của bạn, nhưng thật không may, tôi không nghĩ có cách phân biệt thực tế giữa hai điều đó - API là loại ngôn ngữ có thể được giải thích chung, biên dịch lại, v.v.


1

Điều đầu tiên: Tôi không biết liệu đã có một từ phù hợp cho tính năng này chưa.

Nhưng có lẽ nó có thể được gọi là đa ngôn ngữ? Hoặc languageagnellect? Vì nó liên quan nhiều hơn đến ngôn ngữ lập trình, nên việc đề cập đến 'ngôn ngữ' trong tên có thể làm cho nó rõ ràng hơn đa nền tảng.

Tất nhiên ngôn ngữ cũng mơ hồ, vì có thể hiểu rằng mã nguồn có thể được viết bằng bất kỳ ngôn ngữ trong thế giới thực nào (ví dụ vì các biến có thể được viết bằng unicode).

Mặt khác, mọi lập trình viên dày dạn có thể sẽ nhận ra một cấu trúc như vậy khác với nội địa hóa hoặc quốc tế hóa, vì vậy họ có thể 'hiểu' nó dễ dàng hơn.

Chỉ 2 xu của tôi.


tôi không nghĩ đó là chính xác; và nếu bạn thấy thực tế trang web chỉ thích câu trả lời thực sự chính xác. nhưng chào mừng đến với cộng đồng và hy vọng bạn trả lời thêm một số nơi mà bạn chắc chắn về câu trả lời :)
tgkprog
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.