Salom
hamirturush blogga xush kelibsiz. Bu saytga uzun postlarni joylayman. Telegramga obuna bo’ling: https://hamirturush.t.me
hamirturush blogga xush kelibsiz. Bu saytga uzun postlarni joylayman. Telegramga obuna bo’ling: https://hamirturush.t.me
Bu postda qanday qilib parser combinator yasashni ko’ramiz. Ya’ni, kichkina parserlarni har xil usulda birlashtirib kattaroq parserlar yozish. Avvallambor, parser nima ekanligini ko’rib chiqaylik. Parser – “flat” ma’lumotni strukturalik turga aylantirish deb ataylik. Parserga misollar: json satrni json turiga aylantirish email satrni bo’laklariga ajratish dasturlash tilidagi kodni ASTga aylantirish dasturlash tilidagi tokenlarni ASTga aylantirish Tepadagilardan tashqari, parserlarning juda qo’l keladigan bir joyi: dasturlarning loglarini parse qilish. Bunga postning oxirida misol bor. Undan tashqari, regex ishlatiladigan joylarda parser combinatorlar ham ishlatsa bo’ladi. ...
Tizim dasturlash deb inson foydalanuvchilar uchun emas, boshqa dasturlar foydalanishi uchun dastur tuzishga aytiladi, va shuning uchun katta tezlik va xavfsizlikni talab qiladi. Rust xotira bilan qanday ishlashi, va xotira xavfsizligini qanday ta’minlashini shu maqolada gaplashamiz. Rust dasturlash tili uchun motivatsiya (Bu qismdagi ko’p narsa soddalashtirilgan) Python yuqori-daraja dasturlash tilida ma’lumotlar qanday saqlanishiga nazar solaylik. Masalan, Pythonda daraxtlarni saqlamoqchi bo’lsak, quyidagi classni ishlatishimiz mumkin: @dataclass(slots=True) class Tree: value: int left: Tree | None = None right: Tree | None = None t1 = Tree(1) t2 = Tree(2) t3 = Tree(3, t1, t2) Lekin kompyuterning xotirasi chiziqlidir. Xotira shunchaki bytelar ketma ketligi. Python qandaydir qilib bu operatsiyalarni chiziqli xotiradan bytelarni o’qishga aylantiryapti. Lekin qanday qilib? Kod ishga tushganda aslida nima bo’ladi? Bu juda ham quyi-daraja savoldir. Oddiygina dataclass bo’lgan kod shunchaki xotirani qaysidir qismlarini o’qish yoki yozishga aylanadi. ...