Ai đó có thể giải thích sự khác biệt giữa Ngôn ngữ lập trình và Ngôn ngữ lập trình không?
Ngoài ra bạn có thể nêu một số ví dụ cho mỗi. Tôi đã Googled rất nhiều nhưng tôi luôn tìm thấy câu trả lời tốt nhất từ Stack Overflow.
Ai đó có thể giải thích sự khác biệt giữa Ngôn ngữ lập trình và Ngôn ngữ lập trình không?
Ngoài ra bạn có thể nêu một số ví dụ cho mỗi. Tôi đã Googled rất nhiều nhưng tôi luôn tìm thấy câu trả lời tốt nhất từ Stack Overflow.
Câu trả lời:
Ngôn ngữ kịch bản là ngôn ngữ lập trình không yêu cầu bước biên dịch rõ ràng.
Ví dụ, trong trường hợp bình thường, bạn phải biên dịch chương trình C trước khi có thể chạy nó. Nhưng trong trường hợp bình thường, bạn không phải biên dịch chương trình JavaScript trước khi chạy. Vì vậy, JavaScript đôi khi được gọi là ngôn ngữ "scripting".
Dòng này ngày càng mờ hơn vì quá trình biên dịch có thể quá nhanh với phần cứng hiện đại và kỹ thuật biên dịch hiện đại. Chẳng hạn, V8, công cụ JavaScript trong Google Chrome và cũng được sử dụng rất nhiều bên ngoài trình duyệt, thực sự biên dịch mã JavaScript một cách nhanh chóng thành mã máy, thay vì diễn giải nó. (Trên thực tế, V8 là trình biên dịch hai pha tối ưu hóa.)
Cũng lưu ý rằng một ngôn ngữ có phải là ngôn ngữ "kịch bản" hay không có thể liên quan đến môi trường nhiều hơn ngôn ngữ. Không có lý do gì bạn không thể viết một trình thông dịch C và sử dụng nó như một ngôn ngữ kịch bản (và mọi người có). Không có lý do gì bạn không thể biên dịch JavaScript thành mã máy và lưu trữ nó trong một tệp thực thi (và mọi người có). Ngôn ngữ Ruby là một ví dụ điển hình cho việc này: Việc triển khai ban đầu hoàn toàn được diễn giải (một ngôn ngữ "kịch bản"), nhưng hiện tại có nhiều trình biên dịch cho nó.
Một số ví dụ về ngôn ngữ "kịch bản" (ví dụ, ngôn ngữ được truyền thống sử dụng mà không có một bước biên dịch rõ ràng):
Và một ít đập vỡ những cái theo truyền thống được sử dụng với một bước biên dịch rõ ràng:
... và sau đó bạn có những thứ như Python ngồi ở cả hai phe: Python được sử dụng rộng rãi mà không cần bước biên dịch, nhưng việc triển khai chính (CPython) thực hiện điều đó bằng cách biên dịch sang mã byte khi đang di chuyển và sau đó chạy mã byte trong một VM và nó có thể ghi mã byte đó ra các tệp ( .pyc
, .pyo
) để sử dụng mà không cần biên dịch lại.
Đó chỉ là một số rất ít, nếu bạn thực hiện một số nghiên cứu, bạn có thể tìm thấy nhiều hơn nữa.
Để hiểu sự khác biệt giữa ngôn ngữ kịch bản và ngôn ngữ lập trình, người ta phải hiểu tại sao ngôn ngữ kịch bản ra đời.
Ban đầu, có những ngôn ngữ lập trình được viết để xây dựng các chương trình như excel, word, browser, games, v.v. Những chương trình này được xây dựng với các ngôn ngữ như c và java. Làm thêm giờ, các chương trình này cần một cách để người dùng tạo chức năng mới, vì vậy họ phải cung cấp giao diện cho mã byte của họ và do đó các ngôn ngữ script được sinh ra.
Một ngôn ngữ kịch bản thường không được biên dịch để có thể chạy ngay khi bạn viết một cái gì đó có ý nghĩa. Do đó excel có thể được xây dựng bằng C ++ nhưng nó hiển thị một ngôn ngữ kịch bản gọi là VBA để người dùng xác định chức năng. Các trình duyệt tương tự có thể được xây dựng bằng C ++ / Java nhưng chúng phơi bày một ngôn ngữ kịch bản gọi là javascript (không liên quan đến java theo bất kỳ cách nào). Các trò chơi, thường được xây dựng bằng C ++ nhưng hiển thị một ngôn ngữ gọi là Lua cho người dùng để xác định chức năng tùy chỉnh.
Một ngôn ngữ kịch bản thường nằm đằng sau một số ngôn ngữ lập trình. Các ngôn ngữ script thường có ít quyền truy cập vào các khả năng riêng của máy tính vì chúng chạy trên một tập hợp con của ngôn ngữ lập trình gốc. Một ví dụ ở đây là Javascript sẽ không thể truy cập hệ thống tệp của bạn. Ngôn ngữ script thường chậm hơn ngôn ngữ lập trình.
Mặc dù các ngôn ngữ script có thể có ít quyền truy cập hơn và chậm hơn, chúng có thể là các công cụ rất mạnh. Một yếu tố cho sự thành công của ngôn ngữ kịch bản là sự dễ dàng cập nhật. Bạn có nhớ những ngày của các applet java trên web không, đây là một ví dụ về việc chạy ngôn ngữ lập trình (java) so với chạy ngôn ngữ script (javascript). Vào thời điểm đó, máy tính không mạnh mẽ và javascript chưa trưởng thành nên các applet Java thống trị các cảnh. Nhưng các applet Java rất khó chịu, chúng yêu cầu người dùng sắp xếp tải và biên dịch ngôn ngữ. Chuyển nhanh đến ngày hôm nay, các applet Java gần như tuyệt chủng và Javascript thống trị hiện trường. Javascript cực kỳ nhanh để tải vì hầu hết các thành phần trình duyệt đã được cài đặt.
Cuối cùng, ngôn ngữ kịch bản cũng được coi là ngôn ngữ lập trình (mặc dù một số người từ chối chấp nhận điều này) - thuật ngữ chúng ta nên sử dụng ở đây là ngôn ngữ kịch bản so với ngôn ngữ được biên dịch.
Sự khác biệt ngày càng ít quan trọng. Theo truyền thống, các ngôn ngữ kịch bản mở rộng các chương trình hiện có ... Tôi nghĩ đó là định nghĩa chính của "kịch bản" là nó đề cập đến việc viết một bộ hướng dẫn cho một thực thể hiện có để thực hiện. Tuy nhiên, nơi các ngôn ngữ kịch bản bắt đầu bằng cú pháp độc quyền và thông tục, hầu hết những ngôn ngữ phổ biến hiện nay đều có một số mối quan hệ với C.
Tôi nghĩ rằng sự khác biệt "diễn giải so với biên dịch" thực sự là một triệu chứng của việc mở rộng một chương trình hiện có (với một trình thông dịch được tích hợp sẵn), chứ không phải là một sự khác biệt nội tại. Điều lập trình viên và giáo dân quan tâm hơn là "lập trình viên đang làm gì?" Việc một chương trình được diễn giải và một chương trình khác được biên dịch có nghĩa là rất ít trong việc xác định sự khác biệt trong hoạt động của người tạo. Bạn không đánh giá một nhà viết kịch về việc các vở kịch của anh ấy thường được đọc to hơn hay được biểu diễn trên sân khấu, phải không?
Ngôn ngữ lập trình: Được biên dịch thành mã máy và chạy trên phần cứng của Hệ điều hành bên dưới.
Scripting Language: Là tập hợp con cấu trúc của ngôn ngữ lập trình. Nó thường được giải thích. về cơ bản nó "kịch bản" những thứ khác để làm công cụ. Trọng tâm chính không phải chủ yếu là xây dựng các ứng dụng của riêng bạn mà là để một ứng dụng hiện có hoạt động theo cách bạn muốn, ví dụ: JavaScript cho trình duyệt, TCL, v.v.
*** Nhưng có một số trường hợp ngôn ngữ lập trình được chuyển đổi thành trình thông dịch và ngược lại như sử dụng có trình thông dịch C trong đó bạn có thể 'C' Script. Các tập lệnh thường được viết để kiểm soát một hành vi ứng dụng trong đó Ngôn ngữ lập trình được sử dụng để xây dựng các ứng dụng. Nhưng hãy cẩn thận rằng việc phân định ranh giới đang mờ dần từng ngày như một ví dụ về Python, nó phụ thuộc vào cách người ta sử dụng ngôn ngữ.
Ngôn ngữ script là một tập hợp con của ngôn ngữ lập trình.
Tôi nghĩ rằng những gì bạn nói là "sự khác biệt" thực sự là hậu quả của sự khác biệt thực sự.
Sự khác biệt thực tế là mục tiêu của mã được viết. Ai sẽ chạy mã này.
Một ngôn ngữ kịch bản được sử dụng để viết mã sẽ nhắm mục tiêu một hệ thống phần mềm. Nó sẽ tự động hóa các hoạt động trên hệ thống phần mềm đó. Kịch bản sẽ là một chuỗi các hướng dẫn cho hệ thống phần mềm đích.
Một ngôn ngữ lập trình nhắm vào hệ thống máy tính, có thể là máy thật hoặc ảo. Các hướng dẫn được thực hiện bởi máy.
Tất nhiên, một máy thật chỉ hiểu mã nhị phân nên bạn cần biên dịch mã của ngôn ngữ lập trình. Nhưng đây là hậu quả của việc nhắm mục tiêu vào máy thay vì chương trình.
Mặt khác, hệ thống phần mềm đích của một tập lệnh có thể biên dịch mã hoặc giải thích nó. Là hệ thống phần mềm.
Nếu chúng ta nói rằng sự khác biệt thực sự là nó có được biên dịch hay không, thì chúng ta có một vấn đề bởi vì khi Javascript chạy trong V8 được biên dịch và khi nó chạy trong Rhino thì không.
Nó trở nên khó hiểu hơn vì các ngôn ngữ kịch bản đã phát triển để trở nên rất mạnh mẽ. Vì vậy, chúng không bị giới hạn trong việc tạo các tập lệnh nhỏ để tự động hóa các hoạt động trên hệ thống phần mềm khác, bạn có thể tạo bất kỳ ứng dụng phong phú nào với chúng.
Mã Python nhắm vào một trình thông dịch để chúng ta có thể nói rằng nó "tập lệnh" hoạt động trên trình thông dịch đó. Nhưng khi bạn viết mã Python, bạn không thấy nó là kịch bản trình thông dịch, bạn sẽ thấy nó là tạo một ứng dụng. Trình thông dịch chỉ ở đó để viết mã ở cấp độ cao hơn trong số những thứ khác. Vì vậy, đối với tôi Python là ngôn ngữ lập trình hơn là ngôn ngữ kịch bản.
Quay lại khi thế giới còn trẻ và trong thế giới PC bạn đã chọn từ .exe hoặc .bat, việc phân định rất đơn giản. Các hệ thống Unix luôn có các tập lệnh shell (/ bin / sh, / bin / csh, / bin / ksh, v.v.) và các ngôn ngữ được biên dịch (C / C ++ / Fortran).
Để phân biệt vai trò và trách nhiệm, các ngôn ngữ được biên dịch (thường được gọi là Ngôn ngữ thế hệ thứ 3) được xem là ngôn ngữ 'lập trình' và ngôn ngữ 'kịch bản' được xem là ngôn ngữ gọi trình thông dịch (thường được gọi là Ngôn ngữ thế hệ thứ 4). Các ngôn ngữ script thường được sử dụng như 'keo' để kết nối giữa nhiều lệnh / chương trình được biên dịch để người dùng không phải lo lắng về một tập hợp các bước để thực hiện nhiệm vụ của mình - họ đã phát triển một tệp duy nhất, mô tả các bước đó họ muốn thực hiện và điều này đã trở thành một "kịch bản" cho bất cứ ai theo dõi.
Nhiều người / nhóm đã viết thông dịch viên mới để giải quyết một vấn đề cụ thể. awk là một trong những cái được biết đến nhiều hơn và nó được sử dụng chủ yếu để khớp mẫu và áp dụng một loạt các biến đổi dữ liệu trên đầu vào. Nó hoạt động tốt, nhưng có một miền vấn đề hạn chế. Việc mở rộng tên miền đó là tất cả nhưng không thể vì mã nguồn không có sẵn. Công cụ Perl (Larry Wall, tác giả chính / kiến trúc sư) kịch bản lên cấp độ tiếp theo - và đã phát triển một trình thông dịch không chỉ cho phép người dùng chạy các lệnh hệ thống, thao tác dữ liệu đầu vào và đầu ra, các biến không chữ được hỗ trợ mà còn truy cập API cấp độ hệ thống Unix như các chức năng từ bên trong các tập lệnh. Nó có lẽ là một trong những ngôn ngữ kịch bản cấp cao được sử dụng rộng rãi đầu tiên.
Câu hỏi của bạn là cụ thể về Python. Bởi vì trình thông dịch python chạy với tệp văn bản chứa mã python và mã python có thể chạy bất cứ nơi nào có trình thông dịch python, tôi sẽ nói rằng đó là ngôn ngữ script (trong cùng một mạch với Perl). Bạn không cần biên dịch lại tệp lệnh python của người dùng cho từng Kiến trúc hệ điều hành / CPU khác nhau (như với C / C ++ / Fortran), làm cho nó dễ mang theo hơn và dễ sử dụng hơn.
Tín dụng cho câu trả lời này được gửi đến Jerrold (Jerry) Heyman. Chủ đề gốc: https://www.researchgate.net/post/Is_Python_a_Programming_lingu_or_Scripting_L Language
Tôi không đồng ý với thực tế là các ngôn ngữ sử dụng thông dịch viên là ngôn ngữ kịch bản và ngôn ngữ được biên dịch là ngôn ngữ lập trình. Chúng tôi có thể phát triển một trình thông dịch hoặc trình biên dịch cho bất kỳ ngôn ngữ nào. Môi trường được giải thích phù hợp với kịch bản web tốt hơn và làm cho nó dễ dàng hơn đó là lý do tại sao chúng ta có nó.
Chà, tôi cảm thấy như không có sự khác biệt nào giữa ngôn ngữ kịch bản và ngôn ngữ lập trình. Đó là tất cả về việc hoàn thành công việc. Khi nói đến các tác vụ liên quan đến web, chúng tôi gọi chúng là các tập lệnh Web xem xét nhiệm vụ nhỏ và theo cách đó chúng tôi cũng có thể gọi các tác vụ liên quan đến hệ thống là tập lệnh cấp hệ thống hoặc hệ điều hành và ngôn ngữ lập trình mà chúng tôi sử dụng để thực hiện các tác vụ đó là ngôn ngữ kịch bản hệ thống.
Ngoài ra, không phải vì vậy mà người ta không thể viết mã cấp hệ thống bằng các tập lệnh Python và Web bằng ngôn ngữ C (chắc chắn người ta có thể làm nếu chúng ta có thể thiết lập nền tảng và môi trường cần thiết). Nhưng tất cả chỉ là quá nhiều nỗ lực có thể ảnh hưởng đến hạn chế thời gian cho sự phát triển nhanh chóng và một chút độ trễ giảm sẽ không có lợi cho chúng ta nhiều trong các tập lệnh web. Nhưng ngược lại, điều đó không đúng nếu chúng ta thực hiện các tác vụ ở cấp hệ thống trong Python.
Điểm mấu chốt: lựa chọn ngôn ngữ phụ thuộc vào bản chất của nhiệm vụ được thực hiện và phân biệt ngôn ngữ vì ngôn ngữ kịch bản là một huyền thoại.
Ngôn ngữ kịch bản được diễn giải trong một chương trình khác. JavaScript được nhúng trong một trình duyệt và được trình duyệt đó giải thích.
Ví dụ về ngôn ngữ kịch bản
Ưu điểm của ngôn ngữ Scripting:
Đơn giản - Ngôn ngữ script dễ viết hơn ngôn ngữ lập trình.
Ít dòng mã hơn (LỘC)
Các ngôn ngữ lập trình như Java được biên dịch và không được giải thích bởi một ứng dụng khác theo cùng một cách.
Ví dụ ngôn ngữ lập trình
Trong các ngôn ngữ Scripting như (JavaScript và các phiên bản PHP cũ), chúng tôi sử dụng các hàm và phương thức cơ bản hiện có để thực hiện công việc của mình. Hãy lấy một ví dụ trong JavaScript
chúng ta có thể sử dụng ajax
hoặc web-sockets
chỉ khi chúng được hỗ trợ bởi trình duyệt hoặc các phương thức tồn tại hoặc chúng trong trình duyệt. Nhưng trong các ngôn ngữ như C hoặc C ++, Java, chúng ta có thể viết tính năng đó từ đầu ngay cả khi bất kỳ thư viện nào cho tính năng đó không có sẵn nhưng chúng ta không thể làm như vậy trong JavaScript.
bạn có thể hỗ trợ các ổ cắm web trong Internet Explorer 8 hoặc trước sự trợ giúp của JavaScript Nhưng bạn có thể viết một plugin bằng C hoặc C ++ hoặc Java có thể thêm một tính năng của ổ cắm web vào Internet Explorer 8.
Về cơ bản trong các ngôn ngữ Scripting, chúng tôi viết một mã theo trình tự thực thi các phương thức hiện có theo trình tự để hoàn thành công việc của chúng tôi. Nhập số và công thức vào máy tính kỹ thuật số để thực hiện thao tác cũng là một ví dụ rất điển hình về ngôn ngữ kịch bản. Chúng tôi cần lưu ý rằng trình biên dịch / môi trường thời gian chạy của mọi ngôn ngữ kịch bản luôn được viết bằng ngôn ngữ lập trình để chúng tôi có thể thêm nhiều tính năng hơn và phương pháp và có thể viết thư viện mới.
PHP Đây là ngôn ngữ có phần b / w lập trình và viết kịch bản. Chúng tôi có thể thêm các phương thức mới bằng cách thêm các tiện ích mở rộng đã biên dịch được viết bằng Ngôn ngữ cấp cao khác. Chúng tôi không thể thêm các tính năng cấp cao của mạng hoặc tạo thư viện xử lý hình ảnh trực tiếp trong PHP.
PS Tôi thực sự xin lỗi vì chỉ xoay quanh câu trả lời của tôi xung quanh PHP JavaScript nhưng tôi sử dụng hai cái này vì tôi có một kinh nghiệm đáng kể trong hai cái này.
Ngoài sự khác biệt mà ngôn ngữ Scripting được diễn giải và ngôn ngữ lập trình được biên dịch, còn có một sự khác biệt khác như bên dưới, mà tôi đoán đã bị bỏ qua ..
Ngôn ngữ kịch bản là ngôn ngữ lập trình được sử dụng để thao tác, tùy chỉnh và tự động hóa các phương tiện của một hệ thống hiện có. Trong các hệ thống như vậy, chức năng hữu ích đã có sẵn thông qua giao diện người dùng và ngôn ngữ kịch bản là một cơ chế để hiển thị chức năng đó cho điều khiển chương trình.
Trong khi đó, Ngôn ngữ lập trình thường được sử dụng để mã hóa hệ thống từ Scratch.
src ECMA
Nếu chúng ta thấy ngôn ngữ lập trình logic và ngôn ngữ kịch bản thì đây là 99,09%. bởi vì chúng tôi sử dụng cùng một khái niệm như vòng lặp, điều kiện điều khiển, biến và tất cả để chúng tôi có thể nói có cả hai giống nhau nhưng chỉ có một điều khác biệt giữa chúng là trong C / C ++ và ngôn ngữ lập trình khác mà chúng tôi biên dịch mã trước khi thực thi. nhưng trong PHP, JavaScript và ngôn ngữ kịch bản khác, chúng tôi không cần phải biên dịch chúng tôi trực tiếp thực thi trong trình duyệt.
Cảm ơn Nitish K. Jha
Ngôn ngữ kịch bản là ngôn ngữ lập trình mà mọi người coi là ngôn ngữ kịch bản. Đó là một danh mục nhân tạo không có ranh giới rõ ràng và trong đó mọi quy tắc được đề xuất đều có ngoại lệ.
Các quy tắc cổ điển được sử dụng để nói rằng một ngôn ngữ là một ngôn ngữ kịch bản là đặc trưng, không xác định. Nếu một ngôn ngữ thỏa mãn một số quy tắc, rất có thể nó được coi là ngôn ngữ kịch bản. Nếu không, có một cơ hội tốt phải không. Các quy tắc thường bao gồm:
Tôi sẽ thêm:
Đó là, nó có thể là một ngôn ngữ giải thích.
Nếu một ngôn ngữ lập trình có hành vi "biên dịch thời gian" đáng kể trong đó nó phân tích mã và báo cáo lỗi mà không chạy chương trình, như lỗi loại từ C, Java hoặc C #, thì rất có thể đó không được coi là ngôn ngữ kịch bản.
Theo truyền thống, rất nhiều ngôn ngữ kịch bản đã được giải thích trực tiếp từ nguồn, nhưng phổ biến hơn trong số chúng đã nhận được nhiều triển khai thực hiện hơn để biên dịch mã, như .pyc
các tệp của Python hoặc tối ưu hóa các công cụ JavaScript biên dịch thành mã gốc trước khi chạy.
Nếu ngôn ngữ có thể được thực hiện bởi một trình thông dịch, chỉ nhìn vào mã nguồn khi nó đang chạy nó, thì nó có thể được coi là ngôn ngữ kịch bản. Cho dù nó thực sự được thực hiện theo cách đó không quan trọng, nhưng nếu có thể, thì nó cũng không thể yêu cầu kiểm tra lỗi thời gian biên dịch mở rộng của mã.
Nếu ngôn ngữ cung cấp một ngữ nghĩa tĩnh hữu ích giúp phát hiện lỗi (trừ lỗi cú pháp) mà không cần chạy chương trình, thì đó có lẽ không phải là ngôn ngữ kịch bản.
Luôn có những trường hợp ngoại lệ, thường dựa trên truyền thống xung quanh một ngôn ngữ nhiều hơn bất kỳ quy tắc thực tế nào. BASIC thường không được coi là "ngôn ngữ kịch bản", mặc dù nó đáp ứng khá nhiều tất cả các tiêu chí mà bất kỳ ai đã từng sử dụng để trở thành một. Đó là lý do tại sao Visual Basic Script phải thêm "script" vào tên, để phân biệt với Visual Basic, một ngôn ngữ lập trình "thực" dành cho các chương trình lớn hơn.
BASIC cũng là một ngôn ngữ lập trình cũ, như COBOL và Fortran, từ trước khi mọi người mong đợi phân tích tĩnh từ một ngôn ngữ, và về cơ bản trước khi "ngôn ngữ kịch bản" thậm chí còn là một điều.