Czy włączenie tablic do POSIX spowodowałoby uszkodzenie standardu POSIX?

Aug 16 2020

Możliwość używania tablic w bash i ksh93 jest bardzo wygodna, gdy pojawia się potrzeba szybkiego dostępu do elementów z wielu tablic. Oto krótki przykład:

#!/bin/ksh93 --

array1=(1 2 3 4 5 6 7)

array2=(8 9 10 11 12 13 14)

printf '%s\n' "Third element of array1 is ${array1[2]} and fifth element of array2 is ${array2[4]}"

Pamiętam, jak czytałem na marginesie, że przynajmniej część powodów, dla których tablice nie są uwzględnione w standardzie POSIX, jest taka, że ​​mogłoby to zepsuć sprawę. Czy to prawda? Co by się zepsuło?

Odpowiedzi

2 bk2204 Aug 18 2020 at 08:39

Nie wiem, do jakiego tekstu się odnosisz, ale jestem prawie pewien, że tak nie jest, ponieważ bashi ksh93mają być zgodne z POSIX, a jeśli tablice powodowały uszkodzenie powłok POSIX, to te powłoki nie byłyby zgodne .

Nie oznacza to jednak, że POSIX prawdopodobnie je uwzględni. Po pierwsze, bashi ksh93nie może realizować tablic w ten sam sposób, a POSIX nie chciałby, aby określić funkcję, która zachowywała się inaczej w szeroko rozmieszczonych wdrożeń historycznych.

Po drugie, POSIX generalnie nie określa wielu funkcji. Dopiero teraz jest nawet propozycja wymagająca local, która jest szeroko wdrażana w prawie każdej powłoce POSIX open source z wyjątkiem ksh93. Podobnie byłoby możliwe użycie viimplementacji, która zaimplementowała tylko funkcje POSIX, ale większość użytkowników uznałaby ją za dość rzadką w funkcjach.

Wreszcie POSIX woli standaryzować rzeczy, które są już dostępne w większości implementacji, a tablice powłoki nie są czymś takim. dashnie ma ich, podobnie jak większość powłok, z którymi dzieli rodowód, a także drobne implementacje, takie jak busybox. Kompletne środowisko POSIX może być stosunkowo małe, co jest bardzo wygodne dla osób, które muszą pracować z systemami wbudowanymi, dlatego często pomija się „miłe do posiadania” na rzecz prostoty.

Zauważ również, że tylko dlatego, że szeroko rozpowszechniona implementacja open source ma funkcję, nie oznacza, że ​​komercyjne środowiska Unix będą. Nawet gdyby POSIX określał tablice w nowej wersji, minie wiele lat, zanim wszystkie te systemy zostaną zaktualizowane, aby je obsługiwać.