Modern Systems Programming with Scala Native: Write Lean, High-Performance Code without the JVM

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Access the power of bare-metal systems programming with Scala Native, an ahead-of-time Scala compiler. Without the baggage of legacy frameworks and virtual machines, Scala Native lets you re-imagine how your programs interact with your operating system. Compile Scala code down to native machine instructions; seamlessly invoke operating system APIs for low-level networking and IO; control pointers, arrays, and other memory management techniques for extreme performance; and enjoy instant start-up times. Skip the JVM and improve your code performance by getting close to the metal. Developers generally build systems on top of the work of those who came before, accumulating layer upon layer of abstraction. Scala Native provides a rare opportunity to remove layers. Without the JVM, Scala Native uses POSIX and ANSI C APIs to build concise, expressive programs that run unusually close to bare metal. Scala Native compiles Scala code down to native machine instructions instead of JVM bytecode. It starts up fast, without the sluggish warm-up phase that's common for just-in-time compilers. Scala Native programs can seamlessly invoke operating system APIs for low-level networking and IO. And Scala Native lets you control pointers, arrays, and other memory layout types for extreme performance. Write practical, bare-metal code with Scala Native, step by step. Understand the foundations of systems programming, including pointers, arrays, strings, and memory management. Use the UNIX socket API to write network client and server programs without the sort of frameworks higher-level languages rely on. Put all the pieces together to design and implement a modern, asynchronous microservice-style HTTP framework from scratch. Take advantage of Scala Native's clean, modern syntax to write lean, high-performance code without the JVM. What You Need: A modern Windows, Mac OS, or Linux system capable of running Docker. All code examples in the book are designed to run on a portable Docker-based build environment that runs anywhere. If you don't have Docker yet, see the Appendix for instructions on how to get it.

Author(s): Richard Whaling
Edition: 1
Publisher: Pragmatic Bookshelf
Year: 2020

Language: English
Commentary: True PDF
Pages: 262
City: Raleigh, NC
Tags: Programming; Asynchronous Programming; NoSQL; Stream Processing; Scala; Futures; Process Management; Systems Programming

Table of Contents
Acknowledgments
Foreword
Preface
Who This Book Is For
What’s In This Book
Working with the Code
Online Resources
Systems Programming in the Twenty-First Century
What Is Systems Programming?
Moving Toward Modern Systems Programming
Why Scala Native?
What Makes Scala Native Different
Part I—Foundations of Systems Programming
1. The Basics: Input and Output
Working with Output
Working with Input
Case Study: Google NGrams
What’s Next
2. Arrays, Structs, and the Heap
The Stack and the Heap
Structs, Arrays, and Sorting
Sorting an Array
Aggregation at Scale
What’s Next
3. Writing a Simple HTTP Client
Defining Terms
Working with TCP
Making a TCP Connection
Testing Network Code with Netcat
Introducing HTTP
Implementing HTTP
Testing Our Code
What’s Next
4. Managing Processes: A Deconstructed Shell
Running a Program
Introducing exec
What Went Wrong?
Introducing Concurrency with fork() and wait()
Supervising Multiple Processes
Working with Pipes
What’s Next
5. Writing a Server the Old-Fashioned Way
Understanding How a Server Works
Building Our Server
Creating a Minimum Viable Server
Handling HTTP
Performance Testing with Gatling
What’s Next
Part II—Modern Systems Programming
6. Doing I/O Right, with Event Loops
Blocking and Polling
Introducing libuv
Working with Asynchronous TCP Sockets
Building an Asynchronous HTTP Server
What’s Next
7. Functions and Futures: Patterns for Distributed Services
Designing an Asynchronous API
Introducing Futures
Implementing Futures
Implementing an ExecutionContext
Futures and Promises
Introducing libcurl
Asynchronous curl
What’s Next
8. Streaming with Pipes and Files
Looking at Streams, Files, and Descriptors
Streaming Pipe Input in libuv
Streaming File Input in libuv
Streaming File Output in libuv
Stream Processors
What’s Next
9. Durability: An Embedded Key-Value Database with LMDB
Introducing Embedded Storage
Defining LMDB Concepts
Working with the LMDB API
Serialization and Deserialization with JSON
Putting LMDB on the Web
What’s Next
10. Services: Encapsulation and Abstraction for Modern Designs
Services and Distributed Systems
Parsing, Revisited
Moving from Server to Service
Implementing an Idiomatic Service DSL
Integrations and Ecosystems
The Way Forward
A1. Setting Up the Environment
Running Scala Native on Mac OS
Why Use Containers?
Installing and Configuring Docker
Running Scala Native in Docker
Index