Zang tili.

Kontaktlar / topshirish

Golovna Ishni optimallashtirish
Zang

- Mozilla buzayotgan yangi eksperimental til dasturlash.

Til kompilyatsiya qilingan va ko'p paradigmatik bo'lib, C/C++ ga muqobil sifatida joylashtirilgan, bu o'z-o'zidan yaxshi, chunki raqobat uchun unchalik ko'p da'vogarlar yo'q.

Siz Google'dan D Walter Bright va Go'ni taxmin qilishingiz mumkin.
Rust funktsional, parallel, protsessual va ob'ektga yo'naltirilgan dasturlashni rag'batlantiradi va hokazo.
Amaliy dasturlashda haqiqatda o'rganilishi mumkin bo'lgan bir qator paradigmalar ham mavjud.

Hujjatlarni tarjima qilish bilan bezovta qilmayman (bundan tashqari, u juda kam va doimiy ravishda o'zgarib turadi, chunki hali filmning rasmiy nashri chiqmagan), chunki men filmning ba'zi xususiyatlarini ta'kidlamoqchiman.

Ma'lumotlar rasmiy hujjatlardan va Internetdagi tilning ko'plab sirlaridan to'plangan.<= n { result *= i; i += 1; } ret result; }

Birinchi dushman Tilning sintaksisi an'anaviy si uslubida bo'ladi (buni e'tiborsiz qoldirib bo'lmaydi, chunki u allaqachon de-fakto standartdir). C/C++ dizayni barcha vositalar bilan himoyalanganligi aniq.

An'anaviy Salom dunyosi quyidagicha ko'rinadi:

  • std dan foydalaning;
    fn main(args: ) ( std::io::println("salom dunyo " + args + "!"); )
  • Katlanuvchi dumba - faktoriy kengayish funktsiyasi:
  • Fn fac(n: int) -> int ( natija = 1, i = 1; esa i
  • Ko'rinib turibdiki, funktsiyalar "funktsional" uslubdan farq qiladi (bu uslub an'anaviy "int fac (int n)" ga nisbatan ba'zi afzalliklarga ega).
  • Ko'p hollarda kod bloklarini boshqacha ko'rish mumkin.
    Zokrema, ehtimol shunday:
  • let x = if the_stars_align() ( 4 ) else if something_else() ( 3 ) else ( 0 );
  • Funktsiya sintaksisi avval fn kalit so'zi, keyin argumentlar ro'yxati, nomdan keyin argument turi ko'rsatiladi, so'ngra funktsiya qiymatni aylantirganda - strelka "->" va aylantiriladigan qiymat turi.
    Xuddi shu tarzda siz o'zgartirishni belgilashingiz mumkin: let kalit so'zi, o'zgartirish nomi, o'zgartirilgandan so'ng siz turni ko'rsatish uchun qo'sh katakchadan foydalanishingiz mumkin va keyin kob qiymatlarini belgilashingiz mumkin.
  • hisoblaymiz: int = 5;
  • mo'ylovni yuvgandan so'ng, o'zgarishlar o'zgarmasdir;
  • O'zgaruvchan kalit so'zlarni o'chirish uchun o'zgaruvchan kalit so'z ishlatiladi.
Asosiy turlarning nomlari eng ixcham, ular kamroq tarqalgan: i8, i16, i32, i64, u8, u16, u32, u64, f32, f64
Mahsulot tayinlangandan so'ng, turlarni avtomatik ravishda almashtirish rag'batlantiriladi Mahalliy dasturlarimiz ishlab chiqilgan: Kalit so'z
Mahsulot tayinlangandan so'ng, turlarni avtomatik ravishda almashtirish rag'batlantiriladi muvaffaqiyatsiz joriy jarayonni yakunlaydi
Mahsulot tayinlangandan so'ng, turlarni avtomatik ravishda almashtirish rag'batlantiriladi jurnal Viraz Movi-ni jurnalga chiqaring (masalan, stderr-ga)
Mahsulot tayinlangandan so'ng, turlarni avtomatik ravishda almashtirish rag'batlantiriladi da'vo qilish ifodani tekshiradi va agar bo'lmasa, joriy jarayonni yakunlaydi

Eslatma

jarayon favqulodda tugatilgan taqdirda qo'shimcha ma'lumotlarni ko'rsatishga imkon beradi. Tipi hurmat Go'ga o'xshash Rust qo'llab-quvvatlaydi
strukturaviy tiplashtirish
(Mualliflarning fikriga ko'ra, til mustaqil ravishda rivojlangan bo'lsa-da, bu ularning muvaffaqiyatli o'tmishdoshlari - Alef, Limbo va boshqalarning kirib kelishi bilan bog'liq).
Strukturaviy tiplash nima?
Masalan, fayllaringiz tuzilmaga ega emas (yoki Rust terminologiyasida “yozuv”)

turi nuqtasi = (x: float, y: float);

Siz "nuqta" argument turlari bilan bir qator turli funktsiyalarni ovoz chiqarib qo'yishingiz mumkin.

Keyin, bu erda boshqa joyda, masalan, boshqa har qanday tuzilma uchun ovoz berishingiz mumkin

MySuperPoint = (x: float, y: float);

Ushbu turdagi o'zgarishlar nuqta turidan butunlay farq qiladi.

Aksincha, nominativ tiplash C, C++, C# tomonidan qabul qilinadi va Java bunday konstruktsiyalarga ruxsat bermaydi.

Shakllar paydo bo'ladi.

Uning sintaksisi to'liq mantiqiy, C++ dan "shablon" ning tartibsizligisiz. Funktsiyalar va ma'lumotlar turlarining shablonlari qo'llab-quvvatlanadi. Fn for_rev

(v: [T], akt: blok(T)) ( let i = std::vec::len(v); while i > 0u ( i -= 1u; act(v[i]); ) ) turi circular_buf = (start: uint, end: uint, buf:); Til bu nomni qo'llab-quvvatlaydi

teglar

.

Bu qo'shimcha maydonga ega C bilan birlashishdan boshqa narsa emas - foydalanilayotgan optsionning kodi (ya'ni konsolidatsiya va qayta sug'urta o'rtasida farq bor).
Yoki nazariya nuqtai nazaridan, bu ma'lumotlarning algebraik turidir.
Teg shakli (doira (nuqta, float); to'rtburchak (nuqta, nuqta); )
Eng oddiy shaklda teg qayta tartibga solish bilan bir xil: Tag hayvon ( it; mushuk; ) a: hayvon = it; a = mushuk; Katlanmış teri lezyonlarida "haddan tashqari kuchlanish" elementi o'zining "konstruktori" ga ega bo'lgan mustaqil tuzilishdir.
Yana bir foydali misol - bu "ro'yxat" tipidagi ob'ekt ko'rsatilgan rekursiv tuzilma:
teglar ro'yxati

( nol; minuslar (T, @list

);
) bo'lsin: ro'yxat
= minuslar(10, @cons(12, @nil)); Teglar katlanabilen vizualizatsiyada ishtirok etishi mumkin. alt x ( cons(a, @cons(b, _)) ( process_pair(a,b); ) cons(10, _) ( process_ten(); ) _ ( muvaffaqiyatsiz; ) )

Shakl mosligi Yangi boshlanuvchilar uchun siz mos keladigan naqshni kalit sifatida ko'rishingiz mumkin.
Alt kalit so'zi qidiriladi, shundan so'ng virus tahlil qilinadi, so'ngra operator tanasi naqsh va naqshlarni topish uchun ishlatiladi.<- x;
alt my_number ( 0 ( std::io::println("nol"); ) 1 | 2 ( std::io::println("bir yoki ikkita"); ) 3 dan 10 gacha ( std::io::println ("uchdan o'ngacha"); _ ( std::io::println("boshqa narsa"); ) )

Zamikannya, qisman turg'unlik, iteratori

Bu erda funktsional dasturlash boshlanadi.

Rust yuqori darajadagi funktsiyalar tushunchasini - argumentlarni o'ziga xos qilib oladigan va boshqa funktsiyalarni aylantira oladigan funktsiyalarni qattiq ta'kidlaydi. 1. Kalit so‘z lambda

Vikoryst ichki funksiya va funktsional ma'lumotlar turini aniqlashtirish uchun ishlatiladi.

Fn make_plus_function(x: int) -> lambda(int) -> int ( lambda(y: int) -> int ( x + y ) ) let plus_ikki = make_plus_function(2);

assert plus_ikki(3) == 5; Bu ilova make_plus_function funksiyasidan foydalanadi, u int tipidagi bitta “x” argumentini oladi va funksiyani “int->int” turiga aylantiradi (bu yerda lambda kalit so‘zi). Bu funksiya uning funksiyasini tavsiflaydi.
"Qaytish" operatorining ahamiyati katta, ammo FP uchun bu o'ng tomonda asosiy ahamiyatga ega.

2. Kalit so‘z

blok Bu funktsiya turini tushuntirish uchun ishlatiladi - boshlang'ich kod blokiga o'xshash almashtirilishi mumkin bo'lgan funktsiya argumenti. fn map_int(f: block(int) -> int, vec: ) -> ( natija bersin = ;

Bu yerda bizda funksiya mavjud bo‘lib, uning kiritilishi blok – asosan “int->int” tipidagi lambda funksiyasi va int tipidagi vektor (quyida vektorlar sintaksisi haqida batafsilroq).

Koddagi "blok" ning o'zi birlamchi bo'lmagan sintaksisga o'xshash tarzda yoziladi (| x | x + 1).
Ayniqsa, men uchun C# lambdi, belgisi |

Avvaliga u bir oz ABO sifatida ko'rib chiqiladi (chunki, gapirishdan oldin, Rustda bu boshqa shunga o'xshash operatsiyalar bilan bir xil).

3. Qisman turg'unlik - boshqa funktsiyaga ma'lum argumentlar ma'nosini kiritish orqali ko'p sonli argumentlar bilan boshqa funktsiya asosida funktsiyani yaratish.

Fn add(x: int, y: int) -> int ( ret x + y; ) type single_param_fn = fn(int) -> int;

add4 bo'lsin: single_param_fn = bog'lash qo'shish(4, _);
add5 bo'lsin: single_param_fn = bog'lash qo'shish (_, 5);

Funktsional ob'ektlarni birlamchi funktsiyalar kabi chaqirish mumkin.
assert (qo‘shish(4,5) == qo‘shish4(5));
assert (qo‘shish(4,5) == qo‘shish5(4));< 42); }
4. Sof funksiyalar va predikatlar

Sof funktsiyalar - bular yon ta'sirga ega bo'lishi mumkin bo'lgan funktsiyalardir (sof bo'lgan boshqa funktsiyalardan tashqari).
Bunday funktsiyalar sof kalit so'z bilan ifodalanadi.
sof fn lt_42(x: int) -> bool (ret (x
Predikatlar bool turini aylantiruvchi sof funksiyalardir.
Bunday funktsiyalar quvvat turi tizimida o'zgartirilishi mumkin (div. yanada), ular turli statik tekshiruvlar uchun kompilyatsiya bosqichida ishlatilishi mumkin.

Sintaktik makroslar

Funktsiya rejalashtirilgan, ammo bu juda zo'r.
Rust hali ham boshoqlarni ishlab chiqish bosqichida.
std::io::println(#fmt("%s - %d", "javob", 42));
Bizning printf-ga o'xshash virus, lekin kompilyatsiya vaqtida tuzilgan (ko'rinishidan, barcha argument o'zgarishlari kompilyatsiya bosqichida aniqlanadi).

Afsuski, sintaktik makrolar bo'yicha juda kam material mavjud va hidning o'zi hali rivojlanish bosqichida, ammo u Nemerle tipidagi makroslarga o'xshaydi degan umid bor.

Gapirishdan oldin, Nemerlega qo'shimcha ravishda, # qo'shimcha belgisi orqasida sintaktik makrolarni ko'rishga qaror qildim, men hatto savodlilarini ham hurmat qilaman: so'l - bu mohiyat, hatto funktsiyaga bo'lingan va men muhimlarini birinchi qarashda hurmat qilaman, kodlar funksiyalarni chaqiradi va bu erda - makrolar
Atributlar
Ko'pgina Rust ishlari bitta operatsion tizim jarayonida bajarilishi mumkin.

Rust vazifalari "engil": teri vazifasi OS jarayoniga qaraganda kamroq xotiraga ega va ular orasidagi aloqa OS jarayonlari o'rtasida kamroq aloqaga olib keladi (bu erda, ehtimol, "iplar" xavf ostida).
Vazifa argumentlarsiz kamida bitta funktsiyadan iborat.
Vazifani ishga tushirish qo'shimcha spawn funktsiyasi yordamida amalga oshiriladi.
Teri kanallardan ham foydalanishi mumkin, ular orqali u boshqa qismlarga ma'lumot uzatadi.
Kanal - bu kanalning ma'lumotlar turi bilan parametrlangan maxsus shablon tipidagi chan.
Masalan, chan imzosiz baytlarni uzatish kanalidir.
Kanalni uzatish uchun yuborish funksiyasidan foydalaniladi, uning birinchi argumenti kanal, ikkinchisi esa uzatish qiymati hisoblanadi.
Aslida, bu funktsiya ichki buferning qiymatlarini kanalga o'tkazishdir.

Ma'lumotlarni olish uchun siz vikory portidan foydalanishingiz kerak.

Port shablon tipidagi port bo'lib, u portning ma'lumotlar turiga qarab parametrlanadi: port - imzosiz baytlarni qabul qilish uchun port.
Portlardan o'qish uchun recv funktsiyasidan foydalaning, uning argumenti port va aylantirilgan qiymatlar portdan olingan ma'lumotlardir.

Misol uchun, agar bizda "fayl" turidagi ob'ekt bo'lsa, u "yopiq" va "ochilgan" maqomga ega bo'lishi mumkin.

Agar fayl yopiq bo'lsa, fayldan o'qish operatsiyasiga ruxsat berilmaydi.

Joriy tillarda oʻqish funksiyasini yoqing, ayblovchi xabarni yuboradi yoki kechirim kodini aylantiradi.
Tur tizimi kompilyatsiya bosqichida bunday noto'g'rilikni aniqlay oladi - xuddi kompilyator o'qish operatsiyasi har qanday mumkin bo'lgan yozish operatsiyasidan oldin sodir bo'ladi deb taxmin qilganidek, "O'qish" usuli mamlakatda amal qiladi " Ochilgan fayl" ni bosing Ob'ektni ushbu joyga o'tkazish uchun "Ochiq" usuli.< bool { ret a < b; } fn test() { let x: int = 10; let y: int = 20; check is_less_than(x,y); }
Rust "predikatlar" kontseptsiyasiga ega - yon ta'sirga ega bo'lmagan va bool turini o'zgartiradigan maxsus funktsiyalar.
Bunday funktsiyalar kompilyator tomonidan kompilyatsiya bosqichida boshqa fikrlarni statik tekshirish orqali kiritish uchun ishlatilishi mumkin.

Cheklovlar - bu kompilyatsiya bosqichida amalga oshirilishi mumkin bo'lgan maxsus o'zgarishlar.

Buning uchun Check kalit so'zi ishlatiladi.

sof fn dan_kamroq(int a, int b) -

Predikatlar funktsiyaning kirish parametrlariga shu tarzda “osilishi” mumkin:

fn testi (int x, int y): dan_kamroq(x,y) ( ... )

  • Quvvat turi haqida juda kam ma'lumot mavjud, shuning uchun hali ham noaniq bo'lgan juda ko'p fikrlar mavjud, ammo kontseptsiya har qanday holatda tsikavada. Ana xolos. Men ba'zi yaxshi daqiqalarni o'tkazib yuborgan bo'lishim mumkin va shuning uchun men juda shishib ketdim.?
  • Hozircha siz Rust kompilyatorini darhol yuklab olishingiz va turli vositalar bilan o'ynashga harakat qilishingiz mumkin. Ushbu to'plam haqida ma'lumotni quyidagi manzilda topishingiz mumkin )?
  • Men Rust bilan yangi tanishman, lekin u mening sevimli dasturimga aylanib qolgandir. Men Rust-da kamroq ergonomik bo'lgan va bir soatdan ko'proq vaqtni talab qiladigan kichik loyihalarni yozmoqchiman (bilasizmi, men bilan sahna ortida), bu mening dastur dizayni haqidagi fikrlash tarzimni qiyinlashtiradi. )?
  • Mening kompilyator bilan janglarim yangi narsalarni o'rganishim bilan kamroq bo'ladi. Rust jamoasining qolgan qismi Tokio kutubxonasida joriy qilingan asinxron kiritish/chiqarishga katta kuch bag‘ishladi. )?

  • Bu ajoyib.

Tadqiqot ishtirokchilarining ko'pchiligi veb-serverlar va tegishli nutqlar bilan ishlamaganligi sababli, biz nimaga erishmoqchi ekanligimizni tushunishmadi. Bu narsalar 1.0-versiya soatlarida muhokama qilinganligi sababli, men ilgari hech qachon muhokama qilinmagan narsani sezmay qololmayman.) JSON formatida, formatlangan ko'rinishda konsoldagi eslatmalar ro'yxatini tahlil qiladi va ko'rsatadi.

Hammamiz qisqa kodga o'ralgan edik.

Yak? Mushuk ostida hayratlanarli. Xavfli kalit so'z Rust dizaynining ko'rinmas qismidir.

U bilan tanish bo'lmaganlar uchun: xavfli - bu oddiy so'z bilan aytganda, turdagi tekshiruvni chetlab o'tishning bir usuli bo'lgan kalit so'z (

turini tekshirish

) Zang.

Kalit so'zdan foydalanish boylar va bilimsizlar uchun xavfli.

Xotirada ishlayotganda ishdan chiqmaydigan dasturlar Rustning xususiyati emasligi rostmi? Agar shunday bo'lsa, nega turdagi tizimni chetlab o'tishning oson yo'li bor? Bu film dizaynidagi nuqson bo'lishi mumkin.

Shunga qaramay, mening fikrimcha, xavfli emas.

Aslida, bu tilning muhim qismidir.

Xavfli chiqish valfi rolini o'ynaydi - bu biz oddiy holatlarda turdagi tizimni o'zgartirishimiz mumkinligini anglatadi, bu sizning kodingizda ishlatmoqchi bo'lgan barcha hiyla-nayranglarni engishga imkon beradi.

Rust - ko'plab boshqa mashhur tillardan farq qiladigan oqlangan til.

Masalan, Rust turli sinflardan foydalanish va ularni qisqartirish o'rniga turlarga asoslangan kuchli turlar tizimini joriy qiladi. Biroq, men Rust uchun yangi bo'lgan boy dasturchilarni (men kabi) dizayn naqshlaridan bexabar ekanligini hurmat qilaman. Ushbu maqolada men dizayn shablonini muhokama qilmoqchiman

yangi turi

(yangi turdagi), shuningdek, qayta yaratilgan turlarga yordam beruvchi From va Into turlari.

Qolgan vaqtda men dasturlashda biz foydalanadigan dizayn naqshlari va texnikasi haqida ko'p vaqt o'tkazdim.

Loyihani kuzatishni boshlash va bir necha marta eshitgan tanish naqsh va uslublarni o'rganish juda ajoyib.

Bu loyihani tushunishni osonlashtiradi va ishni tezlashtirishga imkon beradi.

Ba'zan siz yangi loyiha ustida ishlayapsiz va oxirgi loyihada bo'lgani kabi, xuddi shunday qilish kerakligini tushunasiz.

Bu funksiya yoki kutubxonaning bir qismi bo'lmasligi mumkin, lekin ingichka so'l yoki kichik konteynerni o'rash mumkin bo'lmasligi mumkin.

Bu oddiygina dizayn shabloni yoki muammoni yaxshiroq hal qiladigan tizimli kontseptsiya bo'lishi mumkin.

Ko'pincha bunday muammolarga duch keladigan oddiy shablonlardan biri bu "Kintseviy avtomati".

  • Men bu so'zlarga nima e'tibor berayotganimni va nima uchun bu juda muhimligini tushunish uchun bir necha soat vaqt sarflamoqchiman.
  • Quyida Rust dasturining harakati, nusxa ko'chirish va saqlashning grafik tavsifi keltirilgan.

Asosan, bu tushunchalar Rustga xos bo'lib, ko'pincha yangi boshlanuvchilar uchun to'siq bo'ladi.

1 2 3 4 Chalkashmaslik uchun matnni minimal darajaga tushirishga harakat qildim.

Nat nol yoki natural sondir.

Hurmat: fyuchers-rs loyihasi qayta tashkil etildi va ko'plab nutqlar nomi o'zgartirildi.

Bu mumkin, mumkin, yangilangan.

Fyucherslar bilan ishlashni boshlaylik

Ushbu hujjat sizga Rust dasturlash uchun konteyner ishlab chiqishga yordam beradi - fyucherslar, bu fyuchers va oqimlarni nol reliz bilan amalga oshirishni ta'minlaydi.

  • Fyuchers C++, Java va Scala kabi boshqa turli dasturlash tillarida mavjud va fyuchers konteyneri ushbu kutubxonalardan olinadi.
  • Biroq, ergonomik, shuningdek, nol ko'p qirrali, Rustning kuchi va o'zi bilan mavhumlik falsafasini davom ettirish muhimdir: fyuchers kompozitsiyasini yaratish uchun xotira talab qilinmaydi, ammo Vazifa uchun ular bilan ishlash kerak. , faqat bitta ajratish talab qilinadi.
  • Fyucherslar Rust-da asinxron, yuqori samarali kirish/chiqish uchun asos bo'lib xizmat qiladi va erta unumdorlik haqidagi hikoyalar fyucherslarni taklif qiluvchi oddiy HTTP serveri juda tez ekanligini ko'rsatadi.
  • Ushbu hujjat bir nechta bo'limlarga bo'lingan:
  • "Salom, nur!";
  • kelajak turi;
  • oqim turi;

Hurmat: fyuchers-rs loyihasi qayta tashkil etildi va ko'plab nutqlar nomi o'zgartirildi.

aniq fyucherslar va oqim (Oqim); kelajak burilish; Vazifa va kelajak;

mahalliy ma'lumotlar. Rust ekotizimidagi asosiy tozalashlardan biri samarali va samarali asinxron kiritish/video Rust jamoasining qolgan qismi Tokio kutubxonasida joriy qilingan asinxron kiritish/chiqarishga katta kuch bag‘ishladi.. Bizda mio kutubxonasidan ajoyib poydevor bor va bundan ham ko'proq: biz oxirgi mashinalarni qo'lda ochishimiz va darvoza bosishlarini o'ynashimiz kerak. Biz chiroyli ergonomikaga ega bo'lgan jigarrangroq narsani xohlaymiz, lekin bu etarli emas

tartib

birgalikda ishlaydigan asinxron abstraktsiyalar ekotizimini qo'llab-quvvatlash.

Bu juda tanish tuyuladi: xuddi shu meta qayta ko'rib chiqildi

Iron - bu mening Rust dasturi tomonidan yozilgan va boshqa giper kutubxonaga asoslangan yuqori sifatli veb-ramka.

Rust bizga beradigan barcha g'alabalarni tezlashtirish uchun temirni shunday tartibda parchalash.

Temir o'z yadrosida noyob blokirovka operatsiyalariga ega.

  • Falsafa
  • Dazmol zamin qoplamasini iloji boricha kengaytirish tamoyiliga asoslanadi.

Quvvat funksiyasini kengaytirish uchun kontseptsiyalarni kiritishimiz kerak:

"oraliq" turlar - so'rovlarni qayta ishlashda o'zaro faoliyat funksiyalarni amalga oshirish uchun ishlatiladi;

Modifikatorlar kirish va chiqishlarni eng ergonomik tarzda o'zgartirish uchun ishlatiladi.

Statistik ma'lumotlar davomida siz modifikatorlar va oraliq turlarning asosiy qismi haqida bilib olasiz.

1 2 3 Loyihani yaratish

Boshlash uchun keling, Vikory jamoasi Cargo yordamida loyihani yarataylik:

Kompilyatsiya qilingan fayl chiqariladi:

$ rustc hello.rs $ du -h salom 632K salom

  • Oddiy chop etish uchun 632 kilobayt?
  • Rust C/C++ o'rnini bosadigan tizim tili sifatida joylashtirilgan, shunday emasmi?
  • Nega shunga o'xshash dasturni eng yaqin raqibingizda sinab ko'rmaysiz?

Bizning o'rta sinfimiz tanlangan buxgalteriya hisobining afzalliklaridan biri bu yuqori samarali blokirovkasiz ma'lumotlar tuzilmalarini ishlab chiqish qulayligi haqida keng fikrga ega.

Ularda xotirani qo'lda boshqarish oson emas va GC bu muammoni osongina hal qiladi.

Xotiraga va xotira oqimiga kirish uchun imtiyozlar eng ko'p hurmatni o'ziga tortadigan ikki toifadagi imtiyozlarga ega, shuning uchun ularning miqdorini oldini olish yoki o'zgartirishni xohlash juda qiyin.

Garchi ularning nomlari o'xshashlikni bildirsa-da, qo'shiq dunyosining hidi diametrli uzoq va muammolarning eng yuqori qismi bizni boshqasidan qutqarmaydi. Toshlarning keng assortimenti bu fikrni tasdiqlaydi: ular xotiraga kirishga xalaqit beradi, bu keng xotiraning ishini oladi. Ko'rinishidan oddiyroq: xotiraga kirishni buzish - bularning barchasi noto'g'ri ma'lumotlar bilan, va xotira yo'qolishi - bu mavjudligi

to'g'ri ma'lumotlar bilan qo'shiq harakatlar

.

Jadval shaklida:

Bizning dasturlash haqida juda ko'p fikrlarim bor.

Birinchidan, biz bunga noto'g'ri yondashyapmiz.

Siz o'zingiz ham xuddi shunday narsalarni his qilganingizni kuylayman.

Siz yangi tilni o'rganishga harakat qilyapsiz va u bilan hamma narsa qanday boshqarilishini tushunmayapsiz.

Nima uchun bir sintaksis bir joyda, boshqa joyda ishlatiladi?

Xo'sh, biz o'z hurmatimizni yaqinda tug'ilgan kuni (2016 yil 15 mart kuni tushgan daryoning taqdiriga) - Rust bilan tanishtirmoqchimiz.

Mozilla kompaniyasi tomonidan ishlab chiqilgan ushbu universal dasturlash uchta asosiy tamoyilga ega: oqim, xavfsizlik va ergonomika.

Mualliflarning o'zlari uni C/C++ ning eng katta rad etuvchilaridan biri deb bilishadi.

StackOverflow portaliga asoslangan holda, Rustning o'zi bugungi kunda til ishlab chiquvchilari tomonidan eng ko'p seviladi.

Ota, keling, uning nima ekanligini batafsil ko'rib chiqaylik.

Yangi boshlanuvchilar uchun Rust

Men hech kimni aldashni xohlamayman, shuning uchun aniq bir bayonot: Rust bilan boshlash oson.

  • Avvalo, bu tilning yoshligidan va meros sifatida oz miqdordagi adabiyotdan ilhomlangan.
  • Boshqacha qilib aytganda, dasturlashdan uzoq bo'lgan odamlar uni oddiyroq, boshqa tillarni kamroq bilishlari mumkin.
  • Shunday qilib, masalan, tayyor IT buxgalteri eng kichik operatsiyalarni belgilashga kuchli ehtiyojga ega va tilda bunday pasayishning yo'qligi shunchaki boshi berk ko'chaga tushib qoladi.

Shu bilan birga, Rust jadal rivojlanmoqda (yangi nashr har 6 yilda bir marta chiqadi), kuch o'sib bormoqda va Internetda ma'lumot topish endi qiyin emas.

Yak vivchati

Rasmiy veb-saytda sizga kerak bo'lgan hamma narsani topishingiz mumkin.

Bundan tashqari, Rust izdoshlari hamjamiyati yanada keng va mehribon, shuning uchun siz tez orada IRC (rus bo'limi) va rasmiy forumga o'tishingiz mumkin.

  • Bundan tashqari, kitoblar va elektron kitoblar paydo bo'la boshladi.
  • Hozircha uning yorqinligini baholash muhim, ammo bu haqiqat.
  • O'rganishning dastlabki bosqichida bo'lganlar uchun siz GiHub-da juda ko'p qimmatli materiallarni, shu jumladan RFC va sharhlarni topishingiz mumkin.
  • Bundan tashqari, kunning ikkinchi yarmiga rejalashtirilgan Rust konferentsiyalaridan birining veb-translyatsiyasini ayniqsa tomosha qilishni xohlashingiz mumkin.

Eksa taqvimi:

  • 9-10 bahorgi RustConf konferensiyasi Portlend, AQSh;
  • Til rivojlanishining yuqori intensivligi, natijada, ta'lim uchun qimmatli tegishli adabiyotlarning mavjudligi;
  • Kompilyatsiya qilish uchun parametrlarni aniq va aniq belgilash zarurati mavjud.

O'zgarishlarga qadar, merosni qiymat bilan almashtirish asosida siz tezda eshitasiz.

Hammaning ko'zlari jiringlay boshlagan va qo'llari to'lgan bo'lsa, Rust o'zini C++ ga qaraganda sodda va funksionalroq, lekin boshqa boy dasturlash tillarining "go'zalligi" ga putur etkazadigan butun ish tiliga aylantirmoqda.

Darhaqiqat, Rustning raqobatchilar va o'tmishdoshlariga nisbatan asosiy ustunligi uning moslashuvchanligi va xavfsizligidir.

Talab

Bugungi kunda Rust o'yinlar, grafikalar va operatsion tizimlarni ishlab chiquvchilar orasida mashhur tanlovdir.

Biroq, asosli sabablarga ko'ra, dunyoda va undan ham ko'proq Rossiyada yuqori ixtisoslashgan Rust mutaxassislarini talab qiladigan statsionar joylar soni juda oz.

Tim kam emas, hech qanday ko'rinadigan o'zgarishlar bo'lmaguncha, shahar unutilib, dunyoni rejalashtirilgan dafn marosimiga o'xshaydi.
Shuningdek, Rustning yaxshi ko'nikmalari mamlakatimizda ham, chet elda ham yuqori haq to'lanadigan yuqori sifatli ish topishga yordam beradi.
Ko'proq so'raladi: "Statti" kasbi.

Rust barqaror rivojlanmoqda, har 6 kunda terini chiqarish bilan yangi xususiyatlar va tuzatishlar kiritiladi.

Shunday qilib, agar siz Rustni sotuvchidan olishni rejalashtirmoqchi bo'lsangiz, bunga tayyor bo'ling:

  1. Tilga kirishning yuqori ostonasini keltiring.
  2. Bu erda hech qanday maxsus murakkablik yo'q, menga faqat bir oz amaliyot va kamida bir soat kerak bo'ladi, bu doimiy ravishda muvaffaqiyatsiz bo'lgan kompilyatsiya kompilyatsiyalarini olib tashlash uchun kompilyatorni nozik sozlash.
  3. Tilga yangi xususiyatlar qo'shish uchun kompilyator yangilanishining qismlarini qo'shing.
  4. Bu sizga kompilyatorning so'nggi versiyasiga ega kutubxonaga muhtoj bo'lishingizga olib kelishi mumkin.
Yetim kutubxonalar.
  1. Shubhasiz, siz ulardan ozginasini o'zingiz ko'rib chiqishingiz kerak bo'ladi.
  2. Zangni yig'ish osonroq, lekin yig'ish osonroq.
  3. Yuqori mahsuldorlik va jiddiy ishni talab qilmaydigan juda oddiy loyihalar uchun Rust eng yaxshi tanlov bo'lmasligi mumkin.
  4. Rust rivojlanishidan nimani olib tashlaysiz?
  5. Yuqori dastur mahsuldorligi, xotirani qayta o'rnatmasdan avtomatik xotirani boshqarish.

Dasturlarning yuqori ishonchliligi va xavfsizligi, kompilyatsiya bosqichida ko'plab mumkin bo'lgan muammolarni bartaraf etish.

Tizim tizimini buzish uchun dasturlarni qayta tiklash va qo'shimcha modifikatsiya qilishning oson va muammosiz jarayonini yakunlang.

Loyiha uchun depozitlar tizimi kengaytirildi.

Haqiqatan ham yaxshi universal vosita: Rust prototiplash va ishlab chiqish uchun ham, har qanday turdagi dasturlar uchun ham mos keladi (kommunal dasturlar, ish stoli dasturlari, veb-qo'shimchalar, mobil dasturlar, tizimlar va boshqalar).

Yaxshi teginish hali hamma uchun emas, lekin kelajakda bu ajoyib ortiqcha.

  • Xavfsizlik
  • Rust jarayonda ishtirok etayotgan dasturchi uchun past narxga ega.
  • Ularni bloklar va funksiyalarda yoqish uchun xavfli yorliq talab qilinadi.
  • Shvidkist.

Mova-ni tezligi bo'yicha boshqa C++ dasturlari bilan solishtirish mumkin, bu esa dasturchi uchun aniq afzalliklarni ta'minlaydi.

Parallellik.

  • Tizim bir vaqtning o'zida bir nechta hisob-kitoblarni bekor qilishi va bir vaqtning o'zida ular bir-biri bilan o'zaro aloqada bo'lishi mumkin.
  • Qisqalik.
  • Rust-dagi birinchi kalit so'zlar besh belgidan iborat edi.

Bu almashinuv allaqachon amalga oshirilgan.

Birinchi Rust kodlaridan biriga misol

Biroq, Rustning afzalliklari yoki kamchiliklari yo'q, bu erda diqqatga sazovor joylar:

  • Kodning g'ayritabiiyligi.
  • Adabiyot va tilning mazmuni.
  • Kiritilgan kompilyatsiya parametrlarining aniqligi.

Bu har doim ham dasturlarni tekshirish uchun talab emas, chunki boshqa tillarda bunday qoidalar yo'q.

Bundan tashqari, til muntazam ravishda modernizatsiya qilinadi va yangilanadi: u har 6 yilda yangilanadi.

Rustni C++ dan yangilash

Rust ijodkorlari uni 1980-yillarning qoyalarida sharob bo'lgan C++ avlodi sifatida hurmat qilishadi, agar ishlab chiquvchi uni S tiliga takomillashtirish g'oyasini ilgari surgan bo'lsa, shuning uchun bu mumkin. vaqt o'zgarishi bilan yosh tilni tenglashtirish.

Stack Overflow - 2008 yilda ishlab chiqilgan dasturlash haqida ma'lumot berish uchun mashhur tizim.

Rustning mashhurligi uni o'z ishlanmalarida ishlatadigan kompaniyalar soni bilan tasdiqlanadi.

Kojenning otasi kichkintoyining quruq yo'tali "qo'ng'illab" bo'lsa, parvo qilmaydi.