Platforma.NET Wykªad 2 Skªadowe platformy.net

Podobne dokumenty
Platforma.NET Wykład 2 Składowe platformy.net. Spis treści. Plan wykładu tydzień po tygodniu. Plan wykładu tydzień po tygodniu. Notatki.

Platforma.NET Wykład 2 Składowe platformy.net. Spis treści. Marek Sawerwain. Ostatnia kompilacja pliku: 22 marca 2018, t: 18:54. Notatki.

Programowanie C# mgr in. Dariusz Ku. p. 119A

Microsoft IT Academy kurs programowania

C# /.NET. Copyright by 3bird Projects 2018,

Podstawy programowania. Wprowadzenie

Dostęp do funkcji niskopoziomowych w.net Compact Framework

Programowanie Komputerów

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

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

Języki i paradygmaty programowania - 1

Wykłady 1, 2. Wstęp do programowania w środowisku Visual C++ Autor: Zofia Kruczkiewicz

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Programowanie RAD Delphi

Metodyka programowania. Podstawy C#

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Podstawy Informatyki i Technologii Informacyjnej

Programowanie obiektowe

Tworzenie aplikacji w języku Java

Język ludzki kod maszynowy

Programowanie współbieżne i rozproszone

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

Instytut Informatyki, Politechnika Poznańska, SUM-TWO. Zaawansowane programowanie obiektowe

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

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

MATERIAŁY DO ZAJĘĆ II

Wprowadzenie. Wprowadzenie

1. Wprowadzenie do C/C++

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Środowiska i platformy programistyczne

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

1. Wprowadzenie do C/C++

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Spis tre±ci. 1 Wst p Zawarto± rozdziaªów Projekt LoXiM... 2

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Przetwarzanie sygnaªów

Podstawy modelowania w j zyku UML

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie Komputerów

Microsoft Shared Source CLI

MiASI. Modelowanie analityczne. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Java Podstawy JUST JAVA Michał Bereta Intytu Modelowania Komputerowego Wydział Fizyki, Matematyki i Informatyki Stosowanej

Python wstęp do programowania dla użytkowników WCSS

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie obiektowe

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Wykład 3 Typy danych w C++/CLI, typy fundamentalne, operacje wejścia/wyjścia, właściwości klasy (property) Zofia Kruczkiewicz

Instrukcja laboratoryjna cz.3

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

Low Level Virtual Machine

Wprowadzenie do języka Java

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Aplikacje internetowe i rozproszone - laboratorium

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Platforma.NET laboratorium 1. Visual Basic.NET podstawowe elementy języka. Wykonanie warunkowe If End If

Spis tre±ci. Paradygmaty programowania tematy referatów (26 marca 2018) 1 Gramatyki i j zyki formalne, notacja BNF, diagramy syntaktyczne 2

Mechanizmy refleksji w Javie i C# Autor: Aleksander Nałęczyński

Programowanie obiektowe

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

C# - innowacja czy plagiat?

Wartości domyślne, szablony funkcji i klas

Java EE produkcja oprogramowania

Techniki Programowania

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Wykład 1

Programowanie i projektowanie obiektowe

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Zagadnienia programowania obiektowego

Podstawy modelowania w j zyku UML

Laboratorium Programowania Kart Elektronicznych

Automatyzacja procesu publikowania w bibliotece cyfrowej

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

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Wzorce projektowe strukturalne cz. 1

InsERT GT Własne COM 1.0

Rys. 1. Struktura środowiska.net 3.5. S. Fraser, Pro Visual C++/CLI and the.net 3.5 Platform, Apress, 2009.

Programowanie i struktury danych

JAVA W SUPER EXPRESOWEJ PIGUŁCE

J zyk C dla sterowników programowalnych GeFanuc

Praca Dyplomowa Magisterska

Kurs programowania. Wykład 9. Wojciech Macyna

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

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

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

1 Atrybuty i metody klasowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

Wzorce projektowe kreacyjne

Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

#line #endif #ifndef #pragma

2018 Marcin Kukliński. Niesforne bity i bajty

Transkrypt:

Platforma.NET Wykªad 2 Skªadowe platformy.net Marek Sawerwain Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Ostatnia kompilacja pliku: 9 marca 2017, t: 19:26 V1.1 1/ 47

Spis tre±ci 1 Wprowadzenie Plan wykªadu 2 Elementy.NET / Biblioteka klas Analiza skªadowych platformy.net Common Language Runtime (CLR) Common Language Specication Common Type Systems (CTS) Przegl d j zyków programowania.net Analiza biblioteki klas 3 Podzespóª/IL Budowa podzespoªu J zyk po±redni Kompilacja i wykonywanie programów IL Przykªady programów Tabela instrukcji wybór 4 Ju» za tydzie«na wykªadzie V1.1 2/ 47

Plan wykªadu Plan wykªadu tydzie«po tygodniu (1) Informacje o wykªadzie, poj cie platformy, podstawowe informacje o platformie.net, (2) Skªadowe platformy.net: CLR, CTS, j zyki programowania, biblioteki klas, poj cie podzespoªu (ang. assembly), (3) Programowanie w C# ±rodowisko VS, MonoDevelop, syntaktyka C#, wyj tki, wspóªpraca z DLL, (4) Programowanie w C# model obiektowy, typy uogólnione, lambda wyra»enia, (5) Programowanie w C# aplikacje okienkowe, programowanie wielow tkowe. (6) Programowanie w F# podstawy, przetwarzanie danych tekstowych, (7) "Klasówka I", czyli wst p do egzaminu cze± pierwsza (8) Dost p do baz danych V1.1 3/ 47

Plan wykªadu Plan wykªadu tydzie«po tygodniu (9) J zyk zapyta«linq (10) Obsªuga standardu XML (11) Technologia ASP.NET (12) ASP.NET Model View Controller (13) Tworzenie usªug sieciowych SOA i WCF (14) Bezpiecze«stwo aplikacji.net (15) "Klasówka II", czyli wst p do egzaminu cze± druga V1.1 4/ 47

Plan wykªadu Plan wykªadu 1 Elementy.NET 1 gªówne elementy.net, 2 reguªy CLS, 3 system typów. 2 Biblioteka klas 1 podziaª typów, 2 typy wbudowane oraz typy w kontek±cie C#, 3 podstawowe klasy w przestrzeni System. 3 Podzespóª (assembly)/j zyk po±redni 1 rola podzespoªu, 2 budowa i model, 3 j zyk po±redni. V1.1 5/ 47

Analiza skªadowych platformy.net Elementy platformy.net Wspólne ±rodowisko uruchomieniowe oraz biblioteka klas, Web Services zestandaryzowana technologia publikacji serwisów WWW, SOAP Simple Object Access Protocol, HTTP protokóª stosowany do przesyªania informacji pomi dzy serwisami WWW, Visual Basic C++ C# Perl Python Message Queuing XML Web Services ADO.NET and XML.NET Framework Class Libray Common Language Runtime COM+ (Transactions, Partitions, Object Pooling) User Interface IIS WMI XML opis danych. WIN32 / WIN64.NET Framework oferuje ustalony sposób produkcji oprogramowania w oparciu o platform w której nie akcentuje si»adnego j zyka programowania. Platforma zawiera wspólne ±rodowisko uruchomieniowe, bibliotek klas dodatkowe serwery oraz narz dzia. V1.1 6/ 47

Analiza skªadowych platformy.net Cztery gªówne lary platformy.net Common Language Runtime (CLR) ±rodowisko wykonawcze programów.net odpowiedzialne za lokalizacj, wczytanie oraz zarz dzanie typami/obiektami platformy.net Common Language Infrastructure (CLI) ECMA-335 Common Language Specication (CLS) zespóª zasad oraz reguª niezb dnych do speªniania aby okre±lony j zyk programowania mógª wspóªpracowa z CLI. Common Type System (CTS) denicja sposobu reprezentacji typów danych w pami ci maszyny. Common Intermediate Language (CIL) j zyk po±redni (IL) stanowi cy niezale»ny zestaw instrukcji od istniej cych rozwi za«procesorowych, do którego kompilowane s wszystkie programy pracuj ce w ramach ±rodowiska.net, metadane. Common Language Runtime (CLR) Common Language Specification (CLS) Base Class Library (BCL) Metadata Definition and Semantics Common Type System (CTS) Common Intermediate Language (CIL) Instruction Set V1.1 7/ 47

Common Language Runtime (CLR) rodowisko wykonawcze maszyna wirtualna Zadaniem maszyny wirtualnej jest kontrola nad odwoªaniami uruchamianego programu do sprz tu i systemu operacyjnego. W przypadku braku pewnych funkcji na poziomie sprz towym zdaniem maszyny jest symulacja brakuj cej funkcjonalno±ci. W ten sposób aplikacja/program nie jest wstanie sprawdzi, czy jest uruchomiony na prawdziwym, czy te» udawanym/wirtualnym sprz cie. Maszyny wirtualne to m.in.: Uwaga! interpretery, szczególnie interpretery kodu bajtowego, kompilatory JIT, emulatory rzeczywi±cie istniej cego sprz tu, np. emulatory starszych komputerów, konsol do gier. Nie zawsze jednoznacznie mo»na okre±li wprost, czy faktycznie mamy do czynienia z maszyn wirtualn przykªadem mo»e by Java. V1.1 8/ 47

Common Language Runtime (CLR) Zastosowania maszyn wirtualnych Maszyny wirtualne s u»ywane do ró»nych celów, min. do: 1 uruchamiania starszych aplikacji i/b d¹ starszych systemów operacyjnych w innych ±rodowiskach ni» pierwotne, 2 zapewnienia uniwersalnego ±rodowiska uruchomieniowego, 3 bezpiecznego rozdzielania zasobów (min. mainframe, superkomputery), 4 uruchamiania jednocze±nie ró»nych systemów operacyjnych na jednym komputerze (bez konieczno±ci resetu tzw. systemu goszcz cego), 5 tworzenia programowych klastrów, 6 analizowania jego pracy/debuggowania tworzonych systemów operacyjnych, 7 optymalizacji tworzonych aplikacji/programów, poprzez zapewnienie kontroli nad ich ±rodowiskiem dziaªania. Wymienione wªa±ciwo±ci mog wyst powa ª cznie lub by ograniczone, istotn wªasno±ci jest zupeªno±, czyli dana maszyna wirtualna W powinna by w stanie uruchomi swoj wªasn kopi. V1.1 9/ 47

Common Language Runtime (CLR) Znane maszyny wirtualne Kilka wspóªczesnych programowych maszyn wirtualnych: Nazwa Model Zarz d. pam. Bezpie. Inter. JIT C. CL O.Model Dynam. typ. CLR stack auto/man Y N Y Yes Yes Mono stack auto/man Y Y Y Yes Yes DotGNU stack auto/man Y N Y Yes N JVM stack auto Y Y Y Yes N LLVM register man. N Y Y Yes N Parrot register auto N Y N Yes Yes Legenda: Zarz d. pam. Zarz dzanie pami ci, Bezpie. Bezpiecze«stwo, Inter. Interpreter, JIT C. Just-in-time compiler, CL O.Model model obiektowy, Dynam. typ. dynamiczne typowanie. Maszyny wirtualne mo»na podzieli na dwa podstawowe modele: rejestrowy oraz stosowy. Istotnym problemem jest wydajno± maszyny, dlatego obecno± kompilatora JIT jest niezb dna, aby dane rozwi zanie oferowaªo odpowiednio wysok wydajno±. V1.1 10/ 47

Common Language Runtime (CLR) Common Language Runtime (CLR) Usªugi okre±lone przez CLR: 1 zarz dzanie kodem, czyli jego uruchamianie oraz nadzór nad jego wykonaniem, 2 zarz dzanie pami ci w przypadku obiektów zarz dzanych 3 izolacja obszarów pami ci przydzielonych poszczególnym aplikacj.net, 4 konwersja j zyka IL do kodu maszynowego, 5 dost p do metadanych (informacja o typach), 6 zabezpieczenia w dost pie kodu do zasobów, 7 werykacja i zgodno± typów, 8 obsªuga wyj tków (przekazywanie ich pomi dzy ró»nymi j zykami jak np.: F# oraz C#), 9 wspóªpraca kodu zarz dzanego z niezarz dzanym, obsªuga COM i bibliotekami DLL, 10 automatyzacja tworzenia obiektów, 11 usªugi wspomagaj ce tworzenie oprogramowania jak debuggowanie oraz prolowanie V1.1 11/ 47

Common Language Runtime (CLR) Common Language Runtime (CLR) Wymagania, co do ±rodowiska wykonawczego zostaªy okre±lone w dokumencie ECMA-335: http://www.ecma-international.org/publications/standards/ecma-335.htm. Base Class Library Support Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debug Engine IL to native code (JIT compiler) Code Manager Garbage (GC) Collector Class Loader Istniej ce implementacje wspólnego ±rodowiska wykonawczego: CLR implementacja Microsoftu, MONO http://www.mono-project.com, DotGNU/Portable.NET www.gnu.org/projects/dotgnu/, http://dotgnu.org/. V1.1 12/ 47

Common Language Runtime (CLR) Rozwój CLR Kolejne wydania platformy.net naturalnie poci gaj za sob modykacj CLR: WCF WPF WF EF Parallel Task Model ASP.NET Core 5 ASP.NET ASP.NET WCS LINQ DLR Windows Store.NET Native CLR 1.0 CLR 1.1 CLR 2.0 CLR 2.0 CLR 2.0 CLR 4.0 CLR 4.0 CLR 4.0.NET 1.0.NET 1.1.NET 2.0.NET 3.0.NET 3.5 (SP1).NET 4.0.NET 4.5.NET 4.6 oznacza to, i» dokument ECMA-335 jest poddawany modykacjom w momencie wydawania nowych wersji platformy.net, ostatnia pochodzi z listopada 2016r. V1.1 13/ 47

Common Language Specication Common Language Specication (CLS) Rola CLS CLS to zestaw reguª których speªnienia ma zapewni wspóªprac pomi dzy ró»nymi j zykami programowania w ramach platformy.net. Trzy gªówne obszary/poziomy, gdzie stosowane s reguªy CLS: 1 framework poziom bibliotek/technologii/zestawów klas, 2 consumer j zyk programowania lub narz dzie dostarczaj ce dost p do funkcjonalno±ci platformy, 3 extender j zyk programowania lub narz dzie dostarczaj ce dost p do funkcjonalno±ci platformy oraz rozszerza jej mo»liwo±ci, V1.1 14/ 47

Common Language Specication Reguªy szczegóªowe CLS z dokumentu ECMA335 Przykªady reguª ze standardu: CLS Rule 17 Unmanaged pointer types are not CLS-compliant. Note: CLS (consumer) There is no need to support unmanaged pointer types. CLS (extender) There is no need to provide syntax to dene or access unmanaged pointer types. CLS (framework) Unmanaged pointer types shall not be externally exported. CLS Rule 23 System.Object is CLS-compliant. Any other CLS-compliant class shall inherit from a CLS- compliant class. CLS Rule 25 No longer used. [Note: In an earlier version of this standard, this rule stated The accessibility of a property and of its accessors shall be identical. The removal of this rule allows, for example, public access to a getter while restricting access to the setter. end note] V1.1 15/ 47

Common Language Specication Reguªy szczegóªowe CLS z dokumentu ECMA335 Przykªady reguª ze standardu: CLS Rule 38 Properties and methods can be overloaded based only on the number and types of their parameters, except the conversion operators named op_implicit and op_explicit, which can also be overloaded based on their return type. Note: CLS (consumer) Can assume that only properties and methods are overloaded, and need not support overloading based on return type unless providing special syntax for operator overloading. If return type overloading isn`t supported, then the op_implicit and op_explicit can be ignored since the functionality shall be provided in some other way by a CLS-compliant framework. Consumers must rst apply the hide-by- name and hide-by-signature-and-name rules (Ÿ8.10.4) to avoid any ambiguity. CLS (extender) Should not permit the authoring of overloads other than those specied here. It is not necessary to support operator overloading at all, hence it is possible to entirely avoid support for overloading on return type. CLS (framework) Shall not publicly expose overloading except as specied here. Frameworks authors should bear in mind that many programming languages, including object-oriented languages, do not support overloading and will expose overloaded methods or properties through mangled names. Most languages support neither operator overloading nor overloading based on return type, so op_implicit and op_explicit shall always be augmented with some alternative way to gain the same functionality. V1.1 16/ 47

Common Type Systems (CTS) Common Type System (CTS) Wspólny system typów Wspólny system typów okre±la w jaki sposób typy s deklarowane, u»ywane oraz zarz dzane w czasie wykonania (run-time). Najwa»niejsze funkcje udost pniane przez CTS to min: 1 bezpiecze«stwo typów, szybkie wykonywanie kodu, utworzenie niezb dnej struktury do integracji mi dzy j zykowej, 2 peªny model zorientowany obiektowo implementowany w wielu j zykach programowania.net, 3 okre±la warunki, które musz by speªnione przez okre±lony j zyk.net, co pozwala na interakcje pomi dzy obiektami pomi dzy ró»nymi j zykami.net. Gªówne zadanie CTS Obecno± CTS pozwala na integracj j zyków, bowiem j zyki programowania obecne w.net wspóªdziel te same typy podstawowe okre±lone przez CTS. V1.1 17/ 47

Common Type Systems (CTS) Ogólny podziaª typów Type Value Types Refernces Types (identity within app. domain) Built-in Value Types (special encoding in signature) User Defined Integer Types Enums Floating Point Types Typed References V1.1 18/ 47

Common Type Systems (CTS) Ogólny podziaª typów Refernces Types (identity within app. domain) Self-Describing Interface Pointer Built-In Reference Types Name Equivalent Function String Delegates Managed (might be in heap) Object Boxed Value Types Unmanaged Boxed Enums Structural Equivalent Arrays V1.1 19/ 47

Common Type Systems (CTS) CTS typy wbudowane built-in Podstawowe typy obecne we wspólnym ±rodowisku wykonawczym. Nazwa CIL Typ CLS Nazwa BCL Opis bool Yes System.Boolean True or false value char Yes System.Char Unicode 16-bit char object Yes System.Object Object or boxed value type string Yes System.String Unicode string oat32 Yes System.Single IEC 60559:1989 32-bit oat oat64 Yes System.Double IEC 60559:1989 64-bit oat int8 No System.SByte Signed 8-bit integer int16 Yes System.Int16 Signed 16-bit integer int32 Yes System.Int32 Signed 32-bit integer int64 Yes System.Int64 Signed 64-bit integer native int Yes System.IntPtr Signed integer, native size native unsigned int No System.UIntPtr Unsigned integer, native size typedref No System.TypedReference Pointer plus exact type unsigned int8 Yes System.Byte Unsigned 8-bit integer unsigned int16 No System.UInt16 Unsigned 16-bit integer unsigned int32 No System.UInt32 Unsigned 32-bit integer unsigned int64 No System.UInt64 Unsigned 64-bit integer V1.1 20/ 47

Common Type Systems (CTS) CTS a typy w j zyku C# (I) Typy warto±ciowe: (1) Proste typy numeryczne i znakowe: (a) wielko± integer ze znakiem: sbyte, short, int, long, (b) wielko± integer bez znaku: byte, ushort, uint, ulong, (c) znak unicode: char, (d) IEEE oating point: oat, double, (e) liczby o du»ej precyzji: decimal, (f) boolean: bool. (2) Typ enum: enum EName {... }, (3) Typ struct: struct SName {... }, (4) Typy nullable: typy maj mo»liwo± przyj cia warto±ci null. (II) Typy referencyjne: (1) Typ klasowy: (a) typ podstawowy dla typu obiektowego: object, (b) ªa«cuchy znaków unicode: string, (c) klasy zdeniowane przez u»ytkownika: class CName {... }, (2) Typ interface: interface IName {... }, (3) Typ tablicowy: jedno i wielowymiarowe tablice zdeniowane przez u»ytkonika: int[], int[,], (4) Typ delegate : typy u»ytkownika: delegate int DName(... ). V1.1 21/ 47

Przegl d j zyków programowania.net Opracowano ponad 40 j zyków dla.net V1.1 22/ 47

Przegl d j zyków programowania.net Najwa»niejsze j zyki Najwa»niejsze j zyki dost pne z pudeªka to: C#, Visual Basic.NET, C++/CLI, J# (odmiana j zyka Java opracowany przez Microsoft), JScript.NET (kompilowana odmiana j zyka JScript). Inne wa»ne j zyki: 1 COBOL, Delphi.NET, Oxygen, 2 Eiel, Fortran, Lisp, 3 Nemerle, F#, Python, P# (Prolog). V1.1 23/ 47

Przegl d j zyków programowania.net F# j zyk funkcyjny Denicja funkcji rekurencyjnej b obliczaj cej liczby ci gu Fibbonaciego: let rec fib x = match x with 1 -> 1 2 -> 1 x -> fib (x - 1) + fib (x - 2) printfn "(fib 2) = %i" (fib 2) printfn "(fib 6) = %i" (fib 6) printfn "(fib 11) = %i" (fib 11) i elementy ci gu Lucasa: let rec luc x = match x with x when x <= 0 -> failwith "value must be greater than 0" 1 -> 1 2 -> 3 x -> luc (x - 1) + luc (--x - 2) printfn "(luc 2) = %i" (luc 2) printfn "(luc 6) = %i" (luc 6) printfn "(luc 11) = %i" (luc 11) printfn "(luc 12) = %i" (luc 12) V1.1 24/ 47

Przegl d j zyków programowania.net Konwersja liczby caªkowitej na posta binarn : let BitsNum = 32 ;; let binary_of_int n = [ for i in BitsNum - 1.. -1.. 0 -> if (n >>> i) % 2 = 0 then "0" else "1" ] > String.concat "" ;; let x1 = binary_of_int 1431 ;; let x2 = binary_of_int ( -1123 ) ;; V1.1 25/ 47

Analiza biblioteki klas Zadania i funkcje biblioteki klas Standard ECMA-335 okre±la tak»e posta standardowej biblioteki klas, zaliczane s nast puj ce pakiety (zachowane zostaªo oryginalne nazewnictwo standardu): 1 Run-time infrastructure library 2 Base Class Library (BCL) 3 Network library 4 Reection library 5 XML library 6 Extended numerics library 7 Extended array library 8 Vararg library 9 Parallel library V1.1 26/ 47

Wprowadzenie Elementy.NET / Biblioteka klas Podzespóª/IL Ju» za tydzie«na wykªadzie Analiza biblioteki klas Ogólny schemat Base Class Library BCL.NET 3.5 plakat autorstwa rmy Microsoft V1.1 27/ 47

Wprowadzenie Elementy.NET / Biblioteka klas Podzespóª/IL Ju» za tydzie«na wykªadzie Analiza biblioteki klas Ogólny schemat Base Class Library BCL.NET 4.0 plakat autorstwa rmy Addison-Wesley V1.1 28/ 47

Analiza biblioteki klas Kilka klas z przestrzeni System Przestrze«nazw System System.CodeDom System.ComponentModel System.Collections, System.Conguration System.IO System.Text System.TextRegular Krótki opis Zawiera klasy deniuj ce najcz ±ciej u»ywane typy danych, zdarzenia i obsªug zdarze«a tak»e interfejsy, atrybuty oraz wyj tki Reprezentacja dokumentu/kodu ¹ródªowego w postaci drzewa Tworzenie komponentów, kontrolek, rejestracja oraz adaptacja Ró»ne kolekcje obiektów min.: listy, kolejki, tablice bitów, tablice skrótów i sªowniki Dost p do ustawie«konguracyjnych.net i podzespo- ªów oraz obsªuga bª dów w plikach konguracyjnych (pliki * cong) Podstawowy dost p i zarz dzanie strumieniami danych Kodowanie i konwersje znaków, manipulacje ªa«cuchami znaków Obsªuga wyra»e«regularnych V1.1 29/ 47

Budowa podzespoªu Assemblies, czyli podzespoªy Assembly/Assemblies (podzespóª/zestaw/podzespoªy/zestawy) Podzespóª to logiczny blok, skompilowany do kodu po±redniego. Z tych elementów budowane s aplikacje.net, zawieraj one kod w j zyku IL oraz metadane. Podzespóª opatrzony jest numerem wersji i jest on zamkni t spójn caªo±ci udost pniaj cym okre±lon funkcjonalno±. Istniej dwa rodzaje metadanych: w pierwszym podzespóª jest traktowany jako jednostka i jest to tzw. manifest oraz metadane przeznaczone do opisu poszczególnych typów zawartych w podzespole. Manifest jest cz ±ci podzespoªu i opisuje jego kod i zasoby poprzez podanie: nazwy (tzw. to»samo±ci) podzespoªu, numer wersji oraz tzw. opisu kultury (informacje regionalne oraz informacje o j zykach obsªugiwanych przez dany podzespóª), podpisu cyfrowego dla podzespoªu, pliki zawarte w podzespole, typy i zasoby zawarte w podzespole wraz z informacj które typy/zasoby s dost pne do u»ycia przez inne podzespoªy, powi zania z innymi podzespoªami, uprawnienia które s wymagane do poprawnej pracy podzespoªu. V1.1 30/ 47

Budowa podzespoªu Assemblies, czyli podzespoªy Metadane typów zawieraj opis typów zdeniowanych w kodzie zarz dzanym. Zawarte s w tym samym pliku co kod IL, zawieraj min: 1 Opis typów: nazwa typu, zasi g typu (publiczny b d¹ ograniczony do podzespoªu) nazw typu po którym typ dziedziczy, interfejsy zaimplementowane, metody zaimplementowane, wªa±ciwo±ci typu, zdarzenia obsªugiwane przez typ. 2 Opis atrybutów atrybuty posiadaj okre±lone nazwy i funkcje okre±lone w ±rodowisku.net, okre±laj sposób wykonywania kodu b d¹ opisuj wymagania co do bezpiecze«stwa. Source1.cs class A... class B... Source2.cs class C... class D... csc Source1.cs Source2.cs Program.exe manifest metadata IL of type A IL of type B IL of type C IL of type D class loader V1.1 31/ 47

Budowa podzespoªu Assemblies, czyli podzespoªy Wa»ne elementy zwi zane z podzespoªami to: 1 po kompilacji do kodu IL, kod zarz dzany jest cz ±ci podzespoªu skªadaj cego si z jednego b d¹ wielu plików DLL/EXE, 2 podzespoªy mog by okre±lone jako prywatne b d¹ wspóªdzielony umieszczone s w GAC (Global Assembly Cache), 3 podzespóª mo»e zosta podpisany kluczem cyfrowym (sygnatur ) oraz opatrzony 4 informacje o prywatnym podzespole nie s wprowadzane do platformy.net (rejestr nie jest modykowany), 5 podzespoªy w katalogu aplikacji nie wymagaj dodatkowych operacji, 6 wspóªu»ytkowanie podzespoªy s umieszczene w GAC, 7 podzespóª mo»e mie tzw. siln nazw (podpis/sygnatura cyfrowa) werykowana podczas ªadowania podzespoªu lub sªab nazw, 8 wersja podzespoªu w postaci G.D.K.K (gªówny/major, drugorz dny/minor, kompilacji/compilation, korekty/revision) np.: 3.0.1240.2. 9 wersja informacyjna, czyli ci g znaków czytelnych dla ludzi, 10 numery wersji podzespoªów od których zale»y dany podzespóª. V1.1 32/ 47

Budowa podzespoªu Model podzespoªu (assembly model) Manifest jest zapisany w sekcji metadanych zawierający tzw. moduł master, który może lecz nie jest wymagane aby opisywał również typy. 1 Podzespół to pojedyncza/jednolita w aplikacji zawieracjace klasy, numery wersji oraz opis bezpieczeństwa. Pliki podzespołów (exe, dll) pełnią rolę podobną jak pliki JAR w przypadku Javy lub starsze w formacie MS CAB. Private Assembly Static Assembly Dynamic Assembly (Created in Memory) Public (Shared) Assembly publickey Global Registers Assembly 1 Cache 1.. * * 1 Type 0..1 * * 1 Assembly W formacie Portable Executable jednosta (PE), pojęcia "Moduł" Metadata Manifest oraz "Plik PE" są stosowane wymiennie. Stosowane są rozszerznia.exe,.dll,.netmodule. «use» 1.. * 1 Metadata Element 1.. * 1.. * 1 1.. *.NET Assembly «use» Module Type Code Moduły oraz zasoby (np.: pliki PNG badz JPG) sa logicznie przypisane podzespołom, fizycznie również tego typu pliki moga znajdować się plikach assembly. Jednak w wielu przypadkach, z praktycznych powodów (np.: wielkość plików) pliki tego typu nie są umieszczane w podzespołach. Istnieja tylko odniesienia do zasobów umieszczeone w manifescie podzespołu. Takie rozwiązanie przyspiesza ładowanie podzespoły natomiast dostęp do zasobów jest uzyskiwany w tzw. trybie leniwych obliczeń. Resource X509Certificate Assembly Dependencies Machine Code CIL Text Image V1.1 33/ 47

J zyk po±redni J zyk po±redni / Kod zarz dzany J zyk po±redni lub wspólny j zyk po±redni (ang. Common Intermediate Language CIL) to j zyk niskiego poziomu dla platformy.net. Stanowi on odpowiednik assemblera dla j zyków wysokiego poziomu jak C/C++. Ogólnie CIL jest podobny do assemblera, jednak zostaª on wyposa»ony w konstrukcje programowania obiektowego i nie jest wykonywany przez stosow maszyn wirtualn ale kompilowany przez JIT/ngen do kodu maszynowego. Kod zarz dzany, to kod zgodny ze specykacj CLR (CLS) zawiera równie» metadane. W ten sposób umo»liwia si realizacj : usªug automatycznego zarz dzania zasobami, wspóªpracy fragmentów/podzespoªów oprogramowania napisanych w ró»nych j zykach programowania, zarz dzania uprawnieniami w dost pie do podzespoªu oraz uªatwia zarz dzanie cyklem»ycia obiektów (min. system od±miecaj cy garbage collector). MSIL czy IL Pocz tkowo j zyk po±redni nazywaª Microsoft Intermediate Language (MSIL), jednak po procedurze standaryzacji C# oraz CLI obowi zuj ca nazwa to CIL lub IL. V1.1 34/ 47

Kompilacja i wykonywanie programów IL Kompilacja i wykonywanie programów IL Diagram kompilacji i wykonania: Source Code Ogólne podej±cie do kompilacji: Compiler C# Source File VB Source File other.net Source File EXE/DLL Kompilacja C# Compiler VB.NET Compiler other.net Compiler IL and Metadata Assembly - CIL - Type Info Assembly - CIL - Type Info Assembly - CIL - Type Info Class Libraries IL and Metadata Class Loader JIT Compiler Common Language Runtime (CLR) Run time JIT Compiler [optional verification] Trusted pre- JITed code. Native Code Native Code Native Code Operating System Managed Native Code Execution Class to an uncompiled method/class Security Checks Runtime Engine V1.1 35/ 47

Kompilacja i wykonywanie programów IL Podziaª instrukcji IL Instrukcje kodu bajtowego CIL mo»na podzieli na nast puj ce grupy: 1 Wczytaj i Zapisz Load and store 2 Arytmetyczne Arithmetic 3 Konwersji typów Type conversion 4 Tworzenia i manipulacji obiektami Object creation and manipulation 5 Instrukcje zarz dzania stosem Operand stack management (push / pop) 6 Instrukcje steruj ce Control transfer (branching) 7 Wywoªania metody i powrotu Method invocation and return 8 Zgªaszania sytuacji wyj tkowej Throwing exceptions 9 Realizuj ce wspóªbie»no± Monitor-based concurrency V1.1 36/ 47

Przykªady programów Przykªad pusty program Kod w IL, nie wykonuje»adnych istotnych czynno±ci:.assembly hello1 { }.class hello1 {.method static public void main() il managed {.entrypoint ret } } Instrukcje.entrypoint a ret stanowi w pewnym sensie odpowiednik funkcji main. V1.1 37/ 47

Przykªady programów Przykªad wy±wietlenie komunikatu Kod w IL, wy±wietla komunikat tekstowy:.assembly hello2 { }.class hello2 {.method static public void main() il managed {.entrypoint ldstr "Witojcie!!!" call void [mscorlib]system.console::writeline(class System.String) ret } } Mo»na powiedzie,»e assembler IL to assembler obiektowy. V1.1 38/ 47

Przykªady programów Odczytanie liczby caªkowitej i wy±wietlenie jej na ekranie.assembly hello3 { }.method public static void Main() il managed {.entrypoint.maxstack 2.locals (int32 V_0) ldstr "Liczba calkowita int32:" call void [mscorlib]system.console::writeline(string) call string [mscorlib]system.console::readline() call int32 [mscorlib]system.int32::parse(string) stloc.0 ldstr "Wpisano liczbe {0}." ldloc.0 box [mscorlib]system.int32 call void [mscorlib]system.console::writeline(string, object) ret } Jednak bez klas te» mo»na tworzy programy w IL'u. V1.1 39/ 47

Przykªady programów Porównanie dwóch liczb caªkowitych.assembly big_and_small_nums { }.method public static void Main() il managed {.entrypoint.maxstack 2.locals init (int32 V_0, int32 V_1) IL_0000: ldstr "Podaj pierwsza liczbe" IL_0005: call void [mscorlib]system.console::writeline(string) IL_000a: call string [mscorlib]system.console::readline() IL_000f: call int32 [mscorlib]system.int32::parse(string) IL_0014: stloc.0 IL_0015: ldstr "I jeszcze druga" IL_001a: call void [mscorlib]system.console::writeline(string) IL_001f: call string [mscorlib]system.console::readline() IL_0024: call int32 [mscorlib]system.int32::parse(string) IL_0029: stloc.1 IL_002a: ldloc.0 IL_002b: ldloc.1 IL_002c: bne.un.s IL_003a IL_002e: ldstr "Obie wielkosci sa rowne" IL_0033: call void [mscorlib]system.console::writeline(string) IL_0038: br.s IL_0054 IL_003a: ldloc.0 IL_003b: ldloc.1 IL_003c: bge.s IL_004a IL_003e: ldstr "Druga liczba jest wieksza niz pierwsza" IL_0043: call void [mscorlib]system.console::writeline(string) IL_0048: br.s IL_0054 IL_004a: ldstr "Druga liczba jest mniejsza niz pierwsza" IL_004f: call void [mscorlib]system.console::writeline(string) IL_0054: ldstr "Nacisnij Enter aby zakonczyc program" call void [mscorlib]system.console::writeline(string) call string [mscorlib]system.console::readline() IL_0059: pop IL_005a: ret } V1.1 40/ 47

Przykªady programów Porównanie dwóch liczb caªkowitych using System; namespace Test1a { class Program { public static void Main(string[] args) { Console.WriteLine("Podaj pierwsza liczbe"); int x = Int32.Parse( Console.ReadLine() ); Console.WriteLine("I jeszcze druga"); int y = Int32.Parse( Console.ReadLine() ); } } } if ( x == y ) { Console.WriteLine("Obie wielkosci sa rowne"); } else { if ( x < y ) { Console.WriteLine("Druga liczba jest wieksza niz pierwsza"); } else { Console.WriteLine("Druga liczba jest mniejsza niz pierwsza"); } } Console.WriteLine("Nacisnij Enter aby zakonczyc program"); Console.ReadLine(); V1.1 41/ 47

Przykªady programów Denicja metod.assembly extern mscorlib {}.assembly Methods {.ver 1:0:1:0 }.module Methods.exe.method static void main() cil managed {.maxstack 2.entrypoint } ldc.i4 15 ldc.i4 27 call int32 SumCalculate(int32, int32) call void WriteNum(int32) ret.method public static int32 SumCalculate (int32, int32 ) cil managed {.maxstack 2 ldarg.0 ldarg.1 add ret }.method public static void WriteNum(int32) cil managed {.maxstack 2 ldstr "Wartosc argumentu: " call void [mscorlib]system.console::write(string) ldarg.0 call void [mscorlib]system.console::write(int32) } ret V1.1 42/ 47

Przykªady programów Od C# przez IL do assemblera Intel x86/x64 IL source Source code in C# Vector2D v; v = new Vector(); v.x = 10; v.y = 20; Source code in Intel x86_32 assembly call ED00AAD1h mov ecx, eax call dword ptr ds:[00af0012h] mov dword ptr [ecx+4], 000Ah mov dword ptr [ecx+8], 0014h.locals init ([0] class Vector2D v) newobj instance void Vector2D::.ctor() stloc.0 ldloc.0 ldc.i4 0x0A stfld int32 Vector2D::x ldloc.0 ldc.i4 0x14 stfld int32 Vector2D::y V1.1 43/ 47

Tabela instrukcji wybór Tabela instrukcji wybór Opcode Instrukcja Opis 0x58 add Add two values, returning a new value 0xD6 add.ovf Add signed integer values with overow check 0xD7 add.ovf.un Add unsigned integer values with overow check 0x3E ble <int32 (target)> Branch to target if less than or equal to 0x8C box <typetok> Convert a boxable value to its boxed form 0x38 br <int32 (target)> skok do etykiety target 0x2B br.s <int8 (target)> j.w. krótka forma 0x01 break Inform a debugger that a breakpoint has been reached 0x28 call <method> Call method described by method 0xFE 0x02 cgt Push 1 (of type int32) if value1 > value2, else push 0 0xC3 cknite Throw ArithmeticException if value is not a nite number 0x73 newobj <ctor> Allocate an uninitialized object or value type and call ctor 0x04 ldarg.2 Load argument 2 onto the stack 0x11 ldloc.s <uint8 (indx)> Load local variable of index indx onto stack, short form 0xFE 0x0D ldloca <uint16 (indx)> Load address of local variable with index indx 0x62 shl Shift an integer left (shifting in zeros), return an integer 0x63 shr Shift an integer right (shift in sign), return an integer 0x7A throw Zgªoszenie wyj tku 0x79 unbox <valuetype> Extract a value-type from obj, its boxed representation 0xFE 0x13 volatile. [prex] Subsequent pointer reference is volatile 0x61 xor Bitwise XOR of integer values, returns an integer V1.1 44/ 47

Tabela instrukcji wybór J zyk po±redni podsumowanie Czy warto poznawa assembler IL? Tak, cho naturalnie tworzenie du»ych programów raczej mija si z celem, jednak poznanie zagadnie«zwi zanych z IL - asm na pewno przyczyni si do pogª bienia wiedzy o wewn trznych mechanizmach CLR oraz CLI. Co jest szczególne wa»ne, je±li planuje si tworzenie wªasnego kompilatora do platformy.net. V1.1 45/ 47

W nast pnym tygodniu mi dzy innymi Wykªad Programowanie w C# ±rodowisko Visual Studio 2010, MonoDevelop, syntaktyka C#, wyj tki, wspóªpraca z DLL, 1 przegl d narz dzi dla programistów w platformie.net, min. ildasm, gacutil, 2 podstawowe informacje o C# 3 poj cie klasy, 4 podstawowe informacje wej±cia/wyj±cia 5 tablice, ci gi znaków, wyra»enia regularne, 6 wspóªpraca z kodem niezarz dzanym, V1.1 46/ 47

Proponowane tematy prac pisemnych: 1 analiza i porównanie bibliotek standardowych dla j zyka Java oraz platformy.net, 2 ró»nice pomi dzy IL dla platformy.net a j zykiem po±rednim dla maszyny wirtualnej JAVA, 3 opis technicznej struktury oraz roli podzespoªów. Dzi kuje za uwag!!! V1.1 47/ 47