Modern rendszerprogramozási nyelvek

Hasonló dokumentumok
Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Bevezetés a programozásba 2

Programozási nyelvek Java

Fejlett programozási nyelvek C++

C#, OOP. Osztályok tervezése C#-ban

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Feldspar: Nyelv digitális jelfeldolgozáshoz

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Alprogramok, paraméterátadás

C# osztályok. Krizsán Zoltán

Bánsághi Anna

C++ Standard Template Library (STL)

Java programozási nyelv 4. rész Osztályok II.

Fejlett programozási nyelvek C++ Iterátorok

Programozási nyelvek Java

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

2016, Funkcionális programozás

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozási nyelvek (ADA)

117. AA Megoldó Alfréd AA 117.

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozási nyelvek JAVA EA+GY 1. gyakolat

2018, Funkcionális programozás

OOP: Java 8.Gy: Abstract osztályok, interfészek

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

C++ függelék. Tartalom

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1.

JAVA SE/ME tanfolyam tematika

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

ANDROID ALKALMAZÁSFEJLESZTÉS

Challenge Accepted:C++ Standard Template Library

Informatikai Kar. 4. fejezet. Giachetta Roberto

Bevezetés a Python programozási nyelvbe

Apple Swift kurzus 3. gyakorlat

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

OOP #14 (referencia-elv)

Programozási nyelvek Java

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Kaposi Ambrus. Informatikai Kar. Pannonhalmi Bencés Gimnázium november 24.

Magas szintű programozási nyelvek 2 Előadás jegyzet

Funkcionális Nyelvek 2 (MSc)

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor

Programozási nyelvek II.: JAVA

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Objektumorientált programozás C# nyelven III.

A TANTÁRGY ADATLAPJA

Szoftvertechnológia alapjai Java előadások

Bevezetés a programozásba Előadás: A const

A Feldspar fordító, illetve Feldspar programok tesztelése

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

Programozási nyelvek II.: JAVA

Programozás II. 2. Dr. Iványi Péter

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java Programozás 1. Gy: Java alapok. Ismétlés ++

OOP és UML Áttekintés

Java és web programozás

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Objektumorientált paradigma és programfejlesztés Bevezető

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Python tanfolyam Python bevezető I. rész

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

Felhasználó által definiált adattípus

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

C++ Gyakorlat jegyzet 10. óra.

Modern unit és integrációs tesztelés

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

C++ programok fordítása

GTL Graphical Template Library

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Bevezetés az informatikába

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

Java Programozás 11. Ea: MVC modell

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozási technológia 1.

Programozás 1. Dr. Iványi Péter

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Átírás:

Modern rendszerprogramozási nyelvek

Bemutatkozás Rendszerprogramozási nyelvekkel kapcsolatos kutatások Kódmegértés Kódmetrikák Statikus analízis Kód instrumentáció Főleg C/C++ tapasztalat Tavalyi előadásom

Elvárások Ahead of time compilation Jól optimalizáló fordító Statikus kódellenőrzés Statikus típusrendszer Alacsony szint támogatása Inline assembly Modern nyelvi eszközök Olcsó absztrakciók Multiparadigmás programozás

C++ Jelenleg legmegfelelőbb Olcsó absztrakciók, gyors Backward compatibility Lassú fordítás Multiparadigmás nyelv Funkcionális (C++11), generatív, struktúrált, OOP, logikai Sok hibalehetőség

A mai versenyzők

Tendenciák Konkurens és párhuzamos eszközök Funkcionális eszközök, konstansság Test, coverage, doc eszközök Fordítási idejű garanciák OOP háttérbe szorulása Típusok kikövetkeztetése

Paradigma preferencia Deklaratív Config, GUI, Regexp, SQL, Prolog Funkcionális MapReduce stratégiák Imperatív OOP, ASM

Modern Funkcionális programozás alapjai (1930 Church: Lambda kalkulus) Lambda függvény, closure, curryzés (1960 John McCarthy: Lisp) Google Go vs Algol-68 Rust kis önirónia :-)

Kóstoló a jövőből STM: Haskell (2005) - C++17 Haskell Kategória elmélet Agda Konstruktív logika Koindukció Típuselmélet Csoportelmélet

OOP problémái Rust, Go nincsenek osztályok Öröklődés Típusok kompozíciója Polimorfizmus Kód újrafelhasználás Nem éri meg

OOP problémái - példa Java tisztán OOP-nak indult Nem mindenható paradigma... Generic-ek bevezetése OOP-ra való visszavezetéssel Gyenge típusrendszer, kevés fordítási idejű garancia Nem alkalmas rendszerprogramozási nyelvnek

MythBusters Alacsony szintű kód!= gyors kód qsort vs std::sort inlineing TBAA a fénynél is gyorsabban Option/Maybe nullable Metaalgorithms Szuper optimalizáció

Áttekintés D C++ done right Fordítási idejű reflexió, erős TMP, szerződés alapú prog. Rust C + Haskell + Ruby Egyedi memória modell, immutability AST alapú makrók Go Google Kevés nyelvi eszköz, stabil Általános Garbage collector (opcionális) Nyelvi unit test támogatás Doc generálás támogatás Konkurens programok támogatása

Gyors kóstoló Russel Winder előadása: Lightning talk Who Needs C++ When You Have D and Go? and Rust?! Russel konklúziója: Használjunk bármit, csak ne C++-t én mint C++ hívő

Egy egyszerű feladat Számoljuk ki azon számok négyzeteinek az összegét 0 és 100 között, amik oszthatóak 7-tel.

int sequential_iterative() { auto sum = 0; foreach(i; 0.. 100) { if (i % 7 == 0) { sum += i*i; return sum;

func sequential_iterative() (sum int) { for i := 0; i < 100; i++ { if (i % 7 == 0) { sum += i*i return

fn sequential_iterative() -> int { let mut sum = 0; for int::range(0,100) n { if n % 7 == 0 { sum += n * n; return sum;

int sequential_iterative() { auto sum = 0; for (auto i = 0; i < 100; ++i) { if (i % 7 == 0) { sum += i*i; return sum;

Mit láttunk eddig? Alig van különbség? Miért vagyunk itt? Miről szól egyáltalán ez az előadás? Legyünk kicsit funkcionálisabbak és deklaratívabbak!

reduce!"a+b"( map!"a*a"( filter!"a % 7 == 0"( iota(100)))); functools.inject( func (a, b int) int { return a + b, functools.collect(func (i int) int { return i * i, functools.filter( func (i int) bool { return i % 7 == 0, make([]int, 100)))) let x = v.filtered( x *x % 7 == 0). map( x *x * *x). foldl(0, a, x *a + *x);

iota(100). filter!"a % 7 == 0"(). map!"a*a"(). reduce!"a+b"(); functools.intslice(make([]int, 100)). Filter(func (i int) bool { return i % 7 == 0). Collect(func (i int) int { return i * i). Inject(func (a, b int) int { return a + b )

int sequential_declarative() { vector<int> numbers(100); iota(numbers.begin(), numbers.end(), 1); list<int> filtered; copy_if(numbers.begin(), numbers.end(), back_insert_iterator<list<int>>(filtered), [=](int i) { return i % 7 == 0; ); vector<int> squares(filtered.size()); transform(filtered.begin(), filtered.end(), back_insert_iterator<vector<int>>(squares), [=](int i) { return i * i; ); return accumulate(squares.begin(), sqares.end(), 0, [=](int i, int j) { return i + j );

Annyira nem rossz a helyzet! C++ Multiparadigmás! De az STL nem! Nincs még elegáns FP könyvtár =(

bool ismathop(const string op) { return op == "+" op == "-" op == "*" op == "/"; class IntEntry : EntryBase { this(string str) { super(datatype.int_t); value = parse!int(str); override string tostringrepr() const { return text(value); override int opcmp(const string rhs) const { auto tmp = rhs.dup; return value - parse!int(tmp); override int opbinary(string op)(int i) if(ismathop(op)) { mixin("return value" ~ op ~ "i;"); private: int value;

long square_root(long x) in { assert(x >= 0); out (result) { assert((result * result) <= x && (result+1) * (result+1) >= x); body { return cast(long)std.math.sqrt(cast(real)x); class Date { int day; int hour; invariant() { assert(1 <= day && day <= 31); assert(0 <= hour && hour < 24);

void abc() { Mutex m = new Mutex; lock(m); scope(exit) unlock(m); foo(); int[10] a; int[] b; ulong[string] dictionary; dictionary["alma"] = 2; //... a[0..5] = 3; b = a[2..$];

enum Shape { Circle { center: Point, radius: float, Rectangle { top_left: Point, bottom_right: Point fn area(sh: Shape) -> float { match sh { Circle { radius: radius, _ => float::consts::pi * square(radius), Rectangle { top_left: top_left, bottom_right: bottom_right => { (bottom_right.x - top_left.x) * (bottom_right.y - top_left.y)

let price = if item == "salad" { 3.50 else if item == "muffin" { 2.25 else { 2.00 ; match my_number { 0 => println("zero"), 1 2 => println("one or two"), 3..10 => println("three to ten"), _ => println("something else")

let mut max = 0; [1, 2, 3].map( x if *x > max { max = *x ); enum Option<T> { Some(T), None trait Printable { fn print(&self); impl Printable for int { fn print(&self) { println(fmt!("%d", *self))

Google GO Nincs inline assembly Nem opcionális a GC Nincsenek exception-ök Nincsenek generic-ek Production ready

Konklúzió C++ sokáig marad D-re legkönnyebb váltani Rust avatott szemnek szép kód Go production ready, kevés újdonság Hiány: curryzés (Rust macro)

Köszönöm a figyelmet! Slide-ok elkérhetőek Elérhetőségek: E-mail: xazax.hun@gmail.com Skype: norrec01