Her er nyhederne i Python 3.10: Match er en ren schweizerkniv

Her er nyhederne i Python 3.10: Match er en ren schweizerkniv
Illustration: Bigstock/Taborov.
For anden gang udkommer Python efter en ny årlig udgivelsesplan. Den store nyhed for det hidtil switch-løse sprog er en ny match-sætning, der kan lidt af hvert.
12. maj 2021 kl. 03:45
errorÆldre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Med 30 år på bagen har programmeringssproget Python kronede dage. På lister over sprogs popularitet ligger Python enten i toppen eller tæt på.

Python er gået fra at være et scripting-sprog med lav indlæringskurve, til at være et af de foretrukne sprog til videnskabelig programmering, statistik, dataanalyse og kunstig intelligens.

Ligesom i Javascript kan man i Python gøre næsten, hvad man har lyst til på kørselstidspunktet, såsom at udstyre objekter med nye felter og metoder. Det sætter begrænsninger på afviklingshastigheden.

Den danske ekspert i virtuelle maskiner Lars Bak vurderer, at sprog som Python og Javascript kan opnå omkring halvdelen af den ydelse som typestærke sprog, der også afvikles i en virtuel maskine, såsom Java og C#, kan præstere.

Men der er flere måder at gøre tingene på. Det er nemt at kalde C-kode fra Python, og mange Python-biblioteker er implementeret i C, som gør dem lynhurtige.

Når det handler om kunstig intelligens, matricer og vektorer, kan biblioteker udnytte grafikkort, som er mange gange hurtigere, end når tilsvarende operationer skal udføres på cpu-kerner, på grund af parallelisering af lineære vektorberegninger.

Log ind og få adgang
Du kan læse indholdet ved at logge ind eller oprette dig som ny bruger.
Debatten
Log ind for at deltage i debatten.
settingsDebatindstillinger
5
14. maj 2021 kl. 11:06

Jeg gyser dog lidt ved tanken om hvordan sådan en "schweizerkniv" ser ud i implementeringen - hvor meget den "hopper rundt i koden".

Jeg ved ikke om Pythonoversætteren gør det, men man kan optimere en match-sætning, så man undgår at teste det samme flere gange. I listeeksemplet er de to sidste cases begge lister med et element, der er et punkt, hvor man tilgår de to koordinater. Den sidste case kan udnytte, at man enten ved, at det ikke er en sådan liste, og fejle med det samme, eller at man ved, at det er en sådan liste, men at de to koordinater ikke begge er 0, og bare binde x og y til de to koordinater, man allerede har hentet i den foregående case.

Med andre ord kan den tilsyneladende sekventielle gennemgang af mønstrene laves om til en optimeret automat, hvor man ikke tester eller henter de samme ting flere gange. Det sker i oversættere for f.eks. Standard ML og Haskell, og det kan også gøres for Python. Men Python har aldrig været fokuseret på hastighed, så det er ikke sikkert, at man har prioriteret dette.

4
13. maj 2021 kl. 21:02

Eksemplet er lige under den sætning, du citerer (som antydet ved sætningens afsluttende kolon)

Øhh tak, Thomas.

Jeg gyser dog lidt ved tanken om hvordan sådan en "schweizerkniv" ser ud i implementeringen - hvor meget den "hopper rundt i koden".

3
13. maj 2021 kl. 15:18

Lister kan også anvendes som argument til case-sætningen

Eksemplet er lige under den sætning, du citerer (som antydet ved sætningens afsluttende kolon)

2
13. maj 2021 kl. 11:46

Lister kan også anvendes som argument til case-sætningen:

Det havde være rart med et eksempel - der viste dette ;-)

1
12. maj 2021 kl. 10:23

"Over time, every language evolves to look more and more like Standard ML".