Современный язык в эпоху ИИ
Современные языки
Современные языки — это языки, которые обеспечивают более высокую производительность, стабильность, безопасность и удобство сопровождения по сравнению с языками прошлого. Эти языки активно внедряют новейшие методы и концепции, предоставляя разработчикам более эффективные и безопасные инструменты разработки. К типичным современным языкам относятся Java, Rust, Python, TypeScript и другие, которые обладают следующими характеристиками.
1. Объектно-ориентированное проектирование ( OOP )
Большинство современных языков спроектированы на основе концепций объектно-ориентированного программирования. OOP поддерживает такие принципы, как инкапсуляция, наследование и полиморфизм, что делает структуру программы более четкой и гибкой за счет разделения сложных систем на небольшие объекты. Это особенно эффективно для контроля затрат и трудозатрат при разработке крупномасштабного программного обеспечения, а также для уменьшения проблем, которые могут возникнуть при его сопровождении.
2. Синтаксический сахар и выражения
Современные языки предлагают разнообразный синтаксический сахар и грамматику, основанную на выражениях, для повышения читаемости кода и производительности разработки. Такие функции, как тернарные операторы, лямбда-выражения и сопоставление с образцом, сокращают объем шаблонного кода, делают код более предсказуемым и повышают производительность разработчиков.
3. Модульная система
Современные языки позволяют управлять программой, разделяя ее на несколько модулей. Это облегчает повторное использование кода и управление зависимостями, а также упрощает сопровождение проектов по мере их роста. Типичными примерами являются Maven/Gradle для Java, Cargo для Rust, npm/yarn для TypeScript и другие.
4. Промежуточный язык и виртуальная машина
Современные языки внедряют промежуточный язык и виртуальную машину для обеспечения кроссплатформенности, оптимизации производительности и безопасности. Типичными примерами являются JVM, LLVM, WASM, GraalVM и другие.
Разработка в эпоху ИИ и ограничения современных языков
Современные языки возникли при условии, что большая часть кода пишется человеком. Естественно, целью современных языков является сокращение повторяющихся задач, повышение производительности и эффективная реализация крупномасштабного программного обеспечения посредством структуры, позволяющей разработчикам сотрудничать. Однако в эпоху ИИ это условие постепенно разрушается. Инструменты на основе ИИ, такие как Copilot, Cody и другие, автоматизируют значительную часть написания кода, и объем кода, который может произвести один разработчик, экспоненциально увеличивается. Из-за этого особенности современных языков, которые в прошлом считались преимуществами, постепенно превращаются в устаревшие недостатки.
Объектно-ориентированное проектирование
ИИ может быстро и точно анализировать структуру, в которой вся информация указана в одной функции или модуле. С другой стороны, по мере увеличения контекста увеличивается и диапазон для вывода, что снижает производительность и точность ИИ. Код, написанный в стиле OOP, распределяет логику между несколькими объектами, а не управляет ею в одном месте, что, в конечном итоге, требует от ИИ большего контекста. Рассмотрим следующий код.
1public class AnimalHandler {
2 public void handle(Animal animal) {
3 animal.speak();
4 }
5}
6
7public class Main {
8 public static void main(String[] args) {
9 AnimalHandler handler = new AnimalHandler();
10
11 Animal a1 = new Dog();
12 Animal a2 = new Cat();
13 Animal a3 = new Horse();
14
15 handler.handle(a1);
16 handler.handle(a2);
17 handler.handle(a3);
18 }
19}
В приведенном выше коде ИИ должен повторить следующие рассуждения, чтобы узнать, что на самом деле делает метод speak():
- Является ли
animalэкземпляром какого-либо конкретного класса? - Где определен метод
speak(), переопределенный в этом классе? - Где находятся определения классов
DogиCat, и каково их внутреннее поведение? - Нет ли возможности переопределения классов
DogиCatв других классах?
Эта информация не собрана в одном файле или функции, и ее можно понять, только прослеживая отношения между файлами классов и структуру наследования. Более того, такие элементы, как рефлексия или динамическая загрузка, которые определяются во время выполнения, являются для ИИ своего рода черным ящиком, и их анализ практически невозможен.
Синтаксический сахар и выражения
ИИ предпочитает явные действия неявным и предпочитает комбинировать простые структуры для получения одного правильного ответа, а не использовать сложные структуры. Напротив, синтаксический сахар допускает разнообразные выражения, но их внутреннее поведение часто одинаково или похоже. ИИ должен изучать значение этих разнообразных выражений по отдельности, и ему может быть трудно определить приоритет того, какой синтаксис рекомендовать в конкретной ситуации.
Промежуточный язык и виртуальная машина
ИИ в основном обучается на основе исходного кода. С другой стороны, промежуточный язык (bytecode) лишается смысла, например, имен переменных, в процессе компиляции, и должен быть переинтерпретирован виртуальной машиной во время выполнения. Это очень сложная задача для понимания или преобразования ИИ. Например, для ИИ преобразование из TypeScript в Go возможно, но преобразование байт-кода V8 engine в байт-код JVM или машинный код практически невозможно.
Настоящий современный язык в эпоху ИИ
Из вышеизложенного мы можем понять, что особенности современных языков на самом деле являются устаревшими элементами, не подходящими для эпохи ИИ. Тогда какой язык может стать наиболее подходящим современным языком для эпохи ИИ? Подсказки можно получить из элементов, которые современные языки в прошлом отвергали. Современный язык эпохи ИИ должен:
- Иметь явный синтаксис и естественный поток.
- Отказаться от чрезмерной структуры OOP в пользу плоской и простой структуры.
- Создавать множество функций с использованием ограниченного набора базовых ключевых слов, а не ненужного синтаксического сахара или неявных шаблонов.
- Иметь простую и предсказуемую систему сборки, а не сложную.
Язык, который наиболее соответствует этим критериям, — это Golang. Язык Go был разработан таким образом, чтобы реализовать большинство практических функций с минимальным набором ключевых слов и простой комбинацией синтаксиса, тщательно исключая ненужные абстракции и неявные действия. Это выгодная структура не только для разработчиков, но и для ИИ при интерпретации и генерации кода.
Таким образом, предсказуемая и плоская структура, явный поток и последовательный синтаксис Go, в отличие от существующих современных языков, разработанных для человека-разработчика, лучше подходят для среды разработки, в которой активно участвует ИИ. Консервативная философия проектирования Go, которая когда-то считалась устаревшей, на самом деле становится самым передовым выбором в эпоху ИИ.