Hack A Day - V začetku tedna je izšla nova verzija Pythona 2, kar načeloma ni novica za prve strani. Toda 2.7.18 je drugačna, saj prestavlja zadnjo inačico Pythona 2. Python ima že dolgo zgodovino, saj sega v 80. leta prejšnjega stoletja. Verzija 2.0 je izšla oktobra 2000 in prinesla številne novosti, zaradi katerih je Python postal eden najpopularnejših programskih jezikov moderne dobe. Čeprav je Python 3.0 izšel že leta 2008, je aktivno vzdrževanje linije 2.x potekalo vse doslej. Glavni razlog je bila nepopolna združljivost obeh verzij, saj veliko kode v Pythonu 2 terja prilagoditve, da bo delovala v Pythonu 3. A ves čas je bil jasen končni cilj, da se Python 2 upokoji. To bi se bilo moralo zgoditi že bistveno prej (ob izidu Pythona 3 je bil načrtovan datum 2015), a ker je bila migracija počasna, se je konec podpore (EOL) večkrat odmaknil. Sedaj smo še korak bliže temu. Python 2.7.18 je zadnja verzija, ki je izšla (Eulerjevo število je priljubljena referenca). Novih ne bo, je pojasnil Benjamin Peterson.
Problem ni bila koda posameznih projektov, temveč knjižnice in drugi kosi, na katerih temeljijo posamezni projekti. Domačo kodo je treba zanemarljivo popraviti - po navadi zgolj stavek print(). Večji projekti pa so bili zalogaj povsem drugačne dimenzije. Kaj se bo zgodilo sedaj? Še vedno namreč obstaja ogromno kode za Python 2. To ni tako velik problem, saj se je ta koda zelo verjetno prevajala v starejših verzijah, niti ne v 2.7.17. Prineslo pa bo to težave v prihodnosti, saj morebitne luknje in hrošči, ki jih bodo odkrili v Pythonu 2, ne bodo zakrpani. Z vidika vzdrževanja to ne bo povzročalo tako velikih težav kot na primer COBOL, saj sta obe veji Pythona podobni. Seveda pa je modro vso novo kodo napisati v Pythonu 3.
Mene zanima, kako takšnim projektom uspe sproducirati nekaj brez kakršne koli misli na backwards compaiblity. A so čisto oblivious na vse, kar se dogaja okrog njih?
Po mojem bi rabili malo več Linusov, da bi jih malo prizemljili, ko bi poskušali narediti takšne neumnosti.
Dinozavrom seveda to ne bo všeč; dodatno delo za to da gre svet naprej? Ufff raje se še malo usedem na ta udoben fotelj do zadnjega možnega trenutka ko to gre.
Ne vem zakaj odlašanje. Ali je sedaj manj kode, kot je bilo 2008? Najbrž bo treba še več dela, kot če bi to naredili že takrat.
Seveda je zdaj manj Python 2 kode. Medtem se je večino obstoječih Python knjižnic prilagodilo za Python 3, novi projekti so od začetka uporabili Python 3 in ne 2.
Težava je predvsem popolnoma dobro delujoča stara Python 2 produkcijska koda, za katero nihče ne želi plačati stroškov prilagoditve na Python 3. Taka koda bo lepo delovala naprej, še dolgo.
Sicer pa bo Red Hat vzdrževal Python 2 vsaj do junija 2024, ko se bo zaključila podpora za RHEL 7. Skozi extended support bo podpora na voljo še kaki dve leti, do 2026.
Python 2 je sicer tudi v RHEL 8, a tu bo podpora ukinjena preden bo konec siceršnje podpore za OS (2029 oz. 2031) in sicer isto junija 2024.
No, tudi po 2024 ne bo Python 2 kar magično nehal delovati...
Mene zanima, kako takšnim projektom uspe sproducirati nekaj brez kakršne koli misli na backwards compaiblity. A so čisto oblivious na vse, kar se dogaja okrog njih?
Po mojem bi rabili malo več Linusov, da bi jih malo prizemljili, ko bi poskušali narediti takšne neumnosti.
Če bi ti vedel, koliko neskončnega načrtovanja, dogovarjanja in tudi kreganja je bilo okoli prehoda Python 2 na Python 3... Preden so se odločili kako in kaj, vmes in potem.
Poglej malo bloge in mailing liste za nazaj, pa prijetno branje...
Mnja, sem malo prebral, pa je žal tako, kot sem predvideval. Konkretno na primer za "print", so prevladala Guidova čustva, oz. želja po tem, da naredi stvar tako, kot bi si jo želel.
It looks to me like most arguments for keeping print are motivated by backwards compatibility (in its many guises, like the existence of 15 years of tutorials) and not by what would be best if we were to design a language from scratch.
...
I really believe that dropping print in favor of a few built-in functions is an improvement -- backwards compatibility be damned!
Fundamentalna razlika med Python 2 in 3 je branje in pisanje podatkov. Poglej spremembe pri str, kako se obravnava unicode, kako se dela s tekstom in binarnimi podatki...
@ales, ja, ampak če že pri najbolj trivialni metodi ni bilo interesa za backwards compat., potem je jasno, da ga tudi pri kompleksnejših zadevah ne bo.
Kako to misliš "ne bo", v prihodnjiku? Vse to v zvezi s Python 3 in kompatibilnostjo za nazaj se je dogajalo pred 12-14 leti. Vse to je že mimo.
Še vedno se mi zdi, da se ne zavedaš razsežnosti problematike niti ogromne količine časa, ki ga je skupnost vložila v razprave o tem. Na žalost si si izbral najbolj banalen primer, ki pravzaprav nima veze z ničemer.
@WhiteAngel, novica dejansko govori o tem, da je s Pythonom 2 zdaj dokončno konec, kar se Python skupnosti tiče. Ničesar več ne bodo fiksali, konec je.
Če 12 let ni dovolj za prehod, potem pa res ne vem...
Sicer pa mastodonti verjetno tako ali tako uporabljajo Red Hat, tako da imajo še 4 do 6 let v dobrem in v tem času še lahko pričakujejo popravke od Red Hata. V tem času bo zagotovo tudi še kak fork životaril, a bo po moje v tem času tudi mrknil.
@ales, ja, ampak če že pri najbolj trivialni metodi ni bilo interesa za backwards compat., potem je jasno, da ga tudi pri kompleksnejših zadevah ne bo.
Mislim da si tole malo pomešal. Bistvena stvar ki so jo z verzijo 3 želeli urediti je bilo obravnavanje stringov in unicode podpora. In potem ko že enkrat delaš take velike spremembe, pač popraviš še kako trivialno malenkost, kot je print.
Od trenutka, ko se je odločil, da že "print" - ki je uporabljen pretty much v vsaki skripti - ne bo compatible z v2, je bil morebiten backwards compatibility že pokopan. In to se je odločil še preden se je "py3k" začel. Ravno zato, ker je najbolj trivialna zadeva, je toliko bolj problematična.
Seveda se zavedam razsežnosti te problematike, a se oni več kot očitno niso zavedali pomembnosti tega, glede na to, da so rabili 12 let, da so si upali reči "zdej pa dost".
Pri tem imajo žal komercialni produkti velikokrat prednost, ker si tam ne morejo privoščiti, da bi developerje/stranke tako potisnili v drek. Tukaj ti pa rečejo "fuck off, go away".
A je kdo kdaj uporabljal Swift? Trenutno je aktualen Swift 5. Praktično vsako novo leto pride nova verzija. Do verzije 4 so bili prehodi med verzijami kar pošteno boleči lahko. Apple je pa droppal support za stare verzije praktično avtomatsko. Res je, da si tukaj vsaj dobil način za avtomatsko konverzijo, ki ti je lahko včasih malo pomagal. No z zadnjimi Swift verzijami so itak obljubili boljšo kompatibilnost. Tako, da je bil prehod iz 4 na 5 zelo neboleč.
Iz verzije 1 v 2 so tudi pri Swiftu spreminjali print.
Vcasih sem uporabljal Swift, in po izkusnjah je bilo potrebno precej stvari popravljati pri nadgradnji na novo verzijo. Swift ima sicer precejsnjo prednost da se skompajla, kar pomeni, da zadeva naceloma deluje v primeru uspesnega builda.
Pri Pythonu lahko samo upas da ima dovolj dobro pokritost s testi, ker drugace moras rocno stestirati celotno funkcionalnost.
Od trenutka, ko se je odločil, da že "print" - ki je uporabljen pretty much v vsaki skripti - ne bo compatible z v2, je bil morebiten backwards compatibility že pokopan. In to se je odločil še preden se je "py3k" začel. Ravno zato, ker je najbolj trivialna zadeva, je toliko bolj problematična.
Jaz se čisto drugače spomnim stvari iz tistih let. Sploh se ne spomnim, da bi bila print funkcija odločilna za karkoli.
O tem, da bi bilo dobro nekatere fundamentalne stvari zastaviti drugače, se je pogovarjalo že tam nekje 2002. Print funkcija je bila že takrat na tapeti, ampak vedno sem imel občutek, da ni poglavitna. Veliko govora o vsem skupaj je bilo tudi na PyCon 2003.
"It looks to me like most arguments for keeping print are motivated by backwards compatibility (in its many guises, like the existence of 15 years of tutorials) and not by what would be best if we were to design a language from scratch."
Prekinitev kompatibilnosti za nazaj je bila že jasna, print funkcija je le ena od stvari, ki se bodo ob tej priliki spremenile. Nisem pa imel občutka, da bi se kdo sploh dotikal print funkcije, če ne bi spreminjali Pythona kot celote.
Seveda se zavedam razsežnosti te problematike, a se oni več kot očitno niso zavedali pomembnosti tega, glede na to, da so rabili 12 let, da so si upali reči "zdej pa dost".
Eh, lahko biti general po bitki... Seveda je obstajalo zavedanje, da bo konec kompatibilnosti za nazaj velika stvar. Vprašanje je, če bi koga vprašal tam nekje 2009 ali 2010 (Python 3 je prišel ven 2008), ali bi se šlo k Python 3 točno na tak način, kot se je šlo, to pa zih.
Ampak skoraj si ne predstavljam, da ne bi šli v to, samo malo drugače. In sigurno ne zaradi print funkcije, pač pa zaradi bolj važnih stvari...
Heh, po svoje mi je smešno... po toliko letih se spet pogovarjam o Python 2 / 3... Kot da še ne bi imel dovolj!
Ne, Debian zelo aktivno iz repozitorijev meče pakete, ki delujejo zgolj s Python 2.
Sicer pa se z darkolordom strinjajo tudi Python core razvijalci, ki so že ugotovili, da je tak prehod, kjer ne poskrbiš za enostavno migracijo, zadeva, ki je nočejo ponoviti.
Kalkulator nove omrežnine 2024 - https://omreznina.karlas.si/Kalkulator