GoSuda

Модерен език в ерата на AI

By Rabbit Princess
views ...

모던 언어

Модерни езици

모던 언어란 과거의 언어들에 비해 더 높은 생산성, 안정성, 보안성, 유지보수성을 제공하는 언어를 의미한다. Модерните езици се отнасят до езици, които предоставят по-висока производителност, стабилност, сигурност и поддръжка в сравнение с езиците от миналото. 이러한 언어들은 최신 기법과 개념을 적극적으로 도입하며, 개발자에게 더 효율적이고 안전한 개발 도구를 제공한다. Тези езици активно въвеждат най-новите техники и концепции, предоставяйки на разработчиците по-ефективни и сигурни инструменти за разработка. 대표적인 모던 언어로는 Java, Rust, Python, TypeScript 등이 있으며, 이들은 다음과 같은 특징을 갖는다. Типични модерни езици включват Java, Rust, Python, TypeScript и други, които притежават следните характеристики.

1. 객체지향 설계 ( OOP )

1. Обектно-ориентиран дизайн ( OOP )

모던 언어는 대부분 객체지향 개념을 기반으로 설계되었다. Повечето модерни езици са проектирани въз основа на концепцията за обектно-ориентираност. 객체지향은 캡슐화, 상속, 다형성과 같은 원칙을 지원하며, 복잡한 시스템을 작은 단위의 객체로 나누어 관리함으로써 프로그램의 구조를 명확하고 유연하게 만든다. Обектно-ориентираното програмиране поддържа принципи като Капсулиране, Наследяване и Полиморфизъм, и прави структурата на програмата ясна и гъвкава, като управлява сложни системи, разделяйки ги на малки единици – обекти. 이는 특히 대규모 소프트웨어 개발 시 개발 비용과 공수를 통제하고, 유지보수 시 발생할 수 있는 문제를 줄이는 데 효과적이다. Това е особено ефективно за контролиране на разходите за разработка и усилията при разработката на мащабен софтуер, както и за намаляване на проблемите, които могат да възникнат по време на поддръжка.

2. 문법 설탕 및 표현식

2. Синтактична захар и изрази

모던 언어는 코드의 가독성과 개발 생산성을 높이기 위해 다양한 문법 설탕과 표현식 기반 문법을 제공한다. Модерните езици предоставят разнообразна Синтактична захар и синтаксис, базиран на изрази, за да повишат четливостта на кода и производителността на разработката. 삼항 연산자, 람다 표현식, 패턴 매칭 등의 기능은 보일러플레이트 코드를 줄이고, 코드를 예측 가능하게 하며, 개발자의 생산성을 향상시킨다. Функции като Тернарен оператор, Ламбда изрази и pattern matching намаляват boilerplate code, правят кода по-предвидим и подобряват производителността на разработчиците.

3. 모듈 시스템

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

모던 언어는 모듈 시스템을 통해 프로그램을 여러 단위로 분리해 관리할 수 있게 한다. Модерните езици позволяват програмите да бъдат разделени и управлявани в отделни модули чрез Модулна система. 이는 코드의 재사용성과 의존성 관리를 용이하게 하며, 프로젝트 규모가 커져도 유지보수를 수월하게 만든다. Това улеснява повторното използване на кода и управлението на зависимостите, като прави поддръжката по-лесна дори при увеличаване на мащаба на проекта. 대표적인 예로는 Java의 Maven/Gradle, Rust의 Cargo, TypeScript의 npm/yarn 등이 있다. Типични примери включват Maven/Gradle за Java, Cargo за Rust, npm/yarn за TypeScript и други.

4. 중간 언어 및 가상 머신

4. Междинен език и Виртуална машина

모던 언어들은 플랫폼 독립성과 성능 최적화, 보안성을 위해 중간 언어와 가상 머신을 도입한다. Модерните езици въвеждат Междинен език и Виртуални машини за постигане на платформена независимост, оптимизация на производителността и сигурност. 대표적인 예로 JVM, LLVM, WASM, GraalVM 등이 있다. Типични примери включват JVM, LLVM, WASM, GraalVM и други.

AI 시대의 개발과 모던 언어의 한계점

Разработката в ерата на AI и ограниченията на модерните езици

모던 언어는 사람이 대부분의 코드를 작성한다는 전제하에 생겨났다. Модерните езици възникнаха при предпоставката, че хората пишат по-голямата част от кода. 자연스럽게 모던 언어의 목적은 반복 작업을 줄이고 생산성을 높이며, 개발자들이 협업할 수 있는 구조를 통해 대형 소프트웨어를 효과적으로 구현하는 것이다. Естествено, целта на модерните езици е да намалят повтарящите се задачи, да повишат производителността и ефективно да реализират мащабен софтуер чрез структури, които позволяват сътрудничество между разработчиците. 그러나 AI 시대에 이러한 전제가 점점 무너지고 있다. В ерата на AI обаче тази предпоставка постепенно се руши. Copilot, Cody 등과 같은 AI 기반 도구는 코드 작성의 많은 부분을 자동화하고 있으며, 한 명의 개발자가 생산할 수 있는 코드의 양이 비약적으로 증가하고 있다. Инструменти, базирани на AI като Copilot, Cody и други, автоматизират голяма част от писането на код, като обемът код, който един разработчик може да произведе, нараства експоненциално. 이로 인해 과거에는 장점으로 느껴지던 모던 언어의 특징이 점차 구시대적인 단점으로 변하고 있다. В резултат на това характеристиките на модерните езици, които в миналото се считаха за предимства, постепенно се превръщат в остарели недостатъци.

객체지향 설계

Обектно-ориентиран дизайн

AI는 하나의 함수나 모듈 안에서 모든 정보가 명시된 구조는 빠르고 정확하게 분석할 수 있다. AI може бързо и точно да анализира структури, където цялата информация е изрично посочена в рамките на една функция или модул. 반면에, 컨텍스트가 증가할수록 추론할 구간이 늘어나기 때문에 AI 의 생산성과 정확도는 낮아진다. От друга страна, колкото повече нараства контекстът, толкова повече се увеличават областите за извод, което намалява производителността и точността на AI. OOP 로 짜여진 코드는 로직을 한 곳에서 관리하기보다는 여러 객체에 분산시키며, 이는 결과적으로 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() 메서드가 실제로 어떤 동작을 할지 알기 위해 다음과 같은 추론을 반복해야 한다 В горния код, за да разбере какво точно ще направи методът speak(), AI трябва да повтори следните разсъждения:

  1. animal은 어떤 구체 클래스의 인스턴스인지?
  2. Какъв конкретен клас е инстанцията animal?
  3. 그 클래스에서 오버라이드된 speak() 메서드는 어디에 정의되어 있는지?
  4. Къде е дефиниран методът speak(), който е презаписан в този клас?
  5. Dog과 Cat 클래스의 정의는 어디에 있으며, 그 내부의 동작은 무엇인지?
  6. Къде са дефинициите на класовете Dog и Cat, и каква е тяхната вътрешна логика?
  7. Dog 와 Cat 클래스가 다른 클래스에서 오버라이드될 가능성은 없는지?
  8. Има ли възможност класовете Dog и Cat да бъдат презаписани от други класове?

이러한 정보는 한 파일 혹은 한 함수에 모여 있지 않고, 클래스 파일들 간의 관계와 상속 구조를 따라가야만 이해할 수 있다. Тази информация не е събрана в един файл или една функция, а може да бъде разбрана само като се проследят връзките между файловете на класовете и структурата на Наследяване. 더군다나, 리플렉션 또는 동적 로딩 처럼 런타임에 결정되는 요소들은 AI 입장에서 블랙박스와도 같아, 사실상 분석이 불가능하다. Освен това, елементи, които се решават по време на runtime, като Reflection или Dynamic loading, са като черна кутия за AI и на практика са невъзможни за анализ.

문법 설탕 및 표현식

Синтактична захар и изрази

AI 는 암시적인 동작보다 명시적인 동작을 선호하며, 복잡한 구조를 가져다가 쓰기 보다는 단순한 구조를 조합해 하나의 정답을 만드는 것을 선호한다. AI предпочита изрични действия пред подразбиращи се действия и предпочита да комбинира прости структури, за да създаде един правилен отговор, вместо да използва сложни структури. 그에 반해, 문법 설탕은 다양한 표현을 허용하면서도, 그 내부 동작은 동일하거나 유사한 경우가 많다. За разлика от това, Синтактичната захар позволява различни изрази, но вътрешното им поведение често е същото или подобно. AI는 이 다양한 표현의 의미를 일일이 학습해야 하며, 특정 상황에서 어떤 문법을 추천해야 하는지 우선순위를 판단하기 어려워질 수 있다. AI трябва да учи значението на тези различни изрази поотделно и може да му бъде трудно да определи приоритета на това кой синтаксис да препоръча в конкретна ситуация.

중간언어 및 가상머신

Междинен език и Виртуална машина

AI는 대부분 소스코드를 기반으로 학습한다. AI се учи предимно въз основа на изходния код. 반면, 중간 언어(bytecode)는 컴파일 과정에서 변수명 등의 의미가 제거되며, 실행 시점에 가상 머신이 재해석해야 한다. От друга страна, от Междинен език (bytecode) се премахва значението на имена на променливи и други подобни по време на процеса на компилация, и трябва да бъде интерпретиран отново от Виртуална машина по време на изпълнение. 이는 AI가 이해하거나 변환하기 매우 어려운 작업이다. Това е задача, която е много трудна за AI да разбере или преобразува. 예를 들어 AI 에게 TypeScript에서 Go로의 변환은 가능하지만, V8 engine의 바이트코드를 JVM의 바이트코드나 기계어로 변환하는 것은 사실상 불가능에 가깝다. Например, преобразуването от TypeScript към Go е възможно за AI, но преобразуването на bytecode от V8 engine в bytecode на JVM или машинен код е на практика почти невъзможно.

AI 시대의 진짜 모던 언어

Истинският модерен език в ерата на AI

위 내용을 통해 우리는 모던 언어의 특징들이 실제로는 AI 시절에 적합하지 않은 구시대적인 요소라는 것을 알 수 있다. Чрез горното съдържание можем да разберем, че характеристиките на модерните езици всъщност са остарели елементи, които не са подходящи за ерата на AI. 그렇다면 어떤 언어가 AI 시대의 가장 적합한 모던 언어가 될 수 있을까? Тогава кой език може да бъде най-подходящият модерен език за ерата на AI? 이는 과거 모던 언어들이 배척했던 요소들에서 힌트를 얻을 수 있다. Можем да получим подсказка от елементите, които модерните езици в миналото са отхвърляли. AI 시대의 모던 언어는 Модерният език в ерата на AI трябва:

  1. 명시적인 문법과 자연스러운 흐름을 가져야 한다.
  2. Да има изричен синтаксис и естествен поток.
  3. 과도한 OOP 구조를 벗어나 평면적이고 단순한 구조를 가져야 한다.
  4. Да избягва прекомерни OOP структури и да има плоска и проста структура.
  5. 불필요한 문법설탕이나 암시적 패턴보다는, 한정된 기본 키워드만으로 여러 기능을 제작한다.
  6. Да създава различни функционалности само с ограничен набор от основни ключови думи, вместо с ненужна Синтактична захар или подразбиращи се шаблони.
  7. 복잡한 빌드 시스템이 아닌 단순하고 예측가능한 빌드 시스템을 가져야 한다.
  8. Да има проста и предвидима build system, а не сложна.

이러한 기준에 가장 부합하는 언어는 Golang이다. Езикът, който най-много отговаря на тези критерии, е Golang. Go언어는 최소한의 핵심 키워드와 단순한 문법 조합만으로도 실용적인 대부분의 기능을 구현할 수 있도록 설계되었으며, 불필요한 추상화와 암시적 동작을 철저히 배제한다. Езикът Go е проектиран така, че да позволява реализирането на повечето практически функционалности само с минимален набор от основни ключови думи и прости синтактични комбинации, като същевременно стриктно избягва ненужни абстракции и подразбиращи се действия. 이는 개발자뿐만 아니라 AI가 코드를 해석하고 생성하는 데에도 유리한 구조이다. Това е структура, която е благоприятна не само за разработчиците, но и за AI при интерпретирането и генерирането на код.

이처럼 예측 가능하고 평면적인 구조, 명시적인 흐름, 일관된 문법을 지향하는 Go의 특성은, 인간 개발자를 기준으로 설계된 기존 모던 언어들과 달리, AI가 적극 참여하는 개발 환경에 더 잘 어울린다. Така характеристиките на Go, които се стремят към предвидима и плоска структура, изричен поток и последователен синтаксис, за разлика от съществуващите модерни езици, проектирани с фокус върху човешкия разработчик, са по-подходящи за среда за разработка, в която AI участва активно. 한때는 구시대적이라고 여겨졌던 Go의 보수적 설계 철학이, 오히려 AI 시대에는 가장 앞선 선택이 되는 셈이다. Консервативната философия на дизайна на Go, която някога се смяташе за остаряла, всъщност се превръща в най-напредничавия избор в ерата на AI.