Języki Programowania
Podstawowe pojęcia
Plan wykładu
Właściwości języków programowania
Czytelność kodu
Aatwość programowania
Niezawodność
Ewolucja języków programowania
Język maszynowy
Języki proceduralne
Języki zorientowane obiektowo
Rodzina języków programowania
Popularność języków, trendy, zastosowania
R. Pełka: Języki Programowania, 2008 2
1
Języki &
Jezyk naturalny
Jezyk naturalny
...niech mi Pan nie przerywa, Panie...
...niech mi Pan nie przerywa, Panie...
Jezyk wysokiego poziomu
Jezyk wysokiego poziomu
Jezyk wysokiego poziomu
Jezyk wysokiego poziomu
Jezyk niskiego poziomu
Jezyk niskiego poziomu
Jezyk niskiego poziomu
Jezyk niskiego poziomu
Jezyk maszynowy
Jezyk maszynowy
...01100100111011...
...01100100111011...
R. Pełka: Języki Programowania, 2008 3
Programowanie komputera
Narzedzia programistyczne
Fortran C, C++ Pascal
Kompilacja
Jezyk wysokiego poziomu
Egzekwowanie
Assembler
programu
Jezyk maszynowy
Sprzet
R. Pełka: Języki Programowania, 2008 4
2
Dlaczego istnieje tyle PLs?
Teoretycznie, wszystkie języki programo-
wania są sobie równoważne
Kompilowane/interpretowane na język
wewnętrzny procesora (asembler)
Dlaczego istnieje tyle języków naturalnych (NLs)?
W praktyce, języki naturalne spełniają rozmaite zapotrzebowania
określone przez
Różne kultury (różne obszary zastosowań)
Różne środowiska zawodowe
Różne sposoby postrzegania świata
R. Pełka: Języki Programowania, 2008 5
Evolution of LPs
011111110100010101001100010001100000000100000010000000010000000000000000000000
first computers
000000000000000000000000000000000000000000000000000000000000000001000000000000
001000000000000000000000000000000001000000000000000000000000000000000000000000
(e.g., ENIAC) were not
000000000000000000000000000000000000000000001010000100000000000000000000000000
000000000000000000110100000000000000000000000000000000000000000000101000000000
programmable
000000100000000000000000010000000000101110011100110110100001110011011101000111
001001110100011000010110001000000000001011100111010001100101011110000111010000
000000001011100111001001101111011001000110000101110100011000010000000000101110
011100110111100101101101011101000110000101100010000000000010111001110011011101
000111001001110100011000010110001000000000001011100111001001100101011011000110
had to be
000100101110011101000110010101111000011101000000000000101110011000110110111101
rewired/reconfigured
101101011011010110010101101110011101000000000000000000000000000000000010011101
111000111011111110010000000100110000000000000000000000001001000000010010011000
for different
000000000000010101000000000000000000000000100100100001001010100000000000000100
computations 000000000000000000000000000000000001000000000000000000000000101000000001000000
000000000010001001000000010000000000000001000000010101000000000000000000000000
100100100001001010100000000000000100000000000000000000000000000000000001000000
000000000000000000101100000001000000000000000100001000000000000000000000100000
000100000000000000000000000010000001110001111110000000001000100000011110100000
late 40 s / early 50 s:
000000000000000000000000000000000000000000000001001000011001010110110001101100
011011110111011101101111011100100110110001100100001000010000000000000000000000
coded directly in machine
000000000000000000000000000000000000000001000000000000000000000000000000000000
000000000000000000000000000000000100000000001111111111110001000000000000000000
language
000000000000010000000000000000000000000000000000000000000000000000000000000000
000001000000000011111111111100010000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000001100000000000000000000
001100000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000010000000000000000000000000000000000
extremely tedious
000000000000000000000000000000000000000000000000000000000000000000000110000000
and error prone
000000000000000100000000000000000000000000001101000000000000000000000000000000
000000000000000000000000000000000000001000000000000000000000000000000000000000
machine specific
000000000000000100010000000000000000000000000000000000000000000000000000000000
000000000010000000000000000000000000000000000000000000000000000010001100000000
used numeric codes,
000000000000000000000000000000000000000000000000000000000000100000000000000000
000000000000000000000000000000000000101100000000000000000000000000000000000000
absolute
000000000000000000000000000000001000000000000000000000000000000000000000000000
000000001101001000000000000000000000000000000000000000000000000000000000100100
000010010000000000000000000000010000000000000000000000000011011100000000000000
000000000000000000000000000000000000000000000000000000100000000000000000000000
000000000000001101000011001010110110001101100011011110010111001100011011100000
R. Pełka: Języki Programowania, 2008 6
3
Evolution of LPs (cont.)
.file "hello.cpp"
gcc2_compiled.:
mid 1950 s: assembly languages
.global _Q_qtod
developed .section ".rodata"
.align 8
mnemonic names replaced
.LLC0: .asciz "Hello world!"
numeric codes .section ".text"
.align 4
relative addressing via names
.global main
and labels .type main,#function
.proc 04
main: !#PROLOGUE# 0
save %sp,-112,%sp
a separate program (assembler)
!#PROLOGUE# 1
sethi %hi(cout),%o1
translated from assembly code to
or %o1,%lo(cout),%o0
machine code sethi %hi(.LLC0),%o2
or %o2,%lo(.LLC0),%o1
" still machine specific, low-level
call __ls__7ostreamPCc,0
nop
mov %o0,%l0
mov %l0,%o0
sethi %hi(endl__FR7ostream),%o2
or %o2,%lo(endl__FR7ostream),%o1
call __ls__7ostreamPFR7ostream_R7ostream,0
nop
R. Pełka: Języki Programowania, 2008 7
Evolution of programming (cont.)
// File: hello.cpp
late 1950 s: high-level languages developed
// Author: Dave Reed
allowed user to program at higher level
//
of abstraction // This program prints "Hello world!"
////////////////////////////////////////
however, bridging the gap to low-level
#include
hardware was more difficult
using namespace std;
" a compiler translates code all at once
into machine code (e.g., FORTRAN, int main()
{
C++)
cout << "Hello world!" << endl;
" an interpreter simulates execution of the
return 0;
code line-by-line (e.g., BASIC, Scheme)
}
Java utilizes a hybrid scheme
" source code is compiled into byte code
" the byte code is then interpreted by the
Java Virtual Machine (JVM) that is built
into the JDK or a Web browser
R. Pełka: Języki Programowania, 2008 8
4
FORTRAN (Formula Translator)
C
FORTRAN was the first high-level
C FORTRAN program
language
C Prints "Hello world" 10 times
C
developed by John Backus at IBM
PROGRAM HELLO
designed for the IBM 704 computer,
DO 10, I=1,10
all control structures corresponded
PRINT *,'Hello world'
to 704 machine instructions 10 CONTINUE
STOP
704 compiler completed in 1957
END
despite some early problems,
FORTRAN was immensely popular
adopted universally in 50's & 60's
FORTRAN evolved based on
experience and new programming
features
" FORTRAN II (1958)
" FORTRAN IV (1962)
" FORTRAN 77 (1977)
" FORTRAN 90 (1990)
John Backus
R. Pełka: Języki Programowania, 2008 9
ALGOL (Algorithmic Language)
ALGOL was an international effort to
comment ALGOL 60 PROGRAM
displays "Hello world" 10 times;
design a universal language
begin
developed by joint committee of ACM
integer counter;
and GAMM (German equivalent) for counter := 1 step 1 until 10 do
begin
influenced by FORTRAN, but more
printstring(Hello world");
flexible & powerful, not machine specific
end
end
ALGOL introduced and formalized many
common language features of today
" data type
" compound statements
" natural control structures
" parameter passing modes
" recursive routines
" BNF for syntax (Backus & Naur)
ALGOL evolved (58, 60, 68), but not
widely adopted as a programming
language
" instead, accepted as a reference language
R. Pełka: Języki Programowania, 2008 10
5
C C++ Java JavaScript
#include
C (1971, Dennis Ritchie at Bell Labs)
main() {
for(int i = 0; i < 10; i++) {
" designed for system programming (used
printf ("Hello World!\n");
to implement UNIX) }
C
}
" provided high-level constructs and low-
#include
level machine access
using namespace std;
int main() {
C++ (1985, Bjarne Stroustrup at Bell Labs)
for(int i = 0; i < 10; i++) {
cout << "Hello World!" << endl;
" extended C to include objects
}
return 0;
" allowed for object-oriented C++
}
programming, with most of the efficiency
public class HelloWorld {
of C
public static void main (String args[]) {
for(int i = 0; i < 10; i++) {
Java (1993, Sun Microsystems)
System.out.println("Hello World ");
}
" based on C++, but simpler & more
}
Java
reliable }
" purely object-oriented, with better
support for abstraction and networking
JavaScript
R. Pełka: Języki Programowania, 2008 11
Other influential languages
COBOL (1960, Dept of Defense/Grace Hopper)
designed for business applications, features for structuring data & managing files
BASIC (1964, Kemeny & Kurtz Dartmouth)
designed for beginners, unstructured but popular on microcomputers in 70's
Simula 67 (1967, Nygaard & Dahl Norwegian Computing Center)
designed for simulations, extended ALGOL to support classes/objects
Pascal (1971, Wirth Stanford)
designed as a teaching language but used extensively, emphasized structured
programming
Prolog (1972, Colmerauer, Roussel Aix-Marseille, Kowalski Edinburgh)
logic programming language, programs stated as collection of facts & rules
Ada (1983, Dept of Defense)
large & complex (but powerful) language, designed to be official govt. contract
language
R. Pełka: Języki Programowania, 2008 12
6
Nie ma idealnego rozwiązania &
remember: there is no best programming language
each language has its own strengths and weaknesses
languages for a specific application
business applications COBOL
artificial intelligence LISP/Scheme or Prolog
systems programming C
software engineering C++ or Java or Smalltalk
Web development Java or JavaScript or VBScript or perl
R. Pełka: Języki Programowania, 2008 13
The family of PL
R. Pełka: Języki Programowania, 2008 14
7
PL in common use
SourceForge
R. Pełka: Języki Programowania, 2008 15
PL in coomon use (cont.) - books
R. Pełka: Języki Programowania, 2008 16
8
Popularność cd.
R. Pełka: Języki Programowania, 2008 17
Language speeds
www.bagley.org/~doug/shoutout
Completely Random and Arbitrary
Point System
R. Pełka: Języki Programowania, 2008 18
9
Wyszukiwarka
Podobne podstrony:
JP SS 5 podstawy Java
JP SS 5 podstawy Java (3)
JP SS 1 podstawy JP
JP SS 5 podstawy Java
JP SS 2 algorytmy i podstawy programowania
JP SS 6 Klasy i obiekty
JP SS 4 start Java
JP SS Interfejs graficzny
JP SS 4 wprowadzenie Java
JP SS 7 Klasy i obiekty
JP SS 6 BlueJ
JP SS 3 jezyk C
JP SS 3 jezyk C
JP SS 4 start Java
JP SS 8 Instrukcje, pętle
JP SS 7 Typy i operacje
JP SS 9 Tablice IO wyjątki
JP SS 3 jezyk C
więcej podobnych podstron