GoSuda

Det moderna språket i AI-eran

By Rabbit Princess
views ...

Moderna språk

Moderna språk avser språk som erbjuder högre produktivitet, stabilitet, säkerhet och underhållbarhet jämfört med äldre språk. Dessa språk integrerar aktivt de senaste teknikerna och koncepten, och tillhandahåller mer effektiva och säkra utvecklingsverktyg för utvecklare. Representativa moderna språk inkluderar Java, Rust, Python och TypeScript, vilka uppvisar följande egenskaper.

1. Objektorienterad design (OOP)

De flesta moderna språk är designade baserat på objektorienterade koncept. Objektorientering stöder principer som inkapsling, arv och polymorfism, och gör programstrukturen tydlig och flexibel genom att hantera komplexa system uppdelade i små objekt. Detta är särskilt effektivt för att kontrollera utvecklingskostnader och arbetsinsatser vid storskalig mjukvaruutveckling, samt för att minska problem som kan uppstå vid underhåll.

2. Syntaktiskt socker och uttryck

Moderna språk erbjuder olika syntaktiska socker och uttrycksbaserad syntax för att förbättra kodläsbarhet och utvecklingsproduktivitet. Funktioner som ternära operatorer, lambda-uttryck och mönstermatchning minskar boilerplate-kod, gör koden mer förutsägbar och ökar utvecklarens produktivitet.

3. Modulsystem

Moderna språk möjliggör hantering av program genom att dela upp dem i flera enheter via modulsystem. Detta underlättar kodåteranvändning och beroendehantering, och gör underhållet smidigare även när projektets skala växer. Representativa exempel inkluderar Javas Maven/Gradle, Rusts Cargo och TypeScript npm/yarn.

4. Mellanspråk och virtuella maskiner

Moderna språk inför mellanspråk och virtuella maskiner för plattformsoberoende, prestandaoptimering och säkerhet. Representativa exempel inkluderar JVM, LLVM, WASM och GraalVM.

Utveckling i AI-eran och begränsningar för moderna språk

Moderna språk uppstod under antagandet att människor skriver det mesta av koden. Naturligtvis är syftet med moderna språk att minska repetitiva uppgifter, öka produktiviteten och effektivt implementera storskalig mjukvara genom strukturer som möjliggör samarbete mellan utvecklare. I AI-eran håller dock detta antagande på att falla sönder. AI-baserade verktyg som Copilot och Cody automatiserar stora delar av kodskrivningen, och mängden kod en enskild utvecklare kan producera ökar exponentiellt. Detta leder till att de egenskaper hos moderna språk som tidigare uppfattades som fördelar gradvis förvandlas till föråldrade nackdelar.

Objektorienterad design

AI kan snabbt och exakt analysera strukturer där all information är specificerad inom en enda funktion eller modul. Däremot, ju större kontexten är, desto fler inferenssteg krävs, vilket minskar AI:s produktivitet och noggrannhet. Kod skriven med OOP sprider logiken över flera objekt istället för att hantera den på ett ställe, vilket i sin tur kräver mer kontext för AI. Låt oss titta på koden nedan.

 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}

I koden ovan måste AI upprepa följande inferens för att förstå vad metoden speak() faktiskt gör:

  1. Vilken konkret klass är "animal" en instans av?
  2. Var definieras den överlagrade speak()-metoden i den klassen?
  3. Var finns definitionerna för klasserna Dog och Cat, och vad är deras interna beteende?
  4. Finns det en möjlighet att klasserna Dog och Cat kan överlagras av andra klasser?

Denna information är inte samlad i en enda fil eller funktion, utan kan endast förstås genom att följa relationerna mellan klassfiler och arvstrukturer. Dessutom är element som bestäms vid körtid, såsom reflektion eller dynamisk laddning, som en svart låda för AI, vilket gör analysen praktiskt taget omöjlig.

Syntaktiskt socker och uttryck

AI föredrar explicita operationer framför implicita, och föredrar att kombinera enkla strukturer för att skapa ett korrekt svar istället för att använda komplexa strukturer. Däremot tillåter syntaktiskt socker en mängd olika uttryck, även om deras interna beteende ofta är identiskt eller liknande. AI måste lära sig betydelsen av varje sådant varierande uttryck, och det kan bli svårt att prioritera vilken syntax som ska rekommenderas i specifika situationer.

Mellanspråk och virtuella maskiner

AI tränas oftast på källkod. Mellanspråk (bytecode) däremot, förlorar sin semantik, såsom variabelnamn, under kompileringen och måste omtolkas av den virtuella maskinen vid exekvering. Detta är en mycket svår uppgift för AI att förstå eller konvertera. Till exempel är en konvertering från TypeScript till Go möjlig för AI, men att konvertera V8-motorns bytecode till JVM:s bytecode eller maskinkod är praktiskt taget omöjligt.

Det sanna moderna språket i AI-eran

Genom ovanstående kan vi se att egenskaperna hos moderna språk faktiskt är föråldrade element som inte är lämpliga för AI-eran. Vilket språk kan då vara det mest lämpliga moderna språket i AI-eran? Vi kan få ledtrådar från de element som moderna språk i det förflutna förkastade. Ett modernt språk i AI-eran bör:

  1. Ha en explicit syntax och ett naturligt flöde.
  2. Undvika överdriven OOP-struktur och ha en platt och enkel struktur.
  3. Skapa flera funktioner med endast ett begränsat antal grundläggande nyckelord, snarare än onödigt syntaktiskt socker eller implicita mönster.
  4. Ha ett enkelt och förutsägbart byggsystem, snarare än ett komplext.

Det språk som bäst uppfyller dessa kriterier är Golang. Go-språket är designat för att kunna implementera de flesta praktiska funktioner med ett minimum av kärnnyckelord och en enkel syntaxkombination, och utesluter noggrant onödig abstraktion och implicita operationer. Detta är en fördelaktig struktur inte bara för utvecklare utan även för AI vid tolkning och generering av kod.

Go:s egenskaper, som en förutsägbar och platt struktur, explicit flöde och konsekvent syntax, passar bättre i en utvecklingsmiljö där AI aktivt deltar, till skillnad från traditionella moderna språk som designats med mänskliga utvecklare i åtanke. Go:s konservativa designfilosofi, som en gång ansågs föråldrad, visar sig nu vara det mest framåtblickande valet i AI-eran.