» »

Applov nov programski jezik Swift

1
2
»

Utk ::

Če se res tako dela, zakaj je bila cela štala s Sigmo?

krneki0001 ::

UTK, Zato, ker tam so pa lagali eden drugemu, da je narejeno, pa ni bilo. Potem so pa v petih minutah brez testiranja skupaj zmetal nekaj kode in posledica je bila očitna.

Poanta bančnega programja je, da je specifično in da se mora res testirat dolgo dolgo časa in na veliko primerih (za svoje programje imam narejen nek test, ki obsega par miljonov transakcij, pa je to samo developer test, če pravilno deluje, potem pa še uporabniki spustijo vsaj 10 miljonov transakcij čez programje, preden gre sploh v predprodukcijo, kjer mora pa pol leta delat pravilno).

Sicer bodo to tudi začel ustavljat, pa ne bo več pol leta za testiranje, ker bi radi šparal, ampak...
Asrock X99 Extreme 4 | Intel E5-2683V4 ES | 64GB DDR4 2400MHz ECC |
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster

Utk ::

Se pravi, da se tako dela samo ko se tako dela, ko se ne, se pa pač ne.
Sej ni samo Sigma, takih primerov je ogromno. Tudi v večjih firmah od NLB, pa pri davčni itd.

noraguta ::

krneki0001 je izjavil:

UTK, Zato, ker tam so pa lagali eden drugemu, da je narejeno, pa ni bilo. Potem so pa v petih minutah brez testiranja skupaj zmetal nekaj kode in posledica je bila očitna.

Poanta bančnega programja je, da je specifično in da se mora res testirat dolgo dolgo časa in na veliko primerih (za svoje programje imam narejen nek test, ki obsega par miljonov transakcij, pa je to samo developer test, če pravilno deluje, potem pa še uporabniki spustijo vsaj 10 miljonov transakcij čez programje, preden gre sploh v predprodukcijo, kjer mora pa pol leta delat pravilno).

Sicer bodo to tudi začel ustavljat, pa ne bo več pol leta za testiranje, ker bi radi šparal, ampak...

če na koncu stane testiranje več kot sam razvoj, težko govorimo o efektivnosti in dobrih praksah. pač vzdržuješ okostje dinozavra ampak ker v sili še hudič muhe žre ne pa ker je to prav super početje in česa bolšega ne poznamo.
Pust' ot pobyedy k pobyedye vyedyot!

Spura ::

MrStein je izjavil:

220-krat hitreje kot Python.

Preveden program proti interpretiranemu? :)

Ne samo to, katerikoli jezik, ki ima integer tipe kot objekte (ala java Integer class), bo za faktor 40+ pocasnjesi pri numeriki ala razni checksumi itd... tko da ta njihova hvala je bolj prazna. Logicno da je Python porazen pri numeriki.

pegasus je izjavil:

Veliko raje imam formal verification, ki matematično natančno pokaže, ali nek kos kode deluje tako in samo tako, kot se od njega pričakuje.

Ti si orenk na glavo padu.

krneki0001 ::

UTK, jaz vedno delam tako (sej razvoja imam dosti, samo kasneje gre v produkcijo). Niso pa vsi taki, ki bi se držali tega protokola.

Noraguta, Sej se da tudi hitreje, ampak morajo uporabniki podpisat, da je v redu stestirano in da je narejeno tako kot mora biti. (v vsakem primeru morajo, ampak če so sigurni da zadeve štimajo, lahko daš v produkcijo naslednji dan ko si naredil zadevo), za večje sklope in nove projekte je pa vsaj pol leta testiranja. Ampak to je bančni software in je v igri denar, ne neka aplikacija za na telefon, ki je vseeno če 10% ljudio odleti, 90% pa dela. Pri nas so in morajo biti zadeve 99,95% uspešne.
Asrock X99 Extreme 4 | Intel E5-2683V4 ES | 64GB DDR4 2400MHz ECC |
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster

Zgodovina sprememb…

win64 ::

Spura je izjavil:

MrStein je izjavil:

220-krat hitreje kot Python.

Preveden program proti interpretiranemu? :)

Ne samo to, katerikoli jezik, ki ima integer tipe kot objekte (ala java Integer class), bo za faktor 40+ pocasnjesi pri numeriki ala razni checksumi itd... tko da ta njihova hvala je bolj prazna. Logicno da je Python porazen pri numeriki.

pegasus je izjavil:

Veliko raje imam formal verification, ki matematično natančno pokaže, ali nek kos kode deluje tako in samo tako, kot se od njega pričakuje.

Ti si orenk na glavo padu.


JAVA ima kolikor vem tudi primitivni tip int. Je pa res, da primitvni tip in generics ne gre skupaj. Kar pomeni pisanje algoritma za vsak primitvni tip posebej, če bi rad hitrost.

Mi je pa osebno ljubše preverjanje vrnjene vrednosti, kot pa catch/try/finally bloki.

Randomness ::

pegasus je izjavil:

Veliko raje imam formal verification, ki matematično natančno pokaže, ali nek kos kode deluje tako in samo tako, kot se od njega pričakuje.
I tata bi sine. Tudi meni se dopade formal verification, a na žalost je takšnega razvoja, kjer se to zares uporablja, IMHO bore malo. Dvomim, da imamo kje v Sloveniji razvoj na takem nivoju, da je formal verification upravičen. Seveda pa se lahko tudi motim ...

noraguta ::

win64 je izjavil:

Spura je izjavil:

MrStein je izjavil:

220-krat hitreje kot Python.

Preveden program proti interpretiranemu? :)

Ne samo to, katerikoli jezik, ki ima integer tipe kot objekte (ala java Integer class), bo za faktor 40+ pocasnjesi pri numeriki ala razni checksumi itd... tko da ta njihova hvala je bolj prazna. Logicno da je Python porazen pri numeriki.

pegasus je izjavil:

Veliko raje imam formal verification, ki matematično natančno pokaže, ali nek kos kode deluje tako in samo tako, kot se od njega pričakuje.

Ti si orenk na glavo padu.


JAVA ima kolikor vem tudi primitivni tip int. Je pa res, da primitvni tip in generics ne gre skupaj. Kar pomeni pisanje algoritma za vsak primitvni tip posebej, če bi rad hitrost.

Mi je pa osebno ljubše preverjanje vrnjene vrednosti, kot pa catch/try/finally bloki.

dajte si že dopovedat, da stvari nista ekvivalentni. return value služi servisiranju napake, exceptioni pa zaščiti programa pred tem da odleti, pa tud tuki morš servisirat napako. če kakšne napake nimaš pohendlane lahko zapišeš vsaj error log brez izjem ti pa aplikacija samo tiho odleti. pol se pa jebi pa išč kje si zafuku.
Pust' ot pobyedy k pobyedye vyedyot!

Zgodovina sprememb…

  • spremenilo: noraguta ()

techfreak :) ::

Ker v primeru faila zaradi dostopa do datotek/omrezja ne mores vrniti return value?

smash ::

techfreak :) je izjavil:

Ker v primeru faila zaradi dostopa do datotek/omrezja ne mores vrniti return value?


lahko, kako pa pohendlaš sam fail? kako to napišeš?

Marat ::

Ontopic: Swift le ni tako hiter, ko se gre za sortiranje arrayev...
http://stackoverflow.com/questions/2410...

win64 ::

smash je izjavil:

techfreak :) je izjavil:

Ker v primeru faila zaradi dostopa do datotek/omrezja ne mores vrniti return value?


lahko, kako pa pohendlaš sam fail? kako to napišeš?


Odvisno od jezika ter api-ja. Recimo Java zahteva, da loviš vse izjeme, C# uporablja izjeme vendar ne zahteva, da jih poloviš.
C ne pozna izjem. C++ ti pusti prosto pot pri uporabi. V praksi pa odvisno od primera.
Recimo za win32 api v c++(primer iz glave):
HFILE * fileHandle = CreateFile(..);
if(fileHandle == null){
 error = GetLastError();
 //ulovljena napaka
}

Utk ::

Kaj pa če bi hotel, da ti CreateFile (oz. neka druga funkcija) vrača int (oz. nekaj kar ne more bit null)?
Meni se zdi tak GetLastError() precej naknadno dodana stvar, če primerjaš s try-catch, niti ne zgleda ravno "objektno" - CreateFile je lahko v drugem dll-ju, in v njem je nastala napaka, kaj ima GetLastError v trenutnem objektu za gledat kaj se je zgodilo v čisto drugem dll-ju. Drugo je to, da CreateFile morda ne nastavi te napake, pa tudi če jo bi moral, ne veš ali jo je res.
No, sej verjamem, da se da tudi tako naredit vse kot s try-catch, samo ravno lepo ni.

Zgodovina sprememb…

  • spremenil: Utk ()

smash ::

win64 je izjavil:

smash je izjavil:

techfreak :) je izjavil:

Ker v primeru faila zaradi dostopa do datotek/omrezja ne mores vrniti return value?


lahko, kako pa pohendlaš sam fail? kako to napišeš?


Odvisno od jezika ter api-ja. Recimo Java zahteva, da loviš vse izjeme, C# uporablja izjeme vendar ne zahteva, da jih poloviš.
C ne pozna izjem. C++ ti pusti prosto pot pri uporabi. V praksi pa odvisno od primera.
Recimo za win32 api v c++(primer iz glave):
HFILE * fileHandle = CreateFile(..);
if(fileHandle == null){
error = GetLastError();
//ulovljena napaka
}


a se izvajanje nadaljuje po prvi vrstici, če pade znotraj CreateFile? Če pade v neki metodi, verjetno enostavno vrže ven cel program, zato tudi smisel da daš znotraj metode CreateFile zadevo v try catch, pa da ujameš vse, potem pa lahko narediš s tem kar češ.

win64 ::

Utk je izjavil:

Kaj pa če bi hotel, da ti CreateFile (oz. neka druga funkcija) vrača int (oz. nekaj kar ne more bit null)?
Meni se zdi tak GetLastError() precej naknadno dodana stvar, če primerjaš s try-catch, niti ne zgleda ravno "objektno" - CreateFile je lahko v drugem dll-ju, in v njem je nastala napaka, kaj ima GetLastError v trenutnem objektu za gledat kaj se je zgodilo v čisto drugem dll-ju. Drugo je to, da CreateFile morda ne nastavi te napake, pa tudi če jo bi moral, ne veš ali jo je res.
No, sej verjamem, da se da tudi tako naredit vse kot s try-catch, samo ravno lepo ni.


1. GetLastError je tako kot CreateFile del win32 api. Ni del c++.
2. Low level api je malokdaj objektno naravnan.
3. To, da CreateFile ne nastavi napake je analogno temu, da funkcija ne vrže izjeme.

a se izvajanje nadaljuje po prvi vrstici, če pade znotraj CreateFile? Če pade v neki metodi, verjetno enostavno vrže ven cel program, zato tudi smisel da daš znotraj metode CreateFile zadevo v try catch, pa da ujameš vse, potem pa lahko narediš s tem kar češ.

Cel smisel tako oblikovanih API-jev je da ne padejo, če se le ne zgodi out of memory/stack overflow. To, da klici padejo skoraj sigurno pomeni, da so vhodni podatki napačni.

Utk ::

Ja pusti ta konkreten CreateFile, kaj če uporabiš neko funkcijo iz nekega x dll-ja. Kako veš, da je nastavil napako.
Zato pa win32 api ne velja za ravno "lepega".

techfreak :) ::

ObjC metode naceloma vrnejo error preko parametra error:
NSError *error;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:data
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:&error];
Ce je error == nil potem ves da je bila funkcija uspesna, drugace pa lahko dobis podatke o napaki. Tukaj takoj ves kateremu klicu metode pripada napaka ter ce jo sploh vrne ali jo pac ignorira.

Zgodovina sprememb…

Senitel ::

smash je izjavil:

a se izvajanje nadaljuje po prvi vrstici, če pade znotraj CreateFile? Če pade v neki metodi, verjetno enostavno vrže ven cel program, zato tudi smisel da daš znotraj metode CreateFile zadevo v try catch, pa da ujameš vse, potem pa lahko narediš s tem kar češ.

Huh? Konkretno CreateFile na vrača nobenih exception-ov. Kako se torej lahko zgodi, da zadeva vrže ven cel program (ker bi nehendlan exception propagiral ven)? In imaš še cel razred problemov, ki ti jih tudi try/catch ne bosta ujela (recimo kakšen segmentation fault).

Kocka ::

V swiftu se detekcijo vračanja "nil" iz funkcije kot napaka zelo elegantno rešuje z "Optionals". Gre nekako takole (glej poglavje "Optionals" v Swift dokumentaciji):
 
if let fileDescriptor = CreateFile(blaBla) {  
   // File descriptor is the right value
} 
else {  
   // File descriptor is nill
} 

"Optional" je poljuben tip spremenljivke, ki ima lahko poleg prave vrednosti (naprimer integer ali pa referenca na objekt) lahko tudi vrednost "nil". Če spremenljivka ni Optional (znak ?), potem boš imel že compile time error, če jo boš hotel nastaviti na nil.
 
var firstName: String = "Nekdo"
firstName = nil   // compile time error

var LastName: String? = "Nekdo"
name = nil   // ok 

Zgodovina sprememb…

  • spremenil: Kocka ()

noraguta ::

Kocka je izjavil:

V swiftu se detekcijo vračanja "nil" iz funkcije kot napaka zelo elegantno rešuje z "Optionals". Gre nekako takole (glej poglavje "Optionals" v Swift dokumentaciji):
 
if let fileDescriptor = CreateFile(blaBla) {
// File descriptor is the right value
}
else {
// File descriptor is nill
}

"Optional" je poljuben tip spremenljivke, ki ima lahko poleg prave vrednosti (naprimer integer ali pa referenca na objekt) lahko tudi vrednost "nil". Če spremenljivka ni Optional (znak ?), potem boš imel že compile time error, če jo boš hotel nastaviti na nil.
 
var firstName: String = "Nekdo"
firstName = nil // compile time error

var LastName: String? = "Nekdo"
name = nil // ok

v funkcijskih jezikih potem zadevo rešuješ z pattern matchingom, swiftov case pa to nažalost ni.
Pust' ot pobyedy k pobyedye vyedyot!

noraguta ::

Senitel je izjavil:

smash je izjavil:

a se izvajanje nadaljuje po prvi vrstici, če pade znotraj CreateFile? Če pade v neki metodi, verjetno enostavno vrže ven cel program, zato tudi smisel da daš znotraj metode CreateFile zadevo v try catch, pa da ujameš vse, potem pa lahko narediš s tem kar češ.

Huh? Konkretno CreateFile na vrača nobenih exception-ov. Kako se torej lahko zgodi, da zadeva vrže ven cel program (ker bi nehendlan exception propagiral ven)? In imaš še cel razred problemov, ki ti jih tudi try/catch ne bosta ujela (recimo kakšen segmentation fault).

segfaulti nimajo veze, pri njih se OS ne znajde več. in zapre zadevo. tle je govora o lokalnem servisu napake.
Pust' ot pobyedy k pobyedye vyedyot!

Kocka ::

Da ne odpiram nove teme bom kar tule vprašal. Ima morda že kdo izkušnje, kako se v Swiftu pri Core Data uporablja tranzientne atribute?

Želim se najprej prebiti skozi najbolj preprost primer in ga realizirati v Swiftu: shraniš 2 spremenljivki "Ime" in "Priimek" v Core Data, tretja (tranzientna) "Polno Ime" pa naj se zgenerira sama iz prvih dveh.
Tule sem našel primer, kako se to naredi v Objective-C:
http://davemeehan.com/technology/object...

Ko sem primer skušal prenesti v Swift, se mi zatakne že pri Getterju, ker mi Xcode tega ne dovoli zaradi @NSManaged atributa na tranzientni spremenljivki. Ne dovoli niti observerja. Uporabljam trenutno zadnjo verzijo Xcode 6 beta 7.

Gotovo obstaja kak enostaven način (ker drugače v model viewerju ne bi obstajal transient atribut), samo ne najdem nikjer primera. Na Stackoverflowu sem samo našel popolnoma isto vprašanje še brez odgovora :(
http://stackoverflow.com/questions/2472...
1
2
»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Priljubljenost C-ja na petnajstletnem dnu

Oddelek: Novice / Ostala programska oprema
3111765 (7791) Invictus
»

Microsoft na Buildu 2015 zlasti o Windows 10 (strani: 1 2 )

Oddelek: Novice / Operacijski sistemi
6231097 (24845) Lonsarg
»

Applov nov programski jezik Swift (strani: 1 2 )

Oddelek: Novice / Apple iPhone/iPad/iPod
7234299 (28860) Kocka
»

Applove novosti z začetka WWDC - iOS

Oddelek: Novice / Apple iPhone/iPad/iPod
3919851 (17707) PrimozR
»

App Store dve leti in pet milijard aplikacij pozneje

Oddelek: Novice / Android
3511666 (10252) MrStein

Več podobnih tem