Inline funkcije

Započeo nik, 30.11.2011, 12:36

prethodna tema - sledeća tema

nik

Kada to nije posebno naglašeno u zadatku, da li pri rešavanju treba težiti korišćenju inline funkcija (mislim u ovom slučaju na definisanje funkcije članice unutar tela klase) ili treba ostati pri uobičajenom definisanju funkcije članice izvan tela klase?
Znam samo da se inline funkcijama povećava brzina programa, kada funkcija nije mnogo velika.  :D

vukasheen

Funkcije klase se u svim programskim jezicima koje sam do sada koristio definisu unutar klase, naravno ako su namenjene za rad sa objektima te klase.  Što se tiče korišćenja inline funkcija to sve zavisi od primene, ali generalno ne bi trebalo da koristiš inline funcije ako ti to i ne treba. Povećaćeš veličinu koda, zauzeti više operativne memorije a niko ti ne garantije bolje performanse. Performanse programa dosta zavisi od operativnog sistema i slobodnih resursa (memorija, cpu). Visoki programski jezici su se odrekli pokazivača i višestrukog nasleđivanja da bi se smanjile programerske greške. Težnja je da se piše modularan i čitljiv kod, a da se na prerformanse misli kada je neophodno. Naravno ako radis real time aplikacije onda ćeš da gledaš da sve optimizuješ. Generalno moraš uvek težiti da izbalansiraš uptrebu memorije i procesorskog vremena. Nekada intezivna upotreba memorije smanjuje vreme izvršavanja. Ako ti efikasnost bude preko potrebna radićeš testove sa različitim alogritama pa ćeš videti.

holodoc

30.11.2011, 18:44 #2 Poslednja Izmena: 30.11.2011, 18:46 od holodoc
Inline funkcije su najkorisnije kada imaš ogromne petlje sa velikim brojem iteracija pošto ne prave karambol na steku koji se javi svaki put kad se pozovu regularne funkcije.

Dakle, napravi jednu petlju od recimo pet miliona iteracija i uporedi rezultate kad regularno pozivaš funkciju i kad koristiš inline funkciju u petlji.

Jedini problem je što kompajleri nisu u obavezi da poštuju kod i mogu slobodno da ignorišu eksplicitno navedene inline funkcije ili čak one koje to nisu da in konvertuju u inline verziju.
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Zepi

Toretska osnova za korišćenje postoji baš u problemima koji dosta dinamično rade sa stekom pa samim tim mogu i da dosta uspore određenu problematiku.

Mada mnogu osporavaju poboljšavanje performansi, tj ako u jednom algoritmu pomaže ne znači da će u drugom pa ih i ne preporučuju kao nešto što je efikasnije.

Citat
Jedini problem je što kompajleri nisu u obavezi da poštuju kod
A slažem se i sa ovom konstatacijom i to ne samo za inline funkcije. Mnoge programerske greške ili želje se modifikuju od strane samog kompajlera na način koji njima odgovara.