CDF - programowanie obiektowe w C

CDF - programowanie obiektowe w C
SJ
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:3
2

Witam wszystkich forumowiczów,

jakiś czas temu zainteresowałem się problematyką programowania obietowego w języku C. Co prawda język sam w sobie tego nie ułatwia, jednak nikt nie powiedział, że się nie da ;)

Troszkę pokombinowałem i moim zdaniem udało się zrobić jakiś zarys frameworku. Co prawda nie jest to jeszcze gotowa wersja, jednak może kogoś zainteresuje. Projekt dostępny jest pod adresem https://gitlab.com/samirj/cdf . Kod można pobrać gitem
git clone https://gitlab.com/samirj/cdf.git

Jest też bardzo krótki opis na wiki projektu: https://gitlab.com/samirj/cdf/wikis/home

CDF działa jedynie na Linuksie, w zasadzie nie wymaga żadnych specjalnych zależności, jedynie gcc oraz pthreads.

Jakie możliwości daje CDF?

  • definiowanie własnych "klas"
  • konstruktory oraz destruktory
  • dzedziczenie i polimorfizm
  • zarządzanie pamięcią poprzez zliczanie referencji
  • aktualnie dostępne są biblioteki: standardowa (klasy String, List, Array, Map, ...), http (klient + serwer), json (parsowanie jsona na obiekty oraz zamiana obiektu na jsona)
  • jest też zalążek py2ooc - aplikacja, pozwalająca na zamianę kodu pseudo-pythonowego na kod C (wymaga w miarę nowego Pythona, testowana na 3.4)

Zachęcam serdecznie do zapoznania się z biblioteką, zwłaszcza z przykładami i testami, które pokazują jak mniej więcej można korzystać z tej biblioteki. Oczywiście chętnie odpowiem na wszelkie pytania i uwagi.

Pozdrawiam

Zobacz pozostały 1 komentarz
SJ
Dzięki, cieszę się, że się podoba. Co do podesłanego projektu - nie widziałem tego wcześniej, rzuciłem teraz okiem i przyznam, że wygląda interesująco. Myślę, że któregoś dnia usiądę do tego na spokojnie i spróbuję dokładniej przeanalizować.
SJ
Przeczytałem manual i widzę kilka podobieństw do mojego projektu (np. konstruktory i destruktory). Na moje oko, mój projekt jest chyba nieco bardziej przyjazny dla programisty, choć wiadomo, że każdy chwali swoje ;) Jedna rzecz, która mi się spodobała i chciałbym spróbować zastosować, to rozwiązanie problemu z alokacją pamięci przy tworzeniu obiektów - teraz tworzę obiekt klasy podstawowej, a potem robię realloc, żeby go rozszerzyć do właściwego rozmiaru. W projekcie z linku rozmiar jest przechowywany 'wewnątrz' obiektu i można od razu przydzielić odpowienią ilość pamięci
MO
Ano właśnie takie "szamotanie się" realloc może skończyć się źle dla fragmentacji pamięci. Bliżej mi do pomysłu alokowania przestrzeni na etapie kreacji. Obiekt Jest albo go Nie ma. Nie będzie "niedoalokowanym" duchem :-) Możesz mieć deterministyczne zachowanie co do zapotrzebowania na pamięć. Łatwo zbudować prosty i wydajny alokator dla wielu obiektów oraz .. w przyszłości przenieść projekt na platformy wbudowane (różne rodzaje pamięci). Wiem że w tym (już leciwym) projekcie jest kilka technik trącących myszką, niemniej jednak parę zagadnień rozwiązanych jest ok :-)
MO
W jakim kierunku będziesz rozwijał CDF'a?
SJ
Z tą alokacją pamięci nie jest niestety tak prosto - chciałem postawić na w miarę przyjazne używanie, więc wszystko miało się dziać 'samo', bez wiedzy programisty. Niestety nie wszystko da się zrobić i trzeba czasem pójść na kompromis. Na razie chyba skłaniałbym się do rozwiązania podobnego do tego w Pythonie - czyli konstruktor będzie dostawał jawnie wskaźnik 'this' (aka. 'self'). Na razie innego pomysłu nie mam. Co do dalszego rozwoju - trzeba by dokończyć moduł jsona, myślałem o klasach do I/O (pliki, konsola, strumienie). Zobaczymy na co czas pozwoli
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)