На наскоро проведената среща по технологии с отворен код (Open Source Technology Summit — OSTS) , водещ инженер в Intel, сподели, че компанията му се интересува от постигане на "паритет" на Rust с доминиращия език C в областта на системното и нисколевелно програмиране в близко бъдеще. с заглавие "Intel и Rust: бъдещето на системното програмиране" той разказа за историята на системното програмиране, защо C стана език по подразбиране за системно програмиране, какви предимства предлага Rust спрямо C и как в близко бъдеще той може напълно да замени C в тази област на програмирането.

Системното програмиране е разработване и управление на софтуер, който служи като платформа за създаване на приложни програми, осигурявайки взаимодействието на последните с процесора, оперативната памет, входно-изходните устройства и мрежовото оборудване. Системният софтуер създава специална абстракция под формата на интерфейси, които помагат за създаването на приложен софтуер, без да е необходимо задълбочаване в детайлите на работа на "желязото".
Самият Триплетт дефинира системното програмиране като "всичко, което не е приложение". То включва неща като BIOS, фърмуер, зареждачи и ядра на операционни системи, различни видове вградени нисколевелни кодове, както и реализации на виртуални машини. Интересно е, че Триплетт счита, че уеб браузерът също е системен софтуер, тъй като браузерът отдавна е станал повече от "просто програма", превръщайки се в самостоятелна "платформа за уебсайтове и уеб приложения."
В миналото повечето системни програми, включително BIOS, зареждачи и фърмуер, бяха писани на асемблер. През 60-те години на миналия век започнаха експерименти по осигуряване на хардуерна поддръжка на високоязикови езици, което доведе до създаването на езици като PL/S, BLISS, BCPL и ALGOL 68.
След това, през 70-те години на миналия век, Денис Ричи (Dennis Ritchie) създаде езика за програмиране C за операционната система Unix. Създаден на базата на езика за програмиране B, който дори не разполагаше с поддръжка на типизация, C беше изпълнен с мощни високоуровневи функции, които бяха най-подходящи за писане на операционни системи и драйвери. Някои компоненти на UNIX, включително ядрото му, бяха в крайна сметка презаписани на C. В последствие много други системни програми, включително базата данни Oracle, голяма част от изходния код на Windows и операционната система Linux, бяха също написани на C.
C получи огромна подкрепа в тази насока. Но какво точно накара разработчиците да преминат на него? Триплетт смята, че за да мотивира разработчиците да преминат от един език за програмиране на друг, последният първо трябва да предложи нови функции, без да лишава от старите възможности.
На първо място, езикът трябва да предлага "достатъчно впечатляващи" нови функции. "Той не може да бъде малко по-добър. Той трябва да бъде значително по-добър, за да оправдае усилията и времето на инженерите, необходими за прехода", обяснява той. В сравнение с асемблерния език, C имаше много неща, които можеше да предложи. Той поддържаше до известна степен безопасна типизация, осигуряваше по-добра преносимост и производителност с високоуровневи конструкции, а също така генерираше значително по-четим код.
На второ място, езикът трябва да осигури поддръжка на старите възможности, което означава, че в историята на прехода към C разработчиците трябваше да бъдат уверени, че той е не по-малко функционален от асемблерния език. Триплетт пояснява: "Новият език не може да бъде просто по-добър, той трябва също така да не е по-лош". Освен това, че C беше по-бърз и поддържаше всякакви типове данни, които можеше да използва асемблерния език, той разполагаше и с това, което Триплетт нарече "изход за бедствия", а именно поддържаше вграждане на код на асемблер.

Триплетт смята, че 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. Триплетт смята, че езиците, които се изпълняват с помощта на нея, е трудно да се използват като инструмент за системно програмиране. Както той обяснява: "Трябва да инициализирате тази среда на изпълнение, преди да можете да извикате какъвто и да е код, трябва да използвате тази среда на изпълнение, за да извикате функции, и самата среда на изпълнение може да изпълнява допълнителен код зад вашите гръб в неочаквани моменти."
Също така Rust се стреми да осигури безопасно паралелно програмиране. Същите функции, които го правят безопасен за паметта, проследяват такива неща, като на кой поток принадлежи кой обект и кои обекти могат да се предават между потоковете, а кои се нуждаят от заключване.
Всички тези функции правят Rust достатъчно убедителен, за да могат разработчиците да го изберат като нов инструмент за системно програмиране. Въпреки това, от гледна точка на паралелни изчисления, Rust все още е малко назад спрямо C.
Триплетт планира да създаде специална работна група, която да се занимава с внедряването на необходимите функции в Rust, за да може той напълно да се сравнява, надминава и замени C в областта на системното програмиране. В , посветена на неговото изказване, той съобщи, че „групата FFI/ C Parity е в процес на създаване и все още не е започнала работа“, а засега е готов да отговори на всякакви въпроси и в бъдеще ще публикува най-близките планове за развитие на Rust в рамките на неговата инициатива за всички заинтересовани страни.
Може да се предположи, че на първо място групата FFI/ C Parity ще се заеме с подобряване на поддръжката на многопоточност в Rust, внедряването на поддръжка на BFLOAT16, формат за представяне на числа с плаваща запетая, който се появи в новите процесори Intel Xeon Scalable, а също така и стабилизация на вграждането на код на Асемблер.
Източник: 3dnews.ru
