Pojawia się sporo wątpliwości dotyczących specyfikacji języka Xi.
Myślę, że studentom jak i pracownikom przyda się jeden, dostępny dla wszystkich kanał komunikacji.
Wszelkie niejasności można by rozstrzygać w tym temacie.
- Czy wyrażenie
f()[0] = 1
jest poprawne? Patrząc na to ja działamod_uwr
to wychodzi na to, że nie. Nie ma jednak na to testu, a na skosie jest napisane, że:
Komórka pamięci jest opisana przez typ lvalue i może być albo identyfikatorem albo komórką w tablicy.
a skoro wynik funkcji może być listą to w szczególności f()[0]
może być komórką w tablicy. Wydaje się, że pdf języka Xi również tego nie wyklucza, wyklucza natomiast wyrażenia w nawiasach oraz listy anonimowe:
An assignment to a variable or to an array element. However, the left-hand side of an assignment (and
thus the assignment itself) cannot begin with an open parenthesis (() or an open brace ({).
-
Brakuje udokumentowania który z
UNOP_Not
,UNOP_Neg
to logiczna negacja a który liczbowa - nazewnictwo wydaje się troche nieoczywiste, chociaż to może tylko dla mnie. Wast.ml
nie ma funkcjistring_of_unop
i trzeba szukać wyjaśnienia w innych miejsach - nawiasem mówiąc są dwie identyczne funkcjestring_of_binop
, jedna wast.ml
a druga wast_printer.ml
(i analogicznie dlarelop
). -
Była o tym dyskusja na konsultacjach, ale już nie jestem pewien na czym stanęło:
return statement may only be used inside a block and must be the last statement in its block.
Czy powyższy wymóg ma być walidowany na poziomie parsera? Wydaje się, że nie, ale wtedy dostajemy następujący konflikt - czy poniższa linijka to jeden statement
, czy dwa?
return f()
Możemy myśleć o tym jako o zwróceniu wyniku funkcji f
albo jako o return; f();
(typy by się nie zgadzały ale typechecker
działa po parserze)
W mod_uwr:
f() { x = '\n' }
przechodzi a f() { x = '\t' }
nie. Tak ma być?
EDIT:
\r
też nie przechodzi.
_ , _ = foo()
jest dozwolone a _ = foo()
nie.
Jest to opisane na SKOSie
Przyjmijmy, że konstrukcja STMT_MultiVarDecl nigdy nie opisuje jednego wiązania. To znaczy, że…
_ = f() // nieprawidłowe
Jak w końcu jest z opcjonalnym separatorem w inicjalizacji tablic tj.
tab : int[] = { 2, }
Poprawne czy nie?