ResearchGate Logo

Discover the world's research

  • 20+ million members
  • 135+ million publications
  • 700k+ research projects

Join for free

Programming Language Pragmatic s

THIRD EDITIO N

Michael L. Scot t

Department of

Computer Science

University

of Rochester

^ШШШШШ AMSTERDAM BOSTON HEIDELBERG LONDON

,¥'-*i» ЩЛ<

^ 'mH NEW YORK «OXFORD «PARIS »SAN DIEGO ^k^B V\A®

jfce§f$fa

SAN FRANCISCO SINGAPORE SYDNEY TOKYO ^^^И к.^

ELSEVIER

Morgan Kaufmann Publishers is

an

imprint of Elsevier MORGAN KAUFMANN PUBLISHERS

Contents

Foreword xx i

Preface xxii i

FOUNDATIONS з

1 Introduction 5

I.

I

The Art of Language Design 7

1.2 The Programming Language Spectrum 1 0

1.3 Why Study Programming Languages? 1 4

1.4 Compilation and Interpretation 1 6

1.5 Programming Environments 2 4

1.6 An Overview of Compilation 2 5

1.6.1 Lexical and Syntax Analysis 2 7

1.6.2 Semantic Analysis and Intermediate Code Generation 2 9

1.6.3 Target Code Generation 3 3

1.6.4 Code Improvement 33

1.7 Summary and Concluding Remarks 3 5

1.8 Exercises 3 6

1.9 Explorations 3 7

1.10 Bibliographic Notes 3 9

2 Programming Language Syntax 4 1

2.1 Specifying Syntax: Regular Expressions and Context-Free Grammars 4 2

2.1.1 Tokens and Regular Expressions 4 3

2.1.2 Context-Free Grammars 4 6

2.1.3 Derivations and

Parse

Trees 48

2.2 Scannin g

2.2.1 Generating a Finite Automato n

2.2.2 Scanner Cod e

2.2.3 Table-Driven Scannin g

2.2.4 Lexical Error s

2.2.5 Pragma s

2.3 Parsin g

2.3.1 Recursive Descen t

2.3.2 Table-Driven Тор-Down Parsin g

2.3.3 Bottom-Up Parsin g

2.3.4 Syntax Error s

2.4 Theoretical Foundation s

2.4.1 Finite Automat a

2.4.2 Push-Down Automat a

2.4.3 Grammar and Language Classes

2.5 Summary and Concluding Remark s

2.6 Exercise s

2.7 Exploration s

2.8 Bibliographic Note s

Names, Scopes, and Binding s

3.1 The Notion of

Binding

Time

3.2 Object Lifetime and Storage Managemen t

3.2.1 Static Allocatio n

3.2.2 Stack-Based Allocatio n

3.2.3 Heap-Based Allocatio n

3.2.4 Garbage Collectio n

3.3 Scope Rule s

3.3.1 Static Scopin g

3.3.2 Nested Subroutine s

3.3.3 Declaration Orde r

3.3.4 Module s

3.3.5 Module Types and Classe s

3.3.6 Dynamic Scopin g

3.4 Implementing Scop e

3.4.1 Symbol Table s

3.4.2 Association Lists and Central ReferenceTab l

3.5 The Meaning of Names within a Scop e

3.5.1 Aliase s

3.5.2 Overloadin g

3.5.3 Polymorphism and Related Concept s

3.6 The Binding of Referencing Environment s

3.6.1 Subroutine Closure s

3.6.2 Fi rst-Class

Values

and Unlimited Extent

3.6.3 Object Closure s

3.7 Macro Expansio n

3.8 Separate Compilatio n

3.8.1 Separate Compilation in С

3.8.2 Packages and Automatic Header Inferenc e

3.8.3 Module Hierarchie s

3.9 Summary and Concluding Remark s

3.10 Exercise s

3.1 I Exploration s

3.12 Bibliographic Note s

4 Semantic Analysi s

4.1 The Role of the Semantic Analyze r

4.2 Attribute Grammar s

4.3 Evaluating Attribute s

4.4 Action Routine s

4.5 Space Management for Attribute s

4.5.1 Bottom-Up Evaluatio n

4.5.2 Тор-Down Evaluatio n

4.6 Decorating a Syntax Tre e

4.7 Summary and Concluding Remark s

4.8 Exercise s

4.9 Exploration s

4.10 Bibliographic Note s

5 Target Machine Architectur e

5.1 The Memory Hierarch y

5.2 Data Representatio n

5.2.1 Integer Arithmeti c

5.2.2 Floating-Point Arithmeti c

s i

5.3 Instruction Set Architectur e

5.3.1 Addressing Mode s

5.3.2 Conditions and Branche s

5.4 Architecture and Implementatio n

5.4.1 Microprogrammin g

5.4.2 Microprocessor s

5.4.3 RIS C

5.4.4 Multithreading and Multicor e

5.4.5 Two Example Architectures: The x86 and MIP S

5.5 Compiling for Modern Processor s

5.5.1 Keeping the Pipeline Ful l

5.5.2 Register Allocatio n

5.6 Summary and Concluding Remark s

5.7 Exercise s

5.8 Exploration s

5.9 Bibliographic Note s

CORE ISSUES IN LANGUAGE DESIG N

6 Control Flo w

6.1 Expression Evaluatio n

.

I

Precedence and Associativity

.2 Assignment s

.3 Initializatio n

.4 Ordering within Expression s

.5 Short-Circuit Evaluatio n

6.2 Structured and Unstructured Flo w

6.2.1 Structured Alternatives to got o

6.2.2 Continuation s

6.3 Sequencin g

6.4 Selectio n

6.4.1 Short-Circuited Condition s

6.4.2 Case/Switch Statement s

6.5 Iteratio n

6.5.1 Enumeration-Controlled Loop s

6.5.2 Combination Loop s

6.5.3 Iterator s

6.5.4 Generators in Ico n

6.5.5 Logically Controlled Loop s

6.6 Recursio n

6.6.1 Iteration and Recursio n

6.6.2 Applicative- and Normal-Order Evaluatio n

6.7 Nondeterminac y

6.8 Summary and Concluding Remark s

6.9 Exercise s

6.10 Exploration s

6.1 I Bibliographic Note s

Data Type s

7.1 Type Systems

7.1.1 Type Checkin g

7.1.2 Polymorphis m

7.1.3 The Meaning of "Typ e

7.1.4 Classification of Type s

7.1.5 Orthogonalit y

7.2 Type Checkin g

7.2.1 Type Equivalenc e

7.2.2 Type Compatibilit y

7.2.3 Type Inferenc e

7.2.4 The ML Type Syste m

7.3 Records (Structures) and Variants (Unions )

7.3.1 Syntax and Operation s

7.3.2 Memory Layout and Its Impac t

7.3.3 With Statement s

7.3.4 Variant Records (Unions )

7.4 Array s

7.4.1 Syntax and Operation s

7.4.2 Dimensions, Bounds, and Allocatio n

7.4.3 Memory Layou t

7.5 String s

7.6 Set s

7.7 Pointers and Recursive Type s

7.7.1 Syntax and Operation s

xiv Content s

149

153

153

154

156

356

357

364

367

368

371

373

379

380

7.7.2 Dangling Reference s

7.7.3 Garbage Collectio n

7.8 List s

7.9 Files and Input/Outpu t

7.9.1 Interactive I/ O

7.9.2 File-Based I/ O

7.9.3 Text I/ O

7.10 Equality

Testing

and Assignment

7.1 I Summary and Concluding Remark s

7.12 Exercise s

7.13 Exploration s

7.14 Bibliographic Note s

8 Subroutines and Control Abstraction 38 3

8.1 Review of Stack Layout 38 4

8.2 Calling Sequences 38 6

8.2.1 Displays ©169 389

8.2.2 Case Studies: С on the MIPS; Pascal on the x86 © 173 389

8.2.3 Register Windows ©181 390

8.2.4 In-Line Expansion 391

8.3 Parameter Passing 39 3

8.3.1 Parameter Modes 394

8.3.2 Call-by-Name ©185 402

8.3.3 Special-Purpose Parameters 403

8.3.4 Function Returns 408

8.4 Generic Subroutines and Modules 41 0

8.4.1 Implementation Options 412

8.4.2 Generic Parameter Constraints 414

8.4.3 Implicit Instantiation 416

8.4.4 Generics in C++,

Java,

and C# ©189 417

8.5 Exception Handling 41 8

8.5.1 Defining Exceptions 421

8.5.2 Exception Propagation 423

8.5.3 Implementation of Exceptions 425

8.6 Coroutines 42 8

8.6.1 Stack Allocation 430

8.6.2 Transfer 432

Contents X V

8.6.3 Implementation of Iterators ©201 433

8.6.4 Discrete Event Simulation ©205 433

8.7 Events 43 4

8.7.1 Sequential Handlers 434

8.7.2 Thread-Based Handlers 436

8.8 Summary and Concluding Remarks 43 8

8.9 Exercises 43 9

8.10 Explorations 44 6

8.1 I Bibliographic Notes 44 7

Data Abstraction and Object Orientation 44 9

9.1 Object-Oriented Programming 45 1

9.2 Encapsulation and Inheritance 46 0

9.2.1 Modules 460

9.2.2 Classes 463

9.2.3 Nesting (Inner Classes) 465

9.2.4 Type Extensions 466

9.2.5 Extending without Inheritance 468

9.3 Initialization and Finalization 46 9

9.3.1 Choosing a Constructor 470

9.3.2 References and Values 472

9.3.3 Execution Order 475

9.3.4 Garbage Collection 477

9.4 Dynamic Method Binding 47 8

9.4.1 Virtual and Nonvirtual Methods 480

9.4.2 Abstract Classes 482

9.4.3 Member Lookup 482

9.4.4 Polymorphism 486

9.4.5 Object Closures 489

9.5 Multiple Inheritance ©215 49 1

9.5.1 Semantic Ambiguities ©217

9.5.2 Replicated Inheritance ©220

9.5.3 Shared Inheritance ©222

9.5.4 Mix-ln Inheritance ©223

9.6 Object-Oriented Programming Revisited 49 2

9.6.1 The Object Model of Smalltalk ©227 493

9.7 Summary and Concluding Remarks 49 4

xvi Content s

9.8 Exercises

495

9.9 Explorations

498

9.10 Bibliographic Notes

499

ALTERNATIVE PROGRAMMING MODELS

503

10 Functional Languages

505

10.1 Historical Origins

506

10.2 Functional Programming Concepts

507

10.3

A

Review/Overview of Scheme

509

10.3.1 Bindings

512

10.3.2 Listsand Numbers

513

10.3.3 Equality

Testing

and Searching

514

10.3.4 Control Flow and Assignment

515

10.3.5 Programs as Lists

517

10.3.6 Extended Example: DFA Simulation

519

10.4 Evaluation Order Revisited

521

10.4.1 Strictness and Lazy Evaluation

523

10.4.2 I/O: Streams and Monads

525

10.5 Higher-Order Functions

530

10.6 Theoretical Foundations ©237

534

10.6.1 Lambda Calculus

©239

10.6.2 Control Flow

©242

10.6.3 Structures

©244

10.7 Functional Programming in Perspective

534

10.8 Summary and Concluding Remarks

537

10.9 Exercises

538

10.10 Explorations

542

10.11 Bibliographic Notes

543

I

I

Logic Languages

545

I I.

I

Logic Programming Concepts

546

11.2 Prolog

547

I 1.2.1 Resolution and Unification

549

I 1.2.2 Lists

550

Contents

xvii

I 1.2.3 Arithmetic

551

I 1.2.4 Search/Execution Order

552

I 1.2.5 Extended Example: Tic-Tac-Toe

554

I 1.2.6 Imperative Control Flow

557

I 1.2.7 Database Manipulation

561

I 1.3 Theoretical Foundations ©253

566

I 1.3.1 Clausal Form

©254

11.3.2 Limitations

©255

11.3.3 Skolemization

©257

11.4 Logic Programming in Perspective

566

I 1.4.1 Parts

of

Logic Not Covered

566

I 1.4.2 Execution Order

567

11.4.3 Negation and the "Closed World" Assumption

568

11.5 Summary and Concluding Remarks

570

I 1.6 Exercises

571

I 1.7 Explorations

573

I 1.8 Bibliographic Notes

573

12 Concurrency

575

12.1 Background and Motivation

576

12.1.1 The Case for Multithreaded Programs

579

12.1.2 Multiprocessor Architecture

581

12.2 Concurrent Programming Fundamentals

586

12.2.1 Communication and Synchronization

587

12.2.2 Languages and Libraries

588

12.2.3 Thread Creation Syntax

589

12.2.4 Implementation of Threads

598

12.3 Implementing Synchronization

603

12.3.1 Busy-Wait Synchronization

604

12.3.2 Nonblocking Algorithms

607

12.3.3 Memory Consistency Models

610

12.3.4 Scheduler Implementation

613

12.3.5 Semaphores

617

12.4 Language-Level Mechanisms

619

12.4.1 Monitors

619

12.4.2 Conditional Critical Regions

624

12.4.3 Synchronization in Java

626

xviii Content s

12.4.4 Transactional Memory

629

12.4.5 Implicit Synchronization

633

12.5 Message Passing ©263

637

12.5.1 Naming Communication Partners

©263

12.5.2 Sending

©267

12.5.3 Receiving

©272

12.5.4 Remote Procedure Call

©278

12.6 Summary and Concluding Remarks

638

12.7 Exercises

640

12.8 Explorations

645

12.9 Bibliographic Notes

647

13 Scripting Languages

649

13.1 What

Is a

Scripting Language?

650

13.1.1 Common Characteristics

652

13.2 Problem Domains

655

13.2.1 Shell (Command) Languages

655

13.2.2 Text Processing and Report Generation

663

I 3.2.3 Mathematics

and

Statistics

667

I 3.2.4 "Glue" Languages

and

General-Purpose Scripting

668

13.2.5 Extension Languages

676

13.3 Scripting

the

World Wide

Web

680

13.3.1

CGI

Scripts

680

13.3.2 Embedded Server-Side Scripts

681

13.3.3 Client-Side Scripts

686

13.3.4 Java Applets

686

13.3.5 XSLT ©287

689

13.4 Innovative Features

691

13.4.1 Names

and

Scopes

691

13.4.2 String

and

Pattern Manipulation

696

13.4.3 Data Types

704

13.4.4 Object Orientation

710

13.5 Summary and Concluding Remarks

717

13.6 Exercises

718

13.7 Explorations

723

13.8 Bibliographic Notes

724

Contents xix

A CLOSER LOOK AT IMPLEMENTATION

727

14 Building

a

Runnable Program

729

14.1 Back-End Compiler Structure

729

14.1.1

A

Plausible Set

of

Phases

730

14.1.2 Phases and Passes

734

14.2 Intermediate Forms ©303

734

14.2.1 Diana

©303

14.2.2 The gcc IFs

©306

14.2.3 Stack-Based Intermediate Forms

736

14.3 Code Generation

738

14.3.1 An Attribute Grammar Example

738

14.3.2 Register Allocation

741

14.4 Address Space Organization

744

14.5 Assembly

746

14.5.1 Emitting Instructions

748

14.5.2 Assigning Addresses to Names

749

14.6 Linking

750

14.6.1 Relocation and Name Resolution

751

14.6.2 Type Checking

751

14.7 Dynamic Linking

©311 -754

14.7.1 Position-Independent Code

©312

14.7.2 Fully Dynamic (Lazy) Linking

©313

14.8 Summary and Concluding Remarks

755

14.9 Exercises

756

14.10 Explorations

758

14.11 Bibliographic Notes

759

15 Run-time Program Management

761

15.1 Virtual Machines

764

15.1.1 The

Java

Virtual Machine

766

15.1.2 The Common Language Infrastructure

775

15.2 Late Binding of Machine Code

784

15.2.1 Just-in-Time and Dynamic Compilation

785

15.2.2 Binary Translation

791

XX Contents

15.2.3 Binary Rewritin g

15.2.4 Mobile Code and Sandboxin g

15.3 Inspection/Introspectio n

15.3.1 Reflectio n

15.3.2 Symbolic Debuggin g

15.3.3 Performance Analysi s

15.4 Summary and Concluding Remark s

15.5 Exercise s

15.6 Exploration s

15.7 Bibliographic Note s

16 Code Improvemen t

16.1 Phases of Code Improvemen t

16.2 Peephole Optimizatio n

16.3 Redundancy Elimination in Basic Block s

16.3.1 A Running Exampl e

16.3.2 Value Numberin g

16.4 Global Redundancy and Data Flow Analysi s

16.4.1 SSA Form and Global Value Numberin g

16.4.2 Global Common Subexpression Eliminatio n

16.5 Loop Improvement I

16.5.1 Loop Invariant s

16.5.2 Induction Variable s

16.6 Instruction Schedulin g

16.7 Loop Improvement I I

16.7.1 Loop Unrolling and Software Pipelinin g

16.7.2 Loop Reorderin g

16.8 Register Allocatio n

16.9 Summary and Concluding Remark s

16.10 Bibliographic Note s

A Programming Languages Mentione d

Ð’ Language Design and Language Implementatio n

С Numbered Example s

Bibliography

Index

... Next, we design an interactive debugger to help developers maintain code written in high-level languages for hardware accelerators. Debuggers are a vital part of a developer's arsenal of maintenance tools [190]. Although debugging support for CPUs is mature and fully featured (e.g., including standard tools [206], successful technology transfer [24] and annual conferences [1]), the throughput of automata processing applications on CPUs is typically orders of magnitude slower than execution on hardware accelerators [166,231] We develop a high-throughput, interactive debugger for the RAPID programming language. ...

... We focus on the implementation of two key debugging operations: setting breakpoints to stop program execution, and the inspection of program variables [190]. ...

... Parsers are typically implemented as the second stage of a larger pipeline [190]. ...

  • Kevin Angstadt

The adoption of hardware accelerators, such as Field-Programmable Gate Arrays, into general-purpose computation pipelines continues to rise, driven by recent trends in data collection and analysis as well as pressure from challenging physical design constraints in hardware. The architectural designs of many of these accelerators stand in stark contrast to the traditional von Neumann model of CPUs. Consequently, existing programming languages, maintenance tools, and techniques are not directly applicable to these devices, meaning that additional architectural knowledge is required for effective programming and configuration. Current programming models and techniques are akin to assembly-level programming on a CPU, thus placing significant burden on developers tasked with using these architectures. Because programming is currently performed at such low levels of abstraction, the software development process is tedious and challenging and hinders the adoption of hardware accelerators. This dissertation explores the thesis that theoretical finite automata provide a suitable abstraction for bridging the gap between high-level programming models and maintenance tools familiar to developers and the low-level hardware representations that enable high-performance execution on hardware accelerators. We adopt a principled hardware/software co-design methodology to develop a programming model providing the key properties that we observe are necessary for success, namely performance and scalability, ease of use, expressive power, and legacy support. First, we develop a framework that allows developers to port existing, legacy code to run on hardware accelerators by leveraging automata learning algorithms in a novel composition with software verification, string solvers, and high-performance automata architectures. Next, we design a domain-specific programming language to aid programmers writing pattern-searching algorithms and develop compilation algorithms to produce finite automata, which supports efficient execution on a wide variety of processing architectures. Then, we develop an interactive debugger for our new language, which allows developers to accurately identify the locations of bugs in software while maintaining support for high-throughput data processing. Finally, we develop two new automata-derived accelerator architectures to support additional applications, including the detection of security attacks and the parsing of recursive and tree-structured data. Using empirical studies, logical reasoning, and statistical analyses, we demonstrate that our prototype artifacts scale to real-world applications, maintain manageable overheads, and support developers' use of hardware accelerators. Collectively, the research efforts detailed in this dissertation help ease the adoption and use of hardware accelerators for data analysis applications, while supporting high-performance computation.

... Analisis semantik adalah analisis untuk menemukan makna dari teks dengan menginterpretasikan keseluruhan teks, masing-masing kalimat, paragraf, struktur gramatika, hubungan antar kata dalam konteks tertentu, dan sebagainya (Scott, 2009). Dalam penelitian ini analisis semantik digunakan untuk menginterpretasikan dan mengklasifikasi kata-kata kunci berdasarkan rumpun makna tertentu. ...

  • Hilary Relita Vertikasari Sekarningrum
  • Gregorius Ari Nugrahanta Gregorius Ari Nugrahanta
  • Irine Kurniastuti

Tujuan penelitian ini adalah untuk mengembangkan modul permainan tradisional guna menumbuhkan karakter kontrol diri anak usia 6-8 tahun. Metode yang digunakan dalam penelitian ini adalah penelitian pengembangan (R & D) tipe ADDIE. Penelitian ini melibatkan enam guru dari berbagai daerah untuk analisis kebutuhan, tujuh validator untuk expert judgement, dan enam anak untuk uji coba modul secara terbatas. Hasil penelitian menunjukkan 1) Modul permainan tradisional untuk menumbuhkan karakter kontrol diri anak usia 6-8 tahun dikembangkan berdasarkan langkah-langkah dalam ADDIE, yaitu Analyze, Design, Develop, Implement, dan Evaluate; 2) Kualitas modul permainan tradisional secara keseluruhan adalah "sangat baik" dengan skor 3,98 (skala 1-4) dengan rekomendasi "Tidak perlu revisi"; dan 3) Penerapan modul permainan tradisional berpengaruh terhadap karakter kontrol diri anak. Hasil uji signifikansi menunjukkan t(5) = 3,929; p < 0,05. Besar pengaruh adalah r = 0,87 yang masuk kategori "efek besar" atau setara dengan 75,50%. Artinya, modul permainan tradisional dapat menjelaskan 75,50% perubahan varian pada karakter kontrol diri. Tingkat efektivitas ditunjukkan dengan N-gain score sebesar 66,07% yang masuk kategori "sedang".

... Programming language semantics A variety of programming language constructs have some relevance to intentional forgetting. For example, many programming languages define the lexical scope, or region of a program, in which a name binding to a program object is valid [27]. Outside that scope, the binding is forgotten (i.e., the name is forgotten). ...

  • Deborah Shands
  • Carolyn Talcott

Many damaging cybersecurity attacks are enabled when an attacker can access residual sensitive information (e.g. cryptographic keys, personal identifiers) left behind from earlier computation. Attackers can sometimes use residual information to take control of a system, impersonate a user, or manipulate data. Current approaches to addressing access to residual sensitive information aim to patch individual software or hardware vulnerabilities. While such patching approaches are necessary to mitigate sometimes serious security vulnerabilities in the near term, they cannot address the underlying issue: explicit requirements for adequately eliminating residual information and explicit representations of the erasure capabilities of systems are necessary to ensure that sensitive information is handled as expected. This position paper introduces the concept of intentional forgetting and the capabilities that are needed to achieve it. Intentional forgetting enables software and hardware system designers at every level of abstraction to clearly specify and rigorously reason about the forgetting capabilities required of and provided by a system. We identify related work that may help to illuminate challenges or contribute to solutions and consider conceptual and engineering tradeoffs in implementations of forgetting capabilities. We discuss approaches to modeling intentional forgetting and then modeling the strength of a system's forgetting capability by its resistance to disclosing information to different types of detectors. Research is needed in a variety of domains to advance the theory, specification techniques, system foundations, implementation tools, and methodologies for effective, practical forgetting. We highlight research challenges in several domains and encourage cross-disciplinary collaboration to one day create a robust theory and practice of intentional forgetting.

... The Yoruba-based PL was implemented as a sourceto-source compiler that produces another highlevel language, QBASIC language, as output because a compiler already exists for QBASIC. This approach has been used for a number of programming languages, such as Java, Python, and others [24]. The programming language was implemented in four phases, viz: lexical analysis, syntax analysis, semantic analysis and code generation. ...

p>Most of the existing high level programming languages havehitherto borrowed their lexical items from human languages including European and Asian languages. However, there is paucity of research information on programming languages developed with the lexicons of an African indigenous language. This research explored the design and implementation of an African indigenous language-based programming language using Yoruba as case study. Yoruba is the first language of over 30 million people in the south-west of Nigeria, Africa; and is spoken by over one hundred million people world-wide. It is hoped, as established by research studies, that making computer programming possible in one's mother tongue will enhance computer-based problem-solving processes by indigenous learners and teachers. The alphabets and reserved words of the programming language were respectively formed from the basic Yoruba alphabets and standard Yoruba words. The lexical items and syntactic structures of the programming language were designed with appropriate regular expressions and context-free grammars, using Backus-Naur Form (BNF) notations. A prototype implementation of the programming language was carried out as a source-to-source, 5-pass compiler. QBasic within QB64 IDE was the implementation language. The results from implementation showed functional correctness and effectiveness of the developed programming language. Thus lexical items of a programming language need not be borrowed exclusively from European and Asian languages, they can and should be borrowed from most African native languages. Furthermore, the developed native language programming language can be used to introduce computer programming to indigenous pupils of primary and junior secondary schools.</p

... A generator or iterator is a special kind of co-routine function which yields data elements one at a time, rather than many together as a collection; see, e.g. [14,Ch. 8]. ...

  • Alexander Brandt Alexander Brandt
  • Marc Moreno Maza

Hensel's lemma, combined with repeated applications of Weierstrass preparation theorem, allows for the factorization of polynomials with multivariate power series coefficients. We present a complexity analysis for this method and leverage those results to guide the load-balancing of a parallel implementation to concurrently update all factors. In particular, the factorization creates a pipeline where the terms of degree k of the first factor are computed simultaneously with the terms of degree k-1 of the second factor, etc. An implementation challenge is the inherent irregularity of computational work between factors, as our complexity analysis reveals. Additional resource utilization and load-balancing is achieved through the parallelization of Weierstrass preparation. Experimental results show the efficacy of this mixed parallel scheme, achieving up to 9x speedup on 12 cores.

... Example implementations of complex patterns, such as upstream process synchronization, exclusive choice among downstream processes, and feedback loops, are available in the documentation (Tommaso et al., 2019). Like Swift/T, Nextflow treats functions as first class objects (Scott, 2009) that can be used in the same ways as variables, enabling the programmer to create easily extensible pipelines, which is a very important feature in the world of ever-changing bioinformatics analyses. CWL and WDL are qualitatively different. ...

Background: The changing landscape of genomics research and clinical practice has created a need for computational pipelines capable of efficiently orchestrating complex analysis stages while handling large volumes of data across heterogeneous computational environments. Workflow Management Systems (WfMSs) are the software components employed to fill this gap. Results: This work provides an approach and systematic evaluation of key features of popular bioinformatics WfMSs in use today: Nextflow, CWL, and WDL and some of their executors, along with Swift/T, a workflow manager commonly used in high-scale physics applications. We employed two use cases: a variant-calling genomic pipeline and a scalability-testing framework, where both were run locally, on an HPC cluster, and in the cloud. This allowed for evaluation of those four WfMSs in terms of language expressiveness, modularity, scalability, robustness, reproducibility, interoperability, ease of development, along with adoption and usage in research labs and healthcare settings. This article is trying to answer, "which WfMS should be chosen for a given bioinformatics application regardless of analysis type?". Conclusions: The choice of a given WfMS is a function of both its intrinsic language and engine features. Within bioinformatics, where analysts are a mix of dry and wet lab scientists, the choice is also governed by collaborations and adoption within large consortia and technical support provided by the WfMS team/community. As the community and its needs continue to evolve along with computational infrastructure, WfMSs will also evolve, especially those with permissive licenses that allow commercial use. In much the same way as the dataflow paradigm and containerization are now well understood to be very useful in bioinformatics applications, we will continue to see innovations of tools and utilities for other purposes, like big data technologies, interoperability, and provenance.

High-throughput image-based technologies are now widely used in the rapidly developing field of digital phenomics and are generating ever-increasing amounts and diversity of data. Artificial intelligence (AI) is becoming a game changer in turning the vast seas of data into valuable predictions and insights. However, this requires specialized programming skills and an in-depth understanding of machine learning, deep learning, and ensemble learning algorithms. Here, we attempt to methodically review the usage of different tools, technologies, and services available to the phenomics data community and show how they can be applied to selected problems in explainable AI-based image analysis. This tutorial provides practical and useful resources for novices and experts to harness the potential of the phenomic data in explainable AI-led breeding programs.

Hensel's lemma, combined with repeated applications of Weierstrass preparation theorem, allows for the factorization of polynomials with multivariate power series coefficients. We present a complexity analysis for this method and leverage those results to guide the load-balancing of a parallel implementation to concurrently update all factors. In particular, the factorization creates a pipeline where the terms of degree k of the first factor are computed simultaneously with the terms of degree \(k-1\) of the second factor, etc. An implementation challenge is the inherent irregularity of computational work between factors, as our complexity analysis reveals. Additional resource utilization and load-balancing is achieved through the parallelization of Weierstrass preparation. Experimental results show the efficacy of this mixed parallel scheme, achieving up to 9\(\times \) parallel speedup on a 12-core machine.

Object-oriented programming (OOP) is one of the most common programming paradigms used for building software systems. However, despite its industrial and academic value, OOP is criticized for its high complexity, low maintainability and lack of rigorous principles. Eolang (a.k.a. EO) was created to solve the above problems by restricting its features and suggesting a formal object calculus for this programming language. This paper seeks to analyze the Eolang language and compare it to other OOP languages in order to develop the core features of this new language.

ResearchGate has not been able to resolve any references for this publication.