[nem-pl] Kolorowanie zmiennych przez inne funkcje

"Paweł W. Olszta" pawel.olszta at adv.pl
Thu Mar 11 12:59:25 CET 2004


Kamil Skalski wrote:

OFFTOPIC.

> public [Hygienic] make_code () : Expr {
>   <[ def x = 1; bla (x) ]>
> }

Ładny sposób oznaczania, że funkcja ma być przefiltrowana przez makro. 
To jeszcze nie działa, prawda?

Bo jeśli tak, to ja proponuję zacząć o tym myśleć, bo i tak będzie chyba 
potrzebne do [Hygienic].

Trzeba się będzie bardzo mocno zastanowić, jak definiować syntax 
extensions (ja cały czas myślę, że ensure oraz require powinny być 
makrami na funkcjach, tak jak Hygienic w tym przykładzie).

Co do syntax extensions, to proponowałbym umożliwienie czegoś takiego:

public [Contracted] jakas_funkcja (x : int) : int
{
	require { x >= 0 }
	method { x * 2 }
	ensure { value % 2 == 0 }
}

W ten sposób wyglądało by to mniej więcej jak properties w C#:

protected property Wallet
{
	get { return m_wallet.Contents; }
	set { m_wallet.Contents = value; }
}

Być może moglibyśmy też zdefiniować makro [Property]? :-) (ale chyba 
musi być jakieś minimalne wsparcie od strony generatora kodu i systemu 
typów).

Bosze, jak ja pragnę takich makr :-D Do takiego [Contracted] można by 
wbudować pobieżną analizę kontraktów, możliwość definiowania specjalnych 
założeń (np. oprócz require to jeszcze notnull z listą parametrów) i w 
ogóle :-)





More information about the devel-pl mailing list