🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #13446

Re: W nawiązaniu do Oz-Mozart i Smalltalka

#13446
From: Sektor van Skijlen
Date: Mon, 14 Nov 2005 21:59
74 lines
3776 bytes
Dnia Mon, 14 Nov 2005 19:05:56 +0000 (UTC),  aneta skrobie:
> A moze znacie jakies bardzo podobne do Smalltalka jezyki, które mozna by 
> wykorzystać do "wyrabiania dobrych nawykow obiektowych, prototypowania, czy 
> wręcz specyfikacji? 

Właśnie po pierwszej części zdania miałem zaproponować Tcl-a, ale po
przeczytaniu drugiej chyba bym się wstrzymał. Nie wiem oczywiście, po co do
prototypowania lub specyfikacji potrzebne komukolwiek wyrabianie dobrych
nawyków obiektowych (szczerze mówiąc jest to dla mnie cokolwiek abstrakcyjne
pojęcie, bo akurat tak się składa, że owe "nawyki" są specyficzne dla języka;
o ile zatem można mówić o dobrych nawykach obiektowych po nauczeniu się
Smalltalka, to jednak potem się okazuje, że owszem, ma się dobre nawyki
obiektowe, ale z obiektowych języków umie się tylko pisac w Smalltalku).

Cóż, może jednak, ryzykując wyśmianie przez różnych mądrali na tej grupie,
spróbuję przestawić moje argumenty. Tcl, dzięki swojej elastyczności i
minimalistycznej składni (oraz tzw. sztuczki z klamrami) jest w stanie pełnić
rolę języka specyfikacji.

No dobrze, ryzykuję również, że prawdopodobnie nie wiem, co to jest
prototypowanie i specyfikacja. Nieważne. I tak liczę na zainteresowanie ;)

Przykładowo, kiedyś tak zupełnie "dla picu" napisałem sobie w Tcl-u coś w
rodzaju programu "make":

http://www.intercon.pl/~sektor/tcl/make.tcl

W którym całą składnię makefile'a opisuje się... skryptem w Tcl-u. Składnia od
normalnego Makefile'a różni się dosłownie nieznacznie. Na przykład, taki
fragment:

CC = gcc
LIBS = -lstdc++

f: f1.o f2.o
	$(CC) -o $@ $? $(LIBS)

f1.o: f1.cc f.h
f2.o: f2.cc f.h
	$(CC) -c $<


wyglądałby w nim tak (tam było parę zmian i dawno się nim nie zajmowałem, więc
próba może się nie powieść - uprzedzam ;):

set CC gcc
set LIBS -lstdc++

rule f f1.o f2.o {
	$CC -o $@ $? $LIBS
}

rules {
	{f1.o f1.cc f.h}
	{f2.o f2.cc f.h}
} {
	$CC -c $<
}

Można się oczywiście kłócić, czy wybrałem odpowiednią i czytelną metodę, ale
mimo wszystko zarówno jest to łatwe do opisania, jak i istnieje kilka
możliwości zrobienia takiego opisu. Od niechcenia można się nawet pokusić o
częściowe ręczne parsowanie (poprzez dzielenie linii samemu przy podanym
znaku), ale to już w bardzo specyficznych przypadkach.

W podobny sposób można składnią Tcl-a opisać całkowicie dowolną strukturę
jakiejkolwiek konstrukcji.


-- 
//  _    ___         Michal "Sektor" Malecki <sektor(whirl)kis.p.lodz.pl>
\\ L_ |/ `|  /^\ ,()                         <ethourhs(O)wp.pl>
// \_ |\  \/ \_/ /\ C++ bez cholesterolu: http://www.intercon.pl/~sektor/cbx
"I am allergic to Java because programming in Java reminds me casting spells"
Technical Details
Message-ID: <dlb1cl$3pi$1@kujawiak.man.lodz.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.man.lodz.pl!not-for-mail
References: <dlan6j$bia$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <ethouris@pl.wp.spamu.lubie.nie.invalid>
Newsgroups: pl.comp.objects
Subject: Re: W nawiązaniu do Oz-Mozart i Smalltalka
Date: Mon, 14 Nov 2005 21:59:49 +0000 (UTC)
Organization: LODMAN - Metropolitan Area Network in LODZ, Poland
Lines: 74
Sender: Michal Malecki <sektor@zly.kis.p.lodz.pl>
Message-ID: <dlb1cl$3pi$1@kujawiak.man.lodz.pl>
References: <dlan6j$bia$1@inews.gazeta.pl>
NNTP-Posting-Host: zly.kis.p.lodz.pl
Mime-Version: 1.0
X-Trace: kujawiak.man.lodz.pl 1132005589 3890 212.191.89.2 (14 Nov 2005 21:59:49 GMT)
X-Complaints-To: abuse@man.lodz.pl
NNTP-Posting-Date: Mon, 14 Nov 2005 21:59:49 +0000 (UTC)
User-Agent: tin/1.6.2-20030910 ("Pabbay") (UNIX) (SunOS/5.9 (sun4u))
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit