Ngôn_ngữ kịch_bản Ngôn_ngữ kịch_bản là ngôn_ngữ_lập_trình cho môi_trường thời_gian chạy đặc_biệt tự_động_hoá thực_thi các tác_vụ các tác_vụ thay_thế có_thể được thực_thi từng cái một bởi người điều_hành Ngôn_ngữ kịch_bản thường được diễn_giải thay_vì biên_dịch Nguyên_thuỷ của ngôn_ngữ kịch_bản thường là các tác_vụ cơ_bản hoặc các lệnh gọi API và ngôn_ngữ cho_phép chúng được kết_hợp thành nhiều chương_trình hơn Các môi_trường có_thể được tự_động_hoá thông_qua tập lệnh bao_gồm các ứng_dụng phần_mềm trang_web trong trình_duyệt web sử_dụng hệ vỏ của hệ_điều_hành hệ_thống nhúng cũng như nhiều trò_chơi Một ngôn_ngữ kịch_bản có_thể được xem như một ngôn_ngữ dành riêng cho miền cho một môi_trường cụ_thể trong trường_hợp kịch_bản một ứng_dụng nó còn được gọi là ngôn_ngữ mở_rộng Ngôn_ngữ kịch_bản đôi_khi cũng được gọi là ngôn_ngữ_lập_trình cấp cao vì chúng hoạt_động ở mức_độ trừu_tượng cao hoặc là ngôn_ngữ điều_khiển đặc_biệt đối_với ngôn_ngữ kiểm_soát công_việc trên máy_tính lớn Thuật_ngữ ngôn_ngữ kịch_bản cũng được sử_dụng một_cách lỏng_lẻo để chỉ các ngôn_ngữ có mục_đích chung cấp cao như Perl_PowerShell_Python và Tcl với thuật_ngữ tập lệnh thường được sử_dụng cho các chương_trình nhỏ lên đến vài nghìn dòng mã trong các ngôn_ngữ đó hoặc trong các ngôn_ngữ dành riêng cho tên_miền như ngôn_ngữ xử_lý_văn_bản sed và AWK Một_số ngôn_ngữ này ban_đầu được phát_triển để sử_dụng trong một môi_trường cụ_thể và sau đó được phát_triển thành ngôn_ngữ dành riêng cho miền di_động hoặc mục_đích chung Ngược_lại nhiều ngôn_ngữ có mục_đích chung có phương_ngữ được sử_dụng làm ngôn_ngữ kịch_bản Bài viết này thảo_luận về các ngôn_ngữ kịch_bản theo nghĩa hẹp của các ngôn_ngữ cho một môi_trường cụ_thể Phổ của các ngôn_ngữ kịch_bản bao_gồm từ các ngôn_ngữ rất nhỏ và có tính đặc_hiệu miền cao đến các ngôn_ngữ_lập_trình có mục_đích chung được sử_dụng để viết kịch_bản Các ví_dụ tiêu_chuẩn về ngôn_ngữ kịch_bản cho các môi_trường cụ_thể bao_gồm Bash cho các hệ_điều_hành giống Unix hoặc Unix_ECMAScript_JavaScript dành cho trình_duyệt web Visual_Basic cho ứng_dụng cho các ứng_dụng Microsoft Office_Lua là một ngôn_ngữ được thiết_kế và sử_dụng rộng_rãi như một ngôn_ngữ mở_rộng Python là ngôn_ngữ có mục_đích chung cũng thường được sử_dụng làm ngôn_ngữ mở_rộng trong khi ECMAScript vẫn chủ_yếu là ngôn_ngữ kịch_bản cho các trình_duyệt web nhưng cũng được sử_dụng làm ngôn_ngữ cho mục_đích chung Phương_ngữ Lisp của Emacs dành cho trình_soạn_thảo Emacs và phương_ngữ Visual_Basic cho ứng_dụng của Visual_Basic là các ví_dụ về phương_ngữ ngôn_ngữ kịch_bản của các ngôn_ngữ có mục_đích chung Một_số hệ_thống trò_chơi đáng chú_ý là thế_giới ảo Cuộc_sống thứ hai và nhượng quyền thương_mại mô_phỏng Railroad của Trainz đã được mở_rộng về chức_năng bằng các phần mở_rộng kịch_bản Linden_Scripting_Language và TrainzScript_Trong các trò_chơi khác như Wesnoth sự đa_dạng của các trò_chơi thực_tế do người chơi chơi là các kịch_bản được viết bởi người dùng khác Đặc_điểm Các ngôn_ngữ kịch_bản điển_hình được dự_định sẽ rất nhanh để học và viết dưới dạng các tệp mã nguồn ngắn hoặc tương_tác trong một vòng lặp in REPL vỏ ngôn_ngữ Điều này thường bao_hàm cú_pháp và ngữ_nghĩa tương_đối đơn_giản thông_thường một tập lệnh mã được viết bằng ngôn_ngữ kịch_bản được thực_thi từ đầu đến cuối dưới dạng tập lệnh không có điểm nhập rõ_ràng Ví_dụ việc mô_tả Java là ngôn_ngữ kịch_bản là không phổ_biến vì cú_pháp dài và quy_tắc về các lớp tồn_tại trong các tệp nào và không_thể thực_thi trực_tiếp Java vì các tệp nguồn chỉ có_thể chứa các định_nghĩa phải được gọi bên ngoài bởi một ứng_dụng máy_chủ hoặc trình khởi chạy ứng_dụng Một ngôn_ngữ kịch_bản thường được diễn_giải từ mã nguồn hoặc mã byte Ngược_lại môi_trường phần_mềm mà các tập lệnh được viết thường được viết bằng ngôn_ngữ được biên_dịch và phân_phối ở dạng mã máy Các ngôn_ngữ kịch_bản có_thể được thiết_kế để người dùng cuối của chương_trình Phát_triển người dùng cuối của chương_trình có_thể chỉ dành cho các nhà_phát_triển vì_vậy họ có_thể viết các phần của chương_trình bằng ngôn_ngữ kịch_bản Các ngôn_ngữ script thường sử_dụng sự trừu_tượng_hoá một dạng ẩn thông_tin để cung_cấp cho người dùng các chi_tiết về các loại biến nội_bộ lưu_trữ dữ_liệu và quản_lý bộ_nhớ Các tập lệnh thường được tạo hoặc sửa_đổi bởi người thực_thi chúng nhưng chúng cũng thường được phân_phối chẳng_hạn như khi một phần_lớn các trò_chơi được viết bằng ngôn_ngữ kịch_bản Lịch_sử Các máy_tính máy_tính lớn đầu_tiên vào những năm 1950 không tương_tác thay vào đó sử_dụng xử_lý hàng_loạt Ngôn_ngữ kiểm_soát công_việc của IBM JCL là nguyên_mẫu ngôn_ngữ được sử_dụng để kiểm_soát xử_lý hàng_loạt Các shell tương_tác đầu_tiên được phát_triển vào những năm 1960 để cho_phép hoạt_động từ xa các hệ_thống chia_sẻ lần đầu_tiên và các shell shell được sử_dụng này điều_khiển các chương_trình máy_tính chạy trong chương_trình máy_tính shell Calvin_Mooers trong ngôn_ngữ TRAC của anh ta thường được ghi_nhận là đã phát_minh ra sự thay_thế lệnh khả_năng nhúng các lệnh trong các tập lệnh mà khi diễn_giải sẽ chèn một chuỗi ký_tự vào tập lệnh Multics gọi các chức_năng hoạt_động này Louis_Pouzin đã viết một bộ_xử_lý ban_đầu cho các tập lệnh được gọi là RUNCOM cho CTSS vào_khoảng năm 1964 Stuart_Madnick tại MIT đã viết một ngôn_ngữ kịch_bản cho CP CMS của IBM vào năm 1966 Ban_đầu ông gọi bộ_xử_lý này là EXEC Multics bao_gồm một nhánh của CTSS RUNCOM còn được gọi là RUNCOM EXEC cuối_cùng đã được thay_thế bởi EXEC 2 và REXX Các ngôn_ngữ như Tcl và Lua được thiết_kế đặc_biệt như các ngôn_ngữ kịch_bản có mục_đích chung có_thể được nhúng trong bất_kỳ ứng_dụng nào Các ngôn_ngữ khác như Visual_Basic for Application_VBA cung_cấp tích_hợp mạnh_mẽ với các phương_tiện tự_động_hoá của một hệ_thống cơ_bản Việc nhúng các ngôn_ngữ script đa mục_đích như_vậy thay_vì phát_triển ngôn_ngữ mới cho mỗi ứng_dụng cũng mang lại lợi_ích rõ_ràng giúp nhà_phát_triển ứng_dụng cần mã_hoá trình dịch ngôn_ngữ từ đầu và cho_phép người dùng áp_dụng các kỹ_năng học được ở nơi khác Một_số phần_mềm kết_hợp một_số ngôn_ngữ kịch_bản khác nhau Các trình_duyệt web hiện_đại thường cung_cấp một ngôn_ngữ để viết các phần mở_rộng cho chính trình_duyệt và một_số ngôn_ngữ nhúng tiêu_chuẩn để kiểm_soát trình_duyệt bao_gồm JavaScript một phương_ngữ của ECMAScript hoặc XUL Các loại Viết kịch_bản thường tương_phản với lập_trình hệ_thống như trong phân đôi của Ousterhout hoặc lập_trình trong lớn và lập_trình trong nhỏ Theo quan_điểm này kịch_bản đặc_biệt là mã keo kết_nối các thành_phần phần_mềm và một ngôn_ngữ chuyên_dùng cho mục_đích này là ngôn_ngữ keo Pipelines và shell scripting là những ví_dụ điển_hình của ngôn_ngữ keo và Perl ban_đầu được phát_triển để hoàn_thành vai_trò tương_tự Phát_triển web có_thể được coi là việc sử_dụng các ngôn_ngữ keo giao_thoa giữa cơ_sở_dữ_liệu và máy_chủ web Nhưng nếu một lượng lớn logic được viết bằng script thì nó được đặc_trưng tốt hơn như đơn_giản là một thành_phần phần_mềm khác không phải là keo Ngôn_ngữ keo đặc_biệt hữu_ích cho việc viết và duy_trì BULLET các lệnh tuỳ chỉnh cho một shell lệnh BULLET các chương_trình nhỏ hơn các chương_trình được thực_hiện tốt hơn trong một ngôn_ngữ được biên_dịch BULLET Các chương_trình trình bao_bọc cho các tệp thực_thi như một tệp bó di_chuyển hoặc thao_tác các tệp và thực_hiện các thao_tác khác với hệ_điều_hành trước hoặc sau khi chạy một ứng_dụng như trình xử_lý_văn_bản bảng tính cơ_sở_dữ_liệu trình biên_dịch trình biên_dịch v v BULLET kịch_bản có_thể thay_đổi BULLET Phát_triển ứng_dụng nhanh_chóng của một giải_pháp cuối_cùng được thực_hiện bằng ngôn_ngữ khác_thường được biên_soạn Ví_dụ ngôn_ngữ keo BULLET AppleScript_BULLET_ColdFusion_BULLET DCL BULLET Lisp phổ_biến có_thể nhúng BULLET ecl BULLET Erlang_BULLET_JCL_BULLET CoffeeScript_BULLET_Julia_BULLET JScript và JavaScript_BULLET_Lua_BULLET m4 BULLET Pascal hiện_đại BULLET Perl 5 và 6 BULLET PHP BULLET PowerShell_BULLET_Pure_BULLET Python_BULLET_Rebol_BULLET Red_BULLET_Rexx_BULLET Ruby_BULLET_Scheme_BULLET Tcl_BULLET_Các kịch_bản Unix_Shell ksh csh bash sh và những thứ khác BULLET VBScript_BULLET_Work_Flow Language_BULLET_XSLT_Các ngôn_ngữ macro tiếp_xúc với hệ_điều_hành hoặc các thành_phần ứng_dụng có_thể đóng vai_trò là ngôn_ngữ keo Chúng bao_gồm Visual_Basic cho Ứng_dụng WordBasic_LotusScript_CorelScript_Hummingbird Basic_QuickScript_SaxBasic và WinWrap_Basic_Các công_cụ khác như AWK cũng có_thể được coi là ngôn_ngữ keo như bất_kỳ ngôn_ngữ nào được triển_khai bởi công_cụ Windows_Script_Host_VBScript JScript và VBA theo mặc_định trong Windows và các công_cụ của bên thứ ba bao_gồm triển_khai Rexx_Perl_Tcl_Python XSLT Ruby_Pascal hiện_đại Delphi và C Phần_lớn các ứng_dụng có_thể truy_cập và sử_dụng các thành_phần hệ_điều_hành thông_qua các mô_hình đối_tượng hoặc các chức_năng của chính nó Các thiết_bị khác như máy_tính lập_trình cũng có_thể có ngôn_ngữ keo các hệ_điều_hành của các thiết_bị PDA như Windows_CE có_thể có sẵn các công_cụ macro của bên thứ ba hoặc bên thứ ba kết_hợp các ứng_dụng lại với nhau ngoài việc triển_khai các ngôn_ngữ keo thông_thường bao_gồm Windows_NT_MS_DOS và một_số shell Unix_Rexx_Modern_Pascal PHP và Perl_Tuỳ thuộc vào phiên_bản HĐH WSH và các công_cụ tập lệnh mặc_định VBScript và JScript có sẵn Máy_tính lập_trình có_thể được lập_trình bằng ngôn_ngữ keo theo ba cách Ví_dụ Texas_TI_TI 92 theo mặc_định của nhà_máy có_thể được lập_trình bằng ngôn_ngữ tập lệnh Việc đưa vào ngôn_ngữ kịch_bản và keo dán Lua trong loạt máy_tính TI NSpire có_thể được coi là sự kế_thừa cho điều này Các ngôn_ngữ_lập_trình cấp cao chính trên tàu của hầu_hết các máy_tính vẽ đồ_thị thường là các biến_thể cơ_bản đôi_khi là các dẫn_xuất Lisp và các dẫn_xuất C khác_thường trong nhiều trường_hợp có_thể kết_dính các chức_năng của máy_tính với nhau như đồ_thị danh_sách ma_trận v v Việc triển_khai của bên thứ ba phiên_bản Cơ_bản toàn_diện hơn có_thể gần hơn với các biến_thể được liệt_kê là ngôn_ngữ keo trong bài viết này có sẵn và cố_gắng triển_khai Perl_Rexx hoặc các hệ_điều_hành khác nhau trên máy_tính vẽ đồ_thị TI và HP cũng được đề_cập Trình biên_dịch chéo C dựa trên PC cho một_số máy TI và HP được sử_dụng cùng với các công_cụ chuyển_đổi giữa C và Perl_Rexx_AWK cũng như các tập lệnh shell sang Perl_Modern_Pascal_VBScript sang và từ Perl để viết chương_trình bằng ngôn_ngữ keo để thực_hiện cuối_cùng dưới dạng chương_trình đã biên_dịch trên máy_tính Ngôn_ngữ và trình điều_khiển công_việc Một lớp lớn các ngôn_ngữ kịch_bản đã phát_triển từ việc tự_động_hoá kiểm_soát công_việc liên_quan đến việc bắt_đầu và kiểm_soát hành_vi của các chương_trình hệ_thống Theo nghĩa này người ta có_thể nghĩ các shell là hậu_duệ của JCL của IBM hoặc Ngôn_ngữ kiểm_soát công_việc được sử_dụng cho chính_xác mục_đích này Nhiều trình thông_dịch của các ngôn_ngữ này nhân đôi như các trình thông_dịch dòng lệnh như shell Unix hoặc MS DOS codice _ 1 Những người khác chẳng_hạn như AppleScript cung_cấp việc sử_dụng các lệnh giống như tiếng Anh để xây_dựng các tập lệnh GUI scripting Với sự ra_đời của giao_diện người dùng đồ_hoạ một loại ngôn_ngữ kịch_bản chuyên_dụng đã xuất_hiện để điều_khiển máy_tính Các ngôn_ngữ này tương_tác với cùng một cửa_sổ đồ_hoạ menu nút và như_vậy một người dùng sẽ làm Họ làm điều này bằng cách mô_phỏng hành_động của người dùng Các ngôn_ngữ này thường được sử_dụng để tự_động_hoá hành_động của người dùng Các ngôn_ngữ như_vậy cũng được gọi là macro khi điều_khiển thông_qua các lần nhấn phím mô_phỏng hoặc nhấp chuột cũng như chạm hoặc nhấn vào màn_hình kích_hoạt cảm_ứng Về nguyên_tắc các ngôn_ngữ này có_thể được sử_dụng để kiểm_soát bất_kỳ ứng_dụng GUI nào nhưng trong thực_tế việc sử_dụng của họ bị hạn_chế vì việc sử_dụng của họ cần sự hỗ_trợ từ ứng_dụng và từ hệ_điều_hành Có một_vài ngoại_lệ cho giới_hạn này Một_số ngôn_ngữ kịch_bản GUI dựa trên việc nhận_dạng các đối_tượng đồ_hoạ từ pixel màn_hình hiển_thị của chúng Các ngôn_ngữ kịch_bản GUI này không phụ_thuộc vào sự hỗ_trợ từ hệ_điều_hành hoặc ứng_dụng Ngôn_ngữ dành riêng cho ứng_dụng Các ngôn_ngữ dành riêng cho ứng_dụng có_thể được phân_chia thành nhiều loại khác nhau tức_là ngôn_ngữ ứng_dụng dựa trên độc_lập có_thể thực_thi hoặc ngôn_ngữ dành riêng cho ứng_dụng nội_bộ postcript xml gscript như một_số tập lệnh được phân_phối rộng_rãi tương_ứng được Adobe MS và Google triển_khai một ngôn_ngữ kịch_bản thành_ngữ phù_hợp với nhu_cầu của người dùng ứng_dụng Tương_tự như_vậy nhiều hệ_thống trò_chơi máy_tính sử_dụng ngôn_ngữ kịch_bản tuỳ chỉnh để thể_hiện hành_động được lập_trình của các nhân_vật không phải người chơi và môi_trường trò_chơi Các ngôn_ngữ thuộc loại này được thiết_kế cho một ứng_dụng duy_nhất và mặc_dù chúng có_thể rất giống với một ngôn_ngữ có mục_đích chung cụ_thể ví_dụ QuakeC được mô_phỏng theo C chúng có các tính_năng tuỳ chỉnh để phân_biệt chúng Emacs_Lisp trong khi một phương_ngữ đầy_đủ và có khả_năng của Lisp chứa nhiều tính_năng đặc_biệt giúp nó hữu_ích nhất cho việc mở_rộng các chức_năng chỉnh_sửa của Emacs_Một ngôn_ngữ kịch_bản dành riêng cho ứng_dụng có_thể được xem như một ngôn_ngữ_lập_trình dành riêng cho miền dành riêng cho một ứng_dụng Mở_rộng ngôn_ngữ nhúng Một_số ngôn_ngữ đã được thiết_kế cho mục_đích thay_thế các ngôn_ngữ kịch_bản dành riêng cho ứng_dụng bằng cách có_thể nhúng trong các chương_trình ứng_dụng Lập_trình_viên ứng_dụng làm_việc bằng ngôn_ngữ C hoặc hệ_thống khác bao_gồm hook trong đó ngôn_ngữ script có_thể điều_khiển ứng_dụng Các ngôn_ngữ này có_thể tương_đương về mặt kỹ_thuật với ngôn_ngữ mở_rộng dành riêng cho ứng_dụng nhưng khi ứng_dụng nhúng ngôn_ngữ chung người dùng có lợi_thế là có_thể chuyển các kỹ_năng từ ứng_dụng sang ứng_dụng Một_cách khác chung hơn chỉ đơn_giản là cung_cấp một thư_viện thường là thư_viện C mà ngôn_ngữ có mục_đích chung có_thể sử_dụng để kiểm_soát ứng_dụng mà không cần sửa_đổi ngôn_ngữ cho tên_miền cụ_thể JavaScript bắt_đầu và chủ_yếu vẫn là ngôn_ngữ để viết kịch_bản bên trong các trình_duyệt web tuy_nhiên việc chuẩn_hoá ngôn_ngữ dưới dạng ECMAScript đã khiến nó trở_nên phổ_biến như một ngôn_ngữ có_thể nhúng mục_đích chung Cụ_thể SpiderMonkey triển_khai Mozilla được nhúng trong một_số môi_trường như Yahoo Công_cụ phụ_tùng Các ứng_dụng khác nhúng các triển_khai ECMAScript bao_gồm các sản_phẩm Adobe Adobe Flash_ActionScript và Adobe Acrobat để tạo tập_tin PDF Tcl được tạo ra như một ngôn_ngữ mở_rộng nhưng đã được sử_dụng thường_xuyên hơn như một ngôn_ngữ có mục_đích chung trong các vai_trò tương_tự như Python_Perl và Ruby_Mặt khác Rexx ban_đầu được tạo ra như một ngôn_ngữ kiểm_soát công_việc nhưng được sử_dụng rộng_rãi như một ngôn_ngữ mở_rộng cũng như ngôn_ngữ có mục_đích chung Perl là một ngôn_ngữ có mục_đích chung nhưng có phương_ngữ Oraperl 1990 bao_gồm một nhị phân Perl 4 với Giao_diện cuộc_gọi của Oracle được biên_dịch Tuy_nhiên điều này đã được thay_thế bởi một thư_viện Mô đun Perl_DBD_Oracle_Các ứng_dụng phức_tạp và hướng theo nhiệm_vụ khác có_thể kết_hợp và hiển_thị ngôn_ngữ_lập_trình nhúng để cho_phép người dùng của họ kiểm_soát nhiều hơn và cung_cấp cho họ nhiều chức_năng hơn có_thể có sẵn thông_qua giao_diện người dùng bất_kể tinh_vi đến mức nào Ví_dụ các công_cụ tác_giả Autodesk_Maya 3D nhúng ngôn_ngữ kịch_bản MEL hoặc Blender sử_dụng Python để điền vào_vai trò này Một_số loại ứng_dụng khác cần thêm tính_năng nhanh hơn hoặc chu_trình điều_chỉnh và chạy ví_dụ công_cụ trò_chơi cũng sử_dụng ngôn_ngữ nhúng Trong quá_trình phát_triển điều này cho_phép chúng tạo ra các tính_năng nguyên_mẫu nhanh hơn và điều_chỉnh tự_do hơn mà không cần người dùng phải có kiến_thức sâu_sắc về hoạt_động bên trong của ứng_dụng hoặc xây_dựng lại sau mỗi lần điều_chỉnh có_thể mất một khoảng thời_gian đáng_kể Các ngôn_ngữ kịch_bản được sử_dụng cho mục_đích này bao_gồm từ Lua và Python phổ_biến hơn và nổi_tiếng hơn đến các ngôn_ngữ ít được biết đến hơn như AngelScript và Squirrel
Ngôn_ngữ kịch_bản