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
Copyright © 2020, The Pragmatic Bookshelf.