Programista gier, silników i innych takich

Podobne dokumenty
Tworzenie oprogramowania

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Podstawy programowania. Wprowadzenie

PARADYGMATY PROGRAMOWANIA Wykład 4

Kompilator języka C na procesor 8051 RC51 implementacja

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

PyPy's Approach to Virtual Machine Construction

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Programowanie w języku C++

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Programowanie obiektowe zastosowanie języka Java SE

Programowanie Systemów Wbudowanych

PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA...

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Wprowadzenie do biblioteki klas C++

KOTLIN. Język programowania dla Androida

Zacznij Tu! Poznaj Microsoft Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4

CODE::BLOCKS & VALGRIND OPRACOWAŁ MICHAŁ BETHKE

Szablony funkcji i szablony klas

Wstęp do programowania

Programowanie dla ios

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Zaawansowane programowanie w języku C++ Klasy w C++

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Ogólne zasady projektowania algorytmów i programowania

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

1. Tworzenie nowego projektu.

Scala - programowanie obiektowo-funkcyjne

Programowanie procesorów graficznych GPGPU

Tytuł szkolenia: Angular 4 - budowanie nowoczesnych i wydajnych aplikacji przeglądarkowych

Wykład 8: klasy cz. 4

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Programowanie niskopoziomowe

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Program szkolenia: Zaawansowane programowanie w C++

Zaawansowane programowanie w C++ (PCP)

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Microsoft IT Academy kurs programowania

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Obróbka po realnej powierzchni o Bez siatki trójkątów o Lepsza jakość po obróbce wykańczającej o Tylko jedna tolerancja jakości powierzchni

Technologie obiektowe

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

JĘZYKI WYSOKIEGO POZIOMU: λ FUNKCJE I PROGRAMOWANIE BEZKLASOW E Sebastian Poręba

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Optymalizacja programów Open Source. Profilery wysokiego poziomu część 1. Krzysztof Lichota

Funkcja (podprogram) void

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Materiały do zajęć VII

Szablony funkcji i klas (templates)

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Programowanie obiektowe

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1 Atrybuty i metody klasowe

Języki i metody programowania Java. Wykład 2 (część 2)

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Wprowadzenie do Objective-C

Wprowadzenie do środowiska Qt Creator

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Wprowadzenie do szablonów szablony funkcji

Zaawansowane programowanie w C++ (PCP)

PODSTAWOWE ZASADY PROGRAMOWANIA OBIEKTOWEGO NA BAZIE PAKIETU ROOT

Programowanie MorphX Ax

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Wprowadzenie do szablonów szablony funkcji

Optimizing Programs with Intended Semantics

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

JavaScript - korzenie

Spis treści. Wprowadzenie 15

KARTA SZKOLENIA 1/5. Po ukończeniu szkolenia uczestnik będzie potrafił:

Projektowanie i implementacja wysokowydajnych aplikacji w języku

Interaktywne ustawianie narzędzia Kątowe ustawienie narzędzia Narzędzie pod kątem w obróbce zgrubnej i pośredniej

Zakres egzaminu dyplomowego (magisterskiego) na kierunku INFORMATYKA

Programowanie dla ios

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Testowanie oprogramowania

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

Zaawansowane programowanie w języku C++

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Transkrypt:

Tomasz Dąbrowski

Programista gier, silników i innych takich dabroz@scythe.pl http://dabroz.scythe.pl @dabrozpl

Dlaczego nie lubię C++?

Złożoność Przestarzały system budowania Pliki nagłówkowe OOP Szablony substandard programmers oraz substandard libraries Debug vs Release Ukrycie problemów wydajnościowych

C? Dobry wybór, ale czasem przydają się dodatkowe możliwości. Okrojony C++? To już mamy. D? Po prawie 15 latach dalej nie słychać 0 większych produkcjach. C#/Java? GC, słaba wydajność. Python/JavaScript/? Ciężko powiedzieć, dalej coś liczą

Dab!

Front-end Lexer Parser gotowe AST Middle-end przetwarzanie AST lowering optymalizacje wysokopoziomowe Back-end mikrooptymalizacje generowanie kodu

int foo = bar(14 + z); INT foo = bar ( 14 + z ) ; ASSIGN VAR foo (int) FUNCALL bar BINOP + CONST 14 VAR z

Front-end Lexer Parser gotowe AST Middle-end przetwarzanie AST lowering optymalizacje wysokopoziomowe Back-end mikrooptymalizacje generowanie kodu FLEX BISON KOMPILATOR (DAB) LLVM

Problemy C++: Co na to Dab?

Język znacznie prostszy od C++ Kompilator może udostępniać bibliotekę do tworzenia AST na podstawie kodu Skutek: mniej problemów z językiem Skutek: łatwe tworzenie narzędzi analizujących/przetwarzających kod

Rezygnacja z zewnętrznych narzędzi Nie potrzeba tworzyć wielu procesów Nie potrzeba operować na plikach! Cała kompilacja może odbywać się w pamięci Skutek: ogromne przyspieszenie kompilacji

Rezygnacja z klasycznych plików nagłówkowych Na podstawie kodu można generować w locie różnego rodzaju nagłówki (np. jako dokumentację) Nie ma znaczenia kolejność typów, zmiennych i funkcji w plikach

Jeżeli już OOP, to z głową Objective-C ma 300% możliwości C++ przy 10% jego złożoności Reflection Docelowo moduł OOP będący połączeniem Lua i Obj-C

Rozwiążmy problemy w inny sposób Typy jako argumenty użyjmy istniejących mechanizmów Raytracing w czasie kompilacji określanie funkcji jako stałych (lepsze constexpr) Kontenery bez konstruktorów i destruktorów można je zrealizować prostszymi środkami Skutek: brak code bloat Skutek: bardziej spójny język Skutek: hashowanie stringów w czasie kompilacji

Prostszy (w tym bardziej ograniczony) język = WIN Mniej okazji do tworzenia koszmarnego kodu Silniejszy (obsługujący systemowo więcej istotnych dla nas problemów) = WIN Mniej powodów do tworzenia koszmarnego kodu

Wybór trybu kompilacji per-funkcja Przełączanie trybów w locie Ręczne sterowanie etapami optymalizacji

Zwracanie uwagi na sprawy nieistotne w większości innych języków Kilka pomysłów: float fun(int* a, int* b) { *a = 2; *b = 4; return *a + *b; warning: pointers a and b may alias warning: Load-Hit-Store in *a warning: expected stall for 42 cycles warning: conversion from int to float in return value }

Problemy i możliwości

C łatwa sprawa DLL no problem Bytecode LLVM jak najbardziej C++ - kiepska sytuacja Pełna obsługa C++ (bo w nagłówkach może być kod) Zarządzanie czasem życia obiektów C++ Pełna obsługa jest nierealna Ale z użyciem Clang można próbować kompilacji do LLVM BC Albo po prostu używać interfejsów C

Podmiana kodu w czasie rzeczywistym Bez ograniczeń edit&continue Także w trybie Release (przy wyłączonym optymalizowaniu funkcji inline) Dzięki JIT można dostarczać optymalny build gry na różne wersje architektury (SSE 4/3 itp.)

float4 jako pełnoprawny typ Komplet operatorów Wbudowany swizzling (float4 ret = color.bgra;) Biblioteka matematyczna (zbliżona do shaderów)

Ideałem byłaby rezygnacja z 32-bitowego kodu w ogóle Niestety 32-bit ma wciąż duży udział w domowych PC Różne architektury które język może obsługiwać dzięki LLVM: ARM (tylko 32-bit), PPC 64-bit musi być standardem, a 32-bit służyć jako fallback Architektura nie jest problemem przy JIT Fat binaries na niektórych OS

No size fits all Poza rdzeniem języka powinny istnieć opcjonalne moduły Przykłady: Język skryptowy Zaawansowany OOP Developerzy powinni mieć możliwość dokładania własnych konstrukcji do języka (choćby w postaci lukru składniowego)

C++ i Lua Dużo kodu potrzebne tylko w celu komunikacji między językami Trudne debugowanie Lua Przy dużych projektach czysto dynamiczny język jak Lua jest kłopotliwy Zamiast tego dodajmy jako opcjonalny element moduł skryptowy

Idea: połączmy Lua i Objective-C Język oparty na prototypach Programowanie obiektowe, ale z możliwością nadpisywania metod per-obiekt Komunikacja z rdzeniem języka za pomocą typu wskaźnikowego (id w Obj-C) Możliwość statycznej (i dynamicznej) kontroli typów id HellSpaceShip = [[SpaceShip alloc] init] HellSpaceShip.Render = { [Base Render]; RenderHellFlames([self Position]) }

LLVM/Clang oferuje analizę statyczną kodu Przykłady zastosowań: Wskaźniki NULL sprawdzanie tylko na najwyższym poziomie wywołań funkcji Wykrywanie literówki nie będących błędami (np. powtórzenie tego samego fragmentu kodu bez zmiany operatora) Przy podjęzyku skryptowym sporo kodu wykonywane jest dynamicznie, ale często można prześledzić wszystkie ścieżki i zredukować wywołania do statycznych

Skoro głównym targetem jest tworzenie gier to pomóżmy w jednym z podstawowych zagadnień Przykładem zaawansowanej integracji z OpenGL może być możliwość instrumentalizacji shaderów (transform feedback + lunarglass) Statyczna analiza potoku OpenGL (redundantne zmiany stanów, niedopasowane formaty wierzchołków itp.)

Trudny temat Są różne opcje: Natywny debugger GDB LLDB Problematyczna obsługa kodu JIT Jednolite debugowanie wszelkiego rodzaju kodu

Status projektu

http://www.dablang.net/ http://github.com/dabroz/dablang Licencja MIT

Pytania?