„Rust е бъдещето на системното програмиране, C е новият асемблер“ – реч на един от водещите инженери на Intel

На скорошната конференция за технологии с отворен код (OSTS) Джош Триплет, старши инженер в Intel, каза, че компанията му е заинтересована Rust да достигне „паритет“ с езика C, който все още доминира в системите и разработката на ниско ниво в близко бъдеще. В речта си Под заглавието „Intel и Rust: Бъдещето на системното програмиране“ той също говори за историята на системното програмиране, как C се превърна в системен програмен език по подразбиране, какви функции на Rust му дават предимство пред C и как може напълно заменете C в тази област на програмиране.

„Rust е бъдещето на системното програмиране, C е новият асемблер“ – реч на един от водещите инженери на Intel

Системното програмиране е разработването и управлението на софтуер, който служи като платформа за създаване на приложни приложения, като гарантира, че последните взаимодействат с процесора, RAM, входно/изходни устройства и мрежово оборудване. Системният софтуер създава специална абстракция под формата на интерфейси, които помагат за създаването на приложен софтуер, без да се задълбочават в подробностите за това как работи самият хардуер.

Самият Триплет определя системното програмиране като „всичко, което не е приложение“. Той включва неща като BIOS, фърмуер, програми за зареждане и ядра на операционната система, различни видове вграден код на ниско ниво и реализации на виртуални машини. Интересното е, че Triplett вярва, че уеб браузърът също е системен софтуер, тъй като браузърът отдавна се е превърнал в нещо повече от „просто програма“, превръщайки се в самостоятелна „платформа за уебсайтове и уеб приложения“.

В миналото повечето системни програми, включително BIOS, програми за зареждане и фърмуер, бяха написани на асемблер. През 1960-те години на миналия век започнаха експерименти за осигуряване на хардуерна поддръжка за езици от високо ниво, което доведе до създаването на езици като PL/S, BLISS, BCPL и ALGOL 68.

След това, през 1970-те години на миналия век, Денис Ричи създава езика за програмиране C за операционната система Unix. Създаден на езика за програмиране B, който дори нямаше поддръжка за писане, C беше изпълнен с мощни функции от високо ниво, които бяха най-подходящи за писане на операционни системи и драйвери. Няколко компонента на UNIX, включително ядрото му, в крайна сметка бяха пренаписани на C. Впоследствие много други системни програми, включително базата данни на Oracle, голяма част от изходния код на Windows и операционната система Linux, също бяха написани на C.

C получи огромна подкрепа в тази посока. Но какво точно накара разработчиците да преминат към него? Triplett смята, че за да мотивират разработчиците да преминат от един език за програмиране към друг, последният трябва първо да предостави нови функции, без да губи стари функции.

Първо, езикът трябва да предлага "сравнително впечатляващи" нови функции. „Той не може да бъде по-добър. Трябва да бъде значително по-добро, за да оправдае усилията и инженерното време, необходими за извършване на прехода“, обяснява той. В сравнение с асемблерния език, C имаше много неща, които да предложи. Той поддържа донякъде безопасно поведение, осигурява по-добра преносимост и производителност с конструкции от високо ниво и генерира много по-четлив код като цяло.

Второ, езикът трябва да осигурява поддръжка за стари функции, което означава, че в историята на прехода към C разработчиците трябваше да са сигурни, че той не е по-малко функционален от асемблерния език. Триплет обяснява: „Новият език не може да бъде просто по-добър, той трябва да бъде също толкова добър.“ В допълнение към това, че беше по-бърз и поддържаше всеки тип данни, който асемблерният език можеше да използва, C имаше и това, което Triplett нарече „escape hatch“ – а именно, поддържаше вмъкване на код на асемблерния език в себе си.

„Rust е бъдещето на системното програмиране, C е новият асемблер“ – реч на един от водещите инженери на Intel

Triplett вярва, че C сега се превръща в това, което беше асемблерният език преди много години. „C е новият асемблер“, заявява той. Сега разработчиците търсят нов език от високо ниво, който не само ще реши проблемите, натрупани в C, които вече не могат да бъдат коригирани, но също така ще предложи вълнуващи нови функции. Такъв език трябва да бъде достатъчно завладяващ, за да накара разработчиците да преминат към него, трябва да е защитен, да осигурява автоматично управление на паметта и много повече.

„Всеки език, който иска да бъде по-добър от C, трябва да предлага много повече от защита от препълване на буфера, ако наистина иска да бъде убедителна алтернатива. Разработчиците се интересуват от използваемостта и производителността, като пишат код, който се обяснява сам по себе си и върши повече работа с по-малко редове. Проблемите със сигурността също трябва да бъдат разгледани. Лекотата на използване и производителността вървят ръка за ръка. Колкото по-малко код трябва да напишете, за да постигнете нещо, толкова по-малка е възможността да правите грешки, свързани със сигурността или не“, обяснява Триплет.

Сравнение на Rust и C

През 2006 г. Graydon Hoare, служител на Mozilla, започна да пише Rust като личен проект. И през 2009 г. Mozilla започна да спонсорира разработването на Rust за собствените си нужди и също така разшири екипа за по-нататъшно развитие на езика.

Една от причините Mozilla да се интересува от новия език е, че Firefox е написан на над 4 милиона реда C++ код и има доста критични уязвимости. Rust е създаден с оглед на сигурността и паралелността, което го прави идеален избор за пренаписване на много от компонентите на Firefox като част от проекта Quantum за пълно преработване на архитектурата на браузъра. Mozilla също използва Rust, за да разработи Servo, HTML механизъм за изобразяване, който в крайна сметка ще замени текущия двигател за изобразяване на Firefox. Много други компании започнаха да използват Rust за своите проекти, включително Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu и много други.

Rust решава един от най-важните проблеми на езика C. Той предлага автоматично управление на паметта, така че разработчиците да не трябва ръчно да я разпределят и след това да я освобождават за всеки обект в приложението. Това, което прави Rust различен от другите съвременни езици е, че той няма събирач на отпадъци, който автоматично премахва неизползваните обекти от паметта, нито има среда за изпълнение, необходима, за да работи, като Java Runtime Environment за Java. Вместо това Rust има концепциите за собственост, заемане, препратки и живот. „Rust има система за деклариране на повиквания към обект, за да покаже дали собственикът го използва или просто го заема. Ако просто вземете обект назаем, компилаторът ще следи това и ще гарантира, че оригиналът остава на място, докато го препращате. Rust също така ще гарантира, че обектът ще бъде премахнат от паметта веднага щом бъде завършена употребата му, като вмъква съответното извикване в кода по време на компилиране без допълнително време“, казва Триплет.

Липсата на естествено време за изпълнение също може да се счита за положителна черта на Rust. Triplett вярва, че езиците, на които работи, са трудни за използване като инструменти за системно програмиране. Както той обяснява: „Трябва да инициализирате това време за изпълнение, преди да можете да извикате който и да е код, трябва да използвате това време за изпълнение, за да извиквате функции, а самото време за изпълнение може да изпълнява допълнителен код зад гърба ви в неочаквани моменти.“

Rust също се стреми да осигури сигурно паралелно програмиране. Същите функции, които го правят безопасен за паметта, следят неща като коя нишка притежава кой обект и кои обекти могат да се предават между нишките и кои се нуждаят от заключване.

Всички тези характеристики правят Rust достатъчно завладяващ за разработчиците, за да го изберат като нов инструмент за системно програмиране. Въпреки това, по отношение на паралелните изчисления, Rust все още е малко зад C.

Triplett възнамерява да създаде специална работна група, която ще се фокусира върху въвеждането на необходимите функции в Rust, така че да може напълно да се изравни, да надмине и да замени C в областта на системното програмиране. IN нишка в Reddit, посветен на речта си, той каза, че „групата FFI/C Parity е в процес на създаване и все още не е започнала работа“, засега той е готов да отговори на всякакви въпроси и в бъдеще определено ще публикува непосредствени планове за развитието на Rust като част от неговата инициатива за всички заинтересовани страни.

Може да се предположи, че групата FFI/C Parity ще се съсредоточи на първо място върху подобряването на многонишковата поддръжка в Rust, въвеждането на поддръжка за BFLOAT16, формат с плаваща запетая, който се появи в новите Intel Xeon Scalable процесори, както и стабилизиращо сглобяване вмъквания на кодове.



Източник: 3dnews.ru

Добавяне на нов коментар