Design assumptions for the programming language - sphere
- Object programming language
- Inspired by C, C#, Java, Rust
- Flexible syntax depending on the context:
- Strong types by default, but in some context they can be dynamically
- GC can by disabled in some context and manual memory management can by used.
- Depend on JIT/VM.
- Source/binary are in AST
- Handling simple reflections
- Generic types
- CVC - Code View Controller
- Multiple inheritance allowed
- Type is:
- unique name
- size of type
- list of properties
- list of method
- generic parameters list
Założenia projektowe do języka programowania sphere
Założenia ogólne:
- Obiektowy język programowania
- Statycznie typowany z możliwością wykonywania dynamicznego kodu
- Kod przechowywany jest jako drzewo reprezentacji kodu (AST/syntax tree). Kod przechowywany jest w bazie danych a nie w plikach.
- możliwość uruchomienia na różnych platformach (x86, ARM, Atmel)
- model MVC w IDE – w zależności co robimy możemy w różny sposób wyświetlać kod. Sam kod zawsze jest zapisywany w postacie drzewa reprezentującego kod, a podczas edycji przetwarzany jest do pliku w odpowiednim formacie.
- Główna składnia C# z domieszką Assembler, Java, Python, C++. Drzewo reprezentujące kod rozszerzeniem drzewa C#, tak żeby móc zapisywać kod w Java, C++ i Pythonie. Na razie w bardzo ograniczonej wersji.
- w zależności od potrzeb, może być interpretowany lub kompilowany lub mieszany (jedna funkcja kompilowana inna interpretowana).
- możliwość mieszania różnych kodów w ramach jednego obiektu.
- na początek, prędkość nie jest najważniejsza. Ważniejsze jest: szybkość pisania i łatwość czytania kodu oraz obsługa różnych platform.
Założenia projektowe:
- Wszystkie obiekty dziedziczą z głównej klasy Object
- Wszystkie obiekty są serializowane i obsługa serializacji jest obsługiwana w klasie Object
- Serializowane są też funkcje – serializowana funkcja, to jej drzewo reprezentacji (AST) która może być interpretowana lub kompilowana.
- Kilka poziomów programowania i dostępu do sprzętu. a) wysoko poziomowy – jest c# b) wskaźniki – jak C++ c) assembler
- Dostęp do zasobów komputera i systemu przez instancję kontekstu wykonania, który jest obiektem zawierającym interfejsy do systemu plików, sieci, gui, do zarządzania pamięcią i innych. Celem takiego podejścia jest możliwość przełączania się między w trakcie wykonania między różnymi implementacjiamii (np. system plików przez Internet)
Główne obiekty i klasy:
- Object – zawiera wszystko to co c# i mechanizmy do serializacji (wszystko serailizujemy)
- KontekstWykonania - zawiera wszystkie potrzebna obiekty
- kontekst systemowy - system plików, sieć,Gui..
- kontekst fizyczny - pamięć, procesy, wątki...
- dane wykonującego /uprawnienia itp