Formaln Medote u softverskom iznenjerstvu

moracanikola1 6 views 24 slides Sep 18, 2024
Slide 1
Slide 1 of 24
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24

About This Presentation

Sa faksua u Banja Luci


Slide Content

Formalne metode
15 Razno
ETFBL 23-24
Dunja Vrbaški
u softverskom inženjerstvu

22
-yacc/bison → ručno pisani rekurzivni spust (gcc) – brže, efikasnije, bolje
informacije o greškama, lakše modifikacije,...

-idejа: na početku koristiti alat, kad je jezik stabilan ili se nastavlja sa radom na
njemu razmotriti implementaciju bez alata
Bison C++, Java
ANTLR (www.antlr.org)

en.wikipedia.org/wiki/Comparison_of_parser_generators

Razvoj novog jezika – potencijalno ubrzanje
Alati za parsiranje

3
www.antlr.org/tools.html

4
comvis.in.rs

5
LLVM
(davno bilo “Low Level Virtual Machine”)
llvm.org

“compiler infrastructure”
-framework za razvoj programskih jezika

-open source

-različiti projekti
-Clang – C/C++ kompajler
-implementacija C++ SL (Standard Library)
-optimizacije, različiti zadnji moduli – nezavisno od polaznog jezika
-LLVM IR (LLVM bitcode / assembly lang / in-memory)
-centar projekta
-Static Single Assignment form (SSA)
-beskonačno temp promenljivih (registara)
-...

-Swift, Rust... – LLVM back-ends; Facebook C++ Clang;…

6
llvm.org/docs/tutorial/

7
C/C++
-g++, gcc; MinGW
-Clang
-Microsoft Visual C++ (MSVC)
-Intel DPC++/C++
-…

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html

8
CLR
Common Language Runtime
-.NET run-time okruženje
-Bogat API - .NET Compiler Platform SDK (Roslyn – kompajleri i API za C# i VB)
docs.microsoft.com/en-us/dotnet/core/introduction

C#
Primer:
docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/get-started/syntax-analysis
SyntaxTree tree = CSharpSyntaxTree.ParseText(programText);

9
-CPython
-“standard”, “reference implementation”

github.com/python/cpython
docs.python.org/3/


-PyPy
-JIT
-Python
-ograničenja gde može da se izvršava
-RPython framework za generisanje interpretera
-drugačiji pristup GC
-stackless podrška
-…

doc.pypy.org



Python

10
import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

11
source code (program.java) → Java compiler (javac) → program.class
-class fajl je nezavisan od platforme (arhitektura + OS)
-sadrži bytecode – međukod Java Virtuelne Mašine (JVM)
-jezik višeg nivoa od asemblerskog
-može imati dodatne informacija (debug, informacije o tipovima,...)

-Virtuelna mašina je zapravo program koji se ponaša kao mašina (računar).
-Postoje stanja (upravlja se različitim podacima koji modeliraju memoriju) i postoje
instrukcije, ali je sve to “izgrađeno od softvera”.



Java Virtual Machine (JVM)

12
public class Main {
public static void main(String[] args) {

int a, b;
a = 5;
b = 3;
a = a + b;

System.out.println(a);
}
}
public class Main {
public Main();
Code:
0: aload_0
1: invokespecial #1
4: return

public static void main(java.lang.String[]);
Code:
0: iconst_5
1: istore_1
2: iconst_3
3: istore_2
4: iload_1
5: iload_2
6: iadd
7: istore_1
8: getstatic #7
11: iload_1
12: invokevirtual #13
15: return
}
disassembled code
(neformalni hipotetski asembler)
u primeru iznad nisu navedeni komentari (koji postoje)
(jdk) javap –c Main.class

13
String str1 = new String("Dobar dan");
String str2 = new String("Dobar dan");

if (str1 == str2)
System.out.println("isti");
else
System.out.println("razliciti");
String str1 = "Dobar dan";
String str2 = "Dobar dan";

if (str1 == str2)
System.out.println("isti");
else
System.out.println("razliciti");
Kako je u C#?

14
JavaScript
-ECMAScript

-web browser (web browser / client) → Node.js (ne mora i može web browser /
client + server)

-slabo tipiziran ili netipiziran?
-TypeScript

-interpreter ili kompajler? → engines
-Chrome, Node.js - V8
-Edge - Chakra → V8
-Firefox - Spider Monkey
-Safari - Webkit

-Hermes - React Native
-…

v8.dev
firefox-source-docs.mozilla.org/js

15
WebAssembly
-low-level jezik za stek VM
-binarni i tekstualni format
-namenjen za web, prvenstveno
-“near-native” izvršavanje
-radi zajedno sa JS

-jezici koji se tradicionalno koriste za desktop
aplikacije, servise, biblioteke (C, C++, Rust...) →
razvoj aplikacija za web


Npr:
https://emscripten.org/index.html (LLVM)
c/c++ → wasm / js / html
V8, SpiderMonkey - JS and WebAssembly engines
int sum(int a, int b) {
return a + b;
}
(module
(table 0 anyfunc)
(memory $0 1)
(export "memory" (memory $0))
(export "sum" (func $sum))
(func $sum (; 0 ;) (param $0 i32) (param $1 i32)(result i32)
(i32.add
(get_local $1)
(get_local $0)
)
)
)
s-izrazi

16
kako se uključiti?

17

18

19

20
I have regarded it as the highest goal of programming language design to enable good
ideas to be elegantly expressed
Simplicity is a great virtue but it requires hard work to achieve it and education to
appreciate it. And to make matters worse: complexity sells better.
(za početak: EWD 316)

21
esolangs.org

22
iisiiiisiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiii
iiooiiio
dddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddo
dddddddddddddddddddddsddoddddddddoiiioddddddoddddd
dddo
#0#10#33#100#108#114#111#119#32#44#111#108#
108#101#72...............

23
github.com/xoreaxeaxeax/movfuscator

24
Želim vam puno zabave, izazova i uspeha
u programiranju i softverskom inženjeringu
u nadi da ćete uvek naći malo vremena da razmotrite i
formalizme koji se nalaze iza svega.
Tags