Moderní jazyky v éře AI
Moderní jazyky
Moderní jazyk označuje jazyk, který ve srovnání s dřívějšími jazyky poskytuje vyšší produktivitu, stabilitu, bezpečnost a udržovatelnost. Tyto jazyky aktivně zavádějí nejnovější techniky a koncepty a poskytují vývojářům efektivnější a bezpečnější vývojové nástroje. Mezi 대표적인 moderní jazyky patří Java, Rust, Python, TypeScript, které se vyznačují následujícími vlastnostmi.
1. Objektově orientovaný návrh (OOP)
Většina moderních jazyků je navržena na základě objektově orientovaných konceptů. Objektově orientované programování podporuje principy jako je zapouzdření, dědičnost a polymorfismus, čímž rozděluje složité systémy na menší jednotky (objekty) a činí tak strukturu programu jasnou a flexibilní. To je obzvláště efektivní při rozsáhlém vývoji softwaru pro kontrolu nákladů a úsilí a pro snížení problémů, které mohou nastat během údržby.
2. Syntaktický cukr a výrazy
Moderní jazyky nabízejí různé syntaktické cukry a gramatiku založenou na výrazech, aby zvýšily čitelnost kódu a produktivitu vývoje. Funkce jako ternární operátory, lambda výrazy a pattern matching snižují boilerplate kód, činí kód předvídatelným a zvyšují produktivitu vývojářů.
3. Modulární systém
Moderní jazyky umožňují správu programů rozdělených do více jednotek prostřednictvím modulárního systému. To usnadňuje znovupoužitelnost kódu a správu závislostí a zjednodušuje údržbu i při růstu projektu. Typickými příklady jsou Maven/Gradle pro Javu, Cargo pro Rust a npm/yarn pro TypeScript.
4. Mezilehlý jazyk a virtuální stroj
Moderní jazyky zavádějí mezilehlý jazyk a virtuální stroj pro nezávislost na platformě, optimalizaci výkonu a bezpečnost. Typickými příklady jsou JVM, LLVM, WASM, GraalVM atd.
Vývoj v éře AI a omezení moderních jazyků
Moderní jazyky vznikly za předpokladu, že většinu kódu píše člověk. Přirozeně je cílem moderních jazyků snížit opakující se úkoly, zvýšit produktivitu a efektivně implementovat rozsáhlý software prostřednictvím struktur, které umožňují spolupráci vývojářů. V éře AI se však tento předpoklad postupně hroutí. Nástroje založené na AI, jako jsou Copilot a Cody, automatizují velkou část psaní kódu a množství kódu, které může jeden vývojář vyprodukovat, se exponenciálně zvyšuje. V důsledku toho se vlastnosti moderních jazyků, které byly dříve vnímány jako výhody, postupně mění v zastaralé nevýhody.
Objektově orientovaný návrh
AI dokáže rychle a přesně analyzovat strukturu, ve které jsou všechny informace specifikovány v rámci jedné funkce nebo modulu. Naopak, s rostoucím kontextem se zvyšuje rozsah pro inference, což snižuje produktivitu a přesnost AI. Kód napsaný v OOP spravuje logiku rozdělenou do více objektů spíše než na jednom místě, což v důsledku vyžaduje od AI více kontextu. Podívejme se na následující 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 tomto kódu musí AI opakovaně provádět následující inference, aby zjistila, co metoda speak() skutečně dělá:
- Jakou konkrétní třídou je instance
animal? - Kde je definována přepsaná metoda
speak()v této třídě? - Kde jsou definice tříd Dog a Cat a jaká je jejich vnitřní logika?
- Existuje možnost, že třídy Dog a Cat budou přepsány jinými třídami?
Tyto informace nejsou shromážděny v jednom souboru nebo jedné funkci, ale lze je pochopit pouze sledováním vztahů mezi soubory tříd a strukturou dědičnosti. Navíc prvky, které se rozhodují za běhu, jako je reflexe nebo dynamické načítání, jsou pro AI jako černá skříňka, což fakticky znemožňuje analýzu.
Syntaktický cukr a výrazy
AI preferuje explicitní operace před implicitními a dává přednost kombinování jednoduchých struktur k vytvoření jediné správné odpovědi, než aby používala složité struktury. Naopak, syntaktický cukr umožňuje různé výrazy, přičemž jejich vnitřní operace jsou často stejné nebo podobné. AI se musí naučit význam těchto různých výrazů jednotlivě a může mít potíže s určením priority, který syntax doporučit v konkrétní situaci.
Mezilehlý jazyk a virtuální stroj
AI se většinou učí z kódu. Naopak, mezilehlý jazyk (bytecode) odstraňuje význam názvů proměnných během kompilace a musí být reinterpretován virtuálním strojem v době spuštění. To je pro AI velmi obtížné pochopit nebo převést. Například převod z TypeScriptu na Go je pro AI možný, ale převod bytecode V8 engine na bytecode JVM nebo strojový kód je prakticky nemožný.
Skutečný moderní jazyk v éře AI
Z výše uvedeného obsahu můžeme vidět, že vlastnosti moderních jazyků jsou ve skutečnosti zastaralými prvky, které nejsou vhodné pro éru AI. Jaký jazyk by tedy mohl být nejvhodnějším moderním jazykem v éře AI? Nápovědu můžeme získat z prvků, které moderní jazyky v minulosti odmítaly. Moderní jazyk v éře AI by měl:
- Mít explicitní syntax a přirozený tok.
- Mít plochou a jednoduchou strukturu, oproštěnou od nadměrných OOP struktur.
- Namísto zbytečného syntaktického cukru nebo implicitních vzorů používat omezený počet základních klíčových slov k vytváření různých funkcí.
- Mít jednoduchý a předvídatelný build systém, nikoli složitý.
Jazykem, který nejlépe splňuje tato kritéria, je Golang. Jazyk Go je navržen tak, aby umožňoval implementaci většiny praktických funkcí s minimem klíčových slov a jednoduchými kombinacemi syntaxe, a důsledně se vyhýbá zbytečné abstrakci a implicitním operacím. Tato struktura je výhodná nejen pro vývojáře, ale také pro AI při interpretaci a generování kódu.
Tyto vlastnosti Go, směřující k předvídatelné a ploché struktuře, explicitnímu toku a konzistentní syntaxi, se na rozdíl od existujících moderních jazyků navržených pro lidské vývojáře, lépe hodí do vývojového prostředí, kde se aktivně podílí AI. Konzervativní designová filozofie Go, která byla kdysi považována za zastaralou, se v éře AI stává nejpokrokovější volbou.