Chomik - pomysł na reużywalność kodu

Chomik - pomysł na reużywalność kodu
Paweł Biernacki
  • Rejestracja:ponad 5 lat
  • Ostatnio:23 dni
  • Postów:176
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 ... ;)))

RodionGork
  • Rejestracja:4 miesiące
  • Ostatnio:3 miesiące
  • Postów:47
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:

Kopiuj
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ć?


edytowany 5x, ostatnio: RodionGork
Paweł Biernacki
  • Rejestracja:ponad 5 lat
  • Ostatnio:23 dni
  • Postów:176
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:

Kopiuj
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:

Kopiuj
./configure --disable-sdl-chomik
Paweł Biernacki
  • Rejestracja:ponad 5 lat
  • Ostatnio:23 dni
  • Postów:176
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ę:

Kopiuj
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:

Kopiuj
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.

GO
  • Rejestracja:11 miesięcy
  • Ostatnio:4 miesiące
  • Postów:358
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.

Paweł Biernacki
  • Rejestracja:ponad 5 lat
  • Ostatnio:23 dni
  • Postów:176
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...

GO
  • Rejestracja:11 miesięcy
  • Ostatnio:4 miesiące
  • Postów:358
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.

Paweł Biernacki
Za późno. Już zacząłem pisać kompilator (LLVM). Teraz muszę przerwać, bo jutro do pracy... ;)
RodionGork
  • Rejestracja:4 miesiące
  • Ostatnio:3 miesiące
  • Postów:47
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

Kopiuj
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ę


edytowany 2x, ostatnio: RodionGork
Paweł Biernacki
Dziwne. Ten ltmain.sh pochodzi z pakietu libtool, pewnie musisz go zainstalować. Możesz sprawdzić, czy jest --enable-sdl-chomik w Twoim configure.ac? Jeśli jest to aclocal, autoconf, automake...
Paweł Biernacki
  • Rejestracja:ponad 5 lat
  • Ostatnio:23 dni
  • Postów:176
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ć:

Kopiuj
./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.

edytowany 1x, ostatnio: Paweł Biernacki
AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 6 godzin
  • Postów:973
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


Zdalna praca dla Senior Python Developerów --> PW
Manna5
Zdecydowana większość języków programowania jest darmowa, więc nie wiem jak dobry musiałby być ten język żeby ktoś płacił za jego używanie. Tak to po prostu ktoś wybierze inny język do projektu.
LukeJL
Matlab jest płatny, ale tego się używa na uczelniach czy innych zamkniętych organizacjach, które lubią płacić.
LukeJL
Ale jak to ma iść do normalnych ludzi to większy sens miałoby darmowy i open source kompilator, ale płatne dodatko. Albo płatne IDE. Albo hosting aplikacji zrobionych w tym języku. Albo zrobić język i zarabiać na kursach i książkach.
Paweł Biernacki
Jak skończę kompilator to będzie oczywiście za darmo, nawet do zastosowań komercyjnych. A interpreter... no może sknera jestem, centuś itd. Ale daję go za darmo do zastosowań komercyjnych tylko pojedynczym osobom.
Manna5
Jeżeli język rzeczywiście stanie się popularny, to mogą powstać do niego darmowe interpretery lub kompilatory pisane przez inne osoby, ale zgodne z tym samym językiem, i wtedy nie zarobisz zbyt wiele ne interpreterze.
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)