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] = 1jest poprawne? Patrząc na to ja działamod_uwrto 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_Negto logiczna negacja a który liczbowa - nazewnictwo wydaje się troche nieoczywiste, chociaż to może tylko dla mnie. Wast.mlnie ma funkcjistring_of_unopi trzeba szukać wyjaśnienia w innych miejsach - nawiasem mówiąc są dwie identyczne funkcjestring_of_binop, jedna wast.mla 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?
