Nurmuhammad
Bugungi kun odatdagisidan farq qiladigan kun bo'ldi. Mayli kayfiyatni tushurmaymiz kelasi hafta bular to'g'irlanadi xudo xohlasa.
Cho'zilib kettdi lekin hozircha yaxshi ketayabdi oxrigacha ham shunday bo'lsinda ish qilib uzog'i shanba kunigacha hal bo'ladi hammasi.
1โค2๐ฅฐ1๐1
image_2025-06-18_15-13-47.png
66.9 KB
Amalladim ๐ค
Distinction = 5
Merit = 4
Pass = 3
Distinction = 5
Merit = 4
Pass = 3
๐12๐3๐ฅฐ2
Forwarded from Hady | Cyber&English
- O'chirilgan fayllar qayerga ketadi?
- hech qayerga, shunchaki ularga murojaat qilish yo'li unutiladi, ya'ni o'chirgan fayllarimiz savatdan o'chirib tashlasak ham o'chib ketmaydi.
- Xotira qanday sig'diradi unda?
- xotira katta blackboardga o'xshaydi. Fayllarni o'chirganda, tizim o'sha fayl "blackboard"ning qayerida ekanligini unutadi, keyin siz uni topolmasligingiz uchun. Ammo, yaxshilab kavlasa, topiladi, agar --- o'sha fayl yozilgan xotira maydoni ustiga yangi ma'lumot yozilmagan bo'lsa. Ya'ni, xotiradan nimanidir astoydil, haqiqatan o'chirish uchun o'chirish emas, xotiraning har bir bandini axborot bilan to'ldirish kerak. Shunda, o'chirilgan fayl butkul yo'q bo'lib ketish ehtimoli bor.
- Nega ehtimoli bor, butunlay yo'qolish emas?
- chunki xotira maydonida "bad sector" nomli qayta ishlatib bo'lmaydigan jabhalar yuzaga keladi, u yerga yo ma'lumot chin qalbdan chuqur iz qoldirib joylashib oladi, yoki ishlatib bo'lmaydigan katakka aylanadi.
- Demak hech narsa o'chmaydi, yo'q bo'lmaydi?
- aynan, o'chmaydi, balki o'rnini boshqasiga bo'shatib beradi.
@hady_teaches and tells you: "Do not write a thing that you will regret for"
1๐11โค4๐ฏ3๐ฅฐ2โคโ๐ฅ2๐ฅ1๐1๐ณ1
Aiogram 3 โ bu Python tilida yozilgan, Telegram Bot API bilan ishlash uchun asinxron (async/await) arxitekturaga asoslangan framework.
Uning asosiy afzalliklari:
๐ Asinxron ishlash โ yuqori tezlik va parallel requestlarni qayta ishlash.
๐งฉ Middleware โ request/response oqimini boshqarish imkoniyati.
๐ Router โ handlerlarni modulga boโlib yozish, scalabilityni osonlashtiradi.
๐ Dependency Injection โ handlerlarga tashqi resurslarni (DB, cache) dinamik ulash.
๐น Telegram WebApp
Telegram WebApp โ bu bot orqali foydalanuvchiga ichki Telegram brauzerda ochiladigan mini-ilova.
Masalan: toโlov tizimlari, interaktiv formalar yoki grafik interfeysli xizmatlar.
Qulayliklari:
โ Telegram ichida ishlaydi, foydalanuvchi tashqariga chiqmaydi.
โ Bot va WebApp oโrtasida real-time data exchange (postMessage API) ishlaydi.
โ Cross-platform (iOS, Android, Desktop) qoโllab-quvvatlanadi.
Kamchiliklari:
โ Cheklangan resurslar โ faqat Telegram WebViewโda ishlaydi.
โ Native ilovalarga qaraganda performance pastroq boโlishi mumkin.
โ Kesh va offline rejim imkoniyatlari cheklangan.
๐น Tezlik haqida
Aiogram 3 da asyncio ishlatilgani uchun 10 000+ request/sec yuklamalarda ham samarali ishlash imkoniyati bor.
WebApp esa foydalanuvchi qurilmasining browser dvijogiga bogโliq boโlib, tezlik front-end optimizatsiyasi va internet sifatiga koโproq taโsir qiladi.
๐ Xulosa:
Agar siz samarali va modulli bot yozmoqchi boโlsangiz โ Aiogram 3 ideal tanlov.
Agar foydalanuvchilarga interaktiv interfeys kerak boโlsa โ WebApp yechimi qulay.
๐ Bunday texnik kontentlarni doimiy olish uchun kanalimizga qoโshiling:
@gophersuz
Please open Telegram to view this post
VIEW IN TELEGRAM
1๐12โค6๐ฅ6๐5 4๐ฅฐ3๐3โก2โคโ๐ฅ2 2๐1
image_2025-09-05_18-13-11.png
94.7 KB
๐ฅ5๐5 2 2โค1โคโ๐ฅ1๐ฅฐ1๐1๐1 1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Generator vs Function dasturlashda
Koโp dasturlash tillarida generator va oddiy funksiya* bir xil koโrinadi, lekin ular ishlash tamoyillari bilan farq qiladi.
๐น Oddiy funksiya (Function)
Funksiya chaqirilganda hamma kodini bajarib boโlmagunchaishlaydi va oxirida natija qaytaradi.
Go tilida esa funksiya bir marta ishlaydi va qiymat qaytaradi.
๐ฉโ๐ป
๐ Bu yerda
๐น Generator (Iterativ natija beruvchi funksiya)
Goโda Pythonโdagi `yield` kabi generator yoโq. Lekin biz **channel va goroutine yordamida generator kabi xulq-atvorni yaratishimiz mumkin.
๐ฉโ๐ป
๐ Bu yerda
โ๏ธ Post: @gophersuz
Koโp dasturlash tillarida generator va oddiy funksiya* bir xil koโrinadi, lekin ular ishlash tamoyillari bilan farq qiladi.
Funksiya chaqirilganda hamma kodini bajarib boโlmagunchaishlaydi va oxirida natija qaytaradi.
Go tilida esa funksiya bir marta ishlaydi va qiymat qaytaradi.
package main
import "fmt"
// Oddiy funksiya
func Square(n int) int {
return n * n
}
func main() {
fmt.Println(Square(4)) // 16
fmt.Println(Square(7)) // 49
}
Square() har safar chaqirilsa, natija qaytaradi va tugaydi.Goโda Pythonโdagi `yield` kabi generator yoโq. Lekin biz **channel va goroutine yordamida generator kabi xulq-atvorni yaratishimiz mumkin.
package main
import "fmt"
// Generator misoli
func Counter(limit int) <-chan int {
ch := make(chan int)
go func() {
for i := 1; i <= limit; i++ {
ch <- i // qiymatlarni ketma-ket yuborish
}
close(ch)
}()
return ch
}
func main() {
for num := range Counter(5) {
fmt.Println(num)
}
}
Counter() oddiy funksiya emas, balki generatorga oโxshaydi. U har chaqirilganda emas, balki boshlangandan keyin ketma-ket qiymatlarni yuboradi.Please open Telegram to view this post
VIEW IN TELEGRAM
1โค4๐ฅฐ3โคโ๐ฅ3โก2๐2๐ฅ2๐2 2 2 1 1
Keling bugun high logical tizimlarda ishlatiladigan API gateway haqida gaplashamiz. API Gateway oโzi nima? Deydigan boโlsak. API Gateway โ bu ilova yoki xizmatlar (microservices) orasida koโprik vazifasini bajaradigan vosita. U foydalanuvchi (client)dan kelgan barcha soโrovlarni qabul qiladi va toโgโri xizmatga yoโnaltiradi. Asosiy vazifalaridan biri Routing (yoโnaltirish) ๐ Soโrovlarni kerakli backend xizmatiga yetqazish. Rate limiting: Juda koโp yoki shubhali, zararli soโrovlarni blocklash. Monitorign va logging Trafikni kuzatish va log yigโish. Xoโsh nimaga mikroservicelarda oโrtada API Gatewaylar turishi kerak? Sababi arxitekturani soddalashtiradi, xavfsizlikni oshiradi, barcha API larni bitta connectionda boshqaraoladi.
Foydalanuvchi mobil ilovadan soโrov yuboradi โ API Gateway uni qabul qiladi โ tegishli microservice (masalan, auth, payment yoki product servisi)ga uzatadi โ javobni qaytaradi. API Gateway โ bu barcha eshiklarni boshqaradigan โkirish postasiโ, u boโlmasa tizim tartibsiz boโlib ketadi.
@gophersuz
Foydalanuvchi mobil ilovadan soโrov yuboradi โ API Gateway uni qabul qiladi โ tegishli microservice (masalan, auth, payment yoki product servisi)ga uzatadi โ javobni qaytaradi. API Gateway โ bu barcha eshiklarni boshqaradigan โkirish postasiโ, u boโlmasa tizim tartibsiz boโlib ketadi.
@gophersuz
1๐ฏ5โก2๐2 1 1 1 1
Forwarded from Yetim dasturchi kundaligi
Bank kartasi raqami koโpincha oddiygina raqamlar toโplamidek koโrinadi, lekin uning har bir boโlagi aniq vazifalarni bajarish xususiyatiga ega. Koโpchilik kredit kartalari 1960-yillardan beri bir xil algoritmdan foydalanadi va aynan shu algoritm tufayli tizimlar raqam to'g'ri yoki notog'ri kiritilganini ortiqcha harakatlarsiz aniqlay oladi.
Odatda karta raqamlari 15 va 19 orasidagi uzunlikka teng bo'ladi. Eng ko'p tarqalgan standart esa bu 16 xonalik raqamlar jamlanmasi hisoblanadi. Bunda birinchi raqam karta qaysi to'lov tizimiga tegishli ekanini ko'rsatsa (4 โ Visa, 5 yoki 2 โ MasterCard), xuddi shu tartibda 6-xonagacha bo'lgan raqamlar bilan BIN / IIN (Bank Identification Number) bilan karta qaysi bank tizimiga tegishli ekanligini aniqlash mumkin. Undan keyin mijozning karta hisobraqami va oxirgi raqam karta haqiqiyligini aniqlash uchun Luhn algoritmiga ishlatilinadi.
Luhn algoritmi yoki Luhn formulasi (modulus 10 va mod 10 deb ham ataladi) IBMning maโlumotlarni indekslash va identifikatsiya qilish sohasidagi tadqiqotchisi bo'lgan nemis muhandisi Hans Peter Luhn tomonidan ixtiro qilingan. O'tgan asrning 50-yillarida IBM mashinalari ma'lumotlarni teshilgan kartalar (punch cards) orqali qabul qilar edi. Bu orada esa arxivlar, banklar va shunga o'xshash ma'lumotlar bilan ishlovchilar ma'lumotlarni raqamli shaklda saqlashni endi boshlashgan. Ma'lumotlarni kiritish jarayonida esa inson xatoliklari bo'lish ehtimoli ham yo'q emasdi, shuningdek IBM muhandislari bu xatolar tufayli minglab yozuvlar buzilayotganini va qayta kiritish uchun koโp vaqt ketayotganini aniqlashdi. Buning ortidan Luhn uchun cheklangan resurslarga ega kompyuterlarda (arifmetik amallarning o'zi bilan) kiritilinayotgan ma'lumotlarni self checking qila olish g'oyasini oshirish vazifasi berildi.
Bugungi kunda Luhn algoritmi nafaqat karta raqamlari balkim IMEI (mobil telefon identifikatori), milliy indentifikatsiya tizimlari va turli moliyaviy instrumentlar (misol CUSIP) kabi joylarda ham qo'llanilinadi.
๐ Misol:
Karta raqam: 4539 1488 0343 6467
Bunda tekshirish raqami: 7
Qoldiq: 4539 1488 0343 646
Karta raqamidan har ikkinchi raqamni 2 ga koโpaytiramiz. Agar ko'paytirish jarayonida natija 9 da katta bo'lsa bunda 9 ayrib yuboriladi.
Natija: 8569 2478 0383 3437
Shundan so'ng oxirgi raqamni istisno qilgan holda barcha raqamlar yig'indisini chiqaramiz (73). Natijaga oxirgi tekshirish raqamini qo'shamiz va umumiy javob 10ga bo'linishi mumkin bo'lsa ma'lumot to'g'ri kiritilgan hisoblanadi.
โ๏ธ Shuningdek eslatib o'tish kerakki Hans Peter Luhn, KWIC Indexing (Key Word in Context) usulining ham ixtirochisi hisoblanadi. Bu usul qidiruv tizimlarining uzoq ajdodi bo'lib hozirgacha aktual foydalanib kelinadi. Bunda umumiy matndagi har bir so'z navbati bilan kalit so'z sifatida olinadi, shundan so'ng u o'zidan oldingi va keyingi uchta so'zni kontekst sifatida qarab indekslar tuziladi. Foydalanuvchi qidiruv uchun kalit so'zni kiritganda shunga mos kontekst olib kelib beriladi.
Misol: Hans Peter Luhn information retrieval sohasining asoschilaridan biridir
Natija:
๐ธ Hans - HANS Peter Luhn information
๐ธ Peter - Hans PETER Luhn information retrieval
๐ธ Luhn - Hans Peter LUHN information retrieval sohasining
๐ธ information - Hans Peter Luhn INFORMATION retrieval sohasining asoschilaridan
๐ธ retrieval - Peter Luhn information RETRIEVAL sohasining asoschilaridan biridir
๐ธ sohasining - Luhn information retrieval SOHASINING asoschilaridan biridir
๐ธ asoschilaridan - information retrieval sohasining ASOSCHILARIDAN biridir
๐ธ biridir - retrieval sohasining asoschilaridan BIRIDIR
@yetimdasturchi
Odatda karta raqamlari 15 va 19 orasidagi uzunlikka teng bo'ladi. Eng ko'p tarqalgan standart esa bu 16 xonalik raqamlar jamlanmasi hisoblanadi. Bunda birinchi raqam karta qaysi to'lov tizimiga tegishli ekanini ko'rsatsa (4 โ Visa, 5 yoki 2 โ MasterCard), xuddi shu tartibda 6-xonagacha bo'lgan raqamlar bilan BIN / IIN (Bank Identification Number) bilan karta qaysi bank tizimiga tegishli ekanligini aniqlash mumkin. Undan keyin mijozning karta hisobraqami va oxirgi raqam karta haqiqiyligini aniqlash uchun Luhn algoritmiga ishlatilinadi.
Luhn algoritmi yoki Luhn formulasi (modulus 10 va mod 10 deb ham ataladi) IBMning maโlumotlarni indekslash va identifikatsiya qilish sohasidagi tadqiqotchisi bo'lgan nemis muhandisi Hans Peter Luhn tomonidan ixtiro qilingan. O'tgan asrning 50-yillarida IBM mashinalari ma'lumotlarni teshilgan kartalar (punch cards) orqali qabul qilar edi. Bu orada esa arxivlar, banklar va shunga o'xshash ma'lumotlar bilan ishlovchilar ma'lumotlarni raqamli shaklda saqlashni endi boshlashgan. Ma'lumotlarni kiritish jarayonida esa inson xatoliklari bo'lish ehtimoli ham yo'q emasdi, shuningdek IBM muhandislari bu xatolar tufayli minglab yozuvlar buzilayotganini va qayta kiritish uchun koโp vaqt ketayotganini aniqlashdi. Buning ortidan Luhn uchun cheklangan resurslarga ega kompyuterlarda (arifmetik amallarning o'zi bilan) kiritilinayotgan ma'lumotlarni self checking qila olish g'oyasini oshirish vazifasi berildi.
Bugungi kunda Luhn algoritmi nafaqat karta raqamlari balkim IMEI (mobil telefon identifikatori), milliy indentifikatsiya tizimlari va turli moliyaviy instrumentlar (misol CUSIP) kabi joylarda ham qo'llanilinadi.
๐ Misol:
Karta raqam: 4539 1488 0343 6467
Bunda tekshirish raqami: 7
Qoldiq: 4539 1488 0343 646
Karta raqamidan har ikkinchi raqamni 2 ga koโpaytiramiz. Agar ko'paytirish jarayonida natija 9 da katta bo'lsa bunda 9 ayrib yuboriladi.
4 3 1 8 0 4 6 6
โ โ โ โ โ โ โ โ
2ร 2ร 2ร 2ร 2ร 2ร 2ร 2ร
Natija: 8569 2478 0383 3437
Shundan so'ng oxirgi raqamni istisno qilgan holda barcha raqamlar yig'indisini chiqaramiz (73). Natijaga oxirgi tekshirish raqamini qo'shamiz va umumiy javob 10ga bo'linishi mumkin bo'lsa ma'lumot to'g'ri kiritilgan hisoblanadi.
int luhn(unsigned long long n){
int sum=0, alt=0;
while( n ){
int d = n % 10;
if( alt ) { d*=2; if( d > 9 ) d-=9; }
sum += d;
alt = !alt;
n /= 10;
}
return sum % 10 == 0;
}โ๏ธ Shuningdek eslatib o'tish kerakki Hans Peter Luhn, KWIC Indexing (Key Word in Context) usulining ham ixtirochisi hisoblanadi. Bu usul qidiruv tizimlarining uzoq ajdodi bo'lib hozirgacha aktual foydalanib kelinadi. Bunda umumiy matndagi har bir so'z navbati bilan kalit so'z sifatida olinadi, shundan so'ng u o'zidan oldingi va keyingi uchta so'zni kontekst sifatida qarab indekslar tuziladi. Foydalanuvchi qidiruv uchun kalit so'zni kiritganda shunga mos kontekst olib kelib beriladi.
Misol: Hans Peter Luhn information retrieval sohasining asoschilaridan biridir
Natija:
๐ธ Hans - HANS Peter Luhn information
๐ธ Peter - Hans PETER Luhn information retrieval
๐ธ Luhn - Hans Peter LUHN information retrieval sohasining
๐ธ information - Hans Peter Luhn INFORMATION retrieval sohasining asoschilaridan
๐ธ retrieval - Peter Luhn information RETRIEVAL sohasining asoschilaridan biridir
๐ธ sohasining - Luhn information retrieval SOHASINING asoschilaridan biridir
๐ธ asoschilaridan - information retrieval sohasining ASOSCHILARIDAN biridir
๐ธ biridir - retrieval sohasining asoschilaridan BIRIDIR
@yetimdasturchi
1๐5๐2๐2 2โก1โค1๐ฅ1 1
Forwarded from Yetim dasturchi kundaligi
Ish faoliyatingiz davomida tez-tez kerak bo'lishi mumkin bo'lgan onlayn utilitalar. O'zim ham doimiy foydalanib boraman. Ortiqcha instalizatsiyasiz chromeni o'zida ishingizni bitira olasiz.
๐ธ learn-anything.xyz - birgina keyword orqali ma'lumot olishingiz kerak bo'lgan resurslarga judayam tez yo'l topasiz.
๐ธ excalidraw.com - brainstorm vaqtida tezda chizmalarni chizib olishingiz yoki jamoangiz bilan maslahatlashib olishingiz uchun qo'l keladi
๐ธ text-compare.com - matnlardagi farqlarni tezkor ajratib olish uchun qo'l keladi. Ayniqsa loglar yoki shunga o'xshash joylarda tezkor qidiruv uchun doimiy kerak bo'lishi mumkin.
๐ธ draw.io - flow chartlar chizish va ularni boshqalar bilan bo'lishish uchun qulay ilova
๐ธ stackedit.io - Markdown bilan ishlash uchun eng yaxshi utilitalardan biri. Deyarli barcha formatlash va export qilish metodlarini qo'llab quvvatlaydi.
๐ธ photopea.com - Adobe Photopning onlayn replikasi, professional ishlar uchun ham bemalol yetarli.
๐ธ remove.bg - resurs fayllar bilan ishlashda ularning orqa fonini tozalash uchun yaxshi yechim.
๐ธ tinkercad.com - 3D modellarni onlayn tayyorlash uchun (o'zim ham to'liq shundan foydalanaman) va sxemalarni tezda chizib olish uchun
๐ธ regex101.com - ko'plab standartlarga mos regex namunalarini test qila olish va real jarayonni kuzatish mumkin.
๐ธ hexed.it - brauzerning o'zida to'laqonli hex inspeksiya qilishingiz mumkin
๐ธ decompiler.com - ko'plab turdagi dasturlarni va ularning kutubxonalarini analiz orqali dekompilatsiya qilishingiz uchun qulay utilita. Ayniqsa android ilovalar uchun yaxshi analiz qila olish imkoniga ega.
๐ธ serialterminal.com - Serial qurilmalar (UART) bilan ulanish uchun onlayn utilita. Arduino, USB modemlar yoki shunga o'xshash qurilmalar bilan ishlashda qo'l keladi.
๐ธ obfuscator.io - Javascript kodlarni turli parametrlar bilan obfuskatsiya qilishingiz va bu orqali kodlarni o'qishdan ma'lum darajada himoya qila olasiz.
๐ธ prettier.io - kodlarni formatlash uchun eng yaxshi yechimlardan biri. Alohida servis sifatida editorlarga ham ulash mumkin.
๐ธ havola.uz - yuqoridagi kabi qiziqarli utilitalar va saytlarning havolalarini tezda oson topishingiz mumkin.
@yetimdasturchi
๐ธ learn-anything.xyz - birgina keyword orqali ma'lumot olishingiz kerak bo'lgan resurslarga judayam tez yo'l topasiz.
๐ธ excalidraw.com - brainstorm vaqtida tezda chizmalarni chizib olishingiz yoki jamoangiz bilan maslahatlashib olishingiz uchun qo'l keladi
๐ธ text-compare.com - matnlardagi farqlarni tezkor ajratib olish uchun qo'l keladi. Ayniqsa loglar yoki shunga o'xshash joylarda tezkor qidiruv uchun doimiy kerak bo'lishi mumkin.
๐ธ draw.io - flow chartlar chizish va ularni boshqalar bilan bo'lishish uchun qulay ilova
๐ธ stackedit.io - Markdown bilan ishlash uchun eng yaxshi utilitalardan biri. Deyarli barcha formatlash va export qilish metodlarini qo'llab quvvatlaydi.
๐ธ photopea.com - Adobe Photopning onlayn replikasi, professional ishlar uchun ham bemalol yetarli.
๐ธ remove.bg - resurs fayllar bilan ishlashda ularning orqa fonini tozalash uchun yaxshi yechim.
๐ธ tinkercad.com - 3D modellarni onlayn tayyorlash uchun (o'zim ham to'liq shundan foydalanaman) va sxemalarni tezda chizib olish uchun
๐ธ regex101.com - ko'plab standartlarga mos regex namunalarini test qila olish va real jarayonni kuzatish mumkin.
๐ธ hexed.it - brauzerning o'zida to'laqonli hex inspeksiya qilishingiz mumkin
๐ธ decompiler.com - ko'plab turdagi dasturlarni va ularning kutubxonalarini analiz orqali dekompilatsiya qilishingiz uchun qulay utilita. Ayniqsa android ilovalar uchun yaxshi analiz qila olish imkoniga ega.
๐ธ serialterminal.com - Serial qurilmalar (UART) bilan ulanish uchun onlayn utilita. Arduino, USB modemlar yoki shunga o'xshash qurilmalar bilan ishlashda qo'l keladi.
๐ธ obfuscator.io - Javascript kodlarni turli parametrlar bilan obfuskatsiya qilishingiz va bu orqali kodlarni o'qishdan ma'lum darajada himoya qila olasiz.
๐ธ prettier.io - kodlarni formatlash uchun eng yaxshi yechimlardan biri. Alohida servis sifatida editorlarga ham ulash mumkin.
๐ธ havola.uz - yuqoridagi kabi qiziqarli utilitalar va saytlarning havolalarini tezda oson topishingiz mumkin.
@yetimdasturchi
1๐2๐ฅ2
Forwarded from Yetim dasturchi kundaligi
Research uchun yana bir foydali utilitalardan biri: godbolt.org
Kompiliyatsiya jarayonini taxminiy ko'rish uchun qo'l keladi.
Kompiliyatsiya jarayonini taxminiy ko'rish uchun qo'l keladi.
1
Forwarded from Yetim dasturchi kundaligi
Rustdagi bir qator kod Cloudflare tizimini qulatga va jahon internet tarmog'ini izdan chiqishiga sabab bo'lgan. Bugun Rust va C masalasida Sohib (orzklv) bilan bahslashib qolgandik ๐
Rustni xatolarni o'tkazmasligi odatda zo'r, lekin bu ba'zan xalaqit ham beradimikan deyman. C bu "-Hay bolam o'zing bilasan!" deydigan otaga o'xshaydi. Ya'ni xohlagancha xato qilish va eksperiment o'tkazish mumkin. Demak xaklar soni ko'payadi.
Da tan olish kerak cloudflare agar shu qismi C da bo'lganda muammoni xuy topishi ham mumkin edi, lekin boshidan bufer to'lishiga bunaqa xatoni o'tkazib indamay yuborish ehtimoli ham ko'p edi. Odatda C da bu tabiiy refleks bilan qilinadi. Shuningdek yana bir narsani tan olish kerak memory safe yo'qligi sabab ham C bu qismda yutqazadi, ya'ni ko'plab CVElar aynan shu sabab kelib chiqadi.
Ammo eng mininum levelda hardwarega kelganda C yutib chiqaveradi har doim. Masalan Rustni allaqachon linux kernelga integratsiyasini boshlangan. Ammmo nega haligacha bu ekotizm uchun normal Audio yoki USB driver qilinmagan deb o'ylaysiz? Masalan oddiy: C da memory safe yo'qligi driverlarda instalgancha pointer aliasing qilishga imkon beradi, bu esa Rust falsafasiga zid. Ya'ni MMIO bilan ishlashda Rust haddan tashqari talab qo'yib cheklab yuboradi. C esa shunchaki to'g'ridan to'g'ri registerni ko'rsatish va unga yozishga imkon beradi. Bu esa datasheetga qarab ortiqcha harakatlarsiz bemalol driver yozishni taminlaydi. Oddiy misol hardware bilan interrupt handler qilib ko'rishni Rust hozircha eplay olmaydi, aniqrog'i qiladi ammo 90% kodingiz jarayon xavfliligini tekshirishdan iborat bo'ladi. Ya'ni bunaqa keyslar aslida real memory emas to'laqonli mapping hisoblanadi. Bu esa o'z navbatida Rust bozirini microcontrollerdan ham chiqarib yuboradi. ABI masalasi ham xuddi shunday, C ustida turipti.
https://blog.cloudflare.com/18-november-2025-outage/
Rustni xatolarni o'tkazmasligi odatda zo'r, lekin bu ba'zan xalaqit ham beradimikan deyman. C bu "-Hay bolam o'zing bilasan!" deydigan otaga o'xshaydi. Ya'ni xohlagancha xato qilish va eksperiment o'tkazish mumkin. Demak xaklar soni ko'payadi.
Da tan olish kerak cloudflare agar shu qismi C da bo'lganda muammoni xuy topishi ham mumkin edi, lekin boshidan bufer to'lishiga bunaqa xatoni o'tkazib indamay yuborish ehtimoli ham ko'p edi. Odatda C da bu tabiiy refleks bilan qilinadi. Shuningdek yana bir narsani tan olish kerak memory safe yo'qligi sabab ham C bu qismda yutqazadi, ya'ni ko'plab CVElar aynan shu sabab kelib chiqadi.
Ammo eng mininum levelda hardwarega kelganda C yutib chiqaveradi har doim. Masalan Rustni allaqachon linux kernelga integratsiyasini boshlangan. Ammmo nega haligacha bu ekotizm uchun normal Audio yoki USB driver qilinmagan deb o'ylaysiz? Masalan oddiy: C da memory safe yo'qligi driverlarda instalgancha pointer aliasing qilishga imkon beradi, bu esa Rust falsafasiga zid. Ya'ni MMIO bilan ishlashda Rust haddan tashqari talab qo'yib cheklab yuboradi. C esa shunchaki to'g'ridan to'g'ri registerni ko'rsatish va unga yozishga imkon beradi. Bu esa datasheetga qarab ortiqcha harakatlarsiz bemalol driver yozishni taminlaydi. Oddiy misol hardware bilan interrupt handler qilib ko'rishni Rust hozircha eplay olmaydi, aniqrog'i qiladi ammo 90% kodingiz jarayon xavfliligini tekshirishdan iborat bo'ladi. Ya'ni bunaqa keyslar aslida real memory emas to'laqonli mapping hisoblanadi. Bu esa o'z navbatida Rust bozirini microcontrollerdan ham chiqarib yuboradi. ABI masalasi ham xuddi shunday, C ustida turipti.
https://blog.cloudflare.com/18-november-2025-outage/
โค1
Forwarded from Yetim dasturchi kundaligi
๐ธ Masalan registerga murojaat qilish:
C:
Rust:
โน๏ธ Bunda har ikkisida ham bir xil natija bo'ladi, ammo build jarayoni murakkab.
-----------
๐ธ I/O portlar bilan ishlash
C:
Rust:
C ASM:
Rust asm:
โน๏ธ E'tibor qilgan bo'lsangiz C va Rustda ham ikkita instruksiya, ammo C da bitta load. Ya'ni portni bir marta ochib keyin registerdan ovolyapti xolos. Demak yuklama oshishni boshladi.
-----------
๐ธ Looplar:
C:
Rust:
C ASM:
Rust:
โน๏ธ Cda unroll bilan 16 instruksiya, Rustda bo'lsa 72ta instruksiya. Ya'ni bound check + loop overhead qo'shilyapti.
C:
volatile uint8_t *PORTB = (volatile uint8_t*)0x25;
Rust:
const PORTB: *mut u8 = 0x25 as *mut u8;
unsafe {
let v = core::ptr::read_volatile(PORTB);
core::ptr::write_volatile(PORTB, v ^ (1 << 0));
}
โน๏ธ Bunda har ikkisida ham bir xil natija bo'ladi, ammo build jarayoni murakkab.
-----------
๐ธ I/O portlar bilan ishlash
C:
uint8_t *p = (uint8_t*)0x25;
uint8_t a = *p;
uint8_t b = *p;
Rust:
let a = unsafe { *port };
let b = unsafe { *port };C ASM:
in r24, 0x25
mov r25, r24
Rust asm:
ld r24, (0x25)
ld r25, (0x25)
โน๏ธ E'tibor qilgan bo'lsangiz C va Rustda ham ikkita instruksiya, ammo C da bitta load. Ya'ni portni bir marta ochib keyin registerdan ovolyapti xolos. Demak yuklama oshishni boshladi.
-----------
๐ธ Looplar:
C:
for (i=0; i<8; i++)
sum += buf[i];
Rust:
for i in 0..8 {
sum += buf[i];
}C ASM:
ld r18, X+
add r24, r18
ld r18, X+
add r24, r18
ld r18, X+
add r24, r18
ld r18, X+
add r24, r18
ld r18, X+
add r24, r18
ld r18, X+
add r24, r18
ld r18, X+
add r24, r18
ld r18, X+
add r24, r18
Rust:
loop_start:
cpi r16, 8
brge panic
movw r30, r20
add r30, r16
adc r31, r1
ld r18, Z
add r24, r18
inc r16
rjmp loop_start
โน๏ธ Cda unroll bilan 16 instruksiya, Rustda bo'lsa 72ta instruksiya. Ya'ni bound check + loop overhead qo'shilyapti.
๐7๐ฅ4๐ฏ4โค2โคโ๐ฅ1 1 1 1 1 1
Forwarded from CV muhandis kundaligi
This media is not supported in your browser
VIEW IN TELEGRAM
"Men va Claude code" nomli video๐
๐6โค3๐ฅฐ3 2 2๐ฅ1๐1โคโ๐ฅ1๐ฏ1 1 1