Głównym powodem, dla którego żaden język nie obsługuje tego na poziomie semantycznym, jest to, że różne potrzeby są zbyt różne, aby znaleźć wspólny mianownik, który jest wystarczająco duży dla takiej funkcji. Ukrywanie danych jest wystarczająco złe, a staje się gorsze, gdy potrzebujesz jeszcze drobniejszej kontroli.
Byłoby to korzystne dla takiego języka, na przykład można oznaczyć pewne dane jako prywatne dla każdego, ale obiekt, który je utworzył (hasła byłyby świetnym przykładem: nawet kod działający w tej samej aplikacji nie mógł ich odczytać).
Niestety, ta "ochrona" byłaby powierzchowna, ponieważ na poziomie asemblera ochrona nie istniałaby. Aby być wydajnym, sprzęt musiałby go obsługiwać. W tym przypadku prawdopodobnie na poziomie jednego bajtu w pamięci RAM. To sprawiłoby, że taka aplikacja byłaby wyjątkowo bezpieczna i boleśnie powolna.
W prawdziwym świecie znajdziesz to na TPM chip na swojej płycie głównej, a także w bardzo grubej formie z tabelami MMU procesora. Ale to na poziomie strony 4K, a nie na poziomie bajtów. Istnieją biblioteki do obsługi obu, ale nie liczy się jako "wsparcie językowe" IMO.
Java ma coś takiego w postaci Security API. Musisz opakować dany kod w opiekuna, który pyta bieżący numer SecuityManager
, czy dostęp jest dozwolony, czy nie.
W języku Python można uzyskać coś podobnego w dekoratorach (dla metod i funkcji) lub implementując __setattr__
i __getattr__
dla dostępu w terenie.
Mogłem dodać PHP do listy języków implementujących poziom dostępu oparty na klasach. –