GoSuda

Moderne Sprog i AI-æraen

By Rabbit Princess
views ...

Moderne Sprog

Et moderne sprog er et sprog, der tilbyder højere produktivitet, stabilitet, sikkerhed og vedligeholdelsesvenlighed sammenlignet med tidligere sprog. Disse sprog inkorporerer aktivt de nyeste teknikker og koncepter, og de giver udviklere mere effektive og sikre udviklingsværktøjer. Repræsentative moderne sprog inkluderer Java, Rust, Python og TypeScript, som har følgende karakteristika.

1. Objektorienteret Design (OOP)

De fleste moderne sprog er designet baseret på objektorienterede koncepter. Objektorientering understøtter principper som indkapsling, arv og polymorfi, og den gør programmets struktur klar og fleksibel ved at opdele komplekse systemer i mindre objekter. Dette er især effektivt til at kontrollere udviklingsomkostninger og arbejdsbyrde under storskala softwareudvikling og til at reducere problemer, der kan opstå under vedligeholdelse.

2. Syntaktisk Sukker og Udtryk

Moderne sprog tilbyder en række syntaktiske sukkerarter og udtryksbaserede syntakser for at forbedre kodens læsbarhed og udviklingsproduktivitet. Funktioner som ternære operatorer, lambda-udtryk og mønstermatchning reducerer boilerplate-kode, gør koden mere forudsigelig og forbedrer udviklerens produktivitet.

3. Modulsystem

Moderne sprog muliggør styring af programmer ved at adskille dem i flere enheder gennem et modulsystem. Dette letter genanvendelighed af kode og afhængighedsstyring, og det gør vedligeholdelse nemmere, selv når projektets omfang vokser. Repræsentative eksempler inkluderer Javas Maven/Gradle, Rusts Cargo og TypeScript's npm/yarn.

4. Mellemliggende Sprog og Virtuelle Maskiner

Moderne sprog introducerer mellemliggende sprog og virtuelle maskiner for platformsuafhængighed, ydelsesoptimering og sikkerhed. Repræsentative eksempler inkluderer JVM, LLVM, WASM og GraalVM.

Udvikling i AI-æraen og begrænsninger ved moderne sprog

Moderne sprog opstod under den antagelse, at mennesker ville skrive det meste af koden. Naturligvis er formålet med moderne sprog at reducere gentagne opgaver, øge produktiviteten og effektivt implementere stor software gennem strukturer, der muliggør samarbejde mellem udviklere. Men i AI-æraen er denne antagelse gradvist ved at falde fra hinanden. AI-baserede værktøjer som Copilot og Cody automatiserer store dele af kodegenereringen, og mængden af kode, en enkelt udvikler kan producere, er steget eksponentielt. Som et resultat heraf er de egenskaber ved moderne sprog, der tidligere blev opfattet som fordele, gradvist ved at blive forældede ulemper.

Objektorienteret Design

AI kan hurtigt og præcist analysere strukturer, hvor al information er specificeret inden for en enkelt funktion eller et modul. Omvendt, når konteksten øges, og antallet af inferensområder vokser, falder AI's produktivitet og nøjagtighed. Kode, der er skrevet i OOP, distribuerer logik på tværs af flere objekter i stedet for at styre den ét sted, hvilket i sidste ende kræver mere kontekst fra AI. Lad os se på koden nedenfor.

 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}

For at AI kan forstå, hvad speak()-metoden faktisk vil gøre i ovenstående kode, skal den gentagne gange udføre følgende ræsonnement:

  1. Hvilken konkret klasse er animal-instansen af?
  2. Hvor er den speak()-metode defineret, som er overskrevet i den klasse?
  3. Hvor er definitionerne af Dog- og Cat-klasserne, og hvad er deres interne funktionalitet?
  4. Er der nogen mulighed for, at Dog- og Cat-klasserne kan overskrives i andre klasser?

Denne information er ikke samlet i en enkelt fil eller funktion; den kan kun forstås ved at følge relationerne mellem klassefiler og arvestrukturen. Desuden er elementer, der afgøres ved runtime, såsom refleksion eller dynamisk indlæsning, som en sort boks for AI, hvilket gør analyse praktisk talt umulig.

Syntaktisk Sukker og Udtryk

AI foretrækker eksplicit adfærd frem for implicit adfærd, og den foretrækker at kombinere enkle strukturer for at skabe et enkelt svar frem for at bruge komplekse strukturer. Derimod tillader syntaktisk sukker forskellige udtryk, selvom den interne adfærd ofte er den samme eller lignende. AI skal lære betydningen af disse forskellige udtryk individuelt, og det kan blive svært at prioritere, hvilken syntaks der skal anbefales i en bestemt situation.

Mellemliggende sprog og virtuelle maskiner

AI lærer primært ud fra kildekode. Mellemliggende sprog (bytecode) fjerner derimod betydningen af variabelnavne under kompileringen og skal fortolkes igen af en virtuel maskine ved eksekveringstidspunktet. Dette er en meget vanskelig opgave for AI at forstå eller konvertere. For eksempel er det muligt for AI at konvertere fra TypeScript til Go, men det er praktisk talt umuligt at konvertere V8-motorens bytecode til JVM's bytecode eller maskinkode.

Det ægte moderne sprog i AI-æraen

Gennem ovenstående indhold kan vi se, at moderne sprogs karakteristika faktisk er forældede elementer, der ikke er egnede til AI-æraen. Hvilket sprog kunne så være det mest passende moderne sprog i AI-æraen? Vi kan finde spor i de elementer, som tidligere moderne sprog har afvist. Et moderne sprog i AI-æraen skal:

  1. Have en eksplicit syntaks og et naturligt flow.
  2. Afvige fra overdrevne OOP-strukturer og have en flad og enkel struktur.
  3. Skabe flere funktioner med kun et begrænset antal grundlæggende nøgleord i stedet for unødvendigt syntaktisk sukker eller implicitte mønstre.
  4. Have et simpelt og forudsigeligt byggesystem i stedet for et komplekst byggesystem.

Det sprog, der bedst opfylder disse kriterier, er Golang. Go er designet til at implementere de fleste praktiske funktioner med et minimum af kerne-nøgleord og en simpel syntakskombination, og det udelukker strengt unødvendig abstraktion og implicit adfærd. Dette er en fordelagtig struktur, ikke kun for udviklere, men også for AI til at fortolke og generere kode.

Gå's karakteristika, der sigter mod en forudsigelig og flad struktur, eksplicit flow og konsekvent syntaks, passer bedre til et udviklingsmiljø, hvor AI aktivt deltager, i modsætning til eksisterende moderne sprog, der er designet med menneskelige udviklere i tankerne. Gå's konservative designfilosofi, der engang blev anset for forældet, viser sig i AI-æraen at være det mest avancerede valg.