Komentowana treść: Portabl E r6
[#31] Re: Portabl E r6

@adam_mierzwa, post #29

Ja wracając po latach do programowania dla klasyka wróciłem do ostatniej oficjalnej wersji E wydanej przez Woutera - wszystko co było wydane później z różnych powodów mi nie pasowało - były to wersję na NG, generowały kod dla 68020+, brakowało lepszej dokumentacji itd.

Dopiero E-VO mnie przekonało do pojscia krok dalej, bo ten projekt nie chce robić z E nowoczesnego języka, którym E oczywiście nie jest i nigdy nie będzie, tylko nie robiąc rewolucji pomału idzie małymi kroczkami do przodu, i co najważniejsze przynosi nowe wersje modułów systemowych do OS3.2.

No i pamiętajmy o kontekście. E to język przestarzały, dla zabytkowego systemu sprzed 30 lat, bez żadnych w zasadzie perspektyw i bez przyzwoitej bazy userow. Tak samo jak użytkowo przestarzałe są dzisiaj amigowe Deluxe Paint, Lightwave czy Scala. AmigaE to nisza w niszy, z dzisiejszego punktu widzenia niewiele lepsze niz Amos (a może nawet nie lepszy). Do użytku hobbystycznego, i tak go trzeba traktować :).
3
[#32] Re: Portabl E r6

@vojo, post #31

A tam przestarzały
No to zgadnijmy w jakich językach powstają nowe rzeczy pod AOS3 a i większości AOS4/MOS...
Nie wiem jak Wy ale ja stawiam na przynajmniej 60 procent "nowoczesnego C" I tym kontekscie E już aż takie "zapyziałe" nagle nie jest. No może nowsze wersje C++ są "z deczka bardziej dzisiejsze"
Także ja bym tam z faktu szczęśliwego użytkowania E wcale się aż tak bardzo (oczywiście w naszym amigowym kontekście) nie martwił
[#33] Re: Portabl E r6

@pisklak, post #32

Ściagasz bibliotekę, kompilujesz i chcesz wykorzystac w projekcie. cała dokumentacja z przykładami jest C. Musisz znać C i przerobić te przykłady na E. Tracisz czas, szczególnie, że i tak musisz znać C.
[#34] [post oznaczony jako OT] wyświetl
[#35] [post oznaczony jako OT] wyświetl
[#36] [post oznaczony jako OT] wyświetl
[#37] Re: Portabl E r6

@Skotos, post #30

Czyli jest trochę fragmentacja tego E. Zajrzałem jeszcze tu, bo nie kojarzyłem co to YAEC, za to tam nie ma E-VO. Czyli jest wybór. Zastanawiam się nad dwoma rzeczami - dlaczego ktoś może wybierać E (oprócz przyzwyczajenia) i jak jest ze stabilnością i wygodą tych narzędzi (względem siebie, a nie tego co pod np. Windows). .
[#38] Re: Portabl E r6

@vojo, post #31

Czyli do AmigaE E-VO i Portabl E a o reszcie można/trzeba zapomnieć? A co ty byś polecił do E?
I jeszcze kwestia "łatwości", bo w dawnych czasach E było przedstawianie jako "prostsze C", ale oprócz powielanej formułki o przejrzystości kodu nie natknąłem się na konkrety Jak z tym jest?
[#39] Re: Portabl E r6

@adam_mierzwa, post #37

Język lesstype - wszystko to 32 bitowy int, ewentualnie znak (8bit) [upraszczam trochę]. Mało typów danych, łatwo definiować, prosto (przynajmniej na początku lub gdy się przyjmie tą konwencję) pilnować zmiennych ale to wcale nie znaczy że czegoś brakuje.
Od C odróżnia go większe "spasowanie" z AmigaOS. Nie trzeba otwierać bibliotek standardowych, ma wbudowane trochę funkcji, itp. co przekłada się na szybszy start w pisaniu. Kod wynikowy jest szybszy (i mniejszy) od C, testy tegoż są trochę stare, dla E v2.1b.
Jest szybki, i to widać np. proszę spojrzeć na test sortowań link.
Kod jest bardzo zrozumiały, co pomaga w nauce.
Mimo błędów fajnie piszę się z OOP (Object Oriented Programming).

Z narzędzi to FindModule i dokumentacje Nie napisałem dużych programów, więc nawet kolorowanie składni, której używałem w GEDzie czy w Scribble nie było mi strasznie potrzebne. Jest GUI Builder generujący kod dla E oparty na BGUI, ale nigdy go nie używałem.
1
[#40] Re: Portabl E r6

@Skotos, post #39

Oprócz bardzo przydatnego FindModule (i ShowModule jakby ktoś potrzebował) jest jeszcze edbg (debugger), konwertery includów z C .No i moduły kolorowania składni do różnych amigowych edytorów też by się znalazły.
Faktycznie jezyk jest dość podobny do C. Ale uważam że do nauki "na swieżaka" to jest jednak prostszy niż C (mnie po prostu denerwuje to maniakalne wręcz pilnowanie typów w C, no ale zapewne dlatego że ja się uczyłem na E a nie C). No i fajnie się w nim systemowe rzeczy pisze bo faktycznie ładnie pasuje.
[#41] Re: Portabl E r6

@pisklak, post #40

W E kilka rzeczy jest fajnych, oprócz tych wymienionych powyżej dodałbym jeszcze:
- banalną instalację (w zasadzie wystarczy assign do Emodules: i dodanie do patha ścieżki do katalogu e/bin),
- równie banalną kompilację, bez żadnych make'ów, linkowania i innych 'udogodnień' , najczęściej wystarczy polecenie:
ec moj_prog.e
i mamy gotowy do użycia program
- obsługę wyjątków, która upraszcza cały kod
- wysoką zgodność z systemem i hardwarem - ja np nie spotkałem się z błędem typu 'na gołej A1200 działa a na 060 się wiesza'
- możliwość mieszania wysokopoziomowego kodu E z asemblerem - gdzieś się nawet spotkałem z definicja E jako asemblera z bogata listą makr ;)
[#42] Re: Portabl E r6

@vojo, post #41

Możesz napisać z jaką szybkością i na jakim sprężcie kompiluje się Twój GoADF?
[#43] Re: Portabl E r6

@vojo, post #41

Tak - to właśnie początkowo łatwość instalacji i kompilacji sprawiła że się zainteresowałem tym językiem l. Ja tak właśnie kompiluję moje programy - całe 2 sekundy pracy w okienku CLI i po robocie. Kompilator E jest naprawdę szybki.
Z innych rzeczy to mi się na przykład podoba moduł EasyGUI, z pomocą którego można dość łatwo tworzyć właśnie GUI. Może nie jest to jakościowo coś w stylu MUI, ale do wielu rzeczy naprawdę wystarczy. A tworzenie i obsługa poszczególnych gadżetów jest dość prosta (w porownaniu z gadtools/MUI/Reaction itp.).
Z rzeczy które mi się za to nie podobają to koszmarna obsługa liczb zmiennoprzecinkowych. Kto nie próbował temu się po nocach nie śnią '!'
[#44] Re: Portabl E r6

@Wankowicz, post #42

Możesz napisać z jaką szybkością i na jakim sprężcie kompiluje się Twój GoADF?


ACA1233/55 kompiluje kilka sekund, na pewno poniżej 10, ok 15tys linii.

edit: przy czym zaczytuje ok 40 modułów.

Ostatnia aktualizacja: 17.11.2022 22:23:00 przez vojo
[#45] Re: Portabl E r6

@pisklak, post #43

Tak - to właśnie początkowo łatwość instalacji i kompilacji sprawiła że się zainteresowałem tym językiem


Kompilator AmigaE działał na 1MB ram. SAS/C chciał więcej.

Jak miałem A600 z 1MB ram to robiło różnicę. A miałem dysk twardy więc żonglowanie nośnikami odpadało.
[#46] Re: Portabl E r6

@hrw, post #45

To prawda, że Amiga E ma małe wymagania i jest szybki nawet na Amidze 500.

Jeśli ktoś chce kompilator języka C bez dużych wymagań, jest DICE.
[#47] Re: Portabl E r6

@pisklak, post #40

mnie po prostu denerwuje to maniakalne wręcz pilnowanie typów w C


Po pierwsze: trzymanie się typów danych pozwala uniknąć wielu głupich, i czasem bardzo ciężkich do wychwycenia błędów.
Po drugie: w dzisiejszych czasach, stwierdzenie że C "maniakalnie pilnuje typów" brzmi groteskowo. W przypadku takich języków jak chociażby wspomniany tutaj wcześniej Swift, czy Kotlin, typowanie w C to dziecinna zabawa.
3
[#48] Re: Portabl E r6

@pisklak, post #43

@pisklak
Z innych rzeczy to mi się na przykład podoba moduł EasyGUI, z pomocą którego można dość łatwo tworzyć właśnie GUI. Może nie jest to jakościowo coś w stylu MUI, ale do wielu rzeczy naprawdę wystarczy


A ja w moim programiku Hexaco napisanym w E wykorzystałem właśnie MUI. Nie jest jakieś trudne nawet dla niedzielnego programisty, jak ja. W ACS były przykłady pisane przez Krashana gdy jeszcze był fanem Amiga E 🙂

Ostatnia aktualizacja: 24.11.2022 18:29:57 przez R-Tea

Ostatnia aktualizacja: 24.11.2022 18:30:15 przez R-Tea
[#49] Re: Portabl E r6

@R-Tea, post #48

A nie w MA były przykłady Kaczusia w E?
[#50] Re: Portabl E r6

@michal_zukowski, post #49

Dobra..... Ludzie czasami narzekają że w AmigaE różne dziwne rzeczy się dzieją. No to ja właśnie w coś takiego "wdepłem". A rozwiązaniem okazało się wymienienie wbudowanego allokatora NewM na systemowe AllocMem. NewM radziło sobie dobrze jak miało dużo pamięci, a jak nie to właśnie dziwne rzeczy się działy.
Tylko trzeba pamiętać o FreeMem później.
1
[#51] Re: Portabl E r6

@pisklak, post #50

FreeVec i AllocVec jakby co, wtedy nie musisz przechowywać ile zaalokowałeś
[#52] Re: Portabl E r6

@michal_zukowski, post #51

FOR l:= 0 TO bitplany-1 
mybitmap.planes[l]:=NewM(mybitmap.bytesperrow*picheight,MEMF_CHIP)
    PrintF(' Adres bitplanu [\d]= $\h\n',l,mybitmap.planes[l])
    IF mybitmap.planes[l]=0
        PrintF(' Nie mozna utworzyc bitmapy !\n')
        JUMP koniec
    ENDIF
ENDFOR


Proszę sobie wypróbować poniższy kod przy różnej zajętości chipramu. Oczywiście wcześniej bitmapa była zainincjowana przez InitBitMap.
Jak jest mało chipramu to blokowało się po prostu na drukowaniu adresu któregoś bitplanu i nie skakało do procedury wyjścia.
Zmiana NewM na AllocMem pomogła.
[#53] Re: Portabl E r6

@michal_zukowski, post #49

@rzookol
A nie w MA były przykłady Kaczusia w E?


Tak. Ale w ACS też były, i te były krashanowe. Korzystałem z obydwu kursów, ale najwięcej z tych z ACS.
[#54] Re: Portabl E r6

@pisklak, post #52

a czemu nie AllocBitMap?
1
[#55] Re: Portabl E r6

@michal_zukowski, post #54

AllocBitMap zjada domyślnie chipram, a gdy jako friend bitmap jest podana bitmapa RTG takową tworzy (czyli chunky, w tablicy planes tylko jedno pole jest wypełniane wtedy, a na AROSie to jeszcze inaczej jest). A ja chciałem żeby bitmapa była zawsze "planarna" i w pamięci typu public (czyli na systemach z RTG w praktyce i tak fast będzie). Dlatego robię bitmapę ręcznie.To działa całkiem dobrze i z RTG można sobie otworzyć kilka ponad 1MB IFFów w oddzielnych ekranach.
Zaczynałem sobie pisać ot tak po prostu żeby się zapoznać z biblioteką iff.library, a skończyło się na napisaniu prawie używalnego viewera. Inna sprawa że coś dekoder obrazków ILBM skopałem i niektóre są błędnie dekodowane.


Ostatnia aktualizacja: 29.11.2022 07:42:55 przez pisklak
[#56] Re: Portabl E r6

@pisklak, post #55

Zaczynałem sobie pisać ot tak po prostu żeby się zapoznać z biblioteką iff.library, a skończyło się na napisaniu prawie używalnego viewera. Inna sprawa że coś dekoder obrazków ILBM skopałem i niektóre są błędnie dekodowane.

Używasz iff.library, czy iffparse.library?

Jeżeli chodzi o dekodowanie obrazka, to powinno być według następującego algorytmu:

1. Pobierz następny bajt do zmiennej C (bajt kontrolny).
2. Jeżeli C >= 0 skopiuj następne C+1 bajtów.
3. W przeciwnym przypadku jeżeli C jest różne od -128 skopiuj następny bajt (-C)+1 razy.
4. Przejdź do kroku 1 aż wyczerpiesz bufor wejściowy.

Ja zawsze dodaję kontrolę przepełnienia bufora.

Uproszczony kod w języku C:

while (!isempty(buf))
{
    c = getcontrol();
    if (c >= 0) 
        copy(c + 1); 
    else if (c != -128)
        repeat(-c + 1);
}


Ostatnia aktualizacja: 29.11.2022 15:19:05 przez Hexmage960
[#57] Re: Portabl E r6

@Hexmage960, post #56

Używam iff.library bo dekoder chciałem napisać sam w ramach nauki. No i napisałem mniej więcej
Problemem w AmigaE jest to że odczytanie danych zpod wskaźnika do typu CHAR (czyli bajt) jest zawsze liczba bez znaku. Poradziłem sobie takim łamańcem
comenda:=Abs(data-256)

Jak zwraca >128 to klonuję x+1 bajtów w bitplanie docelowym. Jak jest <128 to kopiuję data+1 bajtów, jak jest 128 to przechodzę do nastepnego bitplanu, przesuwając się w danych o jeden bajt.
A tak poza tym ile to się człowiek nauczy po prostu pisząc. Guru mi powiedział że nawet jak się w tag DisplayID wpisze wartość z chunka CAMG to jeszcze nie znaczy że otwarta bitmapa ekranu bedzie miała tyle bitplanów co powinna - i bez taga SA_Depth dalej mnie medytacja czeka

Ostatnia aktualizacja: 29.11.2022 16:21:02 przez pisklak
[#58] Re: Portabl E r6

@pisklak, post #57

Biblioteka iffparse.library nie zawiera gotowego kodu do rozpakowania. Pozwala skanować plik IFF, ale interpretacja chunków należy do programisty.

Ciekawa kwestia z tym CHARem. Skoro kompilator nie rozpoznaje bajtów ze znakiem, to może da się rozpoznać liczbę ujemną sprawdzając ręcznie bit znaku w następujący sposób:

IF c AND $80 THEN ... -> Liczba ujemna

I w takim przypadku (gdy wartość jest również różna od $80) powtórzyć następny bajt 256 - c + 1 razy (analogicznie jak Ciebie).

Choć to zastanawiające, że E nie rozszerza znaku.

Ostatnia aktualizacja: 29.11.2022 18:12:08 przez Hexmage960
[#59] Re: Portabl E r6

@Hexmage960, post #58

Ach faktycznie pomerdałem - używam biblioteki iffparse.
Jutro zobaczę czy ten podany przez Ciebie sposób coś zmieni w moim dekoderze. Jak na razie to z może 30 testowych IFFów źle dekoduje się 1.
[#60] Re: Portabl E r6

@pisklak, post #59

Hej, szybkim i uniwersalnym sposobem na rozszerzenie znaku do LONG jest odwrócenie bitu znaku, a następnie odjęcie wartości 128 od takiej liczby.

Zadziała dla każdej liczby - dodatniej i ujemnej.

Formuła zatem jest taka: c := Eor(c, 128) - 128. Teraz masz w zmiennej c CHAR ze znakiem -128 do 127.

Możesz podpiąć to pod krótką funkcję.

I teraz możesz w języku E traktować tę liczbę jak zwyczajną liczbę ze znakiem, stosować IF c < 0 itp. Sprawdziłem, działa.

Ostatnia aktualizacja: 29.11.2022 20:07:14 przez Hexmage960
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem