Anatomy of applications
Applications execute code on microprocessors
The execution is (often) "mediated" by an operating system
The operating system is a software layer between applications and the hardware
On desktop systems it also provides a GUI for user interaction
Microprocessor
Parts of an application
Your code
Their code
Their code
Language standard libraries
e.g. printf() function from <stdio.h>
Operating system APIs and libraries
Platform dependent and not portable
Low level access to hardware
Desktop services
Additional libraries
Libraries
A collection of functions
Often in compiled format, i.e. a binary library
With header files for the "public" API
You might find yourself building libraries from source
Dependencies
Dependencies of an application are the libraries that are required for it to build and/or run
Getting the dependencies are often the biggest source of frustration when trying to build a large application
You might need a specific version
The dependency itself might have additional dependencies (AKA Dependency hell)
Dependency/Package managers
Resolve and download dependencies
fink, macports
newer: Homebrew
On Linux: apt or yum (there are others...)
On windows: OneGet and others (but I can't recommend any as I haven't used them)
Dynamic and static libraries
Static libraries get bundled into the application
Dynamic libraries are loaded by the application at run-time
Other types of applications
GPU programming
Microcontroller programming
"Web apps"
GPU programming
Have their own language or provide extensions to existing languages
The code is executed in the GPU rather than the CPU
GPU are great at parallel processing
So if your problem is parallelizable then it is well suited to GPU computing
Microcontroller programming
Direct access to a microcontroller's basic functions
or through libraries that implement common functionality
through custom OSs (e.g. RTOS)
through regular OS (Embedded Linux)
or through high level abstractions like Wiring/Arduino
Microcontroller boards
Microcontroller boards
Web Apps
Part of the code runs on your equipment
The other runs on a server
The network is an intermediate layer
There is an interconnection protocol to exchange commands and data
Made with Slides.com