-
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
Newsgroups: pl.comp.programming
Subject: Re: LHS czy RHS?
Date: Wed, 25 Aug 2010 19:38:19 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 150
Message-ID: <op.vhz8l5kj8x7o78@notebook>
References: <op.vhwbez1n8x7o78@notebook> <i4u76v$snk$1@inews.gazeta.pl>
<o...@l...medicom.local>
<6...@g...googlegroups.com>
<op.vhyh8zaq8x7o78@notebook>
<2...@p...null.onet.pl.invalid>
<o...@l...medicom.local>
<4...@x...googlegroups.com>
NNTP-Posting-Host: chello089079244223.chello.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2; format=flowed; delsp=yes
Content-Transfer-Encoding: Quoted-Printable
X-Trace: inews.gazeta.pl 1282757893 16528 89.79.244.223 (25 Aug 2010 17:38:13 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Wed, 25 Aug 2010 17:38:13 +0000 (UTC)
X-User: spoko_ws
X-Antivirus: avast! (VPS 100825-0, 2010-08-25), Outbound message
X-Antivirus-Status: Clean
User-Agent: Opera Mail/10.61 (Win32)
Xref: news-archive.icm.edu.pl pl.comp.programming:186714
[ ukryj nagłówki ]Dnia 25-08-2010 o 18:05:15 Marcin 'Qrczak' Kowalczyk <q...@k...org.pl>
napisał(a):
> Mimo wszystko porównałbym to z interpretacją drzewka. Może się okazać,
> że gra jest niewarta świeczki.
Zastanawiałem się nad tym - złożoność obu algorytmów jest praktycznie taka
sama, więc w grę wchodzą głównie szczegóły implementacyjne.
Po pierwsze, nie wystarczy samo drzewo wyrażenia. Wyrażenie f(x,y):=x+y
zostanie rozbite na drzewo, po lewej stronie którego będzie podwieszona
funkcja f(, jej parametry, przecinek składający je w listę i nawias
domykający. Jeśli zdecyduję się na interpretowanie tak skonstruowanego
drzewa, będzie mnie czekać dużo pracy - stwierdzenie, czy lewa gałąź jest
poprawna, zdecydowanie o tym, czy dodawana jest funkcja czy zmienna,
odnalezienie parametrów i wyszukanie ich w prawym poddrzewie i tak dalej.
To będzie na pewno wolne.
Oczywiście mogę wykonać te operacje przed procesem interpretacji, ale
wówczas musiałbym zastanowić się nad specjalnym węzłem drzewa
przechowującym prekompilowane informacje o prototypie funkcji: jej nazwie
oraz liczbie i nazwach jej parametrów. W konsekwencji pojawiłby się
kolejny byt - nie będący ani operatorem ani funkcją ani - w zasadzie -
obiektem liczbowym, dla którego musiałbym przygotować odrębny algorytm
przetwarzania. Zupełnie subiektywnie takie rozwiązanie nie podoba mi się o
tyle, że do drzewa, które służy do zapisu pewnego zestawu operacji niejako
na siłę wstrzyknięty zostanie byt, który znajdzie się tam tylko po to, by
zachować drzewiastą strukturę podczas przetwarzania.
Zaistnienie maszyny wirtualnej wraz z odpowiednim językiem nie budzi już
we mnie sprzeciwów - maszyna jest z założenia wysokopoziomowa, więc
swobodnie mogę dodać jej rozkaz dodający funkcję, zawierający szczegółowe
informacje na jej temat - łącznie ze skompilowanym do zestawu rozkazów
wyrażeniem. Polecenie:
f(x,y):=x+y
Skompilowane zostałoby do następującego pseudo-rozkazu:
ADDFN(
f,
2,
(PUSH PAR1,
PUSH PAR2,
ADD)
);
Kolejnym argumentem przemawiającym za maszyną wirtualną jest prostota jej
implementacji - wykonywanie rozkazu sprowadziłoby się do iteracyjnego
przetworzenia dużej instrukcji switch(), implementowanej wewnętrznie
zazwyczaj jako seria instrukcji goto, które są stosunkowo szybkie. Mniej
danych przechowywanych byłoby również na stosie. Podczas przetwarzania
operacji 2+2*2 na stosie znalazłaby się pojedyncza ramka z informacjami o
pojedynczym wywołaniu operacji przetwarzającej węzeł, zaś w przypadku
maszyny wirtualnej stos (nota bene siedzący w stercie) przechowywałby na
raz tylko dwie liczby - argumenty i pośrednie wyniki obliczeń. Oczywiście
można zaimplementować wersję algorytmu przetwarzającego drzewo bez użycia
rekurencji, ale wówczas trzeba byłoby ją jakoś zasymulować, co
pociągnęłoby za sobą implementację kolejnego stosu.
Nie ukrywam, że nie robiłem żadnych zaawansowanych analiz, powyższe
argumenty stanowią tylko moje przemyślenia i refleksje na temat obu
algorytmów. Bardziej podoba mi się ten z maszyną wirtualną, niemniej nie
upieram się przy nim, ale z drugiej strony chciałbym usłyszeć jakąkolwiek
argumentację przemawiającą za algorytmem przetwarzającym drzewo.
Pozdrawiam -- Spook.
--
! ._______. Warning: Lucida Console sig! //) !
! || spk || www.spook.freshsite.pl / _ """*!
! ||_____|| spook at op.pl / ' | ""!
! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
! |_|[]_|_| May the SOURCE be with you! \/) \ !
Następne wpisy z tego wątku
- 25.08.10 17:56 Jacek Czerwinski
- 25.08.10 20:48 Marcin 'Qrczak' Kowalczyk
- 25.08.10 21:00 Wojciech Muła
- 26.08.10 07:44 Krzysiek Kowaliczek
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-12 Warszawa => Expert Recruiter 360 <=
- 2025-02-12 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-02-12 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-02-12 Dęblin => Node.js / Fullstack Developer <=
- 2025-02-12 Kraków => PHP Full Stack Developer <=
- 2025-02-12 Karta dźwiękowa stereo
- 2025-02-12 Dęblin => JavaScript / Node / Fullstack Developer <=
- 2025-02-12 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-02-12 Łódź => NodeJS Developer <=
- 2025-02-12 Błonie => Sales Specialist <=
- 2025-02-12 Dziwne zachowanie magistrali adresowej w 8085
- 2025-02-11 Mini pecet
- 2025-02-10 Spalił się spaliniak
- 2025-02-10 zarowka wifi - z sensowna apka lub lepiej albo lokalnie lub przez web. I zeby harmonogram miala
- 2025-02-10 Chrzanów => Programista NodeJS <=