Ще разгледаме основите на програмирането на Haskell, неговия стил и функции на програмиране, неговия механизъм за типове и също така ще обсъдим мързелива оценка. Освен това ще можете да настроите своя инструментариум Haskell и да започнете да пишете код.

Поздравления. Аз съм SPO на PGWAD @PgwadaS, предоставяйки ви Част 1: Основи на поредицата „Програмиране с Haskell“, благодарение на @rubypools.

Днес ще разгледаме някои от основополагащите концепции около Haskell.

Функционално програмиране на Haskell

Нека първо прегледаме фигура 1

Фигура 1 Екосистема на Haskell

В тази екосистема основните компоненти са

  • Характеристики на езика Haskell
  • Инструменти на Haskell
  • Библиотеки на Haskell

Трите характеристики на езика Haskell са:

Функционално програмиране

За да разберем „функционалното програмиране“, първо разглеждаме императивните езици. Императивните езици за програмиране като C/C++ са фокусирани главно върху хардуера. Ние наричаме това „стил на програмиране на Фон Нойман“. В архитектурата на Von Neumann има изпълнителна единица (CPU) и памет (Disk), CPU извлича инструкции от паметта. Следователно ранните езици за програмиране се фокусираха главно върху ефективното използване на паметта и архитектурата. Разбира се, много езици за програмиране сега дават абстракции, подобни на функционален език за програмиране.

Във функционалното програмиране обаче целта е да:

  • Композиране на функции за структуриране на програми и рекурсия вместо цикли
  • Чистота, така че резултатът от дадена функция да бъде напълно определен, след като нейните параметри са фиксирани
  • Липса на странични ефекти (буквално не правя нищо, освен оценка на резултата)
  • Неизменност (невъзможност за промяна на стойността на променлива)

Функционалното програмиране ви позволява да свързвате функциите много по-добре. Всяка функция приема аргументи и изхвърля резултат, който се предава на друга функция и така нататък, за да образува верига от извиквания на функции. Също така е как можете да постигнете „променливост“ на променливите в Haskell.

Статично въвеждане с извеждане на типа

Haskell осигурява „Статично полиморфно типизиране“. Статичният се отнася до факта, че типът се проверява и грешките се докладват отново по време на компилиране, което ви дава увереност, че програмата, след като бъде изпълнена, ще срещне по-малко грешки. Полиморфното се отнася до факта, че всеки типизиран програмен обект (функция, израз, променлива и т.н.) може да има различни типове в зависимост от контекста, в който се използва. Класовете на типове и други характеристики на системата за типове се използват за изразяване на тези полиморфни свойства на програмните обекти.

Мързелива оценка или нестриктна семантика

„Мързелът“ се отнася до концепцията за изпълнение на нещо само когато е необходимо. Вместо да изчисли някаква стойност, компилаторът ви дава заместител за нея, рецепта как да я изчислите, в случай че имате нужда от нея. Основно се свежда до това да напишете програма, като декларирате вашите намерения, а компилаторът решава как да я изпълни по най-ефективния начин.

Например, Haskell, като мързелив оценен функционален език за програмиране, ви позволява да декларирате безкрайни списъци, докато повечето други езици за програмиране не го правят. Причината е, че Haskell не изчислява безкрайните елементи от този списък, докато не бъдат необходими за изчисление от други функции. Като се има предвид това, мързеливата оценка и нестриктността не са идеални, тъй като имат своите предимства и ограничения.

Инсталиране на Haskell

Може да се използва всяка версия на машина на Ubuntu LTS версия 20 или 21. Отворете терминал и въведете командите по-долу, за да инсталирате Haskell

sudo apt-get -y install pkg-config libgmp-dev libssl-dev libtinfo-dev libsystemd-dev zlib1g-dev build-essential curl libgmp-dev libffi-dev libncurses-dev libtinfo5
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh 
ghcup upgrade 
ghcup install cabal 3.4.0.0 
ghcup set cabal 3.4.0.0 
ghcup install ghc 8.10.4 
ghcup set ghc 8.10.4

Програма „Здравей свят“.

Засега ще започнем с проста програма Hello World и ще разгледаме по-подробни примери за кодиране в бъдещата част от тази серия.

За да започнете, създайте файл hello.hs със следния код. Имайте предвид, че програмите на Haskell имат разширение *.hs

main = do
    print "Hello World"

Компилирайте с помощта на ghc и стартирайте от:

ghc hello.hs 
./hello

И ще видите изхода на вашата конзола. Можете също да направите следното в ghci интерпретатора, като заредите файла си с помощта на :l hello.hs и извикате функцията main.

Подробно видео

Моля, гледайте видеоклипа по-долу за повече подробности относно екосистемата на Haskell. Това е първата от поредицата видеоклипове на Haskell и всяка седмица концепциите на Haskell се въвеждат, като се започне от основите. В това видео ще разгледаме някои примерни програми, за да разберем изпълнението на функционални и императивни програми. Въвеждаме и мързеливото оценяване.

Първоначално публикувано на https://www.rubypools.com.