AI-aikakauden moderni kieli
Modernit kielet
Moderni kieli tarkoittaa kieltä, joka tarjoaa korkeampaa tuottavuutta, vakautta, turvallisuutta ja ylläpidettävyyttä verrattuna aikaisempiin kieliin. Nämä kielet ottavat aktiivisesti käyttöön uusimmat tekniikat ja käsitteet ja tarjoavat kehittäjille tehokkaampia ja turvallisempia kehitystyökaluja. Tyypillisiä moderneja kieliä ovat Java, Rust, Python, TypeScript jne., ja niillä on seuraavat ominaisuudet.
1. Oliopohjainen suunnittelu ( OOP )
Useimmat modernit kielet on suunniteltu oliopohjaisen käsitteen perusteella. Oliopohjainen suunnittelu tukee periaatteita, kuten kapselointi, periytyminen ja polymorfismi, ja tekee ohjelman rakenteesta selkeän ja joustavan jakamalla monimutkaiset järjestelmät pieniin olioyksiköihin hallittaviksi. Tämä on tehokasta erityisesti suurten ohjelmistojen kehittämisessä kehityskustannusten ja työmäärän hallinnassa sekä ylläpidossa mahdollisesti ilmenevien ongelmien vähentämisessä.
2. Syntaktinen sokeri ja lausekkeet
Modernit kielet tarjoavat erilaisia syntaktisia sokereita ja lausekepohjaista syntaksia koodin luettavuuden ja kehitystuottavuuden parantamiseksi. Ominaisuudet, kuten kolmioper operaattori, lambdalausekkeet ja Pattern Matching, vähentävät boilerplate-koodia, tekevät koodista ennustettavaa ja parantavat kehittäjän tuottavuutta.
3. Modulijärjestelmä
Modernit kielet mahdollistavat ohjelmien hallinnan jakamalla ne useisiin yksiköihin modulijärjestelmän avulla. Tämä helpottaa koodin uudelleenkäyttöä ja riippuvuuksien hallintaa ja tekee ylläpidosta sujuvaa, vaikka projektin koko kasvaisi. Tyypillisiä esimerkkejä ovat Javan Maven/Gradle, Rustin Cargo, TypeScriptin npm/yarn jne.
4. Välikieli ja virtuaalikone
Modernit kielet ottavat käyttöön välikielen ja virtuaalikoneen alustariippumattomuuden, suorituskyvyn optimoinnin ja turvallisuuden vuoksi. Tyypillisiä esimerkkejä ovat JVM, LLVM, WASM, GraalVM jne.
Kehitys AI-aikakaudella ja modernien kielten rajoitukset
Modernit kielet syntyivät oletuksella, että ihminen kirjoittaa suurimman osan koodista. Luonnollisesti modernien kielten tavoitteena on vähentää toistuvia tehtäviä, lisätä tuottavuutta ja tehokkaasti toteuttaa suuria ohjelmistoja rakenteen avulla, jossa kehittäjät voivat tehdä yhteistyötä. Kuitenkin AI-aikakaudella tämä oletus on vähitellen murtumassa. AI-pohjaiset työkalut, kuten Copilot, Cody jne., automatisoivat suurta osaa koodin kirjoittamisesta, ja yhden kehittäjän tuottaman koodin määrä kasvaa eksponentiaalisesti. Tämän seurauksena modernien kielten ominaisuudet, jotka aiemmin tuntuivat eduilta, muuttuvat vähitellen vanhentuneiksi haitoiksi.
Oliopohjainen suunnittelu
AI voi analysoida nopeasti ja tarkasti rakenteen, jossa kaikki tieto on selvästi ilmaistu yhdessä funktiossa tai modulissa. Toisaalta, kun konteksti kasvaa, pääteltävien alueiden määrä lisääntyy, mikä vähentää AI:n tuottavuutta ja tarkkuutta. OOP:llä kirjoitettu koodi hajauttaa logiikan useisiin olioihin sen sijaan, että sitä hallittaisiin yhdessä paikassa, mikä puolestaan vaatii AI:lta enemmän kontekstia. Katsotaanpa alla olevaa koodia.
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}
Yllä olevassa koodissa AI:n on toistettava seuraavat päätelmät tietääkseen, mitä speak()-metodi todella tekee:
- Minkä konkreettisen luokan ilmentymä animal on?
- Missä kyseisessä luokassa ylikirjoitettu speak()-metodi on määritelty?
- Missä Dog- ja Cat-luokkien määritelmät sijaitsevat, ja mikä on niiden sisäinen toiminta?
- Onko mahdollista, että Dog- ja Cat-luokat ylikirjoitetaan muissa luokissa?
Tämä tieto ei ole koottuna yhteen tiedostoon tai yhteen funktioon, vaan se voidaan ymmärtää vain seuraamalla luokkatiedostojen välisiä suhteita ja periytymisrakennetta. Lisäksi tekijät, jotka päätetään ajonaikaisesti, kuten Reflection tai Dynamic Loading, ovat AI:n näkökulmasta kuin mustia laatikoita, ja niiden analysointi on käytännössä mahdotonta.
Syntaktinen sokeri ja lausekkeet
AI suosii eksplisiittistä toimintaa implisiittisen sijaan ja suosii yhden vastauksen luomista yhdistämällä yksinkertaisia rakenteita sen sijaan, että käyttäisi monimutkaisia rakenteita sellaisenaan. Sen sijaan syntaktinen sokeri sallii erilaisia ilmaisumuotoja, vaikka niiden sisäinen toiminta on usein sama tai samanlainen. AI:n on opittava jokaisen näistä erilaisista ilmaisumuodoista erikseen, ja sille voi olla vaikeaa määrittää prioriteetteja sen suhteen, mitä syntaksia suositellaan tietyssä tilanteessa.
Välikieli ja virtuaalikone
AI oppii enimmäkseen lähdekoodin perusteella. Toisaalta välikielestä (bytecode) poistetaan muuttujanimien kaltaiset merkitykset käännösprosessin aikana, ja virtuaalikoneen on tulkittava se uudelleen suoritushetkellä. Tämä on erittäin vaikea tehtävä AI:lle ymmärtää tai muuntaa. Esimerkiksi muuntaminen TypeScriptistä Go:ksi on AI:lle mahdollista, mutta V8 enginen bytecode-koodin muuntaminen JVM:n bytecode-koodiksi tai konekieleksi on käytännössä mahdotonta.
AI-aikakauden todellinen moderni kieli
Yllä olevan sisällön perusteella voimme nähdä, että modernien kielten ominaisuudet ovat todellisuudessa vanhentuneita elementtejä, jotka eivät sovellu AI-aikakauteen. Mikä kieli voisi siis olla sopivin moderni kieli AI-aikakaudella? Tähän voidaan saada vihjeitä elementeistä, jotka modernit kielet aiemmin hylkäsivät. AI-aikakauden modernin kielen on
- oltava eksplisiittinen syntaksi ja luonnollinen kulku.
- vältettävä liiallista OOP-rakennetta ja oltava tasainen ja yksinkertainen rakenne.
- luotava useita toimintoja vain rajatuilla perusavaimilla sen sijaan, että käytettäisiin tarpeetonta syntaktista sokeria tai implisiittisiä Pattern-malleja.
- oltava yksinkertainen ja ennustettava Build System monimutkaisen sijaan.
Kieli, joka parhaiten vastaa näitä kriteerejä, on Golang. Go-kieli on suunniteltu niin, että useimmat käytännölliset toiminnot voidaan toteuttaa vain minimaalisilla ydinsanoilla ja yksinkertaisilla syntaksiyhdistelmillä, ja se sulkee pois tarpeettoman abstraktion ja implisiittisen toiminnan. Tämä rakenne on edullinen paitsi kehittäjille myös AI:lle koodin tulkitsemiseen ja luomiseen. Go:n ominaisuudet, jotka pyrkivät ennustettavaan ja tasaiseen rakenteeseen, eksplisiittiseen kulkuun ja johdonmukaiseen syntaksiin, sopivat paremmin kehitysympäristöön, jossa AI osallistuu aktiivisesti, toisin kuin perinteiset modernit kielet, jotka on suunniteltu ihmiskehittäjän näkökulmasta. Go:n konservatiivinen suunnittelufilosofia, jota pidettiin aikoinaan vanhentuneena, on itse asiassa AI-aikakaudella edistyksellisin valinta.