GoSuda

Modernt språk 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 införlivar aktivt de senaste teknikerna och koncepten och tillhandahåller utvecklare mer effektiva och säkra utvecklingsverktyg. Representativa moderna språk inkluderar Java, Rust, Python, TypeScript, med flera, och de har 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 dela upp komplexa system i små enheter av objekt för hantering. Detta är särskilt effektivt för att kontrollera utvecklingskostnader och ansträngning vid storskalig mjukvaruutveckling och för att minska problem som kan uppstå vid underhåll.

2. Syntactic Sugar och uttryck

Moderna språk tillhandahåller olika former av syntactic sugar och uttrycksbaserad syntax för att förbättra kodläsbarheten och utvecklingsproduktiviteten. Funktioner som ternära operatorer, lambda-uttryck och pattern matching minskar boilerplate-kod, gör koden förutsägbar och förbättrar 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 återanvändning av kod och hantering av beroenden, och gör underhållet enklare även när projektets omfattning växer. Representativa exempel inkluderar Javas Maven/Gradle, Rusts Cargo, TypeScript npm/yarn, med flera.

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, GraalVM, med flera.

Utveckling i AI-eran och moderna språks begränsningar

Moderna språk uppstod under antagandet att människor skriver majoriteten 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 gradvis på att vittra sönder. AI-baserade verktyg som Copilot och Cody automatiserar stora delar av kodskrivningen, och mängden kod som en enskild utvecklare kan producera ökar exponentiellt. Till följd av detta håller de egenskaper hos moderna språk som tidigare uppfattades som fördelar gradvis på att förvandlas till föråldrade nackdelar.

Objektorienterad design

AI kan snabbt och korrekt analysera strukturer där all information är explicit specificerad inom en enda funktion eller modul. Å andra sidan, när kontexten ökar, ökar också antalet områden att härleda, vilket minskar AI:s produktivitet och noggrannhet. Kod skriven i OOP sprider logiken över flera objekt snarare än att hantera den på ett ställe, vilket följaktligen 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 härledningar för att veta vad speak()-metoden faktiskt kommer att göra:

  1. Vilken konkret klass är animal en instans av?
  2. Var är speak()-metoden som är overridden i den klassen definierad?
  3. Var finns definitionerna av Dog- och Cat-klasserna, och vad är deras interna beteende?
  4. Finns det någon möjlighet att Dog- och Cat-klasserna kan bli overridden av andra klasser?

Denna information finns 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 reflection eller dynamisk laddning, som en svart låda för AI, vilket gör analysen praktiskt taget omöjlig.

Syntactic sugar och uttryck

AI föredrar explicita beteenden framför implicita beteenden och föredrar att kombinera enkla strukturer för att skapa ett enda korrekt svar snarare än att använda komplexa strukturer. Däremot tillåter syntactic sugar olika uttryck samtidigt som det interna beteendet ofta är detsamma eller liknande. AI måste lära sig betydelsen av dessa olika uttryck individuellt, och det kan bli svårt att bedöma prioriteten för vilken syntax som ska rekommenderas i en specifik situation.

Mellanspråk och virtuella maskiner

AI tränas mestadels på källkod. Däremot rensas betydelser som variabelnamn bort från mellanspråk (bytecode) under kompileringsprocessen, och de måste omtolkas av den virtuella maskinen vid exekveringstidpunkten. Detta är en mycket svår uppgift för AI att förstå eller konvertera. Till exempel är konvertering från TypeScript till Go möjlig för AI, men att konvertera V8 engine bytecode till JVM bytecode eller maskinkod är praktiskt taget nära omöjligt.

Det verkliga moderna språket i AI-eran

Genom ovanstående innehåll kan vi inse att moderna språks egenskaper faktiskt är föråldrade element som inte är lämpliga för AI-eran. Vilket språk kan då bli det mest lämpliga moderna språket i AI-eran? Vi kan få ledtrådar från de element som tidigare moderna språk förkastade. Det moderna språket i AI-eran bör:

  1. Ha explicit syntax och ett naturligt flöde.
  2. Bryta sig loss från ö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ödig syntactic sugar eller implicita mönster.
  4. Ha ett enkelt och förutsägbart byggsystem, inte ett komplext sådant.

Det språk som bäst uppfyller dessa kriterier är Golang. Go-språket designades för att möjliggöra implementering av de flesta praktiska funktioner med minimala kärnnyckelord och en enkel kombination av syntax, och det exkluderar strikt onödig abstraktion och implicita beteenden. Detta är en struktur som är fördelaktig inte bara för utvecklare utan även för AI att tolka och generera kod.

Således passar Go:s egenskaper, som strävar efter en förutsägbar och platt struktur, explicit flöde och konsekvent syntax, bättre i en utvecklingsmiljö där AI aktivt deltar, i motsats till befintliga moderna språk som designades med mänskliga utvecklare som utgångspunkt. Go:s konservativa designfilosofi, som en gång ansågs föråldrad, blir paradoxalt nog det mest avancerade valet i AI-eran.