CS3505 Lecture1
CS3505 Lecture1
Course Overview
Part 1
David
Johnson
A Little About Me
• PhD from University of Utah
• Research
– Mostly graphics and robotics
• Teach
– CS 1410 (Now 1400/10 or 1420)
– Programming for Engineers
– Virtual Reality
– Robot Motion Planning
– Software Practice II
– COMP Python courses
My Research Interests
Magnetic Interfaces
Outreach
Summer camps (>500 kids each summer)
Questions or Concerns?
Let’s Get Technical
• What machines will we use?
– A little history
• A few years ago we did remote access to CADE Linux
• Then I did a Linux VM
– It was good, but M1 Macs don’t support x86 virtualization
• Two semesters ago I did a bit of a free-for-all
– And it was a bit of a mess
• Last semester we did some Docker linux instances
– Seemed nice
– Matches a lot of modern code development styles
– Attach an editor to a possibly remote instance
– Share instances to keep environment consistent
C++ History
• C was developed in the • New C++ releases
1970’s • Referred to as
– Dennis Ritchie – C++03, C++11, C++14
– Widespread adoption – Added higher-level
• Efficient with resources data structures
• Often the first choice on
– Modern language
new architectures,
embedded systems features
• Lambda functions
• C++ (Bjarne Stroustrup) • Managed memory
– started extending in ‘79 • New loop constructs
– 1998 ratification • Initializers
– Added object-oriented
programming
– Templates (generics)
C Principles
• C was invented during a time when every byte
and every cycle mattered:
– Language elements correspond directly to machine
language elements
• Code is compiled for a specific architecture
• Statements were easily translated to assembly
• Data types match machine representations
– 16-bit computer = 16-bit integers
• Pointers are memory addresses
• Arrays are blocks of memory, not objects
• Type information was not stored, but only used at compile
time
– This has improved
• Data was often packed together for efficiency
C Principles
• C was invented during a time when every byte and every
cycle mattered:
– Original C compilation was costly
• Large projects are separated into many small source code
files
• Compilers were designed to make a single pass through the
code
• Compilation produced intermediate object files which needed
to be linked to build the application
– Your code is small units that are later stitched together to form
the application.
• It was necessary to allow the code to control the compilation
process
– Source code directives
C++ Principles
• Retain the power of C
• Add a better development experience