Skip to content

Latest commit

 

History

History
56 lines (45 loc) · 5.24 KB

README.sr.md

File metadata and controls

56 lines (45 loc) · 5.24 KB

У време превођења омеђени, дакле безбедни, типови

Ово је скуп типова који су статички - у време превођења - омеђени па није могуће да се случајно употребе тако да дође до недефинисаног понашања. Стога кажемо да су безбедни. Наравно, ово је Ц++ и сасвим можете да "кастујете" ове типове у шта год хоћете и уђете у проблеме, али, у редовној употреби не морате да се бринете да ли ће да целобројно додавање да оде ван опсега, шта ће да буде ако позовете front() на празном std::vector и слично. Као посебна погодност, нема потребе да се размишља о обради грешака (изузеци, изузетна сигурност, кодови грешака и обрада истих).

Подржани су:

  • Цели бројеви у датом опсегу. Слично као у Ади. Сем што су омеђени између, рецимо, 0 и 5, такође не могу да изађу из опсега свог типа (дакле, више као Спарк/Ада).
  • Низови омеђени димензијом. Слични std::array<>, али индексирање се врши горенаведеним целим бројевима у опсегу димензије низа и нема "потенцијално небезбедне спреге". Неисправни итератори показују на "сигурно место", па ако их неко грешком дерефенцира, нема недефинисаног понашања. Свакако ћете имати неисправно понашање, али и безбедно, дакле није недефинисано.
  • Листе фиксног капацитета. Сличне листама из стандардне библиотеке, али, капацитет је познат у време превођења. Дакле, додавање у листу може да не успе услед недостатка места. Сви (потенцијални) чланови листе су у ”базену” чланова који је низ и заузет ”унапред”, што је веома другачије од СТЛ листа. Предност је што су итератори ”дереференцијабилни” докле год је њихова листа жива, с тим што можда нису више у листи (постоји функција да се то провери, али је спора па мора изричито да се позове), али, нема недефинисаног понашања, само неспецифицираног и бубе су поновљиве. Управо, ако се не повезујете са СТЛ-ом, уместо итератора треба користити индексе, за које постоји паралелна спрега, а који су у том смислу безбедни.
  • Листе на прескок (скиплисте) фиксног капацитета. Засад моделирају само std::set<> спрегу, по потреби лако могу да се додају std::multiset<>, std::map<>, std::multimap<>. Остале напомене сличне као за опште листе.

Ово би требало да, уз већ наведене ограде, обезбеди исти ниво безбедности као Спарк/Ада ниво "без грешака у раду". То је виши ниво од већине "безбедних" програмских језика, укључујући и "чисту" Аду, која ове грешке хвата у току извршавања.

Други основни типови, као што су ниске, хеш табеле и претраживачка стабла нису засад изведени. Можда ће бити додати у будућности.

Како да кренем

Просто ископирајте заглавља која су вам потребна где год желите и укључите их.

Код је прављен за и испробан са Ц++17. Требало би да ради и "под" Ц++14 уз ситне дораде, ако вам треба помоћ у томе, јавите.

Употреба

Требало би да је прилично једноставно. Види пример. Прочитајте документацију ако примери нису довољни.

Ако користите алат meson (мезон), постоји meson.build, па можете ово складиште да користите као мезон подпројекат, што би требало да одради шта је потребно у вези са заглављима.