=Paper=
{{Paper
|id=Vol-2543/rpaper14
|storemode=property
|title=Method of Paradigmatic Analysis of Programming Languages and Systems
|pdfUrl=https://ceur-ws.org/Vol-2543/rpaper14.pdf
|volume=Vol-2543
|authors=Lidiya Gorodnyaya
|dblpUrl=https://dblp.org/rec/conf/ssi/Gorodnyaya19
}}
==Method of Paradigmatic Analysis of Programming Languages and Systems==
Method of Paradigmatic Analysis of Programming Languages and Systems Lidia Gorodnyaya1,2[0000-0002-4639-9032] 1 A.P. Ershov Institute of Informatics Systems (IIS), 6, Acad. Lavrentjev pr., Novosibirsk 630090, Russia 2 Novosibirsk State University, Pirogov str., 2, Novosibirsk 630090, Russia lidvas@gmail.com Abstract. The purpose of the article is to describe the method of comparison of programming languages, convenient for assessing the expressive power of languages and the complexity of the programming systems. The method is adapted to substantiate practical, objective criteria of program decomposition, which can be considered as an approach to solving the problem of factorization of very complicated definitions of programming languages and their support systems. In addition, the article presents the results of the analysis of the most well-known programming paradigms and outlines an approach to navigation in the modern expanding space of programming languages, based on the classification of paradigms on the peculiarities of problem statements and semantic characteristics of programming languages and systems with an emphasis on the criteria for the quality of programs and priorities in decision- making in their implementation. The proposed method can be used to assess the complexity of programming, especially if supplemented by dividing the requirements of setting tasks in the fields of application into academic and industrial, and by the level of knowledge into clear, developed and complicated difficult to certify requirements. Keywords: Definition of Programming Languages, Programming Paradigms, Definition Decomposition Criteria, Semantic Systems 1 Introduction Descriptions of modern programming languages (PL) usually contain a list of 5-10 predecessors and a number of programming paradigms (PP) supported by the language [1,2]. In this article the method of representation of paradigms features of PL definition at the level of semantic systems is considered [3]. Using the method of paradigms analysis it is possible to build a space of constructions supported in the definitions of programming languages and systems (PLS). This space can be the source structure in the selection of criteria of decomposition programs based on the development of statements of problems in the programming process of their solutions [4], a variety of types of semantic systems of PL and their extensions in the Copyright © 2020 for this paper by its authors. Use permitted under Creative Commons License Attribution 4.0 International (CC BY 4.0). 150 implementation of programming systems (PS) [5]. The technique is shown on the material of four classical programming paradigms without an excursion into the wider space of paradigms, especially new ones, which have not yet received support in well- known programming languages and recognition in the form of examples of debugged programs. The analysis of DSL—languages, which it makes sense to consider as a new meta-level in the field of programming linguistics, is left for the future. The concept of "programming paradigm" does not have a strict definition, so the question arises about the belonging of new approaches in programming to the set of PP and the ordering of such a set. Programming paradigm is manifested as the way of thinking associated with the compromise between the characteristics of tasks, methods of their solution in the form of programs, quality criteria of programs adopted in PP and decision-making priorities in the programming process. Such feature of PP allows to understand a paradigm choice as process of acceptance, representation and debugging of decisions at statement of different tasks therefore it is natural to carry out systematization of PP on comparison with priorities and variations of schemes of statement of tasks and methods of their decision. The most clear systematization of PP now allows to allocate the basic and derivative PPs supplemented by combined, auxiliary and system-forming or perspective-strategic. It should be noted that academician Andrei Petrovich Ershov was focused on strategic PPs, including fundamental, educational and technological. The set of basic PPs can be divided into basic, instrumentally expanding and unlimited depending on the content of semantic systems of computing organization, memory management, computation management and construction of complex data. 2 Results of Paradigm Analysis Analysis and comparison of a large number of PL of different levels allow to identify the most significant characteristics for the expression of paradigm specificity of a wide class of PL (Table 1). 1 1 The listings in Table 1 and in Table 2 are based on open sources such as Wikipedia and study guides. Lists can be replenished and updated by specialists. 151 Table 1. PL twenty-first century (all multi-paradigm) 2 Year PL Predecessors Used paradigms 2018 Dart Java, object-oriented JavaScript, web application framework CoffeeScript, script language Go imperative reflective functional 2014 Swift Objective-C, C++, Java, protocol-oriented Rust, Scala, Python, object-oriented Ruby, Smalltalk, functional Groovy, D, LLVM imperative 2012 Rust Alef, C++, Camlp4, parallel Common Lisp, Erlang, Haskell, functional Hermes, Limbo, Napier, Napier88, imperative Scheme, Newsqueak, NIL, Sather, structural OCaml, Standard ML, Cyclone, systemic Swift, C#, Ruby procedural free software 2005 F# OCaml, functional C#, object-oriented Haskell generalized imperative 2003 Scala Java, Haskell, Erlang, Lisp, Standard functional ML, OCaml, Smalltalk, Scheme, object-oriented Algol68 imperative 2001 D C, C++, C#, imperative Python, Ruby, object-oriented Java, Eiffel functional contractual generalized procedural 2000 C# C++, object-oriented Java generalized Delphi, procedural Modula-3 functional Smalltalk event-driven reflective The multiparadigmality of long-lived and new PLs shows the need for more precise detailing of the dependencies between old and new ones. (Table 2). 2 Saved vocabulary sources. 152 Table 2. PL - the founders of the basic programming paradigms 3 Year PL Used paradigms Sphere of influence 4 imperative 1954 Fortran, IPP 1958 Algol-60 parallel ALGOL 58, procedural BASIC, modular C, structural Chapel, CMS-2, Fortress, procedural PL/I, generalized PACT I, object oriented MUMPS, IDL, Ratfor 1958 Lisp experimental FP functional CLIPS, Common lisp, CLOS, Clu, Dylan, object oriented Forth, Scheme, Erlang, Haskell, Logo, Lua, procedural Perl, POP-2, Python, Ruby, Cmucl, Scala, reflective ML, Swift, Smalltalk, Factor, Clojure, Emacs metaprogramming Lisp, Eulisp, ISLISP, Wolfram Language 1960 APL vector PC functional A, A+, structural FP, J, K, LyaPAS, Nial, S, modular MATLAB, PPL, Wolfram Language 1962 Simula 67 object oriented OOP (1980) 56 1968 Forth imperative Factor, RPL, REBOL, PostScript, Factor and stack oriented other concatenative languages 7 1968 Algol-68 parallel C, C++, Bourne shell, KornShell, Bash, imperative Steelman, Ada, Python, Seed7, Mary, S3 1972 Prolog declarative LP logical Visual Prolog, Mercury, Oz, Erlang, Strand, KL0, KL1, Datalog 1970 Pascal imperative SP structural Ada, Component Pascal, Modula-2, Java, Go, Oberon, Object Pascal, Oxygene, Seed7, VHD, Structured text 3 IPP – imperative-procedural, FP – functional, PC – parallel calculation OOP – object oriented , LP – logical, SP – structural programming. 4 Algol-60 – it was from this language in our country that acquaintance with high-level languages began, its dominance was pushed back by the appearance of Fortran language implementations. 5 Forth – a typical mechanism for implementing work with expressions in different Pls. 6 The languages in which programs are built as concatenations of functions. 7 Algol-68 represents the result of well-thought-out unification and orthogonalization of basic programming concepts. 153 The programming paradigm as a way of thinking is associated with a compromise between the features of the tasks being solved and the methods for solving them using programs. The most objective programming concepts are associated with architectural models, with methods for implementing a joint projects, and with the classification of problems to be solved. To show the features of software, it is convenient to single out conceptual monoparadigmal languages, models or sublanguages and provide criteria for the successful use of software with evaluating the results using examples of programs that was confirmed by programming practice. [5]. From the vast set, a small number of PLs can be distinguished, attracting attention with interesting combinations of visual means and semantics that affect the development of the main PPs. 3 Semantic Systems of Basic Paradigms Considering the systematization of the paradigmatic features of the definition of PL at the level of semantic systems [3], it is convenient to classify language concepts by statement of tasks and language tools used to solve them. Even in last times, Nicholas Wirth noted the importance of matching the problem statement and the tools used to solve it, especially if you can catch the likeness of the processed data structures and their processing algorithms, which is now called homoiconicity. Based on this correspondence, it is possible to build a space of constructions supported in the definitions of PSL and compared with the complexity of the formulations of successfully solved problems. The resulting space can be the initial structure when choosing criteria for decomposing programs, taking into account the peculiarities of the development of problem statements in the process of programming their solutions [4], expanding the semantic systems of PL and their refinement when implementing PS [5]. When considering any semantic systems, it is important to do noted the difference in the nature of the performance of the functions of such systems in different complexes. So, for any data set D representing values of arbitrary nature, function schemes F are realistically distinguishable for calculation methods, memory access tools M, control features of computing C and communication, or reversible complexation and structuring of data S. This leads to an idea of the main categories of semantic systems for differently implemented types of functions. Historically, at the hardware level, such categories of semantic systems have had a cumulative effects in the “DEMCS” order – the representation of numbers, an arithmometer, a calculator with registers, an analog analizer with control system, a computer. Each hardware subsystem can interact with each other (Table 3). Table 3. A number of categories of semantic systems of hardware level. Subsystem Note D: data Data from set D represents values from V and the interrupt scale E: evaluation Operations on two or one value produce one or two values M: memory The correspondence between addresses from the set N and 154 representations from the set D stored values at these addresses allows different methods for accessing memory elements, including replacing stored values, with the exception of address 0. C: control Comparing values with zero allows you to control the progress of calculations along with go by labels and interrupt handling, not counting the transition in order S: The construction of complex data takes into account the communications capabilities of addressing commands in memory Programming paradigms can be distinguished by the priorities of the categories of semantic systems in the programming process, noting the paradigm differences in the general concepts in each category (See Tables 4-7). Data are addresses and stored values in IPP, stored methods and object signatures appear in the OOP, be binding with any value in the FP instead of addresses in memory, and to the identifier in the LP. In IPP and OOP, operations are mostly unary or binary, and in FP and PL there is also arbitrary arity. True values in LP include the special value “ESC”, which allows to distinguish normal predicate values from failure in calculations, and FP can use any value other than “NIL” as truth. Data structures in the IPP can not be considered as values processed by the basic means, and in the FP such structures are processed without special restrictions. When preparing an imperative-procedural program, the most important are the means of working with memory in which data and the results of their processing are placed. Data processing is considered as a change in memory states when performing calculations. If necessary, data structures can be organized (Table 4). Table 4. Paradigmatic scale of IPP semantics. Subsystem Note D: data Values are limited by the size of their representations in memory registers at addresses from N. The interrupt vector is not represented. E: evaluation Operations differ on unary and binary with single result. M: memory Work with memory without emphasis on the zero, a methods variety for accessing memory and interrupts handling. C: control In addition to hardware comparison of values with zero, when controlling the course of calculations, operation priorities and parentheses in expressions are used along with transfers by labels, but without interrupt handling. S: communications You can design complex data and select its elements using the capabilities of in-memory indexing instructions The focus of FP is the organization of calculations on symbolic representations of the entities of a given subject area. Working with memory in this case may not require binding to physical addresses, but rather confine itself to the representation of an associating function over data pairs of any nature. The control of the computation 155 process can be considered as a function of program fragments. The construction of complex objects is free from the of elements neighborhood (Table 5). Table 5. Paradigmatic scale of FP semantics. Subsystem Note D: data Representations of data are not limited in size and complexity E: evaluation Some operations can process any number of parameters and produce a series of values, if necessary combined into a complex given M: memory When processing complex data, the old values are not changed, and the new values are located in memory independently, and the correspondence between the associated data is stored in memory, allowing a change in association C: control Any calculation can be blocked or run. A program may contain branch points from an arbitrary number of branches selected by comparing the result with a “zero” (NIL), which is included in the set of values S: communications It is possible to construct arbitrarily complex, equitable with elementary, data, all elements of which are accessible using functions in any expression In the case of LP, the logic of non-deterministic search for feasible solutions dominates. Variants of possible solutions are being choose. Fragments with a fixed number of parameters are named. As structures, samples are used to control the choice of variants (Table 6). Table 6. Paradigmatic scale of LP semantics. Subsystem Note D: data Representations of facts or rules E: evaluation Attempts at a calculation that yields either a result or a signal of impracticability, which leads to further search for variants M: memory Some rules may have names with indicating the number of parameters, which allows them to be used as functions C: control Non-deterministic search for choosing a feasible variants giving a result other than “ESC” S: communications Comparison of complex data with a example allows you to select elements for choosing a branch For object-oriented programming, it all starts with defining a hierarchy of classes of objects placed at fixed addresses in memory. The management of the data processing process uses a comparison of classes and valid methods, labeled with access rights from different parts of the program. Computations occur only upon successful matching and matching of access rights to objects. A detailed analysis of the 156 semantics of OOP was performed in [5] and was accompanied by comparison with other software and partial formalization of the main mechanisms (Table 7). Table 7. Paradigmatic scale of OOP semantics. Subsystem Note D: data Data represents not only values, but also methods for processing them. E: evaluation Any operations, as well as any calculations, can be overloaded by adding the processing of possible interrupts M: memory Dosed access to elements of objects is accompanied by mechanisms of implicit situation handlers, and addresses can be values C: control The feasibility of methods on objects is determined by checking their compatibility and access rights in the class hierarchy S: communications Object classes are adapted for additional definition and inheritance according to the class hierarchy Thus, in addition to preferences on the features of the problem statements, one can see differences in the schemes for determining functions for different categories of semantic systems depending on the software. It should be noted that the transition from PL to PS is usually accompanied by an increase in the number of supported PPs, which, when defining the Haskell language, led to the concept of “monad”, which allows any PL to achieve practicality, which is usually done with the help of library modules. Description of derivative PPs can be made relative and, therefore, more concise, expressing the difference with the basic paradigm. We can say that the derivative paradigm is a projection of the basic paradigm on the features of the problem statements of a certain application area. Usually in the projection the most important elements of paradigms are modified. Variations of the models of semantic systems that support derivative paradigms can be used as objective parameters in factorizing the definitions of languages and programming systems and decomposing programs, starting with taking into account the peculiarities of problem statements. For practice, it is useful to describe the derivatives of PP relative, expressing the difference with the base PP. So, IPP derivatives distinguish different methods of representing data in memory and organizing sequential processes generated by the program, OOP derivatives give various concretizations of the concept of “class of objects”, FP derivatives represent variations in the methods of organizing calculations, and LP derivatives may use different approaches to mitigate the dependence of obtaining results on excessive or insufficient determinism. In addition to the relatively clear classical basic paradigms of programming, there is reason to single out the main expanding system-instrumental paradigms aimed at the preparation and design of programs, operating systems and databases, support for working with files and various device configurations, as well as providing feedback when executing any programs. All expanding paradigms, some of them have not yet received their names, work with much more complex elements that have their own 157 lives, which can be included in many systems and configurations in which their state can be changed. Data representations, in addition to complex data structures, formal definitions and codes, include processes, devices, roles of participants and complexes. The methods of processing elements and their interactions are subject to more stringent requirements of correctness, which entails supporting the improvement of elements in parts, that is, targeted development as errors are identified or the need for increased efficiency. There is a division of labor according to skill level and responsibility. No less noticeable is the group of unlimited communication interface paradigms supporting large data processing (bigdata, sematic-web, rdf), remote work in networks, service-oriented programming based on markup and rewriting languages (html, XML, PHP), parallel, vector-oriented for processing arrays (APL) or supporting multiple theoretical insertion mechanisms, including dynamic insertion substitutions (SETL) and high-performance computing on supercomputers (OpenMP, mpC) and mobile devices. There is a noticeable number of combined PPs that combine the advantages of a pair of PPs for solving different types of subproblems, which also are supported by multi-paradigmal PLs (Lisp 1.5, Planner, Merlin, F #, C #, Scala, etc.). There are rejected PPs that have not received recognition by the programming community, and esoteric PPs, the invention of which can be considered as a study the possibilities to represent and recognize information in the style of creating and decoding puzzles. Any programming paradigm can be supplemented with additional forms, such as declarativeness, abstractions, specification languages, etc., mainly solving problems such as “scaffolding,” that is, the aim of these forms is not an alternative or opposed representation of programming tools and methods, but temporary structure which used to support setting the boundaries of the behavior of programs, highlighting the processes that are convenient for practice. 4 Conclusions and Outlook The proposed methodology can be used to assess the complexity and complexity of programming, especially if supplemented by dividing the requirements for setting tasks in the fields of application into academic and industrial, and by the level of knowledge into clear, developed and complicated difficult to certify requirements. Basic programming paradigms can be distinguished by ordering the main categories of semantic systems, and derivatives - by the difference between individual categories of semantic systems from the basic paradigm. Any programming paradigm can be enriched with additional paradigms for representing restrictive conditions for the functioning of programs. For this reason, they cannot be opposed to the actual PP. The statements of the problems of parallel computing take into account that the speed of obtaining results on the available programs for solving a specific problem is insufficient. Paradigms of this direction are in the process of formation. Given the diversity of theoretical models in this area, it is natural to assume that there will be many such paradigms. There is reason to single out software aimed at providing 158 feedback when working with devices and networks, on the surface-interface style of IT, and on supporting supercomputer processes. In recent years, reasons have been discovered and understood for conditioning program verification by formalizing the programming paradigms used. Programming projects should be accompanied by a justification for the choice of not only software tools, but also paradigms in order to avoid inter-paradigm conflicts, fraught with subtle errors associated with changing and developing the functioning environment of long-lived programmable components. DSL languages deserve special consideration as a new level of languages creation. If in ordinary PLs, the accumulation of programming experience is performed in the form of procedures, then DSL is the mechanism for accumulating experience in the form of languages. The works of E. M. Lavrishcheva [7], Peter Van Roy [8] and Peter Wegner [6] should be mentioned as related works. E.M. Lavrishcheva presented a fairly complete overview of programming paradigms that is relevant for programming technologies [7], P. Van Roy analyzed more than 30 paradigms, mainly combined, and presented a diagram of their interconnections cited in Wikipedia [8], and P. Wegner performed a very serious analysis of OOP, methods for supporting this paradigm, and its comparison with other classical PPs [6]. This work was partially supported by the Russian Foundation for Basic Research, project No. 18-07-01048-а. References 1. Diagramma, predstavlyayushchaya khronologiyu poyavleniya i nasledovaniya mnogikh YAP, https://www.levenez.com/lang/, . last accessed 2019/11/21. 2. Sayt s opisaniyami 171 yazyka i 31 paradigmy, http://progopedia.ru/, last accessed 2019/11/21. 3. Lavrov, S.S.: Metody zadaniya semantiki yazykov programmirovaniya. Programmirovaniye 6, pp. 3–10 (1978). 4. Bentley, D.: Zhemchuzhiny tvorchestva programmistov. Radio i svyaz', Moscow (1990). 5. Gorodnyaya, L.: On the Presentation of the Results of the Analysis of Programming Languages and Systems. In: CEUR Workshop Proceedings, vol. 2260, pp. 152-166 (2018). 6. Wegner, P.: Concepts and paradigms of object-oriented programming. SIGPLAN OOPS Mess 1(1, August), pp. 7–87 (1990), http://dx.doi.org/10.1145/. 7. Lavrishcheva, E.M.: Programmnaya inzheneriya i tekhnologii programmirovaniya slozhnykh sistem. Moscow (2018). 8. Van Roy, P.: Diagramma s rezul'tatami sravneniya boleye 30-ti paradigm programmirovaniya, https://www.info.ucl.ac.be/~pvr/ paradigmsDIAGRAMeng108.pdf, last accessed 2019/11/21.