Въведение в езика за програмиране „Pony“

Какво е Pony?

Можете да мислите за Pony като комбинация от Rust (език за програмиране, предназначен за производителност и безопасност, особено за безопасно едновременно управление и управление на паметта) и Erlang (език за програмиране, използван за кодиране на WhatsApp). Той има забележителни функции:

 

  • Защитен от неправилна работа с типове (Type-safe)
  • Защитен от различни софтуерни грешки и уязвимости в сигурността при работа с достъп до паметта (Memory-safe)
  • Защитен е от изключения( Exception-safe – състоянието на кода, който работи правилно, когато се генерира изключение)
  • Защитен от Data race (това е често срещан проблем при многопоточното програмиране. Той възниква, когато множество задачи имат достъп до споделен ресурс без достатъчно защити, което води до недефинирано или непредвидимо поведение)
  • Защитен от „мъртва хватка“ ( Deadlock) – ситуация, при която набор от процеси са блокирани, защото всеки процес чака друг ресурс да се изпълни.

Освен това, Pony е компилиран по собствен код и се предлага с BSD лиценз с две клаузи.

 

Защо Pony?

Писането на бързи, безопасни, ефективни, конкурентни програми не е лесно с повечето от съществуващите инструменти. „Бързо, ефективно и много едновременно“ е постижима цел, но добавете „безопасно“ и нещата стават много по-трудни. Тук идва решението –  Pony, което направи тази задача лесно постижима.

 

Конкурентно програмиране

Pony улеснява конкурентното програмиране (представлява едновременното изпълнение на множество процеси през определен период от време). Част от начина, по който го прави, е чрез предоставяне на убедена (opinionated)  история за едновременност. В Pony цялата едновременност или конкурентност се осъществява чрез модела на актьора.

Моделът на актьора е най-известен чрез имплементациите в Erlang и Akka. Моделът на актьора съществува от 70-те години на миналия век и детайлите варират значително от изпълнение до изпълнение. Това, което не се различава е, че всички изчисления се изпълняват от участници, които комуникират чрез асинхронни съобщения.

Мислете за модела на актьора по следния начин: обектите в обектно-ориентираното програмиране са състояние + синхронни методи, а актьорите са състояние + асинхронни методи.

Когато актьорът получи съобщение, той изпълнява съответния метод. Този метод може да работи върху състояние, което е достъпно само от този актьор. Моделът на актьора ни позволява да използваме променливо състояние по безопасен за едновременност начин. Всеки актьор е еднопоточен. Два метода в рамките на актьор никога не се изпълняват едновременно. Това означава, че в рамките на даден актьор актуализациите на данни не могат да причинят data race или други проблеми, обикновено свързани с нишки и променливи състояния.

Бързо и ефективно

Pony “актьорите” са планирани с ефективен work stealing scheduler (техника на динамично планиране, при която на процесор, който е завършил своите задачи, е позволено да открадне задача от друг процесор с излишни задачи) Има един планировчик на Pony за всеки наличен процесор. Нишките се отнасят до най-високото ниво на код, изпълняван от процесор, така че с много нишки вашият процесор може да се справи с няколко задачи едновременно. Моделът на thread per core (една нишка на процесор) ​​е част от опита на Pony да работи съвместно с процесора, за да работи възможно най-ефективно. Времето за изпълнение на Pony се опитва да бъде възможно най-удобно за кеша на процесора. Колкото по-малко вашият код разбива кеша, толкова по-добре ще работи. Pony има за цел да помогне на вашия код да работи добре с кешът на процесора.

В програмирането, събиране на боклука (garbage collection) е форма на автоматично управление на паметта. Специален процес, наречен боклук колектор (Garbage колектор), периодично освобождава памет чрез премахване на обекти, които вече не са в приложения на търсенето. Спрете света (Stop the world) е решаваща фаза ,в някои алгоритми за събиране на боклук, за проследяване на паметта. Той спира изпълнението на програмата, за да сканира корените на паметта и да добави бариери за запис.

Времето за изпълнение на Pony включва купчинa за всеки актьор (heaps per actor), така че по време на събирането на боклука няма стъпка „да спрем света“.

Това означава, че вашата програма винаги извършва някаква работа. В резултат на това програмите на Pony завършват с много постоянна производителност и предвидими закъснения.

Безопасно

Типовата система Pony въвежда нова концепция: референтни възможности, които правят безопасността на данните част от типовата система (тип логическа система, включваща набор от правила, които присвояват свойство, наречено тип, на всеки „термин“ (дума, фраза или друг набор от символи) . Типът на всяка променлива в Pony включва информация за това как данните могат да се споделят между участниците. Компилаторът Pony използва информацията, за да провери по време на компилиране, дали вашият код е защитен от “date race” и „мъртва хватка (Deadlock)”.

Ако това звучи малко като Rust, то не е случайно. Възможностите за справка на Pony и инструментът  Borrow checker на Rust осигуряват безопасност на данните; те просто подхождат към него по различни начини и имат различни компромиси.

Подходящ ли е Pony за вас?

Трудно е да решите дали да използвате нов език за програмиране. Трябва да претеглите уместността на инструмента спрямо неговата незрялост в сравнение с други решения. И така за какво е подходящ Pony?

Pony може да е правилното решение, ако трябва да решите труден проблем с едновременното изпълнение на задачи в кодирането. Конкурентното програмиране е причината за съществуване на Pony. Ако можете да постигнете това, което искате в еднонишков скрипт на Python, вероятно нямате нужда от Pony. Ако имате проблем с конкурентното програмиране, трябва да помислите за Pony и неговата мощна типова система защитена от data race.

С този език за програмиране ще получите компилатор, който ще ви попречи да въвеждате грешки, свързани с конкурентността и времето за изпълнение, което ще ви даде отлични резултати на производителност.

802 628 Code Academy

Даниела има над 6 години опит като програмист с различни видове технологии в разнообразни проекти, като инсталатори, replication server-и и cloud service-и. Последните няколко години разработва Cloud Service-и с Java и Spring. Даниела обича да преподава, защото това й дава възможност, споделяйки своите знания и опит, да помогне на своите курсисти да стартират една успешна IT кариера.

Димитър е програмист с дългогодишна практика и опит в разработката на комуникационни системи, софтуери и бази данни. Започнал е кариерата си в Институт по компютърни и комуникационни системи към БАН. Участвал е в международни и български проекти и е водил упражнения в Техническия университет в София. Участвал е в разработката на билинг системи, фискални устройства, VoIP, цифрова телевизия, аптечен и складов софтуер, игри и много други. Димитър използва C, C++, Python, Perl, JavaScript, HTML, PHP, PL/SQL, PostgreSQL, MySQL, MS SQL, Delphi. Димитър е извор на техническо познание. Той ще те подкрепя във времето, отделено за самоподготовка, винаги когато имаш въпрос или ситуация, към която не си сигурен как да подходиш.

Катя има дългогодишен опит в организирането и провеждането на бизнес обучения за умения и обучение на обучители. Тя е специалист по комуникация, работа в екип, мениджмънт и продажби. Катя ще ти даде ценни насоки за това как най-добре да презентираш своята работа, как да подреждаш и изпълняваш задачите си по приоритет, както и как с лекота да общуваш с колегите. Тези умения са точно толкова ключови за успешната ти кариера, колкото овладяването на технологиите за програмиране.

Стела е обучител с над петнайсетгодишен опит в обучението и развитието на персонал на различни йерархични нива. Специалист е в областта на обученията за формиране и подобряване на уменията за общуване и развитие на екипи. С нейна помощ ще овладееш способността да общуваш с ръководството и колегите и да задаваш правилните въпроси. Тези умения ще ти бъдат изключително полезни, когато започнеш работа като програмист. Стела е сертифицирана за треньор на групово-психодинамичен тренинг.

Александър има над 20 години опит в информационните технологии. Завършил е успешно над 25 проекта базирани на Java, JavaScript, SQL, Pl/SQL и Python технологии. В момента работи като консултант в областта на Quality Assurance и Information Security за водещи финансови институции в Европа. Сертифициран ISTQB Advanced Level, SCRUM Master, PRINCE2 и ISO27001 ISMS Information Security Lead Auditor.

Анастас е програмист с над трийсетгодишна практика. Участвал е в разработката на много проекти за телекоми, финансови институции, игри и други бизнес системи. Две години от кариерата си е бил университетски преподавател. Днес предпочита да програмира на С++, но има голям опит с Java, Python, C, Pro*C, PL и PL SQL. За него всеки език за програмиране е само още едно изразно средство, което му помага да си свърши работата. Анастас притежава умението да предава на разбираем език и най-сложната материя. За него няма тайни в програмирането и той с удоволствие ще те води в първите ти стъпки от обучението.

Валентин е Java програмист с повече от 20 години опит. Специалността му е Java & SPRING. Работил е по много и разнообразни проекти. Можеш да разгледаш Linkedin профила му за повече информация. Едно от нещата, които най-много обича, е да преподава. Успешно води курса за професия Back-end Junior Developer с профил Java в първия сезон на CODE ACADEMY и спечели симпатиите на курсистите с неподправения си стил и разбираемия начин на преподаване.

Елена е  програмист с близо седем  години професионален опит. Завършила е висшето си образование в Софийски Университет „Св. Климент Охридски“, специалност „Информационни системи“- степен Бакалавър. По време на следването си Елена е била и асистент преподавател за повече от една година – Programming Fundamentals & OOP in C++. Към днешна дата е част от екипа преподаватели към избираемата дисциплина  “Разработка на Front-End Web” във ФМИ към Софийски Университет „Климент Охридски“. Извън преподаването и програмирането, дизайнът е нещо, с което обича да се занимава през свободното си време.

Разработвала множество проекти през годините, Елена има желанието да предаде знанията си на тези, които тепърва тръгват по нейните стъпки.

Иво е софтуерен инженер с над осем години професионален опит. Завършил e висшето си образование в Технически Университет – София, специалност “Компютърно и софтуерно инженерство” – степен Бакалавър. Той води и обучава екипи от програмисти повече от 5 години. Работил по множество големи проекти в сферата на Blockchain, Fintech, Real Estate. Към днешна дата управлява компания за разработка на софтуер и софтуерни консултации. Има страст към високите скорости, като редовно може да го намерите на пистата, било то с картинг или личния му автомобил.

Петър е програмист с повече от 9 години опит. Определя себе си като нестандартен софтуерен инженер. Опитът му е изцяло ориентиран около Python като преминава през различни софтуерни проекти в пътя си дотук. Стартира работа в сектора на шега, по-време на подготовката си за държавен изпит по Финанси. От тогава досега вярва, че най-красивото нещо на професията на програмиста е, че можеш да учиш всеки ден и, колкото повече научаваш, толкова повече осъзнаваш, че имаш още много за учене. Да решава бизнес проблеми посредством програмни решения е нещото, което го кара да се усмихва всеки ден. Споделя, че когато получава предложение да води курс в Code Academy, не се и замисля, а се съгласява да влезе в това предизвикателство веднага. “Изключително важно е да трупаш знания, но е дори по-важно да ги споделяш с хората, които имат интерес към тях.”

Светлана е специалист с Java и Spring, но познава още езиците C, C++, VB, JS, HTML, CSS и SQL. Има над 5 години професионален опит в разработката на различни проекти. “Обичам да преподавам, защото помагайки на младите колеги да развият уменията си в разработката на софтуер, успявам да организирам и систематизирам по-добре собствените си знания. По този начин израстваме заедно!“ – казва тя. Опитът й като лектор е повече от 10 години, като в момента освен водещ на модула Spring Boot, тя преподава и в ТУ София – университетът, в който е придобила бакалавърската си степен в специалност „Компютърни системи и технологии“.

Стефан е софтуерен архитект, с повече от девет години практически опит като програмист. Той има отлични познания в богат пакет от технологии, сред които Java и Spring. Стефан е вдъхновяващ и обича преподаването, с което се е занимавал също, като хоноруван асистент в ТУ София. В свободното си време чете, плува и играе комютърни игри. От него ще можеш да почерпиш целият извор от знания, който ти е нужен за твоята кариерна реализация.

Йо има повече от 12 години опит с управление на проекти и екипи. Проектът Code Academy e без съмнения нейният най-любим сред тях. Срещата от близо с програмирането и хората, които са или искат да станат програмисти, тя счита за преломен момент в кариерата си. Поради липса на по-подходящо сравнение, ще сравним този момент с любов от пръв поглед 😊 За нея няма нищо по-хубаво от това да вижда как обучаващите се в академията постигат целта си – да се реализират след края на обучението. И тя работи с цялото си същество в тази посока.

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

Галя има образование в областта на финансите и дългогодишно приятелство с числата, но винаги е била привлечена от работата с хора и комуникацията е нейното нещо. Работи с екипа на академията по различни проекти от 12 години и приема проекта Code Academy като лична кауза. Вдъхновява се от възможността да подкрепи всеки, пожелал да промени живота си и да стане програмист. Готова е винаги да помогне с мотивацията на тези, които са загубили увереност и имат нужда от приятелско рамо и подкрепа.

Ваня е ментор в нашата програма. Работи като програмист от три години с Java + Spring, Golang, TypeScript + Angular. Да предава своите знания на тепърва прохождащи в сферата е нейно призвание. В свободното си време чете книги и помага на бездомни животни. Има три кучета, които е осиновила. Ваня винаги ще бъде до теб, за да ти помогне да се сбориш успешно с бъговете в кода, който пишеш.


Търсете тук