Hvordan ser ditt ideelle programmeringsspråk ut?

Etter jeg skrev om parsing her på forumet har jeg begynt så smått på å lage mitt eget programmeringsspråk. Det er ikke sikkert det noen gang blir ferdig, men der har vært artig å tenke på hvordan mitt ideelle språk ser ut.

Det jeg har lyst på er en variant som ligner js/ts, men betydelig forenklet.

  • Det skal gå an å markere funksjoner som pure
  • Et bra standard bibliotek ala python
  • Fjerne masse utdatert fra js (with, in, function som ikke er arrow, named breakpoints, etc)
  • Bruke native funksjoner i stedetfor spesiell syntax (instanceof, typeof, kanskje noen operatorer)
  • Ingen spesiell syntax for loops. Bruke iteratorer i stedet. Må enten ha tail call optimization for å kunne iterere rekursivt, eller ha en native sak som all annen iterasjon kan bygges oppå
  • if-setninger returnerer verdier. Ternary ut
  • ingen klasser, bare objekter. Ingen prototypes. Du taper performance hvis du har mange instanser, men hvis du hovedsakelig skriver i en funksjonell stil så kommer du ikke borti dette så mye tror jeg
  • Litt usikker på denne: programmatiske types. Hvis man har garantert pure functions kan disse trygt kjøres ved compile time. Dermed kan man kanskje bruke funksjoner til å manipulere types, i stedet for å ha spesiell syntax for bl.a. generics, aliases, etc.

Kommer sikkert til å ombestemme meg mange ganger underveis, men sånn ser planen ut nå :stuck_out_tongue:

Hva skulle du ønske deg i et programmeringsspråk?

1 Like

Så utrolig kult!

Selv føler jeg at jeg er litt for tidlig i min programmeringsreise til å lage noe liste O:) Når det er sagt så har jeg blitt introdusert til dataflow variabler gjennom Oz i høst. Jeg har ingen idè om konsekvensene av å introdusere de til et eksisterende språk, men de har vært ganske stilige å jobbe med. De er immutable variabler som ikke trenger å være instansiert, men når de først er det så kan de da ikke endres. Det gir endel kule muligheter, blant annet når man gjør thread-programmering. Hvis en thread forsøker å evaluere verdien av en dataflow variabel før den er definert, så vil tråden enkelt og greit vente til den blir satt av en annen tråd. Det bringer selvsagt også endel fallgruver, men kan ganske drastisk forenkle visse parallelle prosesser.

Aldri hørt om dataflow variabler før, hørtes kult ut! Vet du om noen bra tutorials e.l.?

Nei, desverre. Lært det gjennom Oz, og der finnes det ikke mange andre ressurser enn den offesielle dokumentasjonen.

Kan du forklare litt hva du tenker her? Jeg kjenner til tail-recursion, og iteratorer er funksjoner som map, filter osv? Men hva mener du med en nativ sak som all annen iterasjon kan bygges oppå?

En iterator er bare et objekt med en “next” funksjon på. Hvis du har tailrecursion kan du bygge opp iterables uten while/for:

const createIterable = (iterator => {
    return {
        forEach: (fn) => {
            const x = iterator.next()
            if(x.done) return
            fn(x.value)
            return this.forEach(fn)
        }
    }
})

Hvis du ikke har tailrecursion må du ha en annen måte å iterere på. Hvis du ikke har while/for må du ha noe annet. Så det jeg tenkte var at det fantes en native ting man kan importere fra standardbiblioteket. Dvs, native som i at man ikke kan implementere den selv i språket. Så feks kunne man importert “forever” fra standardbiblioteket. Basert på den kan du bygge all annen iterasjon:

const createIterable = (iterator => {
    return {
        forEach: (fn) => {
            forever.until(() => {
                const x = iterator.next()
                if(x.done) return true
                fn(x.value)
                return false
            })
        }
    }
})
1 Like