|
Programming Erlang is a joy to read. Every now and again a
really excellent programming book is released, and
Programming Erlang is one of these, they are often made
better and often come from the author of the language
itself.
Programming Erlang makes Erlang an interesting and fun
language to explore, this is type of approach to program
language explanation is generally the one that works best
when learning a new language and introducing new
concepts.
Erlang (Ericsson Language and last name of mathematician
Agner Krarup Erlang) was designed to be a telecommunication
language. Erlang is useful for both distributed and multi
core systems, it is a language that respects the concept of
parallel interactions at core, and the network.
I am going to go out on a limb here, and say that Erlang
is probably a parrallelnym; a word that has two meanings
both of which describe it. Joe may not wish to say if Erlang
means Ericsson Language or is named after Agner Erlang,
I think it is a dash of both.
Programming Erlang Chapters
Programming Erlang Chapters
- Begin
- Road Map
- Begin Again
- Acknowledgments
- Getting Started
- Overview
- Installing Erlang
- The Code in this Book
- Starting the Shell
- Simple Integer Arithmetic
- Variables
- Floating-Point Numbers
- Atoms
- Tuples
- Lists
- Strings
- Pattern Matching Again
- Sequential Programming
- Modules
- Back to Shopping
- Function with the Sane Name and Different Arity
- Funs
- Simple List Processing
- List Comprehensions
- Arithmetic Expressions
- Guards
- Records
- case and if Expressions
- Building List in Natural Order
- Accumulators
- Exceptions
- Exceptions
- Raising an Exception
- try .. catch
- catch
- Improving Error Messages
- Programming Style with try .. catch
- Catching Every Possible Exception
- Old and New Style Exception Handling
- Stack Traces
- Advanced Sequential Programming
- BIFs
- Binaries
- The Bit Syntax
- Miscellaneous Short Topics
- Compiling and Running Your Program
- Starting and Stopping the Erlang Shell
- Modifying the Development Environment
- Different Ways to Run Your Program
- Automating Compilation with Makefiles
- Command Editing the Erlang Shell
- Getting Out of Trouble
- When Things Go Wrong
- Getting Help
- Tweaking the Environment
- The Crash Dump
- Concurrency
- Concurrent Programming
- The Concurrency Primitives
- A Simple Example
- Client-Server - An Introduction
- How Long Does it take to Create a Process?
- Receive with a Timeout
- Selective Receive
- Registered Processes
- How Do We Write a Concurrent Program?
- A Word About Tail Recursion
- Spawning with MFAs
- Problems
- Errors in Concurrent Programs
- Linking Processes
- An on_exit Handler
- Remote handling of Errors
- The Details of Error Handling
- Error handling Primitives
- Sets of Linked Processes
- Monitors
- A Keep-Alive Process
- Distributed Programming
- IRC Lite
- Message Sequence Diagrams
- The User Interface
- Client-Side Software
- Server-Side Software
- Running the Application
- The Chat Program Source Code
- Exercises
- Interfacing Techniques
- Ports
- Interfacing an External C Program
- open_port
- Linked-in Drivers
- Notes
- Programming with Files
- Organization of the Libraries
- The Different Ways of Reading a File
- The Different Ways or Writing to a File
- Directory Operations
- Finding Information About a File
- Copying and Deleting Files
- Bits and Pieces
- A Find Utility
- Programming with Sockets
- Using TCP
- Control Issues
- Where Did That Connection Come From?
- Error Handling with Sockets
- UDP
- Broadcasting to Multiple Machines
- A SHOUTcast Server
- Digging Deeper
- ETS and DETS: Large Data Storage Mechanisms
- The Basic Operations on Tables
- Types of Table
- ETS Table Efficiency Considerations
- Creating an ETS Table
- Example Programs with ETS
- DETS
- What Haven't We Talked About?
- Code Listings
- OTP Introduction
- The Road to the Generic Server
- Getting Started with gen_server
- The gen_server Callback Structure
- Code and Templates
- Digging Deeper
- Mnesia: the Erlang Database
- Database Queries
- Adding and Removing Data in the Database
- Mnesia Transactions
- Storing Complex Data in Tables
- Table Types and Location
- Creating the Initial Database
- The Table Viewer
- Digging Deeper
- Listings
- Making a System with OTP
- Generic Event Handling
- The Error Logger
- Alarm Management
- The Application Servers
- The Supervision Tree
- Starting the System
- The Application
- File System Organization
- The Application Monitor
- Digging Deeper
- How Did We Make that Prime?
- Multicore Prelude
- Programming Multicore CPUs
- How to Make Programs Run Efficiently on a Multicore CPU
- Parallelizing Sequential Code
- Small Messages, Big Computations
- mapreduce and Indexing Our Disk
- Growing into the Future
Programming Erlang Appendices
- Documenting Our Program
- Erlang Type Notation
- Tools That Use Types
- Erlang on Microsoft Windows
- Erlang
- Fetch and Install MinGW
- Fetch and Install MSYS
- Install the MSYS Developer Toolkit (Optional)
- Emacs
- Resources
- Online Documentation
- Books and Theses
- Link Collections
- Blogs
- Forums, Online Communities, and Social Sites
- Conferences
- Projects
- Bibliography
- A Socket Application
- An Example
- How lib_chan Works
- The lib_chan Code
- Miscellaneous
- Analysis the Profiling Tools
- Debugging
- Tracing
- Dynamic Code Loading
- Module and Function Reference
- Module: application
- Module: base64
- Module: beam_lib
- Module: c
- Module: calendar
- Module: code
- Module: dets
- Module: dict
- Module: digraph
- Module: digraph_utils
- Module: disk_log
- Module: epp
- Module: erl_eval
- Module: erl_parse
- Module: erl_pp
- Module: erl_scan
- Module: erl_tar
- Module: erlang
- Module: error_handler
- Module: error_logger
- Module: ets
- Module: file
- Module: file_sorter
- Module: filelilb
- Module: filename
- Module: gb_sets
- Module: gb_trees
- Module: gen_event
- Module: gen_fsm
- Module: gen_sctp
- Module: gen_server
- Module: gen_tcp
- Module: gen_udp
- Module: global
- Module: inet
- Module: init
- Module: io
- Module: io_lib
- Module: lib
- Module: lists
- Module: math
- Module: ms_transform
- Module: net_adm
- Module: net_kernel
- Module: os
- Module: proc_lib
- Module: qlc
- Module: queue
- Module: random
- Module: regexp
- Module: rpc
- Module: seq_trace
- Module: sets
- Module: shell
- Module: slave
- Module: sofs
- Module: string
- Module: supervisor
- Module: sys
- Module: timer
- Module: win32reg
- Module: zip
- Module: zlib
- Index
Programming Erlang is not without its niggles, these come
to light more readily because the information is so
engaging. Some concepts such as quiting the shell; q(). (
init:stop(). ) do not appear until page 110. The order in
which information is presented could do with a few tweaks,
but the information shown is very comprehensive, Programming
Erlang if the order was tweaked would act as a template for
other programming language books to follow.
Programming Erlang is a classic, if you are interested in
concurrent programming, with a highly functional basis, then
Programming Erlang does an excellent job of demystifying it
all. The examples are spot on, and most things that you
require are shown succinctly, this book deserves to be on
most developers' bookshelves.
|
|