Domain-specific Languages. Języki dziedzinowe. Adam Robaszyński-Janiec a.r.janiec@world-loom.com

Podobne dokumenty
STANOWISKA JĘZYKOWE DO BUDOWY SERWISÓW INFORMACYJNYCH

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Java EE produkcja oprogramowania

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

Podstawy języka Java. przygotował:

Tworzenie języków specyfikacji dla zagadnień numerycznych

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

REFERAT PRACY DYPLOMOWEJ

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Zaawansowane aplikacje WWW - laboratorium

KARTA KURSU. Języki skryptowe

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

Zaawansowane programowanie obiektowe - wykład 5

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

Procesy biznesowe w praktyce. Przykłady użycia z wykorzystaniem jbpm 4.4

Przykładowa implementacja

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykorzystywanie parsera DOM w programach Java i PL/SQL

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Podstawy programowania. Wprowadzenie

System zarządzający grami programistycznymi Meridius

METODY REPREZENTACJI INFORMACJI

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

1 Wprowadzenie do J2EE

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Programowanie komputerów

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Projekt przejściowy 2015/2016 BARTOSZ JABŁOŃSKI, TOMASZ JANICZEK

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Podstawy programowania wykład

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

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

DSL w środowisku Eclipse. Grzegorz Białek Architekt techniczny, Sygnity S.A.

Webowy generator wykresów wykorzystujący program gnuplot

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji.

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

Programowanie w C. dr inż. Stanisław Wszelak

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Tworzenie oprogramowania

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 2 Ćwiczenia w narzędziu CASE diagram klas. Materiały dla nauczyciela

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Gdzie jest moja tabela?

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

[Junior Developer - pierwsza praca jako programista - JavaDevMatt] 1. Sponsorzy Partnerzy projektu O czym i dla kogo jest ta książka?

Programowanie Komponentowe WebAPI

WPROWADZENIE DO JĘZYKA JAVA

CODE::BLOCKS & VALGRIND OPRACOWAŁ MICHAŁ BETHKE

Specyfikacja API Runtime BAS 3.0

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

Słowa kluczowe jak góry lodowe

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

WZORCE LOGIKI APLIKACJI Reużywalne składniki wymagań

Wzorce projektowe i refaktoryzacja

Wprowadzenie do XML. Joanna Jędrzejowicz. Instytut Informatyki

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Java jako język programowania

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

Wprowadzenie do języka Java

Podejście obiektowe do relacyjnych baz danych Hibernate.

Scala - programowanie obiektowo-funkcyjne

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i

Programowanie obiektowe

Środowiska i platformy programistyczne

kodowanienaekranie.pl

Projekt przejściowy 2016/2017 BARTOSZ JABŁOŃSKI

KORPORACYJNE SYSTEMY ZARZĄDZANIA INFORMACJĄ

extensible Markup Language, cz. 1 Marcin Gryszkalis, mg@fork.pl

1 TEMAT LEKCJI: 2 CELE LEKCJI: 3 METODY NAUCZANIA 4 ŚRODKI DYDAKTYCZNE. Scenariusz lekcji. 2.1 Wiadomości: 2.2 Umiejętności: Scenariusz lekcji

Języki i paradygmaty programowania - 1

Organizacja zajęć BAZY DANYCH II WYKŁAD 1. Plan wykładu. SZBD Oracle

Specyfikacja implementacyjna aplikacji serwerowej

Wzorce logiki dziedziny

Dane wejściowe. Oracle Designer Generowanie bazy danych. Wynik. Przebieg procesu

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Informatyka. Michał Rad

akademia androida Składowanie danych część VI

Problemy optymalizacji, rozbudowy i integracji systemu Edu wspomagającego e-nauczanie i e-uczenie się w PJWSTK

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

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

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

KARTA KURSU. Przetwarzanie dokumentów XML i zaawansowane techniki WWW

Systemy mobilne. Laboratorium. Dostęp do danych GPS w Windows Phone 7

GRY KOMPUTEROWE 3D OpenGL DirectX Ogre3D Crystal Space ClanLib Irrlicht SDL Ardor3D jmonkey Engine GRY KOMPUTEROWE 2D ORX Troll2D

Wprowadzenie do programowania aplikacji mobilnych

Zaawansowane programowanie w języku C++

dlibra 3.0 Marcin Heliński

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Aplikacje Internetowe, Servlety, JSP i JDBC

Podstawy Programowania

Programowanie obiektowe

Transkrypt:

Domain-specific Languages Języki dziedzinowe Adam Robaszyński-Janiec a.r.janiec@world-loom.com

Czym są DSL? (często) prosty język przewidziany do rozwiązania konkretnego problemu Wysokopoziomowy (wyżej niż Java/C++) Nie muszą być kompletne w sensie Turinga (sic!) Łatwy do połączenia z językiem ogólnego zastosowania Posiada ograniczone możliwości Wykorzystywany podobnie jak biblioteki (API) Rzadko kompilują się do bytecode'u ale potrafią do innych formatów np. JPEG, PNG

Przykłady DSL Składnia grep'a, sed'a Język opisu grafów Graphviz Makra w procesorach tekstu Skrypty w GIMP'ie XSLT SQL

Sposoby używania Samodzielne przetwarzanie np. z konsoli Makra w językach ogólnego zastosowania rozwijają się do właściwego języka Wywoływane w trakcie wykonanie ( run-time ) Osadzone w aplikacjach użytkownika (makra w programach biurowych)

Cele projektowe Mniejsze skomplikowanie Lepszy opis dziedziny, w której się porusza Zminimalizowana nadmiarowość - jak najmniejszy nakład prac potrzebny w przypadku zmiany wymagań

Przykładowe dane wejściowe #123456789012345678901234567890123456789012345678901234567890 SVCLFOWLER 10101MS0120050313... SVCLHOHPE 10201DX0320050315... SVCLTWO x10301mrp220050329... USGE10301TWO x50214..7050329...

Trochę kodu Java/C# public void Configure(Reader target) { target.addstrategy(configureservicecall()); target.addstrategy(configureusage()); } private ReaderStrategy ConfigureServiceCall() { ReaderStrategy result = new ReaderStrategy("SVCL", typeof (ServiceCall)); result.addfieldextractor(4, 18, "CustomerName"); result.addfieldextractor(19, 23, "CustomerID"); result.addfieldextractor(24, 27, "CallTypeCode"); result.addfieldextractor(28, 35, "DateOfCallString"); return result; } private ReaderStrategy ConfigureUsage() { ReaderStrategy result = new ReaderStrategy("USGE", typeof (Usage)); result.addfieldextractor(4, 8, "CustomerID"); result.addfieldextractor(9, 22, "CustomerName"); result.addfieldextractor(30, 30, "Cycle"); result.addfieldextractor(31, 36, "ReadDate"); return result; }

Trochę inaczej - XML <ReaderConfiguration> <Mapping Code = "SVCL" TargetClass = "dsl.servicecall"> <Field name = "CustomerName" start = "4" end = "18"/> <Field name = "CustomerID" start = "19" end = "23"/> <Field name = "CallTypeCode" start = "24" end = "27"/> <Field name = "DateOfCallString" start = "28" end = "35"/> </Mapping> <Mapping Code = "USGE" TargetClass = "dsl.usage"> <Field name = "CustomerID" start = "4" end = "8"/> <Field name = "CustomerName" start = "9" end = "22"/> <Field name = "Cycle" start = "30" end = "30"/> <Field name = "ReadDate" start = "31" end = "36"/> </Mapping> </ReaderConfiguration>

Jeszcze inaczej mapping SVCL dsl.servicecall 4-18: CustomerName 19-23: CustomerID 24-27 : CallTypeCode 28-35 : DateOfCallString mapping USGE dsl.usage 4-8 : CustomerID 9-22: CustomerName 30-30: Cycle 31-36: ReadDate

Kolejna wersja - Ruby mapping('svcl', ServiceCall) do extract 4..18, 'customer_name' extract 19..23, 'customer_id' extract 24..27, 'call_type_code' extract 28..35, 'date_of_call_string' end mapping('usge', Usage) do extract 9..22, 'customer_name' extract 4..8, 'customer_id' extract 30..30, 'cycle' extract 31..36, 'read_date' end

Podział DSL Zewnętrzne ( external ) - napisane w innym języku niż język podstawowy używane z wykorzystanie interpreterów, samodzielne języki (wyrażenia regularne), plik konfiguracyjne Wewnętrzne ( internal ) - składnia taka sama jak języka podstawowego, ograniczona część możliwości

Zalety i wady ex-dsl Dowolność składni łatwiejsze powiązanie z dziedziną Konieczność stworzenia interpretera Problemy w komunikacji z językiem podstawowym (oddzielne symbole) Brak środowiska IDE, debugger (Kakofonia języków)

Zalety i wady in-dsl Dostępność środowisk Brak problemów komunikacyjnych z językiem podstawowym Ograniczone możliwości dostosowania do dziedziny Skomplikowane dla nie-programistów

Skąd pomysł? Tworzenie gier komputerowych Duża ilość powtarzalnych plansz 35 plansz na początek a będzie więcej Proste zasady, łatwe do opisania Koszt pracy programisty a koszt pracy designer'a plansz Możliwość ograniczenia widoczności

Bibliografia Wikipedia http://en.wikipedia.org http://pl.wikipedia.org Martin Fowler Language Workbenches http://www.martinfowler.com/articles/languageworkbench.html GameMakers http://www.gamemakers.pl/home/meeting4