Gleam 1.7 улучшает производительность
Вышла версия Gleam 1.7 с более быстрым обновлением записей и более безопасной обработкой учетных данных менеджера пакетов. Gleam - это статистически типизированный язык, скомпилированный в Erlang или JavaScript.

Ошибки памяти, такие как чтение и запись за пределами границ и использование после освобождения, уже несколько десятилетий досаждают приложениям, вызывая различные проблемы - от незначительных сбоев в работе до глобальных кошмаров безопасности. Например, печально известные эксплойты WannaCry, Slammer и Heartbleed, а также недавний LDAP Nightmare были вызваны переполнением буфера.
Эти уязвимости безопасности памяти связаны с использованием старых языков программирования, таких как C и C++, в которых отсутствуют возможности автоматического управления памятью, и программисты должны сами заботиться о таких тонкостях, как проверка границ. В отличие от них, языки, безопасные для памяти, такие как Rust, автоматизируют выделение и удаление памяти и предотвращают такие ошибки доступа к памяти, как ошибки выхода за пределы границ.
«Примерно 70 % проблем с безопасностью программного обеспечения связаны с неправильной работой с памятью», - отмечает Энн Томас, вице-президент и видный аналитик Gartner. «Именно поэтому Управление национального кибердиректора США (ONCD) в феврале 2024 года выпустило отчет, призывающий к внедрению языков программирования, безопасных для памяти. К сожалению, огромное количество приложений, низкоуровневых утилит и операционных систем реализованы на языках, небезопасных для памяти, таких как C и C++».
В отчете ONCD рекомендуется заменить C и C++ на безопасные для памяти языки, такие как Rust, Python, C#, Go и Java. Но это может быть легче сказать, чем сделать.
«Я знаю о языке C и о том, как сложно с ним расстаться», - говорит Джейсон Андерсен, вице-президент и главный аналитик Moor Insights & Strategy. «Одна из самых больших проблем заключается в том, что язык C очень полезен на системном уровне, что делает его удивительно гибким и производительным. Поэтому технически его трудно повторить с помощью чего-либо другого».
Теперь пара ученых-компьютерщиков разработала подмножество языка C, которое может быть автоматически переведено на безопасный для памяти язык Rust. Подмножество Mini-C было создано Аймериком Фромерцем из Inria, французского национального института исследований в области цифровой науки и техники, и Джонатаном Проценко из Microsoft Azure Research. Свое исследование они представили в статье «Формализованная компиляция языка C в безопасный Rust».
Для создания безопасного Rust Фромхерц и Проценко разработали, по их словам, «ориентированное на данные, прикладное подмножество языка C», которое может потребовать от пользователей внесения, по их словам, «минимальных изменений» в исходную программу на языке C, чтобы приспособить ее к подмножеству. «По их словам, «после перехода на это подмножество наш подход автоматически создает корректный и безопасный код на языке Rust».
Исследователи оценили свой подход на двух проектах: верифицированной криптографической библиотеке HACL*, содержащей 80 тысяч строк кода на C, и парсере EverParse CBOR, состоящем из 1,4 тысяч строк C. Они обнаружили, что исходный код HACL* требует лишь «минимальных» корректировок, а EverParse не нужно ничего менять, чтобы стать Mini-C и затем перевести его в Rust.
Исследователи отметили: «Применение нашего подхода к HACL* привело к созданию 80 000 строк проверенной криптографической библиотеки, написанной на чистом Rust, которая реализует все современные алгоритмы без единого использования unsafe - первая в своем роде». Ключевое слово unsafe позволяет программистам на языке Rust отказаться от гарантий безопасности памяти и включать блоки кода на языке Rust, выполняющие небезопасные операции.
«Я думаю, что [эта техника] может иметь большое значение для разработчиков, кодирующих на C, поскольку она может ускорить переход на Rust, а также помочь этим программистам освоить Rust, что может быть непростым переходом», - сказал Джим Мерсер, вице-президент по разработке ПО, DevOps и DevSecOps в IDC.
«Это не совсем ситуация с Cobol, - добавил Мерсер, - но многие из ключевых программистов на C уже близки к выходу на пенсию, так что обслуживание этих приложений и систем может стать более заметной проблемой в будущем. Кроме того, мы так сосредоточены на безопасности памяти, что не обращаем внимания на другие преимущества Rust. Он предлагает такие современные возможности языка, как примитивы параллелизма, согласование шаблонов и мощную систему типов, что может привести к созданию более краткого, выразительного и удобного для сопровождения кода».
Андерсен из Moor указал на дополнительные преимущества. «Одним из перспективных направлений является использование генеративного ИИ для дальнейшего ускорения Mini-C и процесса миграции», - сказал он. «Мы начинаем видеть, как облачные провайдеры, такие как AWS и IBM, создают инструменты для миграции с .NET на Java или даже с Cobol на Java. Возможно, когда-нибудь такой инструмент, как Q Developer, сможет перейти с Rust на C».
Хотя у подхода Фромерца и Проценко есть много преимуществ, у трех аналитиков, с которыми я беседовал, есть и опасения.
«Совместный проект Microsoft-Inria продемонстрировал успех в выполнении такого типа транспонирования, но у него есть существенное ограничение - он работает только с подмножеством языка C - тем, что они называют Mini-C», - отметил Томас из Gartner. «Проблема в том, что большинство приложений на C и C++ используют аспекты C/C++, которые не вписываются в подмножество Mini-C».
«Если объединить этот инструмент с другим инструментом, способным переписать приложение на C в подмножество Mini-C, это будет огромная удача», - добавил Томас. «Вероятно, для такого рефакторинга/преобразования можно использовать инструмент вроде OpenRewrite».
Мерсер из IDC согласился с тем, что Mini-C - это только начало. «Переписывание или даже поручение искусственному интеллекту переписать код на языке C в Rust может потребовать времени разработчика и значительного тестирования, чтобы убедиться, что система по-прежнему работает и производительна. Кроме того, есть проблемы с тем, как в языке C используется арифметика указателей», - сказал он. «Я думаю, что это должно хорошо работать для более простого кода на C/C++, но когда вы переходите к более сложному коду, использующему такие вещи, как арифметика указателей, эти конструкции может быть трудно продублировать в Rust. Однако, если это сложно, это не значит, что это не решаемо или не стоит делать - это, конечно, лучше, чем пытаться переписать весь код вручную».
Однако Андерсен из Moor заметил: «Любое подобное решение было бы полезным, поскольку оно потенциально решает некоторые проблемы миграции, но, к сожалению, оно имеет множество оговорок». Он сослался на риск того, что старые кодовые базы могут оказаться не такими удобными для применения техники, как HACL*, поэтому «пробег клиентов будет сильно варьироваться».
«Поскольку пробег приложений меняется, я надеюсь, что вокруг этой работы вырастет сообщество, которое сможет делиться передовым опытом и обновлять библиотеки по мере накопления опыта», - сказал Андерсен. «Нам нужно создать сообщество с открытым исходным кодом и заставить коммиттеров выполнять определенную работу».
Но сообществам нужны люди, а найти квалифицированных разработчиков с необходимым уровнем знаний языка C довольно сложно. Финансирование проекта - еще одна проблема.
«Хотя технология может быть многообещающей, вам нужно гораздо больше, чем это, чтобы получить импульс, независимо от того, что говорит Белый дом», - сказал Андерсен.
Вышла версия Gleam 1.7 с более быстрым обновлением записей и более безопасной обработкой учетных данных менеджера пакетов. Gleam - это статистически типизированный язык, скомпилированный в Erlang или JavaScript.
Выпущена версия Ruby 3.4. В этой версии по умолчанию используется парсер Prism, добавлена ссылка на параметр блока «it» и добавлена поддержка Happy Eyeballs Version 2 в библиотеку сокетов.
Эта новость была долгожданной, и, поскольку Python уже в шестой раз получает эту награду, она, возможно, даже вызывает зевоту. Однако вы ошибаетесь, если считаете Python скучным. Если углубиться в него, можно открыть для себя много нового.