Chomik - pomysł na reużywalność kodu

5

Cześć,

Mam taki pomysł jak osiągnąć prawdziwą reużywalność kodu. Zrobiłem w SDL_Chomiku prostą bibliotekę graficzną:
https://www.chomik.tech/sdl_chomik_widgets.html

i taki mały projekcik demonstrujący jej możliwości:
https://www.chomik.tech/fantasy.html

W tym fantasy-0.0.1.zip już jest moja biblioteka. Wymaga chomika 0.2.1.

Jeśli ktoś przeoczył to epokowe wydarzenie, jakim było stworzenie Chomika to zapraszam na stronę:
https://www.chomik.tech/index.html

Teraz o tym moim pomyśle. Jak wiecie reużywalność kodu (code reusability) jest rzeczą pożądaną, stąd mamy biblioteki, dziedziczenie, namespace'y i inne takie rzeczy. Przyszło mi do głowy, że w Chomiku można to osiągnąć prawie bez zmian, wykorzystując tylko naturalne dla niego wieloczłonowe nazwy zmiennych. Prawdziwą reużywalność kodu. Zerknijcie może na kod tej graficznej biblioteki - plik sdl_chomik_widgets.sdl_chomik. Każde wywołanie/przypisanie zmiennej należącej do tej biblioteki jest poprzedzone "prefixem", w naszym wypadku wartością zmiennej 'sdl chomik widgets prefix'. Sęk w tym, że zmienna ta nie jest nigdzie zdefiniowana, i jeśli zobaczycie kod "klienta" tej biblioteki, czyli plik "fantasy.sdl_chomik", to znajdziecie w nim NAJPIERW definicję zmiennej "sdl chomik widgets prefix", a potem dopiero includa biblioteki.

Na tym właśnie mój nowy genialny pomysł polega. Podobnie jak plik wykonywalny jest umieszczony gdzieś w systemie plików, tak biblioteka jest umieszczona w namespace zdefiniowanym przez jej klienta. Może to być liczba (1) jak w naszym wypadku, a może być coś innego, nawet string. Zatem klient mówi bibliotece gdzie ona ma się umieścić w jego przestrzeni nazw, a nie odwrotnie. W ten prosty sposób możemy nie tylko z punktu widzenia klienta instalować różne podobne do siebie biblioteki w jednym programie. Możemy nawet władować kilkukrotnie tą samą bibliotekę, albo różne jej wersje, byleby podawać przed każdym includem inny prefiks. Nie muszę dodawać, że taka reużywalność jest na razie możliwa tylko w Chomiku (no i SDL_Chomiku).

Prawdę mówiąc nawet w Chomiku nie będzie to działało bezproblemowo. Niestety. Problemem są enumy (nazywane u mnie "typami"), których składnia powstała zanim wpadłem na tą reużywalność kodu. Kolizja nazw jest w związku z tym nieunikniona. Ale myślę o takiej przeróbce Chomika, żeby i enumy można było prefiksować.

Oczywiście to kolejna rewolucja w informatyce, niestety obawiam się, że przejdzie bez większego echa ... ;)))

1

że przejdzie bez większego echa

Może dlatego że Chomik nie jest jeszcze zbyt popularnym? 😀

pierwszy raz o nim słyszę... wygłąda ciekawe ale troche niezwykłe (teraz spróbuję skompilowac)
może więcej wysiłków trzeba poswiecić do promocji języka zanim zagłębienia w szczegóły...

Myśle że ten SDL_Chomik jest dobra proba ależ jakaś funkcja do tworzenia html-gier mogła by być pomocnej (emcc + canvas itp)

UPD:

The SDL2 library not found. Check that it is installed on your system. If it is not, download and install it

przepraszem, ale dlaczego język "without conditionals and cycles" powinen zależec od SDL 🙁 chyba jest jakaś opcja żeby go minać?

0
RodionGork napisał(a):

że przejdzie bez większego echa

Może dlatego że Chomik nie jest jeszcze zbyt popularnym? 😀

pierwszy raz o nim słyszę... wygłąda ciekawe ale troche niezwykłe (teraz spróbuję skompilowac)
może więcej wysiłków trzeba poswiecić do promocji języka zanim zagłębienia w szczegóły...

Dzięki. Jestem słaby z marketingu, ale spróbuję.

Programisto! Nie marnuj cennych godzin swego biologicznego czasu na pisanie w archaicznych językach, wymyślonych kilkadziesiąt lat temu!
Wybór jest w Twoich rękach!
Już dziś przejdź na Cybernetic Heuristics Oriented Machine Intelligence Kernel (CHOMIK) dostępny za darmo ze strony https://www.chomik.tech

Chcesz pisać dla przyjemności? Wybierz Chomika na licencji GPL3 i podaruj ludzkości swój kod!
Chcesz pisać dla pieniędzy? Opłata licencyjna za komercyjne użycie Chomika wynosi jedyne round(math.log10(x)*100) euro, bez limitu czasowego, gdzie x jest ilością osób zaangażowanych w projekt.

Jeśli byłeś słaby z matematyki, to podpowiadamy, że logarytm z 1 wynosi zero, czyli jeśli pracujesz sam robiąc np. komercyjną grę, to użycie Chomika NIC NIE KOSZTUJE! To samo dotyczy SDL_Chomika!

Naucz się Chomika już dziś! Nie pozwól, by AI Cię wyprzedziła!

Myśle że ten SDL_Chomik jest dobra proba ależ jakaś funkcja do tworzenia html-gier mogła by być pomocnej (emcc + canvas itp)

Dzięki. Mnie się też podoba. Bawiłem się trochę emscripten, ale bez jakichś ciekawych rezultatów. Może jeszcze spróbuję. Myślałem o napisaniu translatora Chomika na jakiś kompilowany język. W końcu tak powstał nawet C++.

UPD:

The SDL2 library not found. Check that it is installed on your system. If it is not, download and install it

przepraszem, ale dlaczego język "without conditionals and cycles" powinen zależec od SDL 🙁 chyba jest jakaś opcja żeby go minać?

Sorry, tak mi się napisało (SDL2 i pozostałe biblioteki są potrzebne do zbudowania sdl_chomika). Ale dodałem przed chwilą do configure.ac opcję wyłączania sdl_chomika, i wtedy biblioteki SDL2 nie są sprawdzane. Pobierz najnowsze repozytorium i odpal:

./configure --disable-sdl-chomik
0

Przyszło mi do głowy, żeby porównać moją technikę reużywalności kodu z istniejącymi do tej pory technikami. I muszę powiedzieć, że przestrzenie nazw znane z XMLa, albo nawet Pythona są bardzo bliskie temu, co wymyśliłem. Sprawdzałem przed chwilą - w Pythonie można zaimportować z kodu "klienta" np. bibliotekę sys jako np. S1, a potem jako S2 - i to działa. Python jest bardzo silny. Ważne jest, żeby to klient biblioteki decydował w jakiej przestrzeni nazw dana biblioteka ląduje.

Ale oczywiście Chomik jest lepszy. W Pythonie jest to zrobione zgrabniej niż w C++, ale takie S1 czy S2 to jednak tylko identyfikator. W Chomiku prefiks dla inkludowanej biblioteki jest po prostu jakąś zmienną, nawet nie jest powiedziane jakiego jest typu. Może więc zawierać mnóstwo informacji. Może być nawet kodem! Ponieważ biblioteka mogłaby taki prefiks wykonać, otwiera to wielkie możliwości przed twórcami bibliotek. Może napiszę trochę kodu, żeby było jasne o czym mówię:

let some library prefix = value code { <print "Hello"> };
include "some_library.chomik"

<some library prefix> please do the action (X:1..10) times>;

Tymczasem w samej bibliotece możemy mieć coś, co nie tylko używa prefiksu do identyfikacji, ale i bezpośrednio go wykonuje:

let <some library prefx> please do the action (X:integer) times=value code
{
<some library prefix>;
}

Niepotrzebne są callbacki i inne takie rzeczy. Kod w Chomiku jest zwykłym typem danych.

2

Każdy się szanujący język programowania napisał swój kompilator we własnym języku czyli chicken and eggs problem, czyli potrzebujesz kompilatora w tym języku, żeby zbudować kompilator.

Lecz pierwszy kompilator może być w C++ tak jak masz żeby zbudować następny, który będzie już napisany w Chomiku całkowicie i wtedy twój język będzie pełnoprawnym urodzonym z samego siebie.

0
.GodOfCode. napisał(a):

Każdy się szanujący język programowania napisał swój kompilator we własnym języku czyli chicken and eggs problem, czyli potrzebujesz kompilatora w tym języku, żeby zbudować kompilator.

Lecz pierwszy kompilator może być w C++ tak jak masz żeby zbudować następny, który będzie już napisany w Chomiku całkowicie i wtedy twój język będzie pełnoprawnym urodzonym z samego siebie.

O, wysoko mi poprzeczkę Waść założył. Myślałem o kompilatorze, bo na razie mam tylko interpreter. Patrzyłem na LLVM, bo ktoś mi to na forum podpowiedział. Ale prościej mi będzie zrobić, przynajmniej na początek, translator np. do C++. Potem pomyślę. Kompilator napisany całkowicie w Chomiku? Być może Chomik jest na to jeszcze za słaby...

1
Paweł Biernacki napisał(a):

O, wysoko mi poprzeczkę Waść założył. Myślałem o kompilatorze, bo na razie mam tylko interpreter. Patrzyłem na LLVM, bo ktoś mi to na forum podpowiedział. Ale prościej mi będzie zrobić, przynajmniej na początek, translator np. do C++. Potem pomyślę. Kompilator napisany całkowicie w Chomiku? Być może Chomik jest na to jeszcze za słaby...

Kompilator sprawi, że wszystko będzie w danym języku co jest potrzebne, wiem ,ale nie musisz tego robić, tak żartowałem bo to ci zajmie tygodnie/miesiące pracy za którą nikt ci nie zapłaci, nie wszystko pójdzie tak łatwo przepisać.

Coś mi wtedy odwaliło, że tak napisałem, python jest w C napisany jako interpretowany i też jest dobrze nikt nie ma do tego pretensji zażutów.

1

Myślałem o kompilatorze, bo na razie mam tylko interpreter.

zostaw tak :)

Gdy stanie się popularnym, inny ludzie dodadzą JIT-compiler (jak to z LuaJIT oraz PyPy)

Chociaż dodać pliki skompilowany to byłoby dobrze

./configure --disable-sdl-chomik

dziękuję, ale nie działa

rodion@NB-6865:~/my/temp/chomik$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
rodion@NB-6865:~/my/temp/chomik$ ./configure --disable-sdl-chomik
configure: WARNING: unrecognized options: --disable-sdl-chomik
configure: error: cannot find required auxiliary files: ltmain.sh
rodion@NB-6865:~/my/temp/chomik$ 

dodałem pusty plik ltmain.sh ale nie zmogłem usunąć zależności od SDL z configure

probówałem też skompilować "ręcznie" src ale wygląda na źłą drogę

0

@GodOfCode - wcale nie żartowałem z tym kompilatorem. Naprawdę zacząłem go robić. Żeby być bardziej zmotywowanym wyrzuciłem na link stronę z prototypem. Oto ona: https://www.chomik.tech/chomik_compiler.html.

Kompilator Chomika nie potrafi jeszcze wiele, ale już działa. Wymaga LLVM. Po zbudowaniu należy wejść do katalogu src i odpalić:

./chomik_compiler t.chomik

Kompilator na razie jeszcze ignoruje cały kod w Chomiku i generuje plik a.o w katalogu tests. Następnie należy przejść do tests i odpalić make. Wówczas zostanie skompilowany plik mytest.cc (przez zwykły kompilator C++) i zlinkowany z plikiem a.o. Potem można odpalić ./mytest.

Wygenerowany kod skacze do funkcji napisanej w C (naprawdę w C++) o nazwie chomik_create_machine. Zwracany przez nią pointer jest zapamiętywany i użyty zaraz potem jako argument funkcji chomik_destroy_machine. Część kodu będzie więc napisana w C/C++ i zawarta np. w bibliotece (libchomikredistributable?). Teraz obie te funkcje są dla wygody w mytest.cc.

Oczywiście do napisania kompletnego kompilatora Chomika jeszcze daleko. A do kompilatora Chomika napisanego w Chomiku jeszcze dalej. Może nie będę się porywał na ten ostatni, bo go nie potrzebuję. Ale kompilator Chomika chciałbym mieć.

Edit: Zapomniałem napisać - chomik_compiler wymaga zwykłego chomika, bo kompilator używa jego skanera.

0
Paweł Biernacki napisał(a):

Chcesz pisać dla pieniędzy? Opłata licencyjna za komercyjne użycie Chomika wynosi jedyne round(math.log10(x)*100) euro, bez limitu czasowego, gdzie x jest ilością osób zaangażowanych w projekt.

Słaba reklama jak musiałeś do niej użyć Pythona :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.