GoSuda

Moderné jazyky v ére AI

By Rabbit Princess
views ...

Moderné jazyky

Moderné jazyky sú definované ako tie, ktoré poskytujú vyššiu produktivitu, stabilitu, bezpečnosť a udržiavateľnosť v porovnaní s jazykmi minulosti. Tieto jazyky aktívne integrujú najnovšie techniky a koncepty, čím poskytujú vývojárom efektívnejšie a bezpečnejšie nástroje na vývoj. Medzi reprezentatívne moderné jazyky patria Java, Rust, Python a TypeScript, ktoré zdieľajú nasledujúce charakteristiky.

1. Objektovo orientovaný dizajn (OOP)

Väčšina moderných jazykov je navrhnutá na základe princípov objektovo orientovaného programovania. Objektová orientácia podporuje princípy ako zapuzdrenie, dedičnosť a polymorfizmus, čím sa štruktúra programu stáva jasnejšou a flexibilnejšou prostredníctvom riadenia komplexných systémov rozdelených na menšie objekty. Toto je obzvlášť efektívne pri rozsiahlej tvorbe softvéru na kontrolu nákladov na vývoj a úsilia, ako aj na minimalizáciu potenciálnych problémov počas údržby.

2. Syntaktický cukor a výrazy

Moderné jazyky ponúkajú rôzne formy syntaktického cukru a gramatiky založenej na výrazoch s cieľom zvýšiť čitateľnosť kódu a produktivitu vývoja. Funkcie ako ternárne operátory, lambda výrazy a porovnávanie vzorov redukujú boilerplate kód, robia kód predvídateľnejším a zlepšujú produktivitu vývojárov.

3. Modulárny systém

Moderné jazyky umožňujú spravovať programy rozdelené do viacerých jednotiek prostredníctvom modulárneho systému. Toto uľahčuje opätovné použitie kódu a správu závislostí a zjednodušuje údržbu aj pri rozširovaní rozsahu projektu. Reprezentatívne príklady zahŕňajú Maven/Gradle pre Javu, Cargo pre Rust a npm/yarn pre TypeScript.

4. Medzijazyk a virtuálny stroj

Moderné jazyky implementujú medzijazyky a virtuálne stroje pre platformovú nezávislosť, optimalizáciu výkonu a bezpečnosť. Reprezentatívne príklady zahŕňajú JVM, LLVM, WASM a GraalVM.

Vývoj v ére AI a obmedzenia moderných jazykov

Moderné jazyky vznikli za predpokladu, že väčšinu kódu napíše človek. Prirodzene, cieľom moderných jazykov je redukovať opakujúce sa úlohy, zvyšovať produktivitu a efektívne implementovať rozsiahly softvér prostredníctvom štruktúr, ktoré umožňujú spoluprácu vývojárov. V ére AI sa však tento predpoklad postupne narúša. Nástroje založené na AI, ako sú Copilot a Cody, automatizujú značnú časť písania kódu, čím sa exponenciálne zvyšuje množstvo kódu, ktoré môže jeden vývojár vyprodukovať. V dôsledku toho sa charakteristiky moderných jazykov, ktoré boli kedysi vnímané ako výhody, postupne menia na zastarané nevýhody.

Objektovo orientovaný dizajn

AI dokáže rýchlo a presne analyzovať štruktúry, kde sú všetky informácie explicitne uvedené v rámci jednej funkcie alebo modulu. Naopak, s rastúcim kontextom sa zväčšuje rozsah inferencie, čo znižuje produktivitu a presnosť AI. Kód napísaný v OOP rozdeľuje logiku medzi viaceré objekty namiesto toho, aby ju spravoval na jednom mieste, čo v konečnom dôsledku vyžaduje od AI viac kontextu. Zvážme nasledujúci kód.

 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}

V uvedenom kóde musí AI opakovane vykonávať nasledujúce inferencie, aby zistila, čo presne metóda speak() vykoná:

  1. Aká konkrétna trieda je inštanciou animal?
  2. Kde je definovaná metóda speak() preťažená v tejto triede?
  3. Kde sú definície tried Dog a Cat a aká je ich vnútorná logika?
  4. Existuje možnosť, že triedy Dog a Cat sú preťažené inými triedami?

Tieto informácie nie sú sústredené v jednom súbore alebo funkcii, ale musia sa sledovať prostredníctvom vzťahov medzi súbormi tried a štruktúrami dedičnosti. Navyše, prvky, ktoré sa určujú za behu, ako je reflexia alebo dynamické načítanie, sú pre AI ako čierna skrinka, čo prakticky znemožňuje analýzu.

Syntaktický cukor a výrazy

AI preferuje explicitné operácie pred implicitnými a uprednostňuje kombinovanie jednoduchých štruktúr na vytvorenie jednej správnej odpovede pred používaním komplexných štruktúr. Na druhej strane, syntaktický cukor umožňuje rôzne vyjadrenia, pričom ich vnútorné operácie sú často identické alebo podobné. AI musí individuálne učiť význam týchto rôznych vyjadrení a môže byť pre ňu ťažké určiť prioritu, ktorý syntax odporučiť v konkrétnej situácii.

Medzijazyk a virtuálny stroj

AI sa väčšinou učí na základe zdrojového kódu. Naopak, medzijazyk (bytecode) stráca svoj význam, napríklad názvy premenných, počas procesu kompilácie a musí byť reinterpretovaný virtuálnym strojom počas vykonávania. To je pre AI veľmi náročná úloha na pochopenie alebo transformáciu. Napríklad, zatiaľ čo transformácia z TypeScriptu do Go je pre AI možná, konverzia bytecode V8 enginu na bytecode JVM alebo strojový kód je prakticky nemožná.

Skutočný moderný jazyk v ére AI

Na základe vyššie uvedeného môžeme konštatovať, že charakteristiky moderných jazykov sú v skutočnosti zastarané prvky, ktoré nie sú vhodné pre éru AI. Aký jazyk by teda mohol byť najvhodnejším moderným jazykom v ére AI? Nápovedu môžeme nájsť v prvkoch, ktoré moderné jazyky v minulosti odmietali. Moderný jazyk v ére AI by mal mať:

  1. Explicitnú syntax a prirodzený tok.
  2. Plochú a jednoduchú štruktúru, ktorá sa vyhýba nadmerným OOP štruktúram.
  3. Obmedzený súbor základných kľúčových slov na implementáciu rôznych funkcií, namiesto zbytočného syntaktického cukru alebo implicitných vzorov.
  4. Jednoduchý a predvídateľný build systém namiesto komplexných build systémov.

Jazykom, ktorý najlepšie spĺňa tieto kritériá, je Golang. Jazyk Go bol navrhnutý tak, aby umožňoval implementáciu väčšiny praktických funkcií s minimálnym počtom kľúčových slov a jednoduchými syntaktickými kombináciami, pričom dôsledne vylučuje zbytočnú abstrakciu a implicitné správanie. Táto štruktúra je výhodná nielen pre vývojárov, ale aj pre AI pri interpretácii a generovaní kódu.

Charakteristiky jazyka Go, ktoré sa zameriavajú na predvídateľnú a plochú štruktúru, explicitný tok a konzistentnú syntax, sú vhodnejšie pre vývojové prostredie, kde sa AI aktívne podieľa, na rozdiel od existujúcich moderných jazykov navrhnutých s ohľadom na ľudských vývojárov. Konzervatívna filozofia dizajnu jazyka Go, ktorá bola kedysi považovaná za zastaranú, sa v ére AI stáva najpokročilejšou voľbou.