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

Preview:

DESCRIPTION

 

Citation preview

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

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

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

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

Программа

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0001 0010 0011 0001 0101 0010 0001 0100 0000

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

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

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

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

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

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

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

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

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

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

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

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

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конец повтора

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

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;

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

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 ;

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]

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)).

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

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

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

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.

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

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

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

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

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

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

FORTRAN

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

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

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

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

C

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

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

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

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

С++

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

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

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

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

C#

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

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

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

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” (сложность восприятия) интерпретируемый

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

Forth

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

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

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

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

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

Haskell

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

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

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

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

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

Prolog

Prolog (1972) PROgrammation en LOGique

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

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

Recommended