Язык сценариев общего назначения

A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system.[1] Scripting languages are usually interpreted at runtime rather than compiled.

A scripting language’s primitives are usually elementary tasks or API calls[clarification needed], and the scripting language allows them to be combined into more programs. Environments that can be automated through scripting include application software, text editors, web pages, operating system shells, embedded systems, and computer games. A scripting language can be viewed as a domain-specific language for a particular environment; in the case of scripting an application, it is also known as an extension language. Scripting languages are also sometimes referred to as very high-level programming languages, as they sometimes operate at a high level of abstraction, or as control languages, particularly for job control languages on mainframes.

The term scripting language is also used in a wider sense, namely, to refer to dynamic high-level programming languages in general; some are strictly interpreted languages, while others use a form of compilation.
In this context, the term script refers to a small program in such a language; typically, contained in a single file, and no larger than a few thousand lines of code.

The spectrum of scripting languages ranges from small to large, and from highly domain-specific language to general-purpose programming languages. A language may start as small and highly domain-specific and later develop into a portable and general-purpose language; conversely, a general-purpose language may later develop special domain-specific dialects.

Examples[edit]

  • AWK, a text-processing language available in most Unix-like operating systems, which has been ported to other operating systems.
  • Bash, an interpreted scripting language for use on Unix, GNU and other Unix-like operating systems and environments.
  • Groovy is an object-oriented scripting language for the Java platform, similar to Python, Ruby, and Smalltalk.
  • JavaScript (later: ECMAScript), originally a very small, highly domain-specific language, limited to running within a web browser to dynamically modify the web page being shown, that later developed into a widely portable general-purpose programming language.
  • Lisp, a family of general-purpose languages and extension languages for specific applications, e.g. Emacs Lisp, for the Emacs editor.
  • Lua, a language designed for use as an extension language for applications in general, used by many different applications.
  • Perl,[2] a text-processing language that later developed into a general-purpose language, also used as an extension language for various applications.
  • PowerShell, a scripting language originally for use with Microsoft Windows but later also available for macOS and Linux.
  • Python, a general-purpose scripting language with simple syntax, particularly suited to text processing and also used as an extension language.
  • Rexx, a scripting language in IBM’s VM/SP R3. NetRexx and Object Rexx are based on REXX. Used on several platforms. Also used as extension languages for applications.
  • sed, a text-processing language available in most Unix-like operating systems, which has been ported to other operating systems.
  • Tcl,[3] a scripting language for Unix-like environments, popular in the 1990s. Can be used in conjunction with Tk to develop GUI applications.
  • Visual Basic for Applications (VBA), an extension language developed specifically for Microsoft Office applications, and implemented at least partially in many non-Microsoft applications.

Some game systems have been extensively extended in functionality by scripting extensions using custom languages, notably the Second Life virtual world (using Linden Scripting Language) and the Trainz franchise of Railroad simulators (using TrainzScript). In some games, such as Wesnoth, users may play custom variants of the game defined by user-contributed scripts.

Characteristics[edit]

Typical scripting languages are intended to be very fast to learn and write in, either as short source code files or interactively in a read–eval–print loop (REPL, language shell).[4] This generally implies relatively simple syntax and semantics; typically a «script» (code written in the scripting language) is executed from start to finish, as a «script», with no explicit entry point.

For example, it is uncommon to characterise Java as a scripting language because of its lengthy syntax and rules about which classes exist in which files, and it is not directly possible to execute Java interactively, because source files can only contain definitions that must be invoked externally by a host application or application launcher.

public class HelloWorld {
    public void printHelloWorld() {
        System.out.println("Hello World");
    }
}

This piece of code intended to print «Hello World» does nothing as main() is not declared in HelloWorld class, although the one below would be useful.

public class HelloWorld {
    public void printHelloWorld() {
        System.out.println("Hello World");
    }
    public static void main(String[] args) {
        printHelloWorld();
    }
}

In the example above, main is defined and so this can be invoked by the launcher, although this still cannot be executed interactively.
In contrast, Python allows the definition of some functions in a single file, or to avoid functions altogether and use imperative programming style, or even use it interactively.

This one line of Python code prints «Hello World»; no declarative statement like main() is required here.

A scripting language is usually interpreted from source code or bytecode.[5] By contrast, the software environment (interpreter) the scripts are written for is typically written in a compiled language and distributed in machine code form.

Scripting languages may be designed for use by end users of a program—end-user development—or may be only for internal use by developers, so they can write portions of the program in the scripting language. Scripting languages typically use abstraction, a form of information hiding, to spare users the details of internal variable types, data storage, and memory management.

Scripts are often created or modified by the person executing them,[6] but they are also often distributed, such as when large portions of games are written in a scripting language, notably the Google Chrome T-rex game.

History[edit]

Early mainframe computers (in the 1950s) were non-interactive, instead using batch processing. IBM’s Job Control Language (JCL) is the archetype of languages used to control batch processing.[7]

The first interactive shells were developed in the 1960s to enable remote operation of the first time-sharing systems, and these used shell scripts, which controlled running computer programs within a computer program, the shell. Calvin Mooers in his TRAC language is generally credited with inventing command substitution, the ability to embed commands in scripts that when interpreted insert a character string into the script.[8] Multics calls these active functions.[9]
Louis Pouzin wrote an early processor for command scripts called RUNCOM for CTSS around 1964. Stuart Madnick at MIT wrote a scripting language for IBM’s CP/CMS in 1966. He originally called this processor COMMAND, later named EXEC.[10] Multics included an offshoot of CTSS RUNCOM, also called RUNCOM.[11] EXEC was eventually replaced by EXEC 2 and REXX.

Languages such as Tcl and Lua were specifically designed as general-purpose scripting languages that could be embedded in any application. Other languages such as Visual Basic for Applications (VBA) provided strong integration with the automation facilities of an underlying system. Embedding of such general-purpose scripting languages instead of developing a new language for each application also had obvious benefits, relieving the application developer of the need to code a language translator from scratch and allowing the user to apply skills learned elsewhere.

Some software incorporates several different scripting languages. Modern web browsers typically provide a language for writing extensions to the browser itself, and several standard embedded languages for controlling the browser, including JavaScript (a dialect of ECMAScript) or XUL.

Types[edit]

Scripting languages can be categorized into several different types, with a considerable degree of overlap among the types.

Glue languages[edit]

Scripting is often contrasted with system programming, as in Ousterhout’s dichotomy or «programming in the large and programming in the small». In this view, scripting is glue code, connecting software components, and a language specialized for this purpose is a glue language. Pipelines and shell scripting are archetypal examples of glue languages, and Perl was initially developed to fill this same role. Web development can be considered a use of glue languages, interfacing between a database and web server. But if a substantial amount of logic is written in script, it is better characterized as simply another software component, not «glue».

Glue languages are especially useful for writing and maintaining:

  • custom commands for a command shell;[12]
  • smaller programs than those that are better implemented in a compiled language;[13]
  • «wrapper» programs for executables, like a batch file that moves or manipulates files and does other things with the operating system before or after running an application like a word processor, spreadsheet, data base, assembler, compiler, etc.;[14]
  • scripts that may change;[15]
  • Rapid application development of a solution eventually implemented in another, usually compiled, language.[citation needed]

Glue language examples:

  • AppleScript
  • ColdFusion
  • DCL
  • Embeddable Common Lisp
  • ecl
  • Erlang
  • EXEC
  • EXEC2
  • JCL
  • CoffeeScript
  • Julia
  • JScript and JavaScript
  • Lua
  • m4
  • Perl (5 and Raku)
  • PHP
  • PowerShell
  • Pure
  • Python
  • Rebol
  • Red
  • Rexx
  • NetRexx
  • Ruby
  • Scheme
  • Tcl
  • Unix Shell scripts (ksh, csh, bash, sh and others)
  • VBScript
  • Work Flow Language
  • XSLT

Macro languages exposed to operating system or application components can serve as glue languages. These include Visual Basic for Applications, WordBasic, LotusScript, CorelScript, Hummingbird Basic, QuickScript, Rexx, SaxBasic, and WinWrap Basic. Other tools like AWK can also be considered glue languages, as can any language implemented by a Windows Script Host engine (VBScript, JScript and VBA by default in Windows and third-party engines including implementations of Rexx, Perl, Tcl, Python, XSLT, Ruby, Modern Pascal, Delphi, and C). A majority of applications can access and use operating system components via the object models or its own functions.

Other devices like programmable calculators may also have glue languages; the operating systems of PDAs such as Windows CE may have available native or third-party macro tools that glue applications together, in addition to implementations of common glue languages—including Windows NT, DOS, and some Unix shells, Rexx, Modern Pascal, PHP, and Perl. Depending upon the OS version, WSH and the default script engines (VBScript and JScript) are available.

Programmable calculators can be programmed in glue languages in three ways. For example, the Texas Instruments TI-92, by factory default can be programmed with a command script language. Inclusion of the scripting and glue language Lua in the TI-NSpire series of calculators could be seen as a successor to this. The primary on-board high-level programming languages of most graphing calculators (most often Basic variants, sometimes Lisp derivatives, and more uncommonly, C derivatives) in many cases can glue together calculator functions—such as graphs, lists, matrices, etc. Third-party implementations of more comprehensive Basic version that may be closer to variants listed as glue languages in this article are available—and attempts to implement Perl, Rexx, or various operating system shells on the TI and HP graphing calculators are also mentioned. PC-based C cross-compilers for some of the TI and HP machines used with tools that convert between C and Perl, Rexx, AWK, and shell scripts to Perl, Modern Pascal, VBScript to and from Perl make it possible to write a program in a glue language for eventual implementation (as a compiled program) on the calculator.[citation needed]

Editor languages[edit]

A number of text editors support macros written either using a macro language built into the editor, e.g., The SemWare Editor (TSE), vi improved (VIM), or using an external implementation, e.g., XEDIT, or both, e.g., KEDIT. Sometimes text editors and edit macros are used under the covers to provide other applications, e.g., FILELIST and RDRLIST in CMS .

Job control languages and shells[edit]

A major class of scripting languages has grown out of the automation of job control, which relates to starting and controlling the behavior of system programs[16] (in this sense, one might think of shells as being descendants of IBM’s JCL, or Job Control Language, which was used for exactly this purpose). Many of these languages’ interpreters double as command-line interpreters such as the Unix shell or the MS-DOS COMMAND.COM. Others, such as AppleScript offer the use of English-like commands to build scripts.

GUI scripting[edit]

With the advent of graphical user interfaces, a specialized kind of scripting language emerged for controlling a computer. These languages interact with the same graphic windows, menus, buttons, and so on, that a human user would. They do this by simulating the actions of a user. These languages are typically used to automate user actions. Such languages are also called «macros» when control is through simulated key presses or mouse clicks, as well as tapping or pressing on a touch-activated screen.

These languages could in principle be used to control any GUI application; but, in practice their use is limited because their use needs support from the application and from the operating system. There are a few exceptions to this limitation. Some GUI scripting languages are based on recognizing graphical objects from their display screen pixels. These GUI scripting languages do not depend on support from the operating system or application.

When the GUI provides the appropriate interfaces, as in the IBM Workplace Shell, a generic scripting language, e.g. OREXX, can be used for writing GUI scripts.

Application-specific languages[edit]

Application specific languages can be split in many different categories, i.e. standalone based app languages (executable) or internal application specific languages (postscript, xml, gscript as some of the widely distributed scripts, respectively implemented by Adobe, MS and Google) among others include an idiomatic scripting language tailored to the needs of the application user. Likewise, many computer game systems use a custom scripting language to express the programmed actions of non-player characters and the game environment. Languages of this sort are designed for a single application; and, while they may superficially resemble a specific general-purpose language (e.g. QuakeC, modeled after C), they have custom features that distinguish them. Emacs Lisp, while a fully formed and capable dialect of Lisp, contains many special features that make it most useful for extending the editing functions of Emacs. An application-specific scripting language can be viewed as a domain-specific programming language specialized to a single application.

Extension/embeddable languages[edit]

A number of languages have been designed for the purpose of replacing application-specific scripting languages by being embeddable in application programs. The application programmer (working in C or another systems language) includes «hooks» where the scripting language can control the application. These languages may be technically equivalent to an application-specific extension language but when an application embeds a «common» language, the user gets the advantage of being able to transfer skills from application to application. A more generic alternative is simply to provide a library (often a C library) that a general-purpose language can use to control the application, without modifying the language for the specific domain.

JavaScript began as and primarily still is a language for scripting inside web browsers; however, the standardization of the language as ECMAScript has made it popular as a general-purpose embeddable language. In particular, the Mozilla implementation SpiderMonkey is embedded in several environments such as the Yahoo! Widget Engine. Other applications embedding ECMAScript implementations include the Adobe products Adobe Flash (ActionScript) and Adobe Acrobat (for scripting PDF files).

Tcl was created as an extension language but has come to be used more frequently as a general-purpose language in roles similar to Python, Perl, and Ruby. On the other hand, Rexx was originally created as a job control language, but is widely used as an extension language as well as a general-purpose language. Perl is a general-purpose language, but had the Oraperl (1990) dialect, consisting of a Perl 4 binary with Oracle Call Interface compiled in. This has however since been replaced by a library (Perl Module), DBD::Oracle.[17][18]

Other complex and task-oriented applications may incorporate and expose an embedded programming language to allow their users more control and give them more functionality than can be available through a user interface, no matter how sophisticated. For example, Autodesk Maya 3D authoring tools embed the Maya Embedded Language, or Blender which uses Python to fill this role.

Some other types of applications that need faster feature addition or tweak-and-run cycles (e.g. game engines) also use an embedded language. During the development, this allows them to prototype features faster and tweak more freely, without the need for the user to have intimate knowledge of the inner workings of the application or to rebuild it after each tweak (which can take a significant amount of time). The scripting languages used for this purpose range from the more common and more famous Lua and Python to lesser-known ones such as AngelScript and Squirrel.

Ch is another C compatible scripting option for the industry to embed into C/C++ application programs.

See also[edit]

  • Architecture description language
  • Authoring language
  • Build automation[19]
  • Configuration file
  • Interpreter directive / Shebang (Unix)
  • Templating language

References[edit]

  1. ^ «ECMAScript 2019 Language Specification». www.ecma-international.org. Retrieved 2018-04-02.
  2. ^ Sheppard, Doug (2000-10-16). «Beginner’s Introduction to Perl». dev.perl.org. Retrieved 2011-01-08.
  3. ^ Programming is Hard, Let’s Go Scripting…, Larry Wall, December 6, 2007
  4. ^ Hey, Tony; Pápay, Gyuri (2014). The Computing Universe: A Journey through a Revolution. Cambridge University Press. p. 76. ISBN 978-1-31612322-5, «A major characteristic of modern scripting languages is their interactivity, sometimes referred to as a REPL programming environment. […] The characteristics of ease of use and immediate execution with a REPL environment are sometimes taken as the definition of a scripting language.»{{cite book}}: CS1 maint: postscript (link)
  5. ^ Brown, Vicki. «Scripting Languages». Retrieved 2009-07-22.
  6. ^ Loui, Ronald (2008). «In praise of scripting». IEEE Computer. Archived from the original on 2015-09-23. Retrieved 2013-08-27.
  7. ^ IBM Corporation (1967). IBM System/360 Operating System Job Control Language (C28-6529-4) (PDF).
  8. ^ Mooers, Calvin. «TRAC, A Procedure-Describing Language for the Reactive Typewriter». Archived from the original on 2001-04-25. Retrieved March 9, 2012.
  9. ^ Van Vleck, Thomas (ed.). «Multics Glossary – A — (active function)». Retrieved March 9, 2012.
  10. ^ Varian, Melinda. «VM AND THE VM COMMUNITY: Past, Present, and Future» (PDF). Retrieved March 9, 2012.
  11. ^ Van Vleck, Thomas (ed.). «Multics Glossary – R — (RUNCOM)». Retrieved March 9, 2012.
  12. ^ «What is glue code (glue code language)? — Definition from WhatIs.com». WhatIs.com. Retrieved 2022-01-31.
  13. ^ Larson, Quincy (10 January 2020). «Interpreted vs Compiled Programming Languages». Free Code Camp. Retrieved 23 February 2022.{{cite web}}: CS1 maint: url-status (link)
  14. ^ Balkis, Anton. «Script Adalah». Raja Tips. Retrieved 23 February 2022.{{cite web}}: CS1 maint: url-status (link)
  15. ^ Axelsson, Mats. «Shell scripts — What can you change». Linux Hint. Retrieved 23 February 2022.{{cite web}}: CS1 maint: url-status (link)
  16. ^ «Job Control Basics (Bash Reference Manual)». www.gnu.org. Retrieved 2022-05-20.
  17. ^ Oraperl, CPAN]
  18. ^
    Perl, Underground Oracle FAQ
  19. ^ van Rossum, Guido (January 6–8, 1998). «Glue it all together». Glue It All Together With Python. python.org.

Further reading[edit]

  • Barron, David William (2001). The World of Scripting Languages. ISBN 0-471-99886-9.

External links[edit]

  • Patterns for Scripted Applications at the Wayback Machine (archived October 10, 2004)

A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system.[1] Scripting languages are usually interpreted at runtime rather than compiled.

A scripting language’s primitives are usually elementary tasks or API calls[clarification needed], and the scripting language allows them to be combined into more programs. Environments that can be automated through scripting include application software, text editors, web pages, operating system shells, embedded systems, and computer games. A scripting language can be viewed as a domain-specific language for a particular environment; in the case of scripting an application, it is also known as an extension language. Scripting languages are also sometimes referred to as very high-level programming languages, as they sometimes operate at a high level of abstraction, or as control languages, particularly for job control languages on mainframes.

The term scripting language is also used in a wider sense, namely, to refer to dynamic high-level programming languages in general; some are strictly interpreted languages, while others use a form of compilation.
In this context, the term script refers to a small program in such a language; typically, contained in a single file, and no larger than a few thousand lines of code.

The spectrum of scripting languages ranges from small to large, and from highly domain-specific language to general-purpose programming languages. A language may start as small and highly domain-specific and later develop into a portable and general-purpose language; conversely, a general-purpose language may later develop special domain-specific dialects.

Examples[edit]

  • AWK, a text-processing language available in most Unix-like operating systems, which has been ported to other operating systems.
  • Bash, an interpreted scripting language for use on Unix, GNU and other Unix-like operating systems and environments.
  • Groovy is an object-oriented scripting language for the Java platform, similar to Python, Ruby, and Smalltalk.
  • JavaScript (later: ECMAScript), originally a very small, highly domain-specific language, limited to running within a web browser to dynamically modify the web page being shown, that later developed into a widely portable general-purpose programming language.
  • Lisp, a family of general-purpose languages and extension languages for specific applications, e.g. Emacs Lisp, for the Emacs editor.
  • Lua, a language designed for use as an extension language for applications in general, used by many different applications.
  • Perl,[2] a text-processing language that later developed into a general-purpose language, also used as an extension language for various applications.
  • PowerShell, a scripting language originally for use with Microsoft Windows but later also available for macOS and Linux.
  • Python, a general-purpose scripting language with simple syntax, particularly suited to text processing and also used as an extension language.
  • Rexx, a scripting language in IBM’s VM/SP R3. NetRexx and Object Rexx are based on REXX. Used on several platforms. Also used as extension languages for applications.
  • sed, a text-processing language available in most Unix-like operating systems, which has been ported to other operating systems.
  • Tcl,[3] a scripting language for Unix-like environments, popular in the 1990s. Can be used in conjunction with Tk to develop GUI applications.
  • Visual Basic for Applications (VBA), an extension language developed specifically for Microsoft Office applications, and implemented at least partially in many non-Microsoft applications.

Some game systems have been extensively extended in functionality by scripting extensions using custom languages, notably the Second Life virtual world (using Linden Scripting Language) and the Trainz franchise of Railroad simulators (using TrainzScript). In some games, such as Wesnoth, users may play custom variants of the game defined by user-contributed scripts.

Characteristics[edit]

Typical scripting languages are intended to be very fast to learn and write in, either as short source code files or interactively in a read–eval–print loop (REPL, language shell).[4] This generally implies relatively simple syntax and semantics; typically a «script» (code written in the scripting language) is executed from start to finish, as a «script», with no explicit entry point.

For example, it is uncommon to characterise Java as a scripting language because of its lengthy syntax and rules about which classes exist in which files, and it is not directly possible to execute Java interactively, because source files can only contain definitions that must be invoked externally by a host application or application launcher.

public class HelloWorld {
    public void printHelloWorld() {
        System.out.println("Hello World");
    }
}

This piece of code intended to print «Hello World» does nothing as main() is not declared in HelloWorld class, although the one below would be useful.

public class HelloWorld {
    public void printHelloWorld() {
        System.out.println("Hello World");
    }
    public static void main(String[] args) {
        printHelloWorld();
    }
}

In the example above, main is defined and so this can be invoked by the launcher, although this still cannot be executed interactively.
In contrast, Python allows the definition of some functions in a single file, or to avoid functions altogether and use imperative programming style, or even use it interactively.

This one line of Python code prints «Hello World»; no declarative statement like main() is required here.

A scripting language is usually interpreted from source code or bytecode.[5] By contrast, the software environment (interpreter) the scripts are written for is typically written in a compiled language and distributed in machine code form.

Scripting languages may be designed for use by end users of a program—end-user development—or may be only for internal use by developers, so they can write portions of the program in the scripting language. Scripting languages typically use abstraction, a form of information hiding, to spare users the details of internal variable types, data storage, and memory management.

Scripts are often created or modified by the person executing them,[6] but they are also often distributed, such as when large portions of games are written in a scripting language, notably the Google Chrome T-rex game.

History[edit]

Early mainframe computers (in the 1950s) were non-interactive, instead using batch processing. IBM’s Job Control Language (JCL) is the archetype of languages used to control batch processing.[7]

The first interactive shells were developed in the 1960s to enable remote operation of the first time-sharing systems, and these used shell scripts, which controlled running computer programs within a computer program, the shell. Calvin Mooers in his TRAC language is generally credited with inventing command substitution, the ability to embed commands in scripts that when interpreted insert a character string into the script.[8] Multics calls these active functions.[9]
Louis Pouzin wrote an early processor for command scripts called RUNCOM for CTSS around 1964. Stuart Madnick at MIT wrote a scripting language for IBM’s CP/CMS in 1966. He originally called this processor COMMAND, later named EXEC.[10] Multics included an offshoot of CTSS RUNCOM, also called RUNCOM.[11] EXEC was eventually replaced by EXEC 2 and REXX.

Languages such as Tcl and Lua were specifically designed as general-purpose scripting languages that could be embedded in any application. Other languages such as Visual Basic for Applications (VBA) provided strong integration with the automation facilities of an underlying system. Embedding of such general-purpose scripting languages instead of developing a new language for each application also had obvious benefits, relieving the application developer of the need to code a language translator from scratch and allowing the user to apply skills learned elsewhere.

Some software incorporates several different scripting languages. Modern web browsers typically provide a language for writing extensions to the browser itself, and several standard embedded languages for controlling the browser, including JavaScript (a dialect of ECMAScript) or XUL.

Types[edit]

Scripting languages can be categorized into several different types, with a considerable degree of overlap among the types.

Glue languages[edit]

Scripting is often contrasted with system programming, as in Ousterhout’s dichotomy or «programming in the large and programming in the small». In this view, scripting is glue code, connecting software components, and a language specialized for this purpose is a glue language. Pipelines and shell scripting are archetypal examples of glue languages, and Perl was initially developed to fill this same role. Web development can be considered a use of glue languages, interfacing between a database and web server. But if a substantial amount of logic is written in script, it is better characterized as simply another software component, not «glue».

Glue languages are especially useful for writing and maintaining:

  • custom commands for a command shell;[12]
  • smaller programs than those that are better implemented in a compiled language;[13]
  • «wrapper» programs for executables, like a batch file that moves or manipulates files and does other things with the operating system before or after running an application like a word processor, spreadsheet, data base, assembler, compiler, etc.;[14]
  • scripts that may change;[15]
  • Rapid application development of a solution eventually implemented in another, usually compiled, language.[citation needed]

Glue language examples:

  • AppleScript
  • ColdFusion
  • DCL
  • Embeddable Common Lisp
  • ecl
  • Erlang
  • EXEC
  • EXEC2
  • JCL
  • CoffeeScript
  • Julia
  • JScript and JavaScript
  • Lua
  • m4
  • Perl (5 and Raku)
  • PHP
  • PowerShell
  • Pure
  • Python
  • Rebol
  • Red
  • Rexx
  • NetRexx
  • Ruby
  • Scheme
  • Tcl
  • Unix Shell scripts (ksh, csh, bash, sh and others)
  • VBScript
  • Work Flow Language
  • XSLT

Macro languages exposed to operating system or application components can serve as glue languages. These include Visual Basic for Applications, WordBasic, LotusScript, CorelScript, Hummingbird Basic, QuickScript, Rexx, SaxBasic, and WinWrap Basic. Other tools like AWK can also be considered glue languages, as can any language implemented by a Windows Script Host engine (VBScript, JScript and VBA by default in Windows and third-party engines including implementations of Rexx, Perl, Tcl, Python, XSLT, Ruby, Modern Pascal, Delphi, and C). A majority of applications can access and use operating system components via the object models or its own functions.

Other devices like programmable calculators may also have glue languages; the operating systems of PDAs such as Windows CE may have available native or third-party macro tools that glue applications together, in addition to implementations of common glue languages—including Windows NT, DOS, and some Unix shells, Rexx, Modern Pascal, PHP, and Perl. Depending upon the OS version, WSH and the default script engines (VBScript and JScript) are available.

Programmable calculators can be programmed in glue languages in three ways. For example, the Texas Instruments TI-92, by factory default can be programmed with a command script language. Inclusion of the scripting and glue language Lua in the TI-NSpire series of calculators could be seen as a successor to this. The primary on-board high-level programming languages of most graphing calculators (most often Basic variants, sometimes Lisp derivatives, and more uncommonly, C derivatives) in many cases can glue together calculator functions—such as graphs, lists, matrices, etc. Third-party implementations of more comprehensive Basic version that may be closer to variants listed as glue languages in this article are available—and attempts to implement Perl, Rexx, or various operating system shells on the TI and HP graphing calculators are also mentioned. PC-based C cross-compilers for some of the TI and HP machines used with tools that convert between C and Perl, Rexx, AWK, and shell scripts to Perl, Modern Pascal, VBScript to and from Perl make it possible to write a program in a glue language for eventual implementation (as a compiled program) on the calculator.[citation needed]

Editor languages[edit]

A number of text editors support macros written either using a macro language built into the editor, e.g., The SemWare Editor (TSE), vi improved (VIM), or using an external implementation, e.g., XEDIT, or both, e.g., KEDIT. Sometimes text editors and edit macros are used under the covers to provide other applications, e.g., FILELIST and RDRLIST in CMS .

Job control languages and shells[edit]

A major class of scripting languages has grown out of the automation of job control, which relates to starting and controlling the behavior of system programs[16] (in this sense, one might think of shells as being descendants of IBM’s JCL, or Job Control Language, which was used for exactly this purpose). Many of these languages’ interpreters double as command-line interpreters such as the Unix shell or the MS-DOS COMMAND.COM. Others, such as AppleScript offer the use of English-like commands to build scripts.

GUI scripting[edit]

With the advent of graphical user interfaces, a specialized kind of scripting language emerged for controlling a computer. These languages interact with the same graphic windows, menus, buttons, and so on, that a human user would. They do this by simulating the actions of a user. These languages are typically used to automate user actions. Such languages are also called «macros» when control is through simulated key presses or mouse clicks, as well as tapping or pressing on a touch-activated screen.

These languages could in principle be used to control any GUI application; but, in practice their use is limited because their use needs support from the application and from the operating system. There are a few exceptions to this limitation. Some GUI scripting languages are based on recognizing graphical objects from their display screen pixels. These GUI scripting languages do not depend on support from the operating system or application.

When the GUI provides the appropriate interfaces, as in the IBM Workplace Shell, a generic scripting language, e.g. OREXX, can be used for writing GUI scripts.

Application-specific languages[edit]

Application specific languages can be split in many different categories, i.e. standalone based app languages (executable) or internal application specific languages (postscript, xml, gscript as some of the widely distributed scripts, respectively implemented by Adobe, MS and Google) among others include an idiomatic scripting language tailored to the needs of the application user. Likewise, many computer game systems use a custom scripting language to express the programmed actions of non-player characters and the game environment. Languages of this sort are designed for a single application; and, while they may superficially resemble a specific general-purpose language (e.g. QuakeC, modeled after C), they have custom features that distinguish them. Emacs Lisp, while a fully formed and capable dialect of Lisp, contains many special features that make it most useful for extending the editing functions of Emacs. An application-specific scripting language can be viewed as a domain-specific programming language specialized to a single application.

Extension/embeddable languages[edit]

A number of languages have been designed for the purpose of replacing application-specific scripting languages by being embeddable in application programs. The application programmer (working in C or another systems language) includes «hooks» where the scripting language can control the application. These languages may be technically equivalent to an application-specific extension language but when an application embeds a «common» language, the user gets the advantage of being able to transfer skills from application to application. A more generic alternative is simply to provide a library (often a C library) that a general-purpose language can use to control the application, without modifying the language for the specific domain.

JavaScript began as and primarily still is a language for scripting inside web browsers; however, the standardization of the language as ECMAScript has made it popular as a general-purpose embeddable language. In particular, the Mozilla implementation SpiderMonkey is embedded in several environments such as the Yahoo! Widget Engine. Other applications embedding ECMAScript implementations include the Adobe products Adobe Flash (ActionScript) and Adobe Acrobat (for scripting PDF files).

Tcl was created as an extension language but has come to be used more frequently as a general-purpose language in roles similar to Python, Perl, and Ruby. On the other hand, Rexx was originally created as a job control language, but is widely used as an extension language as well as a general-purpose language. Perl is a general-purpose language, but had the Oraperl (1990) dialect, consisting of a Perl 4 binary with Oracle Call Interface compiled in. This has however since been replaced by a library (Perl Module), DBD::Oracle.[17][18]

Other complex and task-oriented applications may incorporate and expose an embedded programming language to allow their users more control and give them more functionality than can be available through a user interface, no matter how sophisticated. For example, Autodesk Maya 3D authoring tools embed the Maya Embedded Language, or Blender which uses Python to fill this role.

Some other types of applications that need faster feature addition or tweak-and-run cycles (e.g. game engines) also use an embedded language. During the development, this allows them to prototype features faster and tweak more freely, without the need for the user to have intimate knowledge of the inner workings of the application or to rebuild it after each tweak (which can take a significant amount of time). The scripting languages used for this purpose range from the more common and more famous Lua and Python to lesser-known ones such as AngelScript and Squirrel.

Ch is another C compatible scripting option for the industry to embed into C/C++ application programs.

See also[edit]

  • Architecture description language
  • Authoring language
  • Build automation[19]
  • Configuration file
  • Interpreter directive / Shebang (Unix)
  • Templating language

References[edit]

  1. ^ «ECMAScript 2019 Language Specification». www.ecma-international.org. Retrieved 2018-04-02.
  2. ^ Sheppard, Doug (2000-10-16). «Beginner’s Introduction to Perl». dev.perl.org. Retrieved 2011-01-08.
  3. ^ Programming is Hard, Let’s Go Scripting…, Larry Wall, December 6, 2007
  4. ^ Hey, Tony; Pápay, Gyuri (2014). The Computing Universe: A Journey through a Revolution. Cambridge University Press. p. 76. ISBN 978-1-31612322-5, «A major characteristic of modern scripting languages is their interactivity, sometimes referred to as a REPL programming environment. […] The characteristics of ease of use and immediate execution with a REPL environment are sometimes taken as the definition of a scripting language.»{{cite book}}: CS1 maint: postscript (link)
  5. ^ Brown, Vicki. «Scripting Languages». Retrieved 2009-07-22.
  6. ^ Loui, Ronald (2008). «In praise of scripting». IEEE Computer. Archived from the original on 2015-09-23. Retrieved 2013-08-27.
  7. ^ IBM Corporation (1967). IBM System/360 Operating System Job Control Language (C28-6529-4) (PDF).
  8. ^ Mooers, Calvin. «TRAC, A Procedure-Describing Language for the Reactive Typewriter». Archived from the original on 2001-04-25. Retrieved March 9, 2012.
  9. ^ Van Vleck, Thomas (ed.). «Multics Glossary – A — (active function)». Retrieved March 9, 2012.
  10. ^ Varian, Melinda. «VM AND THE VM COMMUNITY: Past, Present, and Future» (PDF). Retrieved March 9, 2012.
  11. ^ Van Vleck, Thomas (ed.). «Multics Glossary – R — (RUNCOM)». Retrieved March 9, 2012.
  12. ^ «What is glue code (glue code language)? — Definition from WhatIs.com». WhatIs.com. Retrieved 2022-01-31.
  13. ^ Larson, Quincy (10 January 2020). «Interpreted vs Compiled Programming Languages». Free Code Camp. Retrieved 23 February 2022.{{cite web}}: CS1 maint: url-status (link)
  14. ^ Balkis, Anton. «Script Adalah». Raja Tips. Retrieved 23 February 2022.{{cite web}}: CS1 maint: url-status (link)
  15. ^ Axelsson, Mats. «Shell scripts — What can you change». Linux Hint. Retrieved 23 February 2022.{{cite web}}: CS1 maint: url-status (link)
  16. ^ «Job Control Basics (Bash Reference Manual)». www.gnu.org. Retrieved 2022-05-20.
  17. ^ Oraperl, CPAN]
  18. ^
    Perl, Underground Oracle FAQ
  19. ^ van Rossum, Guido (January 6–8, 1998). «Glue it all together». Glue It All Together With Python. python.org.

Further reading[edit]

  • Barron, David William (2001). The World of Scripting Languages. ISBN 0-471-99886-9.

External links[edit]

  • Patterns for Scripted Applications at the Wayback Machine (archived October 10, 2004)

Сценарные языки программирования (скрипт языки)

Языки передачи, хранения, обработки и представления информации

Первые скриптовые языки начали разрабатываться в 1960-ых годах с целью автоматизации
процесса редактирования — компиляции — линковки — запуска при написании программ.
Изначально их возможности были бедны — они просто избавляли от необходимости повтора нескольких команд,
т. е.это были просто текстовые файлы, содержащие команды, которые обычно вводились операторами.

Скрипты не требуют компиляции (преобразования в машинный код), а выполняются посредством интеграции в программное окружение.

Сетевые языки — языки, предназначенные для организации взаимодействия удаленных компьютеров в интенсивном интерактивном режиме,
а поэтому они построены на принципах интерпретации, то есть построчной, интерактивной обработки строк программного кода,
описывающего некоторый сценарий (скрипт) сетевого взаимодействия компьютеров, поэтому часто они называются скриптовыми языками,
хотя скриптовые языки не обязательно являются сетевыми, к примеру, пакетные командные языки различных операционных сред.

Скриптовые языки применяются как для клиентского (JScript, VBScript),
так и для серверного (PHP) программирования веб-сайтов.

Имеются и универсальные скрипт-языки (Perl, Python, Ruby, Tcl).
Последние создавались для некоторых определённых целей, но со временем расширялись и применялись для всё более широкого круга задач
(например, Perl изначально создавалася как язык обработки текста, но затем был значительно усовершенствован).
Сейчас их уже называют не скриптовыми, а динамическими языками программирования, т.к.
они позволяют определять типы данных и осуществлять синтаксический анализ и компиляцию «на лету» — на этапе выполнения программы.
Такие языки удобны для быстрой разработки приложений.

Помимо упомянутых, к динамическим языкам относят также Smalltalk и JavaScript.
Некоторыми динамическими чертами обладает и Visual Basic.

Технологии Perl, SSI, PHP предназначены для разработки динамических веб-сайтов
и доступны на любой платформе.

Разделы страницы о сценарных языках программирования (скрипт-языках):

  • Виды сценарных языков
  • Справочники скриптовых языков и библиотеки веб-скриптов
  • Встроенные (прикладные) сценарные языки
  • Командно-сценарные языки (в т.ч. скрипт-оболочки для операционных систем):
    • Юникс-оболочка Shell
  • Универсальные сценарные языки (общего назначения):
    • Язык CGI-программирования Perl
    • Язык функционального программирования Python
    • Контекстный интерпретатор REBOL
    • Интерпретатор Ruby
    • Сценарный интерпретатор R
    • Событийный язык прототипов Tcl
  • Специальные сценарные языки:
    • Язык Lua

Виды сценарных языков

Типы скриптовых языков:

  1. Языки обработки текста:
    AWK, Perl (последний изначально был таким, но затем был значительно усовершенствован и стал универсальным).
  2. Командные оболочки: AppleScript, sh, csh, bash.
    AppleScript в 2007 году встроен в Mac OS X.
  3. Языки для веб-разработки:
    серверные (PHP),
    клиентские (JavaScript — считающийся «встроенным» сценарным языком),
    универсальные (ниже).
  4. Универсальные (Perl, Python, Tcl, Ruby).
    Обычно эти языки создавались для каких-то конкретных целей, но со временем расширялись и применялись
    для всё более и более широкого круга задач (в т.ч. веб-разработки).
    Сейчас их уже называют «динамическими» языками программирования.
  5. Встроенные в прикладные программы (VBA, ActionScript).
    В прикладной программе скрипт — это программа, которая автоматизирует некоторую задачу,
    которую без сценария пользователь делал бы вручную, используя интерфес программы.

Справочники скриптовых языков и библиотеки веб-скриптов

  • Портал Web-Script
    HTML, CSS, PHP, Perl, JavaScript, Object Pascal…
  • SCRIPT information network
    (обзоры и некоторые руководства по языкам скриптов: JS, VBS, Perl, PHP).
  • Скрипты на WOweb.ru — Лучшие скрипты — Бесплатные скрипты.

Встроенные (прикладные) сценарные языки

Сценарные языки этого типа начали появляться в 1980-е годы, когда на промышленных ПК стало возможным интерактивное общение с ОС.
В клиент-серверной архитектуре такие языки работали в клиентской части программного обеспечения.

Это такие языки как:

  • AutoLISP (диалект Лисп в САПРе AutoCAD),
  • ECMAScript и его диалекты (JScript и JavaScript, применяемые в
    клиентском веб-программировании,
    и ActionScript — язык API во Flash-анимации),
  • Emacs Lisp (диалект Лисп в текстовых редакторах Emacs),
  • ERM (ER-модель для описания концептуальной схемы предметной области),
  • Game Maker Language,
  • LotusScript,
  • MQL4 script,
  • UnrealScript,
  • VBA (Visual Basic for Application),
  • ВЯ 1С:Предприятие.

Командно-сценарные языки (в т.ч. скрипт-оболочки ОС)

Они появились ещё в 1960-х годах для управления заданиями в операционных системах (самый известный — JCL для OS/360).
В этот класс входят языки пакетной обработки (англ. batch language)
и языки командных оболочек, например sh (и его разновидности bash, csh, ksh) для Unix.
Эти языки чаще всего используются в пакетном режиме обработки.

Другие известные командно-сценарные языки:

  • Pilot,
  • REXX (от IBM для OS/2),
  • AppleScript (язык сценариев для Apple);
  • интерпретаторы командной строки COMMAND.COM и cmd.exe,
  • а также скрипт-язык VB Script
  • и средство автоматизации PowerShell от Microsoft для MS DOS, OS/2 и Windows.

Юникс-оболочки Shell (sh, csh, bash)

Bourne shell (часто sh по имени исполняемого файла) — ранняя командная оболочка UNIX,
разработанная 1978 г. Стивеном Борном из Bell Labs
и выпущенная в составе 7-го издания операционной системы UNIX (UNIX Version 7).
Даннаяоболочка является де-факто стандартом и доступна почти в любом дистрибутиве *nix.
Существует много командных оболочек, основанных (идейно или напрямую) на Bourne shell.

C shell (csh) — командная оболочка UNIX со встроенным скриптовым языком, разработанная Биллом Джоем,
активным разработчиком BSD UNIX, в 1979 году.
Базировался на коде командного интерпретатора шестой версии UNIX.
Скриптовый язык не уступает шеллу Борна по мощности, но отличается синтаксисом.
В то время как Борн скопировал все основные операторы с языка Algol 68, Билл Джой использовал в качестве макета
язык C, вероятно, руководствуясь своими предпочтениями и предпочтениями других пользователей BSD UNIX.

Bash (от англ. Bourne again shell, каламбур «Born again» shell — «Возрождённый» shell) —
усовершенствованная и модернизированная вариация командной оболочки Bourne shell.
Одна из наиболее популярных современных разновидностей командной оболочки UNIX.
Особенно популярна в среде GNU/Linux, где она часто используется в качестве предустановленной командной оболочки.

Bash — это акроним от Bourne-again-shell, «еще-одна-командная-оболочка-Борна».
Название — игра слов: Bourne-shell — одна из популярных разновидностей командной оболочки для UNIX (sh),
автором которой является Стивен Борн (1978), усовершенствована в 1987 году Брайаном Фоксом.
Фамилия Bourne (Борн) перекликается с английским словом born, означающим «родившийся», отсюда: рождённая-вновь-командная оболочка.

  • .

Универсальные сценарные языки (общего назначения)

Для человека с молотком любая проблема кажется гвоздем.

Язык CGI-программирования Perl

Одногорбый верблюд дромадер - символ Перла

PHP — это малое зло, созданное некомпетентными любителями,
а Perl — это громадное и хитроумное зло, созданное опытными и извращёнными профессионалами.
(Jon Ribbens, программист)

Два девиза Perl:

  1. есть больше одного способа сделать это;
  2. простые вещи должны быть простыми, а сложные вещи — возможными.

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения,
созданный Ларри Уоллом, лингвистом по образованию.
Название языка представляет собой аббревиатуру от Practical Extraction and Report Language
(«практический язык для извлечения данных и составления отчётов»).
Сначала аббревиатура состояла из 5 символов и совпадала с английским словом pearl («жемчужина»).
А когда стало известно, что такой язык существует, букву «а» убрали.

Основной особенностью языка считаются его богатые возможности для работы с текстом,
в том числе реализованные при помощи регулярных выражений.
Perl унаследовал много свойств от языков С, shell script, AWK.

На сегодняшний день Perl стал неотъемлемым инструментом в инструментарии web-программистов.
В отличии от таких технологий как JavaScript и VBScript, perl-скрипты выполняются на сервере [альтернатива PHP],
что позволяет создавать полноценные интерактивные приложения, управлять базами данных, почтой,
создавать баннерные сети, счетчики, гостевые книги, форумы и многое, многое другое.

Perl прославился как язык, программы на котором очень сложно понять спустя 5 минут после написания.
Обилие одно-двух-символьных функций и переменных делает своё дело.
Текст больше похож на набор смайликов, чем на программу. Особенно, если в ней используются регулярные выражения.
Perl — один из немногих языков, где регулярные выражения закреплены на уровне синтаксиса.

  • The Perl Directory — perl.org Официальный сайт разработчиков Perl.
  • Язык программирования PERL.
    Профессионально созданный сайт. Хорошо наполнен [!]
  • Учебник по Perl. В т.ч.
    Ресурсы Perl.
  • Что такое Перл? Прошлое, настоящее и будущее языка.
  • О Перловке на Лурке.
  • Проект «Язык программирования Perl».
    Проект создан с целью помочь как начинающим так и профессионалам в разработке своих web приложений на Perl.
    Здесь Вы найдёте документацию и учебники по Perl, справочники [хорошие статьи разных авторов].
  • ЯЗЫК ПРОГРАММИРОВАНИЯ PERL.

Язык функционального программирования Python

Питон - символ скриптового языка Python

Python — объектно-ориентированный язык сверхвысокого уровня.
Python, в отличии от Java, не требует исключительно объектной ориентированности,
но классы в Python так просто изучить и так удобно использовать,
что даже новые и неискушенные пользователи быстро переходят на ОО-подход…

Одной из интересных синтаксических особенностей языка является выделение блоков программы с помощью отступов.

Появился в: 1990 г.
Автор(ы): Гвидо ван Россум.
Испытал влияние: ABC, Modula-3, Lisp, Smalltalk, C, Java, Icon.
Повлиял на: Ruby, Boo, Groovy, ECMAScript.

Groovy — объектно-ориентированный язык программирования, разработанный для платформы Java
как дополнение к языку Java с возможностями Python, Ruby и Smalltalk.

Python (Питон) — высокоуровневый язык программирования общего назначения
с акцентом на производительность разработчика и читаемость кода.
Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

Python поддерживает несколько парадигм программирования [!], в т.ч.
структурное, объектно-ориентированное, функциональное, императивное, аспектно-ориентированное.

Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений,
поддержка многопоточных вычислений и удобные высокоуровневые структуры данных.

Код в Python организовывается в функции и классы, которые могут объединяться в модули (которые в свою очередь могут быть объединены в пакеты).

Python пригодится в случаях, когда задачи, связанные с анализом данных, вплетаются в работу веб-приложений,
или если статистический код требуется инкорпорировать в рабочую базу данных.
Python, будучи полнофункциональным языком программирования, отлично подходит для реализации алгоритмов с их последующим практическим использованием.

Обязательно установите NumPy /SciPy (научные вычисления) и pandas (манипуляции с данными), чтобы приспособить Python для анализа данных.
Кроме того, обратите внимание на библиотеку matplotlib для создания графики и scikit-learn для машинного обучения.

Контекстный интерпретатор REBOL

REBOL (Relative Expression Based Object Language) — контекстно-зависимый объектный язык программирования,
созданный специально для распределенных вычислений в Web. Позиционируется как язык обмена сообщениями.

REBOL (Ребол) — это высокоуровневый мета-язык.
Основные концепции языка: скрипты (тексты), выражения, серии, блоки, файлы, функции, объекты, модули, порты,
протоколы, синтаксический анализ, математика, ошибки, графика нижнего уровня, графические диалекты
.
Язык прост в понимании, ему можно учить школьников и немедленно начинать программировать.
Но, одновременно, он достаточно мощный благодаря своей универсальности,
а отдельные приемы и методологии могут быть предметом глубокого университетского курса.

Интерпретатор Ruby

Ruby - рубин программирования?

Ruby — универсальный скрипт-язык для ООП, пришедшего на смену Perl + Python,
и сочетающего также достоинства языков Smalltalk, Eifel, Ada, Java.
Используется для быстрого программирования прототипов систем и в других областях.

История языка Ruby началась в 1993 году, когда Якихиро Мацумото (известный как “matz”)
взялся за реализацию собственного скриптового языка, который бы был таким же мощным и удобным, как Perl,
и более объектно-ориентированным, чем Python [концептуально повлияли также
языки искусственного интеллекта].

Первая общедоступная версия 0.95 увидела свет в 1995 году. После этого Ruby быстро получил широкое распространение в Японии —
это легко объяснимо происхождением языка и отсутствием языкового барьера между первыми пользователями Ruby и его создателем.
За период с 1995 по 2002 год в Японии вышло около двадцати книг о Ruby, и Ruby стал в этой стране более популярным языком, чем Python.
После 2000 года началось распространение Ruby по всему миру…

Сейчас, по данным компании Black Duck Software, Ruby — четвёртый по их количеству язык программирования после Java, C/C++ и C#…
Тем не менее, это говорит не о популярности Ruby, а об активном и заинтересованном сообществе разработчиков вокруг языка,
которые так страстно и трепетно относятся к последнему…

Регулярные выражения — спасение от всех бед для одних и ночной кошмар для других разработчиков,
а если говорить объективно, то это мощнейший инструмент, требующий, однако, большой осторожности при применении.
Регулярные выражения (регексы, регекспы, регулярки) в языке Ruby основаны на синтаксисе Perl 5
и потому в основных чертах знакомы всем, кто использовал Perl, Python или PHP.
Но Ruby тем и хорош, что каждый компонент языка реализован со своим собственным подходом,
упрощающим использование данного инструмента и увеличивающим его мощность.

Главная цель Ruby — эффективность разработки программ, и пользователи найдут, что программирование на нем эффективно и даже забавно.
Этот язык хорошо приспособлен для таких проблемных областей, как обработка текста, программирование CGI и XML,
программирование для сети, приложения с графическим интерфейсом, прототипирование и обучение программированию.

Ruby – это тщательно сбалансированный язык. Его создатель, Yukihiro Matsumoto,
соединил конструкции его любимых языков (Perl, Smalltalk, Eiffel, Ada и Lisp),
чтобы сформировать новый язык, в котором функциональное программирование уравновешено императивным (процедурным).
Он часто повторял, что он “старается сделать Ruby естественным, но не простым языком в том плане, как он отображает жизнь.
Основываясь на этом, он добавляет: «Ruby прост на вид, но очень сложен внутри, подобно нашему человеческому телу.»

Порталы о языке Ruby

Обзоры и статьи о Ruby

Сценарный интерпретатор R со статанализом и графопостроением

R — интерпретируемый язык программирования, основным способом работы с которым является командный интерпретатор.
Язык является регистрозависимым, в плане синтаксиса он похож, с одной стороны, на функциональные
языки типа Scheme, с другой — на типичные современные сценарные языки, с простым синтаксисом и небольшим набором основных конструкций.
Язык объектный: любой программный объект в нём имеет набор атрибутов — именованный список значений, определяющих его.

В целом, как язык программирования, R довольно прост и даже примитивен.
Его наиболее сильная сторона — возможность неограниченного расширения с помощью пакетов.
В базовую поставку R включен основной набор пакетов, а всего по состоянию на 2019 год доступно более 15 316 пакетов.
В R реализованы практически все актуальные средства универсальных статистических вычислений,
такие как регрессионный анализ и анализ временных рядов,
а также множество специфических алгоритмов для решения узкоспециализированных задач и исследований в отдельных областях.

Ещё одна особенность языка — возможность создания качественной графики типографского уровня,
которая может быть экспортирована в распространённые графические форматы и использована для презентаций или публикаций.
Имеются готовые пакеты, связывающие R с GUI-фреймворками (например, основанными на Tcl/Tk)
и позволяющие создавать специализированные утилиты статистического анализа с графическим интерфейсом пользователя
и отображением результатов в виде графиков и диаграмм.

Язык R просто создан для визуализаций. Обязательно ознакомьтесь с пакетами для визуализации ggplot2, ggvis, googleVis и rCharts.

Событийный язык прототипов Tcl (Tool command language)

Перо - символ скрипт-языка Tcl

Интерпретируемый язык программирования высокого уровня Tcl ориентирован преимущественно на автоматизацию рутинных процессов ОС
и крупных программных систем, состоя из мощных команд, ориентированных на работу с абстрактными нетипизированными объектами.

Принципиальное отличие Tcl от командных языков ОС состоит в независимости от типа системы и, самое главное,
он позволяет создавать переносимые программы с графическим интерфейсом (GUI).

Tcl (Tool Command Language — «командный язык инструментов», читается «тикль») — скриптовый язык высокого уровня.
Tcl часто применяется совместно с графической библиотекой Tk (Tool Kit).
Связку Tcl/Tk по-русски иногда называют «Так-тикль».

Области применения языка — быстрое прототипирование, создание графических интерфейсов для консольных программ (пакетов программ),
встраивание в прикладные программы, тестирование. Иногда Tcl применяется для создания CGI скриптов.

Tcl, наряду с Perl и Python, стал одним из 3 классических скриптовых языков общего назначения.
Эта троица фигурирует не только в качестве списка свободных дистрибутивов, собираемых в ActiveState,
но и, например, как языки, на которых (помимо диалекта PL/pgSQL) можно писать триггеры и хранимые процедуры сервера БД PostgreSQL.

Особенностью языка является отсутствие ключевых слов.
Понятие команды в Tcl аналогично понятию процедуры или функции распространённых языков программирования.
Это относится и к управляющим конструкциям языка.
В сочетании с элементарным синтаксисом это обеспечивает хорошую расширяемость языка,
в том числе и библиотеками, написанными на других языках, таких как C/C++ или Java.

В Tcl также качественно реализована модель управления программой на основе событий.
События могут генерироваться таймером, при появлении данных в канале, изменении значения переменной,
при завершении какой-либо внешней программы, или просто при работе пользователя с интерфейсом Tk.
Можно задавать свои события и управлять ими.

Как и большинство современных скриптовых языков Tcl содержит развитые средства работы с регулярными выражениями,
работает с ассоциативными массивами и другими динамическими структурами данных.

В базовом Tcl нет поддержки ООП, однако существует множество расширений Tcl объектно-ориентированными механизмами,
реализованных в виде подключаемых библиотек на С, или самом Tcl.
Пространства имён поддерживаются на уровне ядра языка.

На Tcl легко программировать в функциональном стиле: он обеспечивает такие механизмы,
как функции высшего порядка и абстракции функций, хотя Tcl редко используют таким образом.

Специальные сценарные языки

Язык тиражирования Lua

Lua ([лу́а], порт. «луна») — интерпретируемый язык программирования, разработанный подразделением Tecgraf
(Computer Graphics Technology Group) Католического университета Рио-де-Жанейро (Бразилия).
Интерпретатор языка является свободно распространяемым, с открытыми исходными текстами на языке Си.

По возможностям, идеологии и реализации язык ближе всего к JavaScript,
однако Lua отличается более мощными и гораздо более гибкими конструкциями
[поэтому, несмотря на его изначально узкое предназначение, он считается уже языком общего назначения].

Язык широко используется для создания тиражируемого программного обеспечения
(например, на нём написан графический интерфейс пакета Adobe Lightroom).

Также получил известность как язык программирования уровней и расширений во многих играх (в том числе World of Warcraft)
из-за удобства встраивания, скорости исполнения кода и лёгкости обучения.


На правах рекламы (см.
условия):


Ключевые слова для поиска сведений о сценарных языках программировании:

На русском языке: компьютерные языки написания скриптов, сценарное программирование, интерпретаторы, скрипт-языки;

На английском языке: script languages, Perl, Ruby, Python.


Страница обновлена 28.09.2022

Яндекс.Метрика


Ошибка базы данных: Table ‘a111530_forumnew.rlf1_users’ doesn’t exist

Языки сценариев: что это такое и для чего они нужны?

Оригинал: Scripting Languages: What and Why?

Автор: Juliet Kemp

Дата публикации: 14 декабря 2016 г.

Перевод: А.Панин

Дата перевода: 8 января 2017 г.

Для чего компилировать исходный код программы, если от нее не требуется высокой производительности?

Для чего это нужно?

  • Вы сможете выбрать язык программирования, лучше всего подходящий для ваших целей.
  • Вы научитесь создавать асинхронные сценарии для последующего использования на сетевых ресурсах.

Языки сценариев на сегодняшний день используются чуть ли не повсеместно; но чем они являются на самом деле? По сути, язык сценариев отличается от традиционного языка программирования не функциями, а назначением: он предназначен для создания и последующего исполнения сценариев (или, грубо говоря, автоматизированного исполнения последовательностей команд).

Это означает, что типичный язык сценариев является интерпретируемым, а не компилируемым, а также позволяет использовать динамическую типизацию. (Теоретически вы также можете написать «сценарий» на языке программирования другого типа, но при этом такой язык, как Java, окажется не лучшим вариантом для выполнения данной работы.) Приведенная выше классификация языков программирования на основе их областей применения подразумевает, что граница раздела между языками сценариев и языками программирования общего назначения является немного размытой. Под «сценарием» обычно понимается единый фрагмент кода, который исполняется от начала до конца, но такие языки сценариев общего назначения высокого уровня, как Perl, Python и Ruby могут использоваться для разработки «сценариев», состоящих из тысяч строк кода и множества компонентов.

Как правило, языки сценариев проектируются с целью достижения максимальной скорости изучения и разработки. Однако, ввиду того, что данные языки являются интерпретируемыми (это утверждение справедливо в большинстве случаев, но имеются и исключения, такие, как язык Ruby, который может быть как интерпретируемым, так и компилируемым в зависимости от реализации), созданные с их использованием сценарии зачастую исполняются медленнее, чем бинарные программы, созданные с использованием компилируемых языков программирования. Постоянно растущая популярность этих языков напрямую связана с постоянным повышением производительности доступного аппаратного обеспечения. Чем быстрее работает компьютер, тем меньшее значение будет иметь разница в скорости между интерпретируемыми и компилируемыми программами; при этом решающее значение будет иметь скорость процесса разработки. Пропуск этапа компиляции значительно упрощает цикл разработки и отлично сочетается с такими современными практиками программирования, как экстремальное программирования. При этом по мере увеличения объема кода и сложности программного обеспечения может появиться смысл в возврате к использованию компилируемого языка программирования.

На сегодняшний день в мире языков сценариев доминируют высокоуровневые динамические языки программирования общего назначения, обычно рассматриваемые как «связующие» языки, объединяющие несколько программных компонентов. Другие языки сценариев, такие, как Sed, Awk или (являющийся более современным) JavaScript являются предметно-ориентированными. JavaScript является встраиваемым языком, который используется исключительно в рамках определенных приложений или наборов приложений. Emacs Lisp является еще одним специфичным для приложения языком сценариев, при этом во многих играх используются собственные реализации языков сценариев или особые диалекты существующих языков сценариев. Наконец, языки для управления задачами и языки командных интерпретаторов, таких, как Bash, являются еще одной формой языков сценариев и обычно используются в качестве «связующих» языков для интерпретаторов и утилит с интерфейсом командной строки.

История развития языков сценариев

Первые мэйнфреймы не поддерживали широкого спектра механизмов (или вообще не поддерживали механизмов) взаимодействия с пользователями; вместо них использовались очереди задач. Для упрощения процесса обработки задач были разработаны различные языки, включая язык Job Control Language, созданный специалистами компании IBM.

В 1960 году на смену языкам обработки задач пришли интерактивные командные оболочки и сценарии, позволяющие автоматизировать запуск программ. Они позволили задействовать дополнительные удобные функции благодаря работе множества программистов. Язык TRAC, созданный Калвином Муерсом, принес идеи подстановки команд в сценариях, а также использования вывода этих команд в рамках этих же сценариев — этот механизм напоминает оператор обратных кавычек в современных командных оболочках.

Стьюарт Мадник из MIT разработал язык сценариев CMS EXEC (в оригинале имевший имя COMMAND) для IBM VM/CMS OS в конце 60-х годов прошлого века. Он поддерживал управляющие выражения различных типов (включая условные инструкции и циклы), а также несколько встроенных функций. Очевидно, что именно с данного момента началось развитие современных языков сценариев.

Множество Мандельброта

Множество Мандельброта определено на плоскости комплексных чисел (представленной, как система координат (x,y)). Для каждого комплексного числа c должна существовать ограниченная последовательность:

zk+1 = zk2 + c

Если для числа c последовательность является ограниченной, это число находится в множестве Мандельброта. Если же последовательность является неограниченной, число c не находится в множестве Мандельброта.

При расчете мы будем осуществлять 50-кратную итерацию в рамках последовательности и в том случае, если значение zk + 1 будет покидать окружность радиусом 2 вокруг значения c, мы будем делать вывод о том, что число c не находится в рассматриваемом множестве.

Наша система координат будет иметь ось x с координатами от -2 до 1 и ось y с координатами от -1 до 1. Мы будем отображать ее с помощью ASCII-символов начиная с верхнего левого угла (с координатами x=-2, y=1), причем вывод результатов будет заключаться в последовательном выводе строк по оси y. Каждый ASCII-символ (пробел или *) будет соответствовать сдвигу на 0.05 по оси координат. Вы сможете самостоятельно заменить жестко заданные значения для того, чтобы оценить полученные в результате изменения или добавить поддержку цветов для того, чтобы визуально усложнить вывод.

С помощью соответствующей программы вы можете самостоятельно сгенерировать графическое представление рассматриваемого множества и увеличить его масштаб для более подробного рассмотрения особенностей полученного фрактала.

Множество Мандельброта

Perl

Ларри Уолл выпустил версию 1.0 интерпретатора языка Perl в 1987 году. Его цель заключалась в создании языка сценариев общего назначения для Unix, максимально упрощающего процесс обработки отчетов. Повышение производительности доступного аппаратного обеспечения ознаменовало эпоху, в которой эффективность практик программирования приобрела большую важность по сравнению с производительностью кода, а Ларри Уолл, в свою очередь, не преминул подтвердить данный тезис на практике. Предшественниками языка Perl были языки Awk (представленный в 1977 году) и Unix shell sh (представленный в 1978 году), причем сам этот язык опередил появление ядра Linux (первая версия которого была представлена в 1991 году) на несколько лет. (Обратитесь к странице, расположенной по адресу http://history.perl.org/PerlTimeline.html, если вас интересует шкала времени с указанием различных этапов развития Unix/Linux и выдержками из соответствующих новостных групп.)

Версии 2 (1988 года) и 3 (1989 года) интерпретатора Perl были представлены общественности спустя непродолжительное время. Версия 4 интерпретатора Perl была выпущена лишь для того, чтобы четко увязать ее с каноническим руководством по программированию на языке Perl, изданным под названием «Программирование на Perl» (в оригинале «Programming Perl» или «Camel Book»).

Код версии 5 интерпретатора Perl (1994 года) был частично переписан и позволял использовать ряд новых сущностей, включая объекты и модули. Поддержка этих сущностей, в свою очередь, ознаменовала расцвет ресурса CPAN (Comprehensive Perl Archive Network), являющегося репозиторием компонентов интерпретатора и модулей Perl, в 1995 году. Хотя CPAN и является крайне полезным ресурсом, на нем несложно потеряться; на момент написания статьи на нем было опубликовано 157742 модуля, причем качество этих модулей значительно отличается и в некоторых случаях на нем крайне сложно найти модуль высокого качества для выполнения той или иной задачи. (Проект MetaCPAN и модуль Task::Kensho от Enlightened Perl Organisation были созданы специально для решения описанной проблемы.)

Версия 6 интерпретатора Perl находится в стадии активной разработки и на сегодняшний день рассматривается разработчиками как отдельная реализация языка программирования; обратная совместимость с классическим языком Perl не является их целью, тем не менее, в будущем Perl 6 должен стать «эталонной реализацией языка Perl». Изменения в язык вносятся главным образом с целью упорядочивания его синтаксиса. Разработка данной версии интерпретатора началась в 2000 году и продолжается до сих пор.

Язык Perl все еще активно используется и, без сомнения, будет актуален в течение долгого времени. Однако, в последнее время он утратил свою былую популярность, особенно в рамках новых проектов. «Всегда существует более одного способа выполнения конкретной задачи» — девиз разработчиков языка Perl, доказывающий его беспрецедентную гибкость, которая является как его главным достоинством, так и его главным недостатком.

Совет: несмотря на то, что языки Sed и Awk являются предметно-ориентированными, вы сможете найти и код общего назначения на этих языках, обратившись к веб-сайту Rosetta Code!

Дополнительная информация: неофициальной расшифровкой названия языка Perl является «Practical Extraction and Reporting Language» («практический язык для извлечения данных и составления отчетов»), но Ларри Уолл предпочитает использовать свой шуточный вариант «Pathalogically Eclectic Rubbish Lister» («паталогически эклектичный перечислитель мусора»).

Код на Perl

Интерпретатор Perl поставляется в составе практически всех современных дистрибутивов Linux; если он не установлен в вашей системе, вам придется воспользоваться менеджером пакетов дистрибутива для его установки. А это код программы «Hello World»:

#!/usr/bin/perl -w
print "Hello Worldn";

Последовательность символов #! является последовательностью шебанг, сообщающей системе о том, что остальную часть строки следует считать путем к исполняемому файлу интерпретатора, причем при запуске интерпретатора нужно передать ему путь к открытому файлу сценария. Таким образом, при запуске сценария hello.pl первая его строка сообщает системе о том, что следует исполнить бинарный файл /usr/bin/perl и передать ему путь к файлу сценария hello.pl для интерпретации. Интерпретаторы языков сценариев обычно игнорируют последовательность символов шебанг либо из-за того, что символ # является индикатором строки комментария, либо из-за того, что эта последовательность символов известна интерпретатору и игнорируется им.

Параметр -w позволяет активировать механизм вывода сообщений об ошибках, который является весьма полезным на практике. (Вы также можете добавить в свой сценарий строку use strict; сразу же после первой строки для того, чтобы заранее получать информацию об определенных ошибках времени компиляции и исполнения.) Вы наверняка заметили, что все инструкции языка Perl заканчиваются символом ;. Теперь следует сделать файл сценария исполняемым и запустить его с помощью команды ./hello.pl.

А это гораздо более интересный код, отображающий множество Мандельброта в окне вашего эмулятора терминала:

Как видно из кода, функции/подпрограммы идентифицируются с помощью ключевого слова sub. Параметры передаются в них в виде списков и могут извлекаться по одному путем специальной операции сдвига. При этом параметры не должны каким-либо образом описываться рядом с именами функций. Наша подпрограмма возвращает ненулевое значение в том случае, если значение не входит в множество Мандельброта и нулевое значение в противном случае.

Циклы for используют по три значения: for (начальное_значение; конечное_значение; приращение) {..}. Вы можете как увеличивать, так и уменьшать значение переменной в рамках цикла for, кроме того, никто не запрещает вам использовать вложенные циклы таким же образом, как в примере выше.

Использованный в коде выше оператор ? является сокращенным вариантом условной инструкции it-then-else. В том случае, если функция возвращает истинное логическое значение true (обозначающее, что значение находится за пределами множества), мы выводим символ пробела; в противном случае мы выводим символ звездочки.

Исполнение сценария на языке Perl

Исполнение сценария на языке Perl

Python

Язык Python является чуть ли не ровесником языка Perl; Гвидо ван Россум (великодушный пожизненный диктатор сообщества разработчиков Python) начал работу над реализацией первой версии его интерпретатора под номером 0.9.0 в 1989 году и выпустил ее в 1991 году. На тот момент интерпретатор уже позволял использовать классы и механизм их наследования, а также функции, основные типы данных и модули. В 1994 году наконец была выпущена версия 1.0 данного интерпретатора, поддерживающая функции lambda, map, filter и reduce, хорошо знакомые разработчикам, использующим язык Lisp. Изначально логичный и простой синтаксис языка Python прорабатывался главным образом с целью привлечения к разработке программных продуктов не-программистов; на сегодняшний день он все еще дорабатывается с целью достижения максимальной логичности и простоты синтаксических конструкций, но не-программисты уже не рассматриваются в качестве его целевой аудитории.

Функции языка Python могут свободно расширяться, причем модули могут разрабатываться как с использованием языка Python, так и с использованием языка C; это означает, что коллеги Гвидо ван Россума, привыкшие к языку C, могли начинать работу с новым для них языком Python без дополнительной подготовки. Одна из целей автора языка заключалась в создании своеобразного моста между языком командной оболочки и языком C; другими словами, он создавал второй язык для разработчиков, постоянно использующих языки C и C++, который мог бы применяться в тех случаях, когда использование языка C или C++ нецелесообразно. В основу языка Python были положены идеи, заимствованные из таких языков программирования, как ABC (язык программирования для не-программистов), C, Bash, Lisp, Perl и Java.

В версию интерпретатора 2.0, выпущенную в 2000 году, была добавлена абстракция списков, предназначенная для упрощения методики создания и обработки различных списков и основывающаяся на идее, заимствованной из функциональных языков программирования. Версия интерпретатора 3.0 была выпущена в 2008 году и содержала огромное количество изменений, направленных главным образом на сокращение избыточности, накопленной в процессе разработки предыдущих версий интерпретатора Python (с неизбежным нарушением обратной совместимости). В отличие от подхода разработчиков интерпретатора Perl, у разработчиков версии 3.0 интерпретатора Python был следующий девиз: «Должен существовать один, а еще лучше единственный очевидный способ выполнения конкретной задачи». При этом была сохранена мультипарадигменность, присущая языкам сценариев общего назначения; в результате вы можете использовать язык Python для написания объектно-ориентированного, структурного, функционального кода и так далее. Подобная гибкость хотя и является полезной, но нередко также становится причиной возникновения сложностей при разборе кода других людей особенно начинающими разработчиками.

Код на языке Python является компактным (вам придется написать меньше строк кода для выполнения той же работы по сравнению, к примеру, с языком Java) и хорошо читаемым, исполняется достаточно быстро, позволяет вести быструю разработку программ (как и все остальные языки сценариев), позволяет применять приемы объектно-ориентированного программирования и может ложиться в основу программных решений для широкого спектра областей применения. Однако, он все же исполняется медленнее, чем машинный код, полученный в результате использования компилируемых языков программирования, и, несмотря на благотворное воздействие некоторых оптимизаций, не используется в веб-приложениях на стороне клиента. Появление огромного количества библиотек для данного языка в последние годы значительно повысило его популярность; он всегда был доступен для начинающих разработчиков, а сейчас стал актуален и для профессионалов.

Прекрасное интервью Гвидо ван Россума об истоках языка программирования Python доступно по ссылке www.artima.com/intv/pythonP.html.

Код на языке Python

В вашей системе наверняка также установлен интерпретатор языка Python (если это не так, вам следует воспользоваться менеджером пакетов вашего дистрибутива для его установки). А это код программы «Hello World»:

#!/usr/bin/python
print "Hello World"

Вам не придется использовать последовательность символов, соответствующую символу перехода на новую строку, в конце выводимой строки. Также вы не должны использовать символ точки с запятой для завершения инструкции, ведь интерпретатор Python использует в качестве его эквивалента символ пробела.

А это код на языке Python, визуализирующий множество Мандельброта:

Как и в случае языка программирования Perl, мы импортируем библиотеку (в данном случае это библиотека math) для работы с комплексными числами. В Python x + yi является аналогом x + y * 1j.

Функции обозначаются с помощью ключевого слова def. В рамках циклов for используется ключевое слово range. В рамках диапазонов, объявляемых с помощью ключевого слова ranage, должны использоваться целочисленные значения, но, как и в данном случае, при необходимости использования цикла с нецелочисленными значениями, вы можете умножить целочисленное значение из диапазона на нецелочисленное и использовать результат в рамках цикла.

Так как интерпретатор Python автоматически добавляет символ новой строки при использовании функции print, для получения вывода без символов новой строки нам придется использовать метод объекта строки join. Обратите внимание на циклы for в рамках инструкции print/join, а также методику использования условной инструкции if not ... else. В данном случае для сохранения результатов работы функции mandelbrot и объединения их в рамках списка используется абстракция списков.

Исполнение сценария на языке Python

Исполнение сценария на языке Python

JavaScript

Как известно, язык JavaScript был разработан Бренданом Эйхом, работавшим компании Netscape, за 10 дней в 1995 году. В то время компания Netscape предлагала клиентам серверное решение с переносимой версией виртуальной машины Java для исполнения апплетов на стороне сервера и нуждалась в более простом интерпретируемом и доступном для не-программистов языке программирования для взаимодействия с ними. Изначально этот язык носил имя LiveScript и был интегрирован в состав веб-браузера Netscape Navigator в 1995 году, но через некоторое время он был переименован в JavaScript одновременно с добавлением поддержки апплетов Java в этот веб-браузер, что, вероятно, являлось очередным маркетинговым ходом. Это интерпретируемый язык программирования для разработки сценариев, исполняющихся на стороне клиента непосредственно в веб-браузере.

Впоследствии специалисты компании Microsoft осуществили обратный инжениринг JavaScript с целью создания языка JScript, поддержка которого была добавлена в веб-браузер IE3 и веб-сервер IIS в 1996 году. Различия между двумя упомянутыми реализациями языка программирования затрудняли разработку интерактивных веб-сайтов, корректно работающих в обоих веб-браузерах, причем всю вину за это положение вещей начали возлагать именно на JavaScript. По этой причине компания Netscape связалась с организацией по международным стандартам ECMA, в результате чего в 1997 году был опубликован официальный стандарт ECMAScript. Язык JavaScript является лучшей известной реализацией данного стандарта; ActionScript 3 является еще одной его реализацией.

JavaScript опирается на возможности веб-браузера для предоставления объектов и методов, позволяющих взаимодействовать с окружением. Данная архитектура обуславливает потенциальные проблемы с безопасностью, которые были актуальны в прошлом. Некорректное использование возможностей языка может привести к созданию уязвимых сценариев, что нередко встречается в продуктах отдельных разработчиков или крупных компаний.

Скорее всего, это обстоятельство лишь ухудшило репутацию JavaScript, ведь данный язык изначально разрабатывался для неопытных владельцев веб-сайтов, а не профессиональных программистов. Многие из этих неопытных владельцев веб-сайтов просто используют чужие сценарии на своих веб-сайтах без проверки их качества или безопасности.

Однако, по мере роста популярности веб-приложений и в результате создания технологии Ajax (Asynchronous JavaScript and XML: механизм асинхронного взаимодействия с веб-сервером для обновления состояния элементов веб-страницы без ее полной перезагрузки, позволяющий повысить пользовательские качества веб-приложений), репутация JavaScript начала улучшаться, а сам язык стал все чаще использоваться профессионалами. Сегодня язык JavaScript активно используется для создания динамических веб-приложений и веб-страниц — без него практически не обойтись, если необходимо создать современную веб-страницу. Фреймворк Node.js наконец позволил использовать JavaScript не только на стороне клиента, но и на стороне сервера, а API HTML 5 позволяют размещать на страницах множество новых управляющих элементов, улучшая их пользовательские качества — разумеется, не в ущерб безопасности.

Код на языке JavaScript

Вы не сможете инициировать исполнение сценария на языке JavaScript с помощью команды в терминале; для того, чтобы испытать сценарий в работе вам придется открыть с помощью веб-браузера файл hello.html со следующим содержимым:

<!DOCTYPE HTML>
<html>
<head></head>
<body>

<script>
alert("Hello World")
document.write("Hello World")
</script>

</body>
</html>

Это минималистичная HTML-страница, предназначенная исключительно для исполнения сценария, код которого расположен в рамках тэга <script>. Фактически данный сценарий осуществляет двукратный вывод строки «Hello world»: вызов alert позволяет вывести всплывающее предупреждение (с автоматически добавленной кнопкой OK); вызов document.write позволяет вывести упомянутую строку в рамках тела документа HTML. Как и язык Python, язык JavaScript в общем случае не требует наличия символа точки с запятой после каждой инструкции (но позволяет использовать его), причем по поводу того, стоит ли использовать этот символ после каждой из инструкций или все же не стоит, не существует единого устоявшегося мнения. Вы также можете создать отдельный файл сценария с именем file.js и подключить его к HTML-странице:

А это код сценария для работы с множеством Мандельброта:

В первой строке сценария вы можете установить идентификатор элемента документа, с которым будет работать сценарий на языке JavaScript. (Обратите внимание на то, что элемент тела документа должен иметь идентификатор, то есть, значение параметра id для корректной работы сценария.)

Функции в JavaScript обозначаются с помощью ключевого слова function, причем вы можете передавать в функции множество параметров одновременно.

Как и в Python, в JavaScript переменные не должны иметь четко указанных типов, но при этом они должны объявляться с помощью ключевого слова var перед использованием (хотя это и не обязательно).

Циклы for работают практически так же, как и в двух описанных выше языках сценариев. Так как в JavaScript нет библиотеки для работы с комплексными числами, нам придется обрабатывать их действительные и мнимые части по отдельности. Инструкция document.write не позволяет выводить символы пробелов, поэтому вместо них в данном сценарии осуществляется вывод символов обратных кавычек.

Если вам хочется использовать все возможности HTML для вывода более привлекательной версии фрактала (не на основе ASCII-символов), вы также можете поискать соотвествующий код на веб-сайте Rosetta Code (rosettacode.org). И, как в случае с языками Perl и Python, существует огромное количество сетевых ресурсов с информацией, необходимой для изучения дополнительных возможностей JavaScript.

Процесс отладки сценариев на языке JavaScript может оказаться достаточно сложным из-за того, что сообщения об ошибках не выводятся в теле отображаемого документа; для отладки подобных сценариев может использоваться как ресурс JSLint (www.jslint.com), так и консоль JavaScript вашего веб-браузера

Процесс отладки сценариев на языке JavaScript может оказаться достаточно сложным из-за того, что сообщения об ошибках не выводятся в теле отображаемого документа; для отладки подобных сценариев может использоваться как ресурс JSLint (www.jslint.com), так и консоль JavaScript вашего веб-браузера

Bash

Bash значительно отличается от Perl, Python и JavaScript, так как является в первую очередь языком для управления задачами и исполнения команд. Но при этом он не перестает быть полноценным языком, который, тем не менее, не очень-то подходит для написания более чем одной-двух страниц кода.

Командная оболочка Bourne shell или sh была выпущена в 1977 году в составе UNIX Version 7 в качестве стандартного интерпретатора команд с поддержкой языка сценариев. Впоследствии она стала стандартной командной оболочкой UNIX и использовалась для выполнения широкого спектра задач, связанных с обслуживанием системы.

Проекту GNU, в рамках которого была начата разработка полностью свободного набора системного программного обеспечения, требовалась свободная полнофункциональная замена командной оболочки sh. В результате в 1989 году Брайн Фокс при финансовой поддержке Фонда Свободного Программного Обеспечения выпустил бета-версию командной оболочки Bash (Bourne-again shell). С того времени она стала стандартной командной оболочкой Linux (при этом такие командные оболочки, как tcsh и zsh также пользуются популярностью). Для того, чтобы узнать название используемой в данной момент командной оболочки вы можете просто выполнить команду echo $SHELL. Если в вашей системе используется какая-либо из альтернативных командных оболочек, вам будет достаточно выполнить команду /bin/bash для того, чтобы воспользоваться Bash.

Bash может исполнять отдельные инструкции, вводимые пользователем:

$ echo "Hello World"

Кроме того, она может исполнять файлы сценариев:

#!/bin/bash
echo "Hello World"

Bash не требует наличия символов точки с запятой после каждой из команд сценария, а трактует символы новой строки в качестве начальных символов отдельных команд

Bash не требует наличия символов точки с запятой после каждой из команд сценария, а трактует символы новой строки в качестве начальных символов отдельных команд

И это еще не все…

Преимущество языков сценариев заключается в высокой скорости разработки программных продуктов, которая достигается главным образом за счет поддержки динамической типизации. Исходя из этого, популярность языков сценариев, вероятнее всего, тесно связана с появлением механизмов модульного тестирования в инструментарии современных разработчиков; модульное тестирование позволяет снизить ценность строгой типизации, так как оно способно (или, по крайней мере, должно…) выявить как связанные с типами данных, так и некоторые другие ошибки. Разработчики быстрее пишут код на динамических языках программирования, отсутствие затрат времени на компиляцию также положительно сказывается на скорости разработки программных продуктов, а скорость аппаратного обеспечения современных компьютеров нивелирует значение скорости исполнения сценариев (которая, разумеется, ниже, чем у бинарных программ). Конечно же, это всего лишь теоретические измышления; они в принципе не могут быть применимы к каждому из существующих проектов.

Статистические данные, собранные на ресурсах GitHub и StackOverflow в начале 2005 года, говорят о том, что языки JavaScript, Python, Ruby и PHP находятся в первой десятке популярных языков программирования, достойно конкурируя с такими популярными языками, как Java и C/C++. При изучении рынка вакансий также несложно прийти к аналогичным выводам. (Статистические данные доступны по ссылкам www.sitepoint.com/whats-best-programming-language-learn-2015 и www.codingdojo.com/blog/8-most-in-demand-programming-languages-of-2015.) Web 2.0 ассоциируется с развитием новых технологий, активным использованием языков сценариев, а также такими новыми языками, как Lua, чрезвычайно легким и адаптируемым встраиваемым языком программирования с динамической типизацией. Конечно же, несмотря на мнения некоторых экспертов, языки сценариев не захватят мир программирования, но по прошествии 30 лет они, безусловно, начали играть более важную роль и предоставили разработчикам возможность использования более гибких синтаксических конструкций.


Если вам понравилась статья, поделитесь ею с друзьями:


Средняя оценка 1 при 1 голосовавших

Комментарии

Скриптовый
язык
(англ. scripting
language, также называют язык сценариев) –
язык программирования, разработанный
для записи «сценариев», последовательностей
операций, которые пользователь может
выполнять на компьютере. Простые
скриптовые языки раньше часто называли
языками пакетной обработки (batch languages
или job control languages). Сценарии всегда
интерпретируются, а не компилируются.

Сценарий
(скрипт)

это программа, которая автоматизирует
некоторую задачу, которую без сценария
пользователь делал бы вручную, используя
интерфейс программы.

Поскольку сценарии
интерпретируются из исходного кода
динамически при каждом исполнении, они
выполняются обычно значительно медленнее
готовых программ, оттранслированных в
машинный код на этапе компиляции. Поэтому
сценарные языки не применяются для
написания программ, требующих оптимальности
и быстроты исполнения. Но из-за простоты
они часто применяются для написания
небольших, одноразовых («проблемных»)
программ. Также, в плане быстродействия
скриптовые языки можно разделить на
языки динамического разбора (sh,
command.com) и предварительно компилируемые
(Perl).

Языки
динамического разбора

считывают инструкции из файла программы
минимально требующимися блоками, и
исполняют эти блоки, не читая дальнейший
код.

Предкомпилируемые
языки
вначале считывают
всю программу, компилируют её всю либо
в машинный код, либо в какой-то внутренний
формат, и лишь затем –
исполняют получившийся код.

Для создания
пользовательских расширений язык
сценариев удобен в ряде случаев:

  • безопасность.
    Скриптовый язык обеспечивает
    программируемость без риска дестабилизации
    системы. Скрипты не компилируются, а
    интерпретируются. Поэтому неправильно
    написанная программа выведет
    диагностическое сообщение, не вызывая
    падение системы;

  • наглядность.
    Язык сценариев используется, если
    необходим выразительный код. Концепция
    программирования в скриптовом языке
    может кардинально отличаться от основной
    программы;

  • простота.
    Код имеет собственный набор программ,
    поэтому одна строка может выполнять
    те же операции, что и десятки строк на
    обычном языке. Поэтому для написания
    кодов не требуется программист высокой
    квалификации;

  • кроссбраузерность.
    Скриптовые языки ориентированы на
    кроссбраузерность. Например, JavaScript
    может исполняться браузерами практически
    под всеми современными операционными
    системами.

Выделяют следующие
типы скриптовых языков:

  • универсальные:
    Forth, AngelScript, Perl, PHP, Python, Tcl (Tool command language),
    Squirrel, REBOL, Ruby, AutoIt, Lua;

  • встроенные
    в прикладные программы:

    VBA, UnrealScript, AutoLISP, Emacs Lisp, Game Maker Language, MQL4
    script, ERM;

  • командные
    оболочки:
    sh, AppleScript,
    bash, csh, ksh, JCL, cmd.exe, command.com, REXX, Visual Basic
    Script;

  • встраиваемые:
    Guile, Script.NET, ActionScript, Lingo (используется в
    редакторе Director), Sleep, браузерные Jscript и
    JavaScript.

Некоторые приложения
имеют встроенную возможность расширения
сценариями, написанными на любом
универсальном скриптовом языке, например,
автоматический планировщик задач или
библиотека SWIG.

К скриптам также
относят многие консольные утилиты,
которые поддерживают выполнение
записанной в файл последовательности
команд.

Контрольные
вопросы

  1. Как классифицируются
    компьютерные сети?

  2. Что
    представляет собой семиуровневая
    модель структуры протоколов связи?

  3. Какие существуют
    основные протоколы сети Интернет?

  4. Как происходит
    адресация в сети Интернет?

  5. Какие
    распространенные сервисы сети Интернет?

  6. Какие
    области охватывает разработчик
    Web-дизайна сайта?

  7. Какие
    инструменты существуют для разработки
    Web-сайта?

  8. Для
    чего предназначены языки HTML и XML?

  9. Что
    содержит структура HTML-документа

  10. Для
    чего предназначены скриптовые языки
    программирования?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Запрос «Сценарий (программирование)» перенаправляется сюда; см. также другие значения (b) .

Сценарный[1]язык (язык сценариев, скриптовой язык; англ. (b)  scripting language) — высокоуровневый язык (b) сценариев (англ. (b)  script) — кратких описаний действий, выполняемых системой. Разница между программами (b) и сценариями довольно размыта. Сценарий — это программа, имеющая дело с готовыми программными компонентами[2], которые, однажды загруженные, в своей работе не зависят от дальнейшего наличия / отсутствия подключения к Сети (b) .

Согласно Джону Устерхауту (b) , автору языка Tcl (b) , высокоуровневые языки можно разделить на языки системного программирования (англ. (b)  system programming languages) и сценарные языки (англ. (b)  scripting languages). Последние он также назвал склеивающими языками (англ. (b)  glue languages) или языками системной интеграции (англ. (b)  system integration languages). Сценарии обычно интерпретируются (b) , а не компилируются (b) [3], хотя сценарные языки программирования один за другим обзаводятся JIT-компиляторами (b) [4][5][6].

В более узком смысле под скриптовым языком может пониматься специализированный язык для расширения возможностей командной оболочки (b) или текстового редактора (b) и средств администрирования операционных систем (b) [7].

Классификация

Языки программирования вообще и сценарные языки в частности могут быть классифицированы множеством различных способов.

В плане быстродействия скриптовые языки можно разделить на языки динамического разбора (sh (b) , COMMAND.COM (b) ) и предварительно компилируемые (Perl (b) ). Языки динамического разбора считывают инструкции из файла программы минимально требующимися блоками, и исполняют эти блоки, не читая дальнейший код. Предкомпилируемые языки транслируют всю программу в байт-код (b) и затем исполняют его. Некоторые скриптовые языки имеют возможность компиляции программы «на лету» в машинный код (b) (т. н. JIT-компиляция (b) ).

По применению языки можно грубо разделить на три типа[8]:

  • командно-сценарные;
  • прикладные сценарные;
  • универсальные сценарные.

Командно-сценарные языки

Появились ещё в 1960-х годах для управления заданиями в операционных системах. Из языков того времени наиболее известен JCL (b) для OS/360 (b) . В этот класс входят языки пакетной обработки (b) (англ. (b)  batch language) и языки командных оболочек (b) , например sh (b) , csh (b) для Unix (b) . Эти языки чаще всего используются в пакетном режиме обработки[8].

  • AutoHotkey (b)
  • JCL (b)
  • sh (b)
    • bash (b)
    • csh (b)
    • ksh (b)
  • Pilot[8]
  • REXX (b)
  • AppleScript (b)
  • COMMAND.COM (b) и cmd.exe (b)
  • VBScript (b)
  • PowerShell (b)
  • AutoIt (b)

Например, язык AppleScript операционной системы MacOS имеет редактор Script Editor, который позволяет записывать действия по мере их выполнения пользователем в системе в файл сценария (текстовый файл) и оформлять в виде исполняемой программы. Такой подход позволяет составлять простейшие сценарии непрограммирующим пользователем[9].

Встроенные (прикладные сценарные) языки

Сценарные языки этого типа начали появляться в 1980-е годы, когда на промышленных персональных компьютерах стало возможным интерактивное общение с ОС. В клиент-серверной архитектуре такие языки работали в клиентской части программного обеспечения[8].

  • AutoLISP
  • ECMAScript (b) и его диалекты (JScript (b) , JavaScript (b) , ActionScript (b) )[8]
  • Emacs Lisp (b)
  • ERM (b)
  • Game Maker Language (b)
  • LotusScript[8]
  • Lua (b)
  • MQL4 (b) script
  • UnrealScript (b)
  • VBA (b)
  • Встроенный язык программирования 1С:Предприятие

Языки общего назначения

Этот тип сценарных языков наиболее известен (особенно в применении к веб-программированию (b) ). Языки этого типа стали возникать с 1990-х годов[8].

  • Tcl (b) (Tool command language)
  • Lua (b)
  • Perl (b)
  • PHP (b)
  • Python (b)
  • REBOL (b)
  • Ruby (b)
  • JavaScript (b)

Следует заметить, что многие языки этой категории имеют более широкое применение, чем в качестве просто языков сценариев, например JavaScript, который в некоторых случаях может выполняться на сервере.

Критика

Создатель Java (b) Джеймс Гослинг (b) отвёл динамическим языкам программирования (b) (упомянув PHP и Ruby) роль сценарных языков, генерирующих веб-страницы, но непригодных для применения в более широкой нише приложений из-за проблем с масштабируемостью и производительностью[10]. Приверженцы динамических языков не оставили критику без ответа по всем пунктам, в частности о его старании представить современные динамические языки всего лишь «сценарными»[11].

Плагины и скрипты

Для написания пользовательских расширений могут использоваться как скрипты (в терминологии некоторых программ «макросы (b) »), так и плагины (b) (независимые модули, написанные на компилируемых языках (b) ; в некоторых программах они могут называться «утилитами», «экспортёрами», «драйверами»).

Скриптовый язык удобен в следующих случаях:

  • Если нужно обеспечить программируемость (b) без риска дестабилизировать систему. Так как, в отличие от плагинов (b) , скрипты интерпретируются, а не компилируются, неправильно написанный скрипт выведет диагностическое сообщение, а не приведёт к системному краху (b) . Контрпримером могут служить, например, JVM (b) и CLR (b) , причём если первая была разработана из соображений переносимости кода (безопасность — побочный эффект), то вторая — именно из соображений безопасности.
  • Если важен выразительный код.
    • Во-первых, чем сложнее система, тем больше кода приходится писать «потому, что это нужно». Скрипт может перенести часть подобного шаблонного кода (инициализация, уничтожение, межпоточная синхронизация и т. д.) в среду исполнения скриптов.
    • Во-вторых, в скриптовом языке может быть совсем другая концепция программирования (b) , чем в основной программе — например, игра (b) может быть монолитным однопоточным приложением, в то время как управляющие персонажами скрипты выполняются параллельно или как сопрограммы (b) . Такой подход хорош с точки зрения масштабируемости системы (сценарии не зависят от реализации процедур, пишутся гораздо быстрее и легче отлаживаются), но не очень хорош с точки зрения качества кода, поскольку неизбежно приводит к его дублированию.
      • Гораздо более рациональным подходом является создание файлов ресурсов (как вариант, xml (b) -файлов, структур, баз данных (b) ), описывающих поведение «по существу» (в декларативном стиле (b) ), как это делается с другими свойствами внутриигровых объектов (текстуры, модели, эффекты, звуки).
    • В-третьих, скриптовый язык имеет собственный проблемно-ориентированный набор команд, и одна строка скрипта может делать то же, что несколько десятков строк (b) на традиционном языке. Однако стоит заметить, что бо́льшая выразительность кода на сценарных языках является следствием их ограниченности и/или новизны и сравнивать C (b) (1970-е) и PHP (b) (1990-е) и/или Fortran (b) (1950-е) и Python (b) (1990-е) неуместно.
  • Скрипты известны низким порогом вхождения, на скриптовом языке может писать даже низкоквалифицированный программист. Это одновременно и плюс, и минус. С одной стороны, это позволяет нанимать дешёвую рабочую силу (b) (освобождать специалистов от рутинной работы и повышать скорость разработки экстенсивно (b) ), а с другой критически снижает производительность и надёжность (из-за ориентированности обучения таким языкам на решение конкретных задач, а не на понимание сущности производимых действий).
    • Проблема высокого порога вхождения возникает, в основном, в языках с избыточным синтаксисом (C++ (b) , C# (b) ) и может быть полностью решена лишь отказом от них в пользу более удачных (что, разумеется, далеко не всегда возможно). В этом случае скрипты выполняют роль паллиатива (b) . Собственно, они и возникли когда масштабируемость Си-подобных языков стала недостаточной для повседневной работы и порог вхождения новичков в отрасль резко возрос.
    • Проблема большого количества рутины, вообще говоря, неразрешима, но в большинстве случаев может быть сглажена более надёжными дополнительными средствами, например, автоматической кодогенерацией (b) .
  • Если требуется кроссплатформенность (b) . Например, JavaScript (b)  — его исполняют браузеры под самыми разными ОС.
    • Проблема с кроссплатформенностью напрямую вытекает из стандарта языка: стандарт Си, например, указывает «sizeOf (short) <= sizeOf (int) <= sizeOf (long)», но не указывает какую именно разрядность они должны иметь (эту проблему решают прикладные библиотеки, например, Glib (b) ). Современные не-сценарные языки (Java (b) , C# (b) , Haskell (b) ) этой проблемы полностью лишены именно по причине хорошей стандартизации.
  • Скриптовые языки применяются для написания программ, не требующих оптимальности и быстроты исполнения. Из-за простоты на них часто пишутся небольшие одноразовые («проблемные») программы.
    • Многие скриптовые языки общего назначения работают достаточно медленно, поэтому их часто используют только в сочетании со сторонними библиотеками (например, NumPy (b) в сочетании с Python).
      • Это не очень хороший пример, поскольку NumPy основывается на старой фортрановской (b) библиотеке MATHLAB (b) , код которой, хоть и проверен временем, начинает неизбежно «гнить» — писался он под крайне примитивные однопоточные компьютеры с другими узкими местами (и хотя это компенсируется оптимизирующими компиляторами и распараллеливанием на уровне ОС, производительность постепенно снижается).
    • Более правильный пример: язык Lua (b) является классическим встраиваемым языком сценариев общего назначения, для его работы достаточно минимальной реализации Си (везде, где есть Си, может работать и Lua).
    • Также скриптовые языки хороши для визуализации данных: создания сложных графиков и презентаций, а также простых программ (например, Python используется в графических оболочках Gnome (b) и Cinnamon (b) для создания апплетов (b) и небольших настроечных утилит).

У плагинов также есть важные преимущества.

  • Готовые программы, оттранслированные в машинный код, выполняются значительно быстрее скриптов, которые интерпретируются (b) из исходного кода (b) динамически при каждом исполнении. Большинство программ переносимы на уровне исходного кода и могут быть выполнены интерпретатором соответствующего языка подобно скриптам. Использование же байт-кода (Java (b) , C# (b) , LLVM (b) ) позволяет хранить, переносить и исполнять программы более эффективным образом, нежели скрипты.
    • JIT-компиляция (b) также позволяет оптимизировать общий код под конкретную платформу (в перспективе, под конкретное семейство процессоров и имеющееся оборудование).
  • Полный доступ к любому аппаратному обеспечению или ресурсу ОС (в скриптовом языке для этого должен существовать специальный API (b) , написанный на компилируемом языке). Плагины, работающие с аппаратным обеспечением, традиционно называют драйверами (b) .
  • Если предполагается интенсивный обмен данными между основной программой и пользовательским расширением, для плагина его обеспечить проще.
  • Для компилируемых языков программирования характерно использование сильной статической системы типов, которая позволяет эффективно отлавливать ошибки и лучше оптимизировать код. Использование же в современных скриптах динамической типизации обусловлено скорее техническими особенностями (b) реализации и историческими причинами. Также у статически типизированных языков есть потенциал для роста, а именно, переход с традиционной мономорфной типизации на полиморфную (b) . Расширения мономорфизма в современных Си-подобных языках (перегрузка (b) , ad-hoc-полиморфизм (b) ) и полиморфизм подтипов (b) , а также параметрический полиморфизм (b) и классы типов (b) в экспериментальных языках (например, Haskell) сценарным языкам недоступен (статическая типизация во время исполнения скрипта приведёт к существенной потере производительности).

Примечания

  1. A. B. Makar, K. E. McMartin, M. Palese, T. R. Tephly. Formate assay in body fluids: application in methanol poisoning // Biochemical Medicine. — 1975-06. Т. 13, вып. 2. С. 117–126. — ISSN (b) 0006-2944. — doi (b) :10.1016/0006-2944(75)90147-7.
  2. Сузи Р. Сценарные языки: Python. «Мир ПК», 9, 2001. Дата обращения: 9 октября 2012. Архивировано 17 января 2013 года.
  3. Ousterhout, 1998.
  4. LuaJIT. Дата обращения: 9 октября 2012. Архивировано 2 октября 2012 года.
  5. PyPy. Дата обращения: 9 октября 2012. Архивировано 12 мая 2008 года.
  6. Joab Jackson (IDG News Service), Facebook releases a PHP just-in-time compiler. Дата обращения: 9 октября 2012. Архивировано 11 июня 2012 года.
  7. Денисов Ю. А., Программирование для гуманитариев, 12. Лекция: Представление грамматик, интуит.ру (b)
  8. 1 2 3 4 5 6 7 Богатырев, 2001.
  9. Трофимов, Трофимова, 1997.
  10. James Gosling: «Java Is Under No Serious Threat From PHP, Ruby or C#». Дата обращения: 9 октября 2012. Архивировано 24 октября 2012 года.
  11. Ryan Tomayko, Gosling Didn’t Get The Memo. Дата обращения: 9 октября 2012. Архивировано 18 января 2012 года.

Литература

  • Богатырев Р. Природа и эволюция сценарных языков // Мир ПК. — 2001. № 11.
  • Ousterhout J. Scripting: Higher-Level Programming for the 21st Century (англ.) // IEEE Computer. — 1998. Vol. 31, no. 3. — P. 23—30.
  • Георгиев В.О., Еникеев А.И. Сценарный подход в создании диалоговых систем // Программные продукты и системы. — 1991. № 3.
  • Трофимов М. И., Трофимова М. П. В поисках компьютерного эсперанто // Открытые системы. — 1997. № 3.

Ссылки

  • Lynn Greiner, Q&A: The state of the scripting universe: Scripting languages are becoming more popular, www.computerworld.com, 2008

Что такое скрипт и скриптовый язык

Скрипт (script с англ. сценарий) — это небольшая программа, которая последовательно выполняет список однотипных задач. Простыми словами, скрипт — это автоматизация какого-то рутинного процесса: заменить в статье дефисы на тире, кавычки лапки (“”) на ёлочки («») или подготовка файлы сайта для загрузки на сервер.

Написать скрипт можно на любом языке, если он поддерживает описание инструкций в виде последовательности действий, то есть алгоритмов:

  1. Открыть сайт X.
  2. Нажать кнопку Y.
  3. Подождать N секунд.
  4. Закрыть сайт и так далее.

По похожим сценариям работают актеры, повара, заводы. Каждый из них выполняет последовательность действий, будь то рецепт блюда или технология по эксплуатации станка. Эту последовательность действий можно описать в подавляющем большинстве языков программирования.

Вот только называть язык скриптовым только потому, что на нем можно писать сценарии, нельзя. Есть и другие критерии:

  • Чаще интерпретируется, а не компилируется — переводится на машинный язык во время запуска, а не предварительно.
  • Типизация обычно динамическая: тип данных может в любой момент меняться, и не определяться во время компиляции.
  • Он более высокоуровневый — больше понятен человеку, чем компьютеру.

Сейчас будет моё личное мнение:

Сложно выделить, что делает язык скриптовым. Например, Java таковым не считается, хотя он подходит по всем критериям:

  • На нем можно писать инструкции для компьютера, которые будут выполняться как сценарий.
  • Java компилируется в байт-код, который во время запуска интерпретируется в машинный язык.
  • В нем допустима динамическая типизация, благодаря дженерикам.
  • У него достаточно высокий уровень абстракции — то же объектно-ориентированное программирование.

Дженерик (обобщение) — такое описание данных при написании алгоритма или функции, которое позволяет использовать разные типы данных, не переписывая алгоритм.

На мой взгляд, есть всего один корректный критерий классификации: язык должен быть создан специально для того, чтобы выполнять сценарии внутри какой-либо программы. Например, VBA, на котором пишут макросы для Excel, или WitcherScript для игр The Witcher 3 и CyberPunk 2077, а также sh для терминалов.

Какие бывают типы скриптов

Скрипты и языки для их написания можно разделить на следующие типы:

  • Консольные или командные — Bash, PowerShell.
  • Расширяющие или встраиваемые — JavaScript, Lua, VBA.
  • Макросы или скрипты графического интерфейса — зависит от программы.
  • Универсальные — Python, PHP, JavaScript.

На каких языках нельзя писать скрипты

Существуют языки, созданные для решения конкретных задач и не предполагающие написания алгоритмов (разве что математических). Например, язык для аналитики данных R.

Рассмотрим возможности двух языков на примере анализа данных:

Таблица выше показывает, насколько ограничен узкоспециализированный R по сравнению с языком общего назначения Python.

Скрипты нельзя писать на:

  • R — он используется только для аналитики данных.
  • SQL — предназначен только для запросов к базам данных.
  • MATLAB — только для математических вычислений.
  • Solidity — для написания смарт-контрактов.

Эти языки задумывались для решения конкретных задач и в них просто нет возможностей для написания скриптов. Иначе ничего бы не помешало использовать и их. Как говорится, любой инструмент — это молоток.

Плохо ли это? Наоборот, создатели узкоспециализированных языков могут позволить себе сосредоточиться на главных возможностях своего языка и сделать их действительно мощными и удобными. И в зависимости от сложности задачи программист решает — использовать ли отдельный язык или достаточно будет языка общего назначения.

Где и кем используются скриптовые языки

Языки, поддерживающие написание скриптов, используются во всех сферах и для решения всех задач:

  • Разработка под iOS или OS X — Swift.
  • Разработка под Android — Java или Kotlin.
  • Создание игр — C# или C++.
  • Веб-разработка — PHP, Python, JavaScript.
  • Аналитика — Python, Java, JavaScript.
  • Программирование устройств — Python, C++.

Формальных ограничений на использование тех или иных языков в разных сферах нет — просто могут быть некоторые сложности. Например, можно создать приложение для OS X хоть на Python, просто оно будет медленно работать. Можно создать интерфейс сайта хоть на ассемблере — но тут уже медленно работать будете вы.

Что же касается сценарных языков, их используют в специальных случаях, например:

  • WitcherScript или Lua для написания квеста для игры.
  • VBA для создания макроса для бухгалтерской таблицы.

Также не стоит забывать и про скрипты — их тоже может писать кто и угодно и для чего угодно. Например, чтобы улучшить позиции сайта в поисковой выдаче.

Как скрипты помогают в SEO

С помощью кода можно решить любую задачу, если соблюдены три условия:

  • Это теоретически возможно.
  • Есть достаточно времени на написание кода.
  • Есть достаточно времени на выполнение кода.

Теоретически возможно предсказывать будущее, если рассчитать движение всех частиц во Вселенной. Вот только на сбор данных, написание кода и запуск такой программы уйдет слишком много времени. Поэтому, к сожалению, демон Лапласа не поможет угадать ключи, которые со 100 % вероятностью продвинут сайт в топ за один час.

А вот заставить скрипт проанализировать тексты на сайте, просмотреть конкурентов, изучить поисковую выдачу, чтобы он предложил несколько подходящих ключей — вполне возможно.

Вот ещё несколько полезных примеров:

  • мониторинг онлайна сайта;
  • анализ текстов на количество ключей, их актуальность, на ошибки и прочее;
  • проверка скорости загрузки;
  • проверка оптимизации для людей с ограниченными возможностями;
  • анализ безопасности;
  • ведение статистики;
  • автопостинг по разным площадкам;
  • анализ поведенческих факторов;
  • сбор данных о пользователях;
  • сбор данных о конкурентах и так далее.

И все эти скрипты уже кем-то написаны и давно используются в индустрии. Например, с помощью PageSpeed от Google можно проверить скорость загрузки сайта, узнать о возможных причинах торможения и понять, что можно исправить и улучшить. Яндекс.Метрика позволяет вести статистику посещений и следить за активностью пользователей.

В зависимости от вашего знания предметной области и вашей фантазии вы можете придумать еще какие-то скрипты, написать их или заказать их разработку. Это может быть что-то новое, а может быть и объединением нескольких других скриптов. Например, можно взять готовый скрипт мониторинга и добавить в него отправку уведомлений в Телеграм или запуск каких-нибудь служб восстановления.

Преимущества и недостатки скриптов

Преимущества скриптов делают их идеальным инструментом для задач, для которых они используются:

  1. Их легко написать, что экономит время. Они небольшие, поэтому можно особо не переживать из-за чистоты кода или правильной архитектуры.
  2. Их не нужно встраивать в целую систему, чтобы выполнить какие-то действия.
  3. Не нужно беспокоиться о кроссплатформенности кода — скрипты пишутся под определенные задачи и запускаются сразу на целевых платформах.
  4. Гибкость — можно добавить в программу любые действия и параметры. А в случае необходимости скрипт легко переписывается.

Есть и недостатки, но в контексте требований к скриптам они не имеют значения. Например, чуть более медленная скорость выполнения. Условно говоря, с помощью скрипта, который работает одну секунду, вы экономите час своего времени. Но вместо того, чтобы удовлетвориться этим, вы решаете потратить еще десять часов, чтобы скрипт выполнялся за полсекунды.

Как научиться использовать сценарные языки

Первый шаг — определиться, зачем вы хотите этому учиться. Чтобы автоматизировать небольшие процессы или писать моды к играм, парсить данные или создавать мобильные приложения? Зная ответ на этот вопрос, вы можете подобрать подходящий язык и попробовать его изучить.

Важно! Язык — это инструмент. Подбирайте подходящий для ваших задач — список был в разделе выше.

Если сомневаетесь, выбирайте JavaScript или Python. Это очень популярные языки, которые быстро развиваются, по ним много обучающих материалов и много вакансий для программистов. Также они легки для освоения.

Второй шаг — изучите основные принципы программирования. Их не так много и они общие (но не всегда идентичные) для большинства языков. И если через несколько месяцев вы поймете, что ошиблись с выбором, сможете быстро перестроиться под новый язык.

Третий шаг — придумайте несколько небольших проектов и реализуйте их на своем языке. Чем меньше у вас опыта — тем меньше должен быть проект. Не нужно строить Бурдж-Халифа, если вы ни одного гвоздя в жизни не забили. Второй и третий шаги можно совмещать.

Практиковаться нужно как можно больше, а начинать — как можно раньше. Теория важна, но без практики ничего не стоит, потому что программирование — это про решение проблем, а не про алгоритмы, структуры, парадигмы и другие умные слова.

Если не можете придумать интересные проекты, можете погуглить идеи для новичков — их полно для любого языка и уровня владения им.

Понравилась статья? Поделить с друзьями:
  • Язык сценариев javascript лекция
  • Язык сценариев html
  • Язык родной дружи со мной сценарий
  • Языческий праздник вместо хэллоуина
  • Языческие праздники страшные