languages and tools. by sa machine code

68
languages and tools

Upload: kristian-burns

Post on 24-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Languages and tools. BY SA machine code

languages and tools

Page 2: Languages and tools. BY SA machine code

BY

SA

Page 3: Languages and tools. BY SA machine code
Page 4: Languages and tools. BY SA machine code

machine code

Page 5: Languages and tools. BY SA machine code
Page 6: Languages and tools. BY SA machine code
Page 7: Languages and tools. BY SA machine code
Page 8: Languages and tools. BY SA machine code
Page 9: Languages and tools. BY SA machine code
Page 10: Languages and tools. BY SA machine code

assembly

Page 11: Languages and tools. BY SA machine code

section .text

global main

main:mov eax, 4 ;system call number (sys_write)mov ebx, 1 ;first argument: file handle (stdout)mov ecx, msg ;second argument: pointer to message to

writemov edx, len ;third argument: message lengthint 0x80 ;call kernel

mov eax, 1 ;system call number (sys_exit)mov ebx, 0 ;first syscall argument: exit codeint 0x80 ;call kernel

section .data

msg db "Hello, world!", 0xa len equ $ - msg

Page 12: Languages and tools. BY SA machine code

NASM (Netwide Assembler) GAS (Gnu Assembler) MASM (Microsoft Macro Assembler)

Page 13: Languages and tools. BY SA machine code

hello.asm(source)

hello.o(object file)

hello (executable)

assembler linker

Page 14: Languages and tools. BY SA machine code

foo.asm foo.o

baz

assembler

bar.asm bar.o

assembler

linker

Page 15: Languages and tools. BY SA machine code

dynamic linking

.so (Linux)

.dll (Windows)

(linking at runtime)

Page 16: Languages and tools. BY SA machine code

low-level• precise control• efficiency

high-level• expressiveness• portability

Page 17: Languages and tools. BY SA machine code

compiler

Page 18: Languages and tools. BY SA machine code

foo.c foo.o

baz

compiler

bar.c bar.o

compiler

linker

Page 19: Languages and tools. BY SA machine code

foo.asm foo.o

baz

assembler

bar.c bar.o

compiler

linker

Page 20: Languages and tools. BY SA machine code

interpreter

Page 21: Languages and tools. BY SA machine code

hello(source)

interpreter

Page 22: Languages and tools. BY SA machine code

foo

interpreter

bar

Page 23: Languages and tools. BY SA machine code

88 + 52 – 98 * (-3 + 5)

Page 24: Languages and tools. BY SA machine code

88 + 52 – 98 * (-3 + 5) 93

Page 25: Languages and tools. BY SA machine code

88 + 52 – 98 * (-3 + 5) -7

Page 26: Languages and tools. BY SA machine code

88 + 52 – 98 * (-3 + 5) 16

Page 27: Languages and tools. BY SA machine code

as foo 1 + 21 + foo 4

Page 28: Languages and tools. BY SA machine code

hello.java(source)

hello.class(bytecode)

compiler virtual machine

Page 29: Languages and tools. BY SA machine code

hello.java(source)

hello.class(bytecode)

compilerVM with JIT

(Just-in-time)

(machine code)

Page 30: Languages and tools. BY SA machine code

garbage collection

Page 31: Languages and tools. BY SA machine code

function factorial n as val 1 while (gt n 1) # error when n is not a number as val (mul n val) as n (sub n 1) return val

(factorial true) # improper type

Type error:

Page 32: Languages and tools. BY SA machine code

function num:factorial num:n as num:val 1 while (gt n 1) as val (mul n val) as n (sub n 1) return val

(factorial true) # improper type

Static typing:

Page 33: Languages and tools. BY SA machine code

function num:factorial num:n as num:val 1 while (gt n 1) as val (mul n val) as n (sub n 1) return val

(factorial (foo))

Static typing:

Page 34: Languages and tools. BY SA machine code

as list:foo (list “hello” 14 8)as num:bar (get foo 1) # unknown type

Page 35: Languages and tools. BY SA machine code

as numList:foo (numList 5 14 8)as num:bar (getNum foo 1)

Page 36: Languages and tools. BY SA machine code

polymorphism

(print “hello”)(print 100)(print false)

(accepts varied number and/or types of inputs)

Page 37: Languages and tools. BY SA machine code

function foo a b if (isNum a) … else …

(foo 3 true)(foo “hello” true)

Page 38: Languages and tools. BY SA machine code

function foo a b if (isNull b) … else …

(foo 3 true)(foo “hello” null)

Page 39: Languages and tools. BY SA machine code

function foo a b if (isNull b) … else …

(foo 3 true)(foo “hello”)

Page 40: Languages and tools. BY SA machine code

function num:foo num:a bool:b …

function bool:foo str:a bool:b …

function str:foo str:a …

Page 41: Languages and tools. BY SA machine code

function num:foo num:a bool:b …

function bool:foo str:a bool:b …

function str:foo str:a # illegal …

function num:foo str:a # illegal …

Page 42: Languages and tools. BY SA machine code

function num:foo num:a bool:b …

function bool:foo str:a bool:b …

function str:foo str:a …

(foo “hello”)(foo 3 true)(foo “hello” false)

Page 43: Languages and tools. BY SA machine code

function num:foo num:a bool:b …

function bool:foo str:a bool:b …

function str:foo str:a …

as str:x (foo “hello”)

Page 44: Languages and tools. BY SA machine code

function foo a if (isNum a) … else …

as bar 4if x as bar false(foo bar)

Page 45: Languages and tools. BY SA machine code

function num:foo bool:a …function num:foo num:a …

as num:bar 4 if x as bar false # illegal(foo bar)

Page 46: Languages and tools. BY SA machine code

function num:foo bool:a …function num:foo num:a …

(foo (ack))

Page 47: Languages and tools. BY SA machine code

Strong typing:

• Operations only treat a piece of data appropriately to its type.

Weak typing:

• Possible to modify any bytes of data in any way.

Page 48: Languages and tools. BY SA machine code

paradigms• imperative (do modify state)• functional (don’t modify state)

• procedural (action-centered design)• object-oriented (data-centered design)

Page 49: Languages and tools. BY SA machine code

• syntax• semantics• libraries• idioms• tools

Page 50: Languages and tools. BY SA machine code

• compiler• linker• interpreter• text editor • debugger• profiler• version control• IDE (Integrated Developer Environment)

Page 51: Languages and tools. BY SA machine code

C• 1970’s• static, compiled to machine code• “portable assembly”

#include <stdio.h>

int main(){ printf(“Hello, world!\n"); return 0;}

Page 52: Languages and tools. BY SA machine code

C++• 1980’s• superset of C (almost)• C with OOP

#include <iostream>

int main() { std::cout << "Hello, world!\n"; return 0; }

Page 53: Languages and tools. BY SA machine code

Objective-C• 1980’s• superset of C• C with OOP• mostly used by Apple

#import <stdio.h>

int main(){ printf(“Hello, world!\n”); return 0;}

Page 54: Languages and tools. BY SA machine code

Java• 1990’s by Sun Microsystems• static• OOP• C-style syntax• compiled to bytecode, run by VM• JVM (Java Virtual Machine)

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); }}

Page 55: Languages and tools. BY SA machine code

C#• 2001 by Microsoft• static• OOP• C-style syntax• compiles to bytecode, run by VM• CLR (Common Language Runtime)

using System;

class ExampleClass { static void Main() { Console.WriteLine("Hello, world!"); }}

Page 56: Languages and tools. BY SA machine code

Visual Basic• 1990’s by Microsoft• now basically C# with different syntax

Module Module1 Sub Main() Console.WriteLine("Hello, world!") End SubEnd Module

Page 57: Languages and tools. BY SA machine code

Perl• 1990’s• dynamic• OOP (weak)• interpreted

print "Hello, world!\n";

Page 58: Languages and tools. BY SA machine code

Python

print("Hello, world!\n”)

• 1990’s• dynamic• OOP• interpreted• indentation-sensitive

Page 59: Languages and tools. BY SA machine code

Ruby

puts “Hello, world!\n”

• 1990’s• dynamic• OOP• interpreted• generate webpages

Page 60: Languages and tools. BY SA machine code

PHP

<?php Print "Hello, World!";?>

• 1990’s• dynamic• OOP (weak)• interpreted• generate webpages

Page 61: Languages and tools. BY SA machine code

Javascript• 1990’s• dynamic• OOP (prototypes)• interpreted• C-style syntax• embedded in webpages

alert(“Hello, world!\n”);

Page 62: Languages and tools. BY SA machine code

Fortran

• 1950’s• static• compiled• many revisions• science and engineering

program hello print *, “Hello World!”end program hello

Page 63: Languages and tools. BY SA machine code

Lisp• 1950’s• dynamic• interpreted• prefix notation• meta-programming (macros)• dialects (Common Lisp, Scheme, Clojure)

(print “Hello, world!\n”)

Page 64: Languages and tools. BY SA machine code

efficiency

• interpretation• dynamic typing• garbage collection

Page 65: Languages and tools. BY SA machine code

efficiency1) assembly, C, C++,

Objective-C, Fortran2) Java, C#3) Perl, Python, Ruby,

PHP, Javascript

Page 66: Languages and tools. BY SA machine code

portability• CPU• libraries• capabilities

Page 67: Languages and tools. BY SA machine code

• functional languages (Haskell, Scala, ML, F#)• logic languages (Prolog)• shell languages (BASH)• scripting languages (Perl, Python)• data languages (HTML, XML)• query languages (SQL)• domain-specific languages• graphical languages

Page 68: Languages and tools. BY SA machine code

(Brian Will)created by

http://brianwill.net/