There and back again
A tale of programming languages
The problem
What is a programming language?
What composes a programming language?
Why are there a lot of them?
How everything started?
00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 03 00 01 00 00 00 80 80 04 08 34 00 00 00 |............4...|
00000020 c8 00 00 00 00 00 00 00 34 00 20 00 02 00 28 00 |........4. ...(.|
00000030 04 00 03 00 01 00 00 00 00 00 00 00 00 80 04 08 |................|
00000040 00 80 04 08 9d 00 00 00 9d 00 00 00 05 00 00 00 |................|
00000050 00 10 00 00 01 00 00 00 a0 00 00 00 a0 90 04 08 |................|
00000060 a0 90 04 08 0e 00 00 00 0e 00 00 00 06 00 00 00 |................|
00000070 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000080 ba 0e 00 00 00 b9 a0 90 04 08 bb 01 00 00 00 b8 |................|
00000090 04 00 00 00 cd 80 b8 01 00 00 00 cd 80 00 00 00 |................|
000000a0 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a 00 2e |Hello, world!...|
000000b0 73 68 73 74 72 74 61 62 00 2e 74 65 78 74 00 2e |shstrtab..text..|
000000c0 64 61 74 61 00 00 00 00 00 00 00 00 00 00 00 00 |data............|
000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000000f0 0b 00 00 00 01 00 00 00 06 00 00 00 80 80 04 08 |................|
00000100 80 00 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 |................|
00000110 10 00 00 00 00 00 00 00 11 00 00 00 01 00 00 00 |................|
00000120 03 00 00 00 a0 90 04 08 a0 00 00 00 0e 00 00 00 |................|
00000130 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................|
00000140 01 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 |................|
00000150 ae 00 00 00 17 00 00 00 00 00 00 00 00 00 00 00 |................|
00000160 01 00 00 00 00 00 00 00 |........|
The problem - revisited
What is a programming language?
What composes a programming language?
Why are there a lot of them?
What defines a programming language?
Syntax
Semantics
Paradigm[s]
Typing system
Translation scheme / Execution model
Memory management
….
hello.a
Translation scheme - Compilation
compiler
linker
compiler
assembler
hello.c
welcome.c
hello.o
welcome.o
greetings
Translation scheme - Interpretation
interpreter
welcome.rb
bye.rb
hello.rb
Translation scheme - Hybrid
compiler
hello.java hello.class
virtual machine
Translation scheme - Hybrid [enhanced]
compiler
hello.java hello.class
JIT
010101001110
010001000100
010010000101
Memory management
Typing system
Dynamic
function sum(a, b) {
return a + b;
}
sum(1, 9);
sum(0.5, 0.9);
sum(“string”, 11);
Static
function sum(int a, int b) {
return a + b;
}
sum(1, 9);
sum(0.5, 0.9);
sum(“string”, 11);
Typing system
Strong vs Weak
Paradigms
● imperative (do modify state)
● functional (don’t modify state)
● procedural (action-centered design)
● object-oriented (data-centered design)
declarative
metaprogramming reactive
reflective
Languages
● imperative languages (C, Java, Go)
● functional languages (Lisp, Scheme, Haskell, Scala, ML)
● logic languages (Prolog)
● shell languages (bash, zsh, ksh)
● scripting languages (Perl, Python, Ruby)
● data/markup languages (HTML, XML)
● query languages (SQL)
● domain-specific languages
Smalltalk
true, false, nil, self, super, thisContext
Be open to new ideas
:D

There and Back Again - A Tale of Programming Languages

  • 2.
    There and backagain A tale of programming languages
  • 3.
    The problem What isa programming language? What composes a programming language? Why are there a lot of them?
  • 4.
    How everything started? 000000007f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 02 00 03 00 01 00 00 00 80 80 04 08 34 00 00 00 |............4...| 00000020 c8 00 00 00 00 00 00 00 34 00 20 00 02 00 28 00 |........4. ...(.| 00000030 04 00 03 00 01 00 00 00 00 00 00 00 00 80 04 08 |................| 00000040 00 80 04 08 9d 00 00 00 9d 00 00 00 05 00 00 00 |................| 00000050 00 10 00 00 01 00 00 00 a0 00 00 00 a0 90 04 08 |................| 00000060 a0 90 04 08 0e 00 00 00 0e 00 00 00 06 00 00 00 |................| 00000070 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000080 ba 0e 00 00 00 b9 a0 90 04 08 bb 01 00 00 00 b8 |................| 00000090 04 00 00 00 cd 80 b8 01 00 00 00 cd 80 00 00 00 |................| 000000a0 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a 00 2e |Hello, world!...| 000000b0 73 68 73 74 72 74 61 62 00 2e 74 65 78 74 00 2e |shstrtab..text..| 000000c0 64 61 74 61 00 00 00 00 00 00 00 00 00 00 00 00 |data............| 000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000000f0 0b 00 00 00 01 00 00 00 06 00 00 00 80 80 04 08 |................| 00000100 80 00 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 |................| 00000110 10 00 00 00 00 00 00 00 11 00 00 00 01 00 00 00 |................| 00000120 03 00 00 00 a0 90 04 08 a0 00 00 00 0e 00 00 00 |................| 00000130 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 |................| 00000140 01 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 |................| 00000150 ae 00 00 00 17 00 00 00 00 00 00 00 00 00 00 00 |................| 00000160 01 00 00 00 00 00 00 00 |........|
  • 5.
    The problem -revisited What is a programming language? What composes a programming language? Why are there a lot of them?
  • 6.
    What defines aprogramming language? Syntax Semantics Paradigm[s] Typing system Translation scheme / Execution model Memory management ….
  • 7.
    hello.a Translation scheme -Compilation compiler linker compiler assembler hello.c welcome.c hello.o welcome.o greetings
  • 8.
    Translation scheme -Interpretation interpreter welcome.rb bye.rb hello.rb
  • 9.
    Translation scheme -Hybrid compiler hello.java hello.class virtual machine
  • 10.
    Translation scheme -Hybrid [enhanced] compiler hello.java hello.class JIT 010101001110 010001000100 010010000101
  • 11.
  • 12.
    Typing system Dynamic function sum(a,b) { return a + b; } sum(1, 9); sum(0.5, 0.9); sum(“string”, 11); Static function sum(int a, int b) { return a + b; } sum(1, 9); sum(0.5, 0.9); sum(“string”, 11);
  • 13.
  • 14.
    Paradigms ● imperative (domodify state) ● functional (don’t modify state) ● procedural (action-centered design) ● object-oriented (data-centered design) declarative metaprogramming reactive reflective
  • 15.
    Languages ● imperative languages(C, Java, Go) ● functional languages (Lisp, Scheme, Haskell, Scala, ML) ● logic languages (Prolog) ● shell languages (bash, zsh, ksh) ● scripting languages (Perl, Python, Ruby) ● data/markup languages (HTML, XML) ● query languages (SQL) ● domain-specific languages
  • 16.
    Smalltalk true, false, nil,self, super, thisContext
  • 17.
    Be open tonew ideas :D