Языки программирования

30
8 июня 2006 СПбГПУ, каф. "Прикладня математика" 1/30 Языки Программирования Обзорная экскурсия

Upload: paulsmirnov

Post on 21-Dec-2014

950 views

Category:

Education


7 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 1/30

Языки Программирования

Обзорная экскурсия

Page 2: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 2/30

Программа

греч. πρόγραμμα – объявление, распоряжение, указ

«упорядоченная последовательность действий для ЭВМ, реализующая алгоритм решения некоторой задачи» (БСЭ) не для всех языков верно

Page 3: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 3/30

Язык программирования «Язык программирования –

формальная знаковая система, предназначенная для описания алгоритмов в форме, которая удобна для исполнителя»(Wikipedia)

«Языки программирования – это выразительное средство в искусстве компьютерного программирования»(Mitchel)

Page 4: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 4/30

История Программы для машин

разностная машина (Дж.Мюллер, 1786) ткацкий станок (Жаккар, 1801) аналитическая машина (Бэббидж, 1833)

Теоретические языки λ-исчисление (1936) машина Тьюринга (1936)

1GL – машинные коды (1940-ые) 2GL – языки ассемблера (1952)

Page 5: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 5/30

Последующие поколения

3GL – универсальные и удобные FORTRAN (1954), Algol, BASIC, Pascal, C

4GL – спец. область применения FOCUS (1975), SQL, PostScript, GUI

5GL – искусственный интеллект Prolog (1972), Mercury

Скриптовые языки Perl, Python, Lua, Tcl/Tk

Page 6: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 6/30

Слепой робот в лабиринте

Иллюстрация поколений языков программирования

Page 7: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 7/30

Алгоритм Проехать вперед

на пять клеток, затем повернуть направо, вперед на две клетки, повернуть направо и опять проехать пять клеток, повернуть налево, проехать четыре клетки.

Page 8: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 8/30

Программа для робота (1GL) 0001 0101 0011

0001 0010 0011 0001 0101 0010 0001 0100 0000

Page 9: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 9/30

Программа для робота (2GL) ШАГ 5

ПРВШАГ 2ПРВШАГ 5ЛЕВШАГ 4СТП

Page 10: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 10/30

Программа для робота (3GL) Программа Выход

Вперед на 5; Повернуть направо; Вперед на 2; Повернуть направо; Вперед на 5; Повернуть налево; Вперед на 4;Конец Программы.

Page 11: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 11/30

Программа для робота (5GL) Дано: робот в (2,6)

Цель: робот в (8,6)Правила: налево, направо, вперед.Ограничения: ...стены...

Page 12: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 12/30

Сложение чисел от 1 до N

Варианты решений на различных языках программирования

Page 13: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 13/30

Задача: Сумма от 1 до N (>0) 1+2+…+N = (…(((0+1)+2)+3)+…)

+N

S 0i 1повторить N раз S S + i i i + 1конец повтора

Page 14: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 14/30

Сумма от 1 до N: Примеры (1)

Машинный код

8B C8 33 DB 03 D9 E0 FC

00 80 10 2124 84 FF FF14 80 FF FE00 44 10 21

Ассемблер

MOV CX, AX XOR BX, BXA: ADD BX, CX LOOPNZ A

addu v0, a0, $0B: addiu a0, a0, -1 bne a0, $0, B addu v0, v0, a0

Page 15: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 15/30

Сумма от 1 до N: Примеры (2)

FORTRAN 77

SUM = 0 DO 10 I = 1,N SUM = SUM + I10 CONTINUE

Pascal

sum := 0; for i := 1 to n do sum := sum + i;

BASIC

10 SUM = 020 FOR I = 1 TO N30 SUM = SUM + I40 NEXT I

C, С++, Java

sum = 0;for (i = 1; i <= n; i++) sum += i;

Page 16: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 16/30

Сумма от 1 до N: Примеры (3)

Perl

$sum = 0;foreach $i (1..$n) { $sum += $i;}

Lua

sum = 0for i = 1, n do sum = sum + iend

Python

sum = 0for i in range(1, n+1): sum += i

Ruby

sum = 0for i in (1..n) sum += iend

Page 17: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 17/30

Сумма от 1 до N: Примеры (4)

SmallTalk

sum := 0.1 to: n do: [:i | sum := sum + i ].

Forth

: sum ( n -- sum ) 0 swap 1+ 0 do i + loop ;

Page 18: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 18/30

Сумма от 1 до N: Примеры (5)

Lisp

(defun sum (n) (if (= n 0) 0 (+ n (sum (- n 1)))))

Haskell

sum’ 0 = 0sum’ n = n + sum’ (n-1)

sum’’ n = foldl (+) 0 [1..n]

Page 19: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 19/30

Сумма от 1 до N: Примеры (6)

Prolog

sum(0, 0).sum(N, S) :- N > 0, N1 is N - 1, sum(N1, S1), S is N + S1.

Mercury

sum(N) = S :- (N = 0 -> S = 0; S = N + sum(N-1)).

Page 20: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 20/30

Многообразие языков

Как же выбрать из имеющегося инструментария?

Page 21: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 21/30

Парадигмы программирования Императивные языки

Процедурные FORTRAN, ALGOL, BASIC, PL/I, Pascal, C, Ada.

Объектно-ориентированные Simula, SmallTalk, C++, Eiffel, Java, C#.

Декларативные яыки Функциональные

Lisp, Logo, Scheme, ML, Miranda, Haskell. Логические

PLANNER, Prolog, Fril, Mercury.

Page 22: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 22/30

Язык ассемблера

A-0 (1952) Минусы

сложный в использовании многословный

Плюсы близкий к аппаратуре быстрый код

Page 23: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 23/30

FORTRAN

FORTRAN I (1954) ... Fortran 2003 The IBM Mathematical FORmula TRANslating System

Плюсы высокая точность математики огромная база кода

Минусы архаичен

Page 24: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 24/30

C

C (1972), ANSI C (1989), C99 Плюсы

близкий к аппаратуре широко использующийся

Минусы не прощает ошибок позволяет слишком многое

Page 25: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 25/30

С++

C++(1983), ANSI C++ (1998),C++ TR1 (2005)

Плюсы объектно-ориентированный совместимый с С

Минусы плохая поддержка компиляторами мешанина стилей

Page 26: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 26/30

C#

С# 1.0 (2000) … C# 3.0 (2005) Плюсы

простота создания win-приложений Минусы

низкая скорость выполнения непортируемость

Page 27: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 27/30

Perl

Perl 1.0 (1987) … Perl 5.8.8 (2006) Плюсы

высокоуровневый язык простота обработки текста

#!perl –pi.bak s/\b(\d+\.\d+)\b/$1f/g;

Минусы “write-only” (сложность восприятия) интерпретируемый

Page 28: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 28/30

Forth

Forth (1971), ANSI Forth (1994) Плюсы

простота реализации компилятора мощный язык

Минусы обратная польская запись непонятна

2 2 * 4 = . против print(2 * 2 = 4) близок к ассемблеру

Page 29: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 29/30

Haskell

Haskell (1987), Haskell 98 Плюсы

математичен работает с бесконечными объектами

let evens = map (*2) [1..] take 10 evens

Минусы непривычная парадигма (функц.) небыстрый, требует много памяти

Page 30: Языки программирования

8 июня 2006 СПбГПУ, каф. "Прикладня математика" 30/30

Prolog

Prolog (1972) PROgrammation en LOGique

Плюсы язык искусственного интеллекта

Минусы непривычная парадигма (логич.) ограниченные возможности