[nem-pl] Kilkla temacików

Kamil Skalski nazgul at omega.pl
Sun Jan 4 12:48:45 CET 2004


Sunday 04 of January 2004 11:49, Michal Moskal wrote:
> On Sun, Jan 04, 2004 at 11:25:49AM +0100, Kamil Skalski wrote:
> > Mam kilka kwestii do M., ale może napiszę tutaj:
> > 1. Co myślicie o zmiennej liczbie parametrów do funkcji innych niż makra?
> > Czy to w ogóle ma sens - w ciele trzeba operować na LIŚCIE parametrów, co
> > robią tylko makra. Chyba żeby na siłę upychać w zwykłe funkcje trochę
> > więcej możliwości, bo w sumie powinny sobie poradzić.
>
> A patrzyłeś jak to jest zrobione w C#? Bo jest i pewnie powinno być tak
> samo.

Ok, w C# to jest tak:
 public static void UseParams(params int[] list) 
   {
      for ( int i = 0 ; i < list.Length ; i++ )
         Console.WriteLine(list[i]);
      Console.WriteLine();
   }

u nas musiałoby to wyglądać
f (params l : array(int)) : void
ew.
f (params l : list(int)) : void

(dodanie słowa kluczowego 'params' nie podoba mi się za bardzo...)

Aha, no i u nich to jest oczywiście we wszystkich funkcjach, więc chyba my 
możemy zrobić tak samo. I w ogóle to oni tu mają podobny myk jak nasze 
problemy tuple vs. parametry - prawidłowe jest przekazanie tablicy intów do 
UseParams

> 1. zabronić pisania i używania makr w tym samym pliku -- po prostu kazać
>    użytkownikowi najpierw skompilować makra, a potem załadować je do
>    kompilatora i używać

ble, fuj, nie! (przynajmniej docelowo)
>
> 2. zrobić jakiś hack w parserze, że jak widzi "macro ... syntax ..." to
>    wtedy już dodaje regułę. problem: makra muszą być sparsowane przed
>    funkcjami, które z nich korzystają, o co musi zatroszczyć się
>    użytkownik (kolejność plików i funkcji w nich).

No właśnie o czymś takim myślałem i to nie jest aż taki hack. W H. nie takie 
hacki mają ;)
Ale najładniej byłoby dodać jeden przebieg do kompilacji, który wyłapałby 
wszystkie macra i pododawał rozszerzenia składniowe.

Jeszcze jedna sprawa - opcjonalne parametry.
assert (cond : expr, message : string_lit = "") { .. }
To w ogóle byłoby fajne, a cytuję:
"C# doesn’t provide a way of directly doing so, despite the fact that VB.NET 
and .NET’s attribute system both support this functionality. This is a 
subject of some debate currently in the C# community."

Myślę, że możemy zrobić to po prostu tak jak w C++





More information about the devel-pl mailing list