Pokazywanie postów oznaczonych etykietą projekty. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą projekty. Pokaż wszystkie posty

sobota, 3 marca 2012

Lynx for Forth

Witam wszystkich!
Oto nadeszła pamiętna chwila! Lynx obudzony ze snu, po 8 godzinach pracy ożywa!
Czym był Lynx?
Lynx był kiedyś moim niespełnionym marzeniem. Od kiedy zacząłem "skrobać" swoje pierwsze programy, marzyłem o własnym języku. Dziś marzenia stają się rzeczywistością! Lynx był projektem rozwijanym zrywami, często zarzucanym, niszczonym(ostatnie kilka reinstali bez dostępu do środków zapisu...), no i ogólnie miał trudno. Niektórzy(zapewne większość nadal nie wie co to ten Lynx), a więc:
Czym jest Lynx?
Lynx to wirtualna maszyna oparta o 2 stosy: stos parametrów i stos powrotu. Tego drugiego na razie nie tykam :P. Dlaczego stos? Bo czemu nie ;) Stos to najprzyjemniejsza struktura danych jednocześnie najbliższa człowiekowi ;) Językiem pośrednim, a jednocześnie wysoko poziomowym jest Forth. Wybrałem go ze względu na łatwą implementację i stosunkową bliskość z maszyną. Forth jest zaimplementowany jakoś w 50-60% : brakuje jedynie implementacji flow-control i słów(takie jakby funkcje\podprogramy w Forth'cie). Co mi pozostało do roboty po za maszyną? Cóż, nie wiele ;) Nie potrzebny mi chyba będzie dekompilator, choć pewnie go napiszę. Przyda się za to kompilator. Próbowałem z ANTLR3, ale chyba coś poknociłem więc odstawiam to na dłuższy termin i wzamian używam nasm'owych makr(dzięki Gyn za ten trik!).
Czym będzie Lynx?
Środowiskiem uruchomieniowym z lekka podobnym do NekoVM, jednak stworzonym przez człowieka(może ludzi? ;)) dla ludzi(wystarczy porównać source mojej maszyny z Neko...). Po za domyślnym Forth'em planuję jeszcze szereg innych języków. Po jakimś tam wstępie myśle nad JIT'em i bajerami.


Source można pobrać z mojego Dropboxa.
(Polecam obejrzeć przykładowy plik z makrami).


@EDIT: Stwierdziłem, że Lynx'a na ten czas zawieszę i do życia powołam SimpleVM - prostą VMkę, którą będe opisywał krok po kroku we wpisach na blogu, yo!

sobota, 5 listopada 2011

Co mi się podoba w...Javie?

Hai all!

Piszę sobie od niedawna w Javie, praktycznie całkowicie się na nią przerzucając. I muszę przyznać jestem zadowolony. Nawet bardzo.

Po pierwsze:
W Javie mam zdefiniowane wszystko, absolutnie wszystko czego potrzebuję do programowania. Rzeczy których nie ma łatwo można samemu zaimplementować. Chwilami programowanie wygląda jak uzupełnianie formularza ;)
Po drugie:
Niby w Javie mamy mocne typowanie. A jednak. Nic nie broni by zrobić z niej język "dynamiczny". Wszystko dzięki typowi object. Zamiast robić 10 zmiennych różnych typów wystarczy jedna(choć to też marne tłumaczenie-zazwyczaj korzysta się ze stosów czy kolejek i linked list-a te już muszą mieć typ object :)). Jest to również lekarstwo na typy generyczne(jak ktoś jest uczulony) i chwilami na overrloading'i metod.
Po trzecie:
Pełna obiektowość. No może nie pełna, bo nie mamy możliwości zrobienia czegoś takiego jak w Ruby'm:
5.toStr
ale bardzo się przydaje. Np.wyrabia dobre nawyki etc.
Po czwarte:
Przenośność. Tutaj chyba nie trzeba zbyt dużo tłumaczyć.
Po piąte:
Prawie każdy obiekt posiada iterator, a to pozwala na znaczne ułatwienia.
Po szóste:
Prędkość. Wbrew powszechnej opini, Java nie jest wolnym językiem. Potrafi wykonać niektóre operacje dużo szybciej niż gcc! Po za tym nie jesteśmy zmuszeni do kompilowania kodu non-stop, a dzięki projektowi gcj możemy tworzyć natywne dla systemu binarki. btw. jeszcze ta opinia o prędkości, którą wiele osób propaguje pochodzi z czasów pierwszych edycji Javy, czyli jeszcze bez JIT'a i hot-swapping'u.

Hm... to już chyba koniec iteracji...tfu, wyliczania :)
PS: Rozpoczyna się seria bardziej sensownych wpisów :) Niedługo opowiem jak skonstruować bardzo przejrzysty parser dowolnego języka oraz jak stworzyć maszynę witrualną. Niestety zanim to się stanie chcę ukończyć Lynx'a.

sobota, 15 października 2011

Lynx32 published!

Hai all!
It's my first post in english :D Sorry if i speak everything wrong but my english is medium to low :P
You may have heard something about Lynx32 but most people have never heard about it.
Lynx32 is easy project. It sounds awful if you are a complete layman, or programming from the recently, but it really is a simple project.
The simple architecture 
Lynx has 4 registers: two 16 bits, two 8 bits and a common set of two 8-bit.In the future I plan to implement a stack. I want to use it for functions and procedures as a "container" to the arguments. While we're on the list, todo, it would be to provide:
TODO list:
My task list is simple: in the future I plan to Implement "green threads" (as in the JVM),Procedures and functions and variables. The Latter is planning to keep the code as aseparate segment, however, as in assembler. I thought also of the use for that purpose registers, but scares me the amount of such records in such a Parrot(32 for all of 4 types!).
End
This entry is short because it is in English. I hope that you are interested in this project. If so go to this site
and help me(eg. leave a comment or tell me about errors).

poniedziałek, 26 września 2011

Trudne programowanie w C++

Witam!

Jako że ostatni przepisuję dosyć długaśśnyy kod z C# na C++ natknąłem się, a raczej spostrzegłem pewną hm... jak by to nazwać...odstępstwo(?). Chodzi mi tutaj o język C++ i programowanie obiektowe. W każdym chyba dziś bardziej poważanym języku mamy możliwość projektowania obiektowego. Wd. mnie w C++ jest ono NAJBARDZIEJ SKOPANE. Dlaczego? Ponieważ brak mi tutaj jakiegoś uporządkowania, wygody... Gdy piszę jakiś projekt zazwyczaj rzadko zaglądam do manuali języka ponieważ no nie muszę. Jako że dosyć często piszę w C i Python nie jest mi obcy, raczej w tych językach się skupiam. W C do manuli nie zaglądam w sumie w ogóle(ew. jeżeli potrzebuję korzystać z bibliotek typu string etc.), w Pythonie coraz rzadziej...Natomiast w C++ przy manualu spędzam więcej czasu niż zajmuje mi pisanie! Problemy sprawiane przez dziwną dosyć składnię i niepełną obiektowość są poprostu przybijające! Dziwne wypełnianie   metod, wirtualny(!) destruktor, pliki nagłówkowe ze strażnikami, bezsensowne RTTI zwiększające wagę binarek...Można wymieniać latami. Szkoda że mam trochę zbyt dużo roboty bo całkiem rozbudowany jest mój system obiektowości oraz klasa string którą przy jej pomocy w C napisałem. Efekt przedstawię w miarę wolnej chwili :)

niedziela, 21 sierpnia 2011

Wykłady na #coding-gods.org

Witam!
Na forum coding-gods.org stworzyliśmy nowy projekt społeczny pt.wykłady na IRC.
Każdy kto jest zainteresowany od dziś może na naszym irc prowadzić wykłady :). Wystarczy napisać do mnie lub adwiego :)
Terminy spotkań dostępne są na naszym kalendarzu.

piątek, 19 sierpnia 2011

Lynx32

Witam!
Tytuł dzisiejszego wpisu to jednocześnie nazwa mojego największego do tej pory projektu.
O projekcie
Lynx32 to maszyna wirtualna oraz asembler do jej obsługi ;)
Maszyna posiada 4 rejestry:

 Trochę problematycznie rozwiązałem operowanie na maszynie z poziomu asemblera-skonstruowałem coś na wzór przerwań:
LDA #'Hello World' !Assign value to A register
LCALL #1 !Lynx Call
Powyższy kod na(jeszcze nie dokończonej ;P)maszynie powinien wyświetlić zawartość rejestru A.
Ogólnie pisanie(a raczej uzupełnianie przepisywanej przeze mnie maszyny z C# na C++ :P)sprawia mi niebywałą przyjemność :).
TODO:
Do napisania została mi jeszcze spora porcja kodu,
Muszę napisać kompilator języka wysokiego poziomu(btw. ma ktoś pomysł na nazwę?),
Wypadałoby przepisać na nowo asembler, tym razem do C\C++\D whatever :P(wypadało by zrobić również implementację pod Java i .NET)


Popularne posty