Բարև՜ (նորից) բոլորին։ Շա՜տ շնորհակալ եմ Ձեր ներկայության, և հարցերի համար։ Մի քանի վերջնական նշում կցանկանայի անել այն հարցերի վերաբերյալ, որոնք ամբողջությամբ չհասկացա, կամ հստակ պատասխան չտվեցի։ 1. Կապված decorator-ների և macro-ների հետ։ Ի տարբերություն ուրիշ լեզուների, որոնք decorator-ների evaluation-ը կատարում են runtime-ի ժամանակ, Rust-ի macro-ները այդ գործողությունը կատարում են compile-time-ի ժամանակ, այսինքն՝ ծրագրի աշխատանքի ընթացքում ավել ռեսուրս չի ծախսվում։ Մակրոները տարբեր իրավիճակներում տարբեր ձևերով եք կարող օգտագործել։ Օրինակ՝ ինչպես նշվեց 41:02-ում, կարող ենք գրել մի macro, որը catch կանի որևէ ֆունկցիայի բոլոր սխալները և կվերադարձնի միայն մեկ սխալ։ macro_rules! catchall_wrapper { () => { // macro-ի տրամաբանությունը կգրվի այստեղ: }; } Այնուհետև կարող ենք կանչել հետևյալ կերպ՝ fn main() { fn inner() -> Result<(), Box<dyn std::error::Error>> { std::fs::open("Cargo.toml")?; Ok(()) } if let Err(error) = catchall_wrapper!(inner) { eprintln!("{}", error); } } Ավելի լավ ծանոթանալու Rust-ի macro-ների սիստեմի հետ, խորհուրդ կտամ այցելել doc.rust-lang.org/book/ch19-06-macros.html?highlight=macros#macros և cheats.rs/#tooling-directives կայքերը։ 2. Կապված runtime overhead-ի հետ 49:00-ում, երբ օգտվում ենք match statement-ներից։ Rust-ը կոմպիլյացիայի շրջանում օգտագործում է jump table-ներ (նաև ասում են v-table-ներ, կամ branch table-ներ), որոնց հետ կարող եք ծանոթանալ հետևյալ հղումով՝ en.wikipedia.org/wiki/Branch_table : Overhead-ը մեծամասամբ կախված է նրանից, թե ինչպես LLVM-ը կօպտիմիզացնի մեր ծրագիրը։ Մեծամասամբ արագությունը match-ի O(1) է։ Որոշ շատ հազվադեպ դեպքերում, այս թիվը կարող է մեծանալ, և ստուգման արագությունը կարող է հասնել O(n)-ի, կախված, թե քանի ստուգիչ ճյուղ ունեք match-ի մեջ։ Պատկերը նույնն է նաև C++ ում։ Սակայն, օրինակ, TypeScript/JavaScript-ում, պատկերը փոքր-ինչ տարբերվում է և արագությունը այդ լեզվում ավելի շատ է տուժում։ Option::None-ը, օրինակ, ավել հիշողություն չի զբաղեցնում, իսկ Some-ը զբաղեցնում է համեմատաբար շատ փոքր քանակությամբ հիշողություն, մոտ 8 բայթ։ Այդ հարցը ավելի մանրամասն քննարկված է այստեղ՝ users.rust-lang.org/t/how-much-overhead-is-there-with-options-and-results/37327/3: Որպես վերջնական պատասխան ՝ runtime-ի ընթացքում unwrap()-ը հիմնականում runtime overhead չունի։ Ամեն դեպքում պետք է հիշել, որ unwrap()֊ը նոր «if» ճյուղ է ստեղծում, որը հիմնականում մեր համակարգչի պրոցեսորը կարողանում է կանխատեսել Branch Predictor-ների օգնությամբ (en.wikipedia.org/wiki/Branch_predictor)։ unwrap()-ը կարող է նաև ծրագրի անսպասելի ավարտի (panic) պատճառ հանդիսանալ։ 3. 42:38-ում խոսքը գնաց paradigm-ների մասին։ Քանի որ հարցն այնքան էլ լավ չհասկացա, կարող եմ ասել միայն հետևյալը։ Rust-ը ոչ մի նոր paradigm, բացի արդեն գոյություն ունեցողներից լեզու չի ներմուծում։ Կան որոշ մասեր, որտեղ օրինակ կնկատեք ֆունկցիոնալ ծրագրավորման այսպես ասած "paradigm"-ներ, բայց Rust-ը ինքնին նոր paradigm-ներ չի ներմուծում լեզվի մեջ։ Նորից նշեմ, Rust-ի նպատակն է աբստրակցիաների տրամադրումը, հիշողության ապահովումը և արագությունը։ Այսպես կոչված «paradigm-ները» ընդամենը լեզվի կողմից հնարավորություններ են, որոնք ներկայացվեցին այս workshop-ի ընթացքում։ Եկող տարի, հուսով եմ, մեկ անգամ ևս կհանդիպենք, և շատ հնարավոր է ստեղծենք Tetris խաղը զրոյից, օգտվելով Rust-ից։ Եթե կցանկանաք ինձ հետ շփվել, կամ կունենանք հարցեր, ինձ հետ կարող եք կավել LinkedIn-ի միջոցով www.linkedin.com/in/michaelgrigoryan25/ : Մեծ հաճույքով կպատասխանեմ ձեր հարցերին։ Եթե հետաքրքրում են իմ աշխատանքները open-source-ում, կարող եք այցելել իմ GitHub-յան էջը github.com/michaelgrigoryan25 : Կցանկանայի լսել նաև ձեր կարծիքները այս workshop-ի մասին, լավ կողմերը, վատ կողմերը, և այլն։ Նորից շնորհակալ եմ բոլորիդ, և հուսով եմ կհանդիպենք եկող տարի ամռանը։ Timestamps: 00:05 - Introduction 01:00 - What is Rust? 02:35 - Statistics 04:40 - Compiled & Interpreted Languages 05:34 - Memory Allocation 09:45 - Installation 12:07 - Creating a Project 12:43 - Rust Programming Basics 13:30 - Variables and the Type System 16:10 - Structs and Traits 19:17 - Example 1 20:58 - Error Handling 22:11 - Ownership and Borrowing 27:19 - Memory Safety 31:13 - Example 2 37:00 - Q&A
Շնորհակալություն հետաքրքիր ելույթի համար։ 5:08 Լեզուները ընդհանրապես չեն լինում compiled կամ interpreted, լեզուներ կան, որ թե՛ compiler ունեն, թե՛ interpreter ու էդ դեպքում հարց է ծագում այդ լեզուները compiled են, թե՞ interpreted, իսկ լեզուներ կան, որ ոչ մի իմպլեմենտացիա չունեն ու մենակ գլխով են էդ լեզուն աշխատեցնում. դրա համար ավելի ճիշտ ա ասել, որ ծրագրավորման լեզուն աբստրակտ ինչ-որ գաղափարների ամբողջություն ա, որը կարող ա ունենալ տարբեր իրականացնումներ։ 5:07 Ընդհարապես TypeScript-ով ծրագրավորելիս կատարման flow-ն ոչ թե տող առ տող կարդացվում է ու execute լինում չնայած թեորյապես հնարավոր է ինչպես վերևում նշեցի, այլ սկզբում TypeScript-ով գրած կոդը transpile(high level language -> high level language) է լինում JavaScript-ի այնուհետև v8-ը էլի տող առ տող չի աշխատեցնում, ծրագիրը compile ա անում դարձնում byte code(intermediate code) որը աշխատեցնում ա Ignition-ը, ու զուգահեռ էլ optimization ա անում engine-ը ու ծրագրի ամենաշատ օգտագործվող մասերը դարձնում օպտիմիզացված machine code. medium.com/codeburst/node-js-v8-internals-an-illustrative-primer-83766e983bf6 medium.com/@cabulous/how-v8-javascript-engine-works-5393832d80a7
Dear DreamShot 28 րոպեանոց talk-ից, միայն կեսը, 14 րոպեն եք թողել, մյուս կեսը կտրել եք, մի արեք այդպես, դա գործ չի։ --- Ամբողջ օվրա վիդեոյի մեջ* դա այս րոպեներն են 3:05:00-3:33:12 "Day 1: #BarCampEVN21 213E" * ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-yPgjSeOZTQg.html
2:04:07 - 2:31:30 How to Make your Workplace a Happy Place - Nari Hakobyan (Երջանկության մասին։ նաեւ՝ Work-life balance, տեխնիկաներ, չափելու գործիքներ )
Կազմակերպելով ITին ու մարքեթինգին նվիրված իվենթ` շատ տխուր ա տեսնել միայն խոսնակին ու չտեսնել մարդը ինչ ա ցույց տալիս պրեզենտացիայում։ Անընդունելի ա ուղղակի տեսնել սենց տեխնիկական կազմակերպվածություն!
@Albert Arshakyan , լինելու ա հետո, սա ուղիղ եթերն էր ուղղակի։ Հետո որ "DreamShot"-ը ստեղծում ա - մոնտաժում ա առանձին զեկույցների վիդեոները, սպիկերի էկրանն էլ ա կցում էս վիդեոշարքին, ամենը երեւում ա
52:14 Cloud-flight to The International Market 1:26:43 Tech education in Armenia 2:00:37 Story of Kirby the build tool 2:30:01 Do team leads need an HR? 3:28:40 Data driven path to success 3:56:12 Deep learning based vehicle detection on satellite images 4:23:44 Touch of Color | Enhancing the magic of the past 4:52:19 Fireworks going off your brain 5:23:09 How to boost 3D printing in AM 5:52:36 Put the fun in functionality : Designs that actually work 6:24:02 Onboarding 6:52:51 Subliminal content: How to persuade without actually persuading 7:25:00 Knocking on PM's door