Развитие языка Solidity в скором будущем
Разработка Solidity входит в новую фазу. Долгое время команда сознательно ограничивала добавление новых функций в Classic Solidity, стремясь не усложнять его реализацию и не создавать архитектурных решений, которые могли бы помешать развитию Core Solidity — нового концепта языка. Язык находился в состоянии мягкой заморозки, поскольку основное внимание уделялось ускоренному созданию Core Solidity, где многие функции могли бы быть реализованы эффективнее — либо через стандартную библиотеку, либо как "синтаксический сахар" (буквальная цитата из статьи).
Однако по мере того как Core Solidity оформился в отдельный подпроект со своей собственной дорожной картой, подход к Classic Solidity был пересмотрен. Теперь планируется внедрение ограниченного набора новых языковых возможностей, которые не противоречат долгосрочной архитектуре Core Solidity. В ближайшее время будет опубликован список таких функций с оценкой их сложности, полезности и совместимости с будущим языком. Хотя не все из них успеют попасть в Classic Solidity до перехода на Core, многие из них считаются необходимыми для экосистемы в целом.
Ближайший релиз — версия 0.9 — не принесёт крупных новых возможностей. Его основная цель — упрощение и очистка кодовой базы. В частности, будет завершён переход на IR-конвейер, оптимизатор станет включённым по умолчанию, а поддержка устаревших функций, таких как .send(), .transfer() и виртуальные модификаторы, будет удалена. Также SMTChecker потеряет поддержку BMC и будет переименован в SolCMC. Эти шаги направлены на снижение технического долга и подготовку основы для будущих изменений.
В последующих версиях, начиная с 0.10, изменения будут ориентированы на сближение Classic Solidity с Core Solidity. Это включает постепенное внедрение нового синтаксиса: постфиксную запись типов, переработанный тернарный оператор, упрощённую нотацию функциональных типов, а также замену «магических» свойств обычными функциями. Параллельно будет заложена заглушка стандартной библиотеки, реализующая часть встроенных возможностей на уровне языка, с поддержкой пользовательских замен.
Особое внимание уделяется взаимодействию между Classic и Core Solidity. Планируется создать единый интерфейс компиляции, позволяющий использовать оба языка в одном проекте. На первом этапе контракты останутся независимыми, но их артефакты будут объединяться в общий выход компилятора. На втором этапе станет возможным импортировать и вызывать свободные функции, события, ошибки и типы между языками, что обеспечит плавный переход и гибкость при разработке.
Core Solidity представляет собой фундаментальное обновление системы типов Solidity с заимствованиями из функциональных и системных языков, таких как Haskell, Rust и Zig. Большинство высокоуровневых конструкций Classic Solidity станут частью стандартной библиотеки, а сам язык будет десахаризироваться в минималистичный внутренний язык SAIL. Он поддерживает параметрический полиморфизм, траиты, вывод типов, алгебраические типы и сопоставление с образцом — всё это создаёт основу для строгой формальной верификации и надёжной разработки.
Стандартная библиотека Core Solidity изначально будет минимальной, чтобы снизить нагрузку на компилятор и упростить его поддержку. Однако её дальнейшее развитие планируется осуществлять через открытый, управляемый сообществом процесс, аналогичный EIP. Это позволит расширять язык не через изменения компилятора, а через библиотечные решения, что делает экосистему более гибкой и адаптивной.
Наконец, Core Solidity создаётся с прицелом на формальную спецификацию. В отличие от Classic Solidity, который страдает от отсутствия чёткой семантики, новый язык достаточно компактен для полной формализации. Планируется предоставить исполняемую спецификацию, которая послужит эталонной реализацией и инструментом для верификации. Это также поможет избежать фрагментации: все компиляторы смогут следовать единой спецификации, конкурируя по качеству оптимизаций и реализации библиотек, а не по интерпретации языка.
#solidity
Post #1488
892
- 👍 13
- 🔥 1