Technology Landscape - Big Picture

Table of Contents

1 Big Picture - Technology Landscape

1.1 Domains where C++ is used

General:

  • 3D game engines and AAA (triple-A) games.
  • System Programming - It means, operating systems, device drivers, hardware interfacing, USB drivers …
  • Embedded Systems - DSP (Digital Signal Processors), Microcontrollers, Embedded Processors and so on.
  • Imaging processing and artifical vision.
  • Neural Networks
  • High perfomance numerical simulation (Number crunching)
  • High Performance Computing (HPC)
  • High Perfomance reusable libraries and software components
  • Physics
  • High Energy Physics - See CERN

Applicability:

  • Peformance critical code
  • Hard real time and soft real time systems.
    • Hard real time: audio, signal processing, radar, some control systems, UAVs - Unmanned Aerial Vehicles, Robots …
    • Soft real time: Games, audio and video streaming.
  • System Programming
  • Resource contrained systems => Embedded Systems
  • Any situation where low level access to operating system is needed.
  • Self-contained applications with less runtime dependency as possible:
    • For instance, a Java application, needs the Java runtime to run, a Python app needs the Python interpreter. It is a reasonable requirement that an Unix-like OS login shell or an installer should require no runtime dependency or interpreter to run.

Non applicability:

C++ may not be the best or the most productive choice for the following cases:

  • Web applications where fast iteration is needed.
  • CRUD-like (Create-Read-Update and Delete) Business applications with lots of forms and database access.
  • Short scripts and programs where languages like Ruby or Python would be better choice.
  • Non peformance critical code.

1.2 Technology Landscape

1.2.1 Computer Graphics GPU APIs

1.2.2 Operating Systems

  1. Desktop and/or Servers
    • Windows (Windows-NT family) - Most used Desktop operating system for games, enterprise and specialized tools because it was the first OS able to run in early IBM-PC computers that became the dominant computer architechture.
    • Linux (Unix-like) - Most used on servers, data centers and super computers. Powers the internet as most web servers are Linux powered.
    • BSD Family (Unix-like) - FreeBSD, OpenBSD, NetBSD - BSD-family operating systems have been highly regarded by the quality of their network TCP/IP stack and its high throughput. Due to those capabilities, they have been used by ISPs Internet Service Providing companies and network streaming companies like Whatsapp and Netflix. Some highly regard features are: permissive BSD license; good documentation and consistency; high-throughput and low-latency network TCP/IP stack; firewall pfSense, aka PF and ZFS file system.
    • Mac OSX (Unix like)
  2. Consumer Mobile Devices OSes
    • Android (Linux Kernel + Bionic => BSD-derived C-library replacing GNU C-Library GLIBC + Dalvik virtual machine replacing JVM)
    • iOS - Apple Inc. AAPL's mobile OS (U-nix lilke)
    • Symbian - discontinued operating system for feature phones. (old source code)
  3. Operating Systems for Embedded Systems
    • Embedded Linux based distributions
    • Embedded Linux OS for routers
    • Android (Linux-based) - Most used in consumer mobile devices and devices touching user interface.
    • Windows CE (Windows CE familiy, Not Windows-NT Kernel) - Operating system developed for embedded applications that can be used in automotive systems, kiosks, mobile phones, set top boxes, industrial robots, industrial and medical machines and so on. Supported architecture (x86m ARM, MIPs and SH4) – more
  4. Operating Systems for Embedded Systems - RTOS - Real Time OS

1.2.3 Hardware

General

  • Vanilla processors Intel-x86 (IA32) 32 bits or Intel (IA64) or AMD x86-x64 64 bits processors.
    • Most well-known processor architecture, used in the IBM-PC computer architecture (servers, desktops and laptops) that became popular due to the widespread cloning and reverse engineering of the IBM-PC architecture by many manufacturers and also due to the licensing of Microsft MSDOS and later Windows-NT to those manufacturers.
  • Embedded Processors
    • Processors designed for embedded applications, low power or battery-powered embedded systems. Most common: ARM-base processors, MIPS-based processors and PowerPC.
  • Microncontrollers
    • SOC - System-on-Chip - Almost a whole-computer on a chip, a micronctroller has a CPU, general purpose digital IO, ADC - analog to digital converters, ROM (Read-Only Memory) EPROM and limited RAM memory. MCUs are used in embedded systems and on every day appliances such as keyboards, mouses, cars, toys, … Most well-known: Atmel AVR Atmega (Arduino).
  • GPU - Graphical Processing Units
  • DSP => Digital Signal Processor

Processor Architectures

  • Most used for personal computers (based on x86)
    • Intel x86 or IA32 (32 bits).
    • AMD/Intel x86-64 or IA64 (64 bits).
  • Widely cores on Embedded Systems:
    • ARM Core (32 bits) - Widely used in Smartphones, PDAs, Tablets, Printers and so on. Note: ARM is not an specific processor, it is a CPU architechture designed by the Arm company and licensed to IC (Integrated Circuit Manufacturers) which embbeds the CPU in their devices. So, the ARM-based CPUs, embedded processors and microncontrollers are produced by many manufacturers which makes them highly available and cost effective.
      • Some ARM-based device manufacturers: Samsung, Apple, Nvidia, Qualcomm, Phillips, Atmel, Texas Instruments, STMicroelectronics and many others.
    • MIPS (32 and 64 bits) - CPU designed by MIPS Techonologies that is licensed IC manufacturers in a similar manner to ARM core.
    • Power PC (Former Motorola)

Computer Architectures

  • IBM-PC Architecture
  • Mainframes
  • Game Consoles (Proprietary computer architectures)
  • PLC (Programmable Logic Controllers) - Proprietary Computer Architecture with a human-friendly interface used for industrial automation.

Graphical Stack - Outline of the most common graphical interface systems.

  • X Windows System - X11 - XServer/Xlib Unix (Linux, BSD, FreeBSD)
  • Windows API / Microsoft Windows OS
  • MacOSX - Cocoa

Main C/C++ GUI - Graphical User Interfaces Libraries and APIs

  • QT toolkit / C++ - Cross Platform. QT is the most supported cross platform toolkit, but it is hard to be called from languages other than C++ as it is written in C++ and this language doesn't have a standard ABI (Application Binary Interface).
  • GTK / C with C++ inteface - Cross platform, most common in Linux OS.
  • Windows API. / Only available on Windows.
  • Cocoa / MacOSX - Not cross platform. It is only available on MacOSX.
  • X-Windows Systems (XServer/X11 + XLib) - Most low level graphical user interface library on Linux, BSD and others. Note: In Linux and BSD, the graphical user interface is not part of the Kernel.

Native Executable Binary Formats

  • Windows / .exe, *.dll files (PE - Portable Executable)
  • Linux / No extension, *.so files (ELF - Executable and Linkable Format)
  • MacOSX / *.dylib (Mach-O - Match Object )

Some Firmwares (EEPROMs, Microcontrollers) Binary Formats

Tooling

  • Compilers
    • GCC - Gnu C/C++ Compiler (g++) (Stard Compiler of many Linux distributions)
    • Mingw - GCC compiler (g++) ported to Windows operating system.
    • Microsoft Visual C++ - C/C++ compiler - MSVC, aka VC++ (cl.exe)
    • LLVM/Clang (Clang++)
    • Intel C++ Compiler
    • PGI Compiler (Portland Group)
    • Proprietary compilers for embedded Devices:
      • Many embedded devices such as microcontrollers, embedded processors and DSPs have proprietary compilers provided by device manufactures. Example: MPLAB
      • IAR Embedded Workbench (Compilers + IDE) (IAR Systems) => Targets: ARM Cortex, 8051 MCU, Texas Instruments MSP430
  • Building Tools
    • Cmake
    • MSBuild
    • Ninja
    • Make
      • NMake => Windows implementation
      • GNU Make (GMake) => GNU/Linux implementation of Make
      • BSD Make => BSD Implementation of Make

Author: Caio Rodrigues Soares - caiorss [DOT] rodrigues [AT] gmail [DOT] COM

Created: 2021-06-04 Fri 15:06

Validate