GoSuda

Современный язык эпохи AI

By Rabbit Princess
views ...

Современные языки

Современный язык означает язык, который обеспечивает более высокую производительность, стабильность, безопасность и удобство сопровождения по сравнению с языками прошлого. Такие языки активно внедряют новейшие методы и концепции, предоставляя разработчикам более эффективные и безопасные инструменты разработки. К представительным современным языкам относятся Java, Rust, Python, TypeScript и другие, которые обладают следующими характеристиками.

1. Объектно-ориентированное проектирование ( OOP )

Современные языки в большинстве своем разработаны на основе концепций объектно-ориентированного подхода. Объектно-ориентированный подход поддерживает принципы, такие как инкапсуляция, наследование и полиморфизм, и, управляя сложными системами путем их разделения на небольшие единицы — объекты, делает структуру программы ясной и гибкой. Это особенно эффективно при разработке крупномасштабного программного обеспечения для контроля затрат и трудозатрат на разработку, а также для сокращения проблем, которые могут возникнуть при сопровождении.

2. Синтаксический сахар и выражения

Современные языки предлагают разнообразный синтаксический сахар и синтаксис на основе выражений для повышения читаемости кода и продуктивности разработки. Функциональность, такая как тернарные операторы, лямбда-выражения, сопоставление с образцом (pattern matching) и т.п., сокращает boilerplate code, делает код предсказуемым и повышает продуктивность разработчика.

3. Модульная система

Современные языки позволяют управлять программами, разделяя их на несколько единиц, посредством модульной системы. Это облегчает повторное использование кода и управление зависимостями, а также упрощает сопровождение даже при увеличении масштаба проекта. Типичными примерами являются Maven/Gradle для Java, Cargo для Rust, npm/yarn для TypeScript и другие.

4. Промежуточный язык и виртуальная машина

Современные языки внедряют промежуточные языки и виртуальные машины для обеспечения платформенной независимости, оптимизации производительности и безопасности. Типичными примерами являются JVM, LLVM, WASM, GraalVM и другие.

Разработка в эпоху AI и ограничения современных языков

Современные языки возникли исходя из предпосылки, что большую часть кода пишет человек. Естественно, целью современных языков является сокращение повторяющихся задач, повышение производительности и эффективная реализация крупномасштабного программного обеспечения посредством структуры, позволяющей разработчикам совместно работать. Однако в эпоху AI эта предпосылка постепенно рушится. Инструменты на основе AI, такие как Copilot, Cody и другие, автоматизируют значительную часть написания кода, и объем кода, который может произвести один разработчик, экспоненциально растет. Вследствие этого характеристики современных языков, которые ранее воспринимались как преимущества, постепенно превращаются в устаревшие недостатки.

Объектно-ориентированное проектирование

AI может быстро и точно анализировать структуры, где вся информация явно указана в рамках одной функции или модуля. Напротив, по мере увеличения контекста возрастает объем для вывода, поэтому продуктивность и точность AI снижаются. Код, написанный с использованием OOP, распределяет логику по нескольким объектам, а не управляет ею в одном месте, что в итоге требует большего контекста от AI. Рассмотрим приведенный ниже код.

 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}

В приведенном выше коде AI должен повторять следующие рассуждения, чтобы узнать, какое действие на самом деле выполнит метод speak():

  1. Инстансом какого конкретного класса является animal?
  2. Где определен переопределенный метод speak() в этом классе?
  3. Где находятся определения классов Dog и Cat, и каково их внутреннее поведение?
  4. Существует ли вероятность того, что классы Dog и Cat могут быть переопределены в других классах?

Эта информация не собрана в одном файле или одной функции и может быть понята только путем следования за отношениями между файлами классов и структурой наследования. Более того, элементы, определяемые во время выполнения, такие как рефлексия или динамическая загрузка, подобны черным ящикам с точки зрения AI, что делает их анализ фактически невозможным.

Синтаксический сахар и выражения

AI предпочитает явные действия неявным и предпочитает создавать единый правильный ответ, комбинируя простые структуры, а не используя сложные готовые структуры. В противоположность этому, синтаксический сахар, допуская разнообразные формы записи, часто имеет одинаковое или схожее внутреннее поведение. AI должен индивидуально изучать значение этих разнообразных форм записи, и ему может стать трудно определять приоритет того, какой синтаксис следует рекомендовать в определенной ситуации.

Промежуточный язык и виртуальная машина

AI в большинстве своем обучается на основе исходного кода. Напротив, промежуточный язык (bytecode) лишается значений, таких как имена переменных, в процессе компиляции, и должен быть переинтерпретирован виртуальной машиной во время выполнения. Это очень сложная задача для понимания или преобразования AI. Например, преобразование из TypeScript в Go возможно для AI, но преобразование bytecode движка V8 в bytecode JVM или машинный код фактически близко к невозможности.

Настоящий современный язык в эпоху AI

Изложенное выше позволяет нам понять, что характеристики современных языков на самом деле являются устаревшими элементами, не подходящими для эпохи AI. В таком случае, какой язык может стать наиболее подходящим современным языком для эпохи AI? Подсказку можно получить из элементов, которые были отвергнуты современными языками прошлого. Современный язык эпохи AI:

  1. Должен иметь явный синтаксис и естественный поток.
  2. Должен иметь плоскую и простую структуру, отходя от избыточной структуры OOP.
  3. Вместо ненужного синтаксического сахара или неявных паттернов, создает различные функции, используя только ограниченный набор базовых ключевых слов.
  4. Должен иметь простую и предсказуемую систему сборки, а не сложную.

Язык, который наиболее соответствует этим критериям, — это Golang. Язык Go был разработан таким образом, чтобы с помощью минимального набора ключевых слов и простых синтаксических комбинаций можно было реализовать большинство практических функций, и он строго исключает ненужную абстракцию и неявные действия. Это структура, выгодная не только разработчикам, но и AI для интерпретации и генерации кода.

Таким образом, характеристики Go, ориентированные на предсказуемую и плоскую структуру, явный поток и последовательный синтаксис, в отличие от существующих современных языков, разработанных с учетом человеческих разработчиков, лучше подходят для среды разработки, где активно участвует AI. Консервативная философия дизайна Go, которая когда-то считалась устаревшей, наоборот, в эпоху AI становится самым передовым выбором.