» »

C++ Project --- v1

C++ Project --- v1

Vesoljc ::

no, recimo, da se lotim eniga projekta v c++ jeziku. za orientacijo lahko povem, da bo zadeva objektno orientirana knjiznjica (sdk), ki bo omogocala lazji ter hitrejsi razvoj realnocasovnih aplikacij. bo pa portabilna ter v neki fazi tudi odprtoscenska :D.

nek osnovni nacrt, dizajn tega ogrodja (framework) ze imam v glavi, vendar pa je od dizajna do implementacije precej dolga pot. zatorej bi rad vasa mnenja ter nasvete kako se omenjenje zadevscine lotiti.

kje zaceti je prvo vprasanje. imho je potrebno postaviti nekaksne temelje knjiznjice. recimo standardizacija stila kodiranja. tu lahko upostevamo vse od oblike datotek, ki vsebujejo izvorno kodo, dokumentacije, ki iz nje nastane ter seveda "stil" kodiranja. no, za generiranje izvornih datotek sem si naredil tole(win32) orodje. upam, da vam bo vsecen ;). ok, to torej imamo. naslednji korak je dokumentacija. tu sem se odlocil za DoxyGen. stil kodiranja pa je povsem moja stvar! :D povem le, da bom uporabljal cudno mesanico madzarske ter svoje notacije. no nekaj je vidno ze iz generatorja :)
se to, celoten projekt bo v angleskem jeziku.

drugi vecji korak je gradnja osnove (base). prva datoteka mora imho vsebovati osnovne informacije o projektu (imena, pravice, verzija, itd...). to lahko poimenujemo osnovne definicije? ce hocemo zagotoviti portabilnost, je naslednja stvar, ki jo moramo zagotoviti, podpora razlicnim prevajalnikom (osnovni tipi) ter razlicnim platformam. temu sledijo razlicne nastavitve ter debug opcije knjiznjice. na koncu bi dodal le se neke standardne konstante (ali const ali define).

baza bi torej izgledala nekako takole:
- Base.hpp (glavni header)
-- Constants.hpp
-- SDKDebug.hpp
-- SDKConfig.hpp
-- Types.hpp
-- Compiler.hpp
---- CompilerMSVC.hpp
---- CompilerGNUC.hpp
---- CompilerMWERKS.hpp
-- Platform.hpp
---- PlatformWin32.hpp
---- PlatformLinux.hpp
---- PlatformMac.hpp
-- BaseDefines.hpp


da zagotovimo popolno portabilnost moramo upostevati tudi byte order (MSB vs LSB). tu pa ne vem, ali potrebujemo to funkcionalnost na tako nizski stopnji, ali pustimo ta problem razlicnim bralcem ter pisalcem?

mnenja, kritike ter financna pomoc so seveda dobrodosli :P
Abnormal behavior of abnormal brain makes me normal...
  • spremenil: Vesoljc ()

noraguta ::

v vsako datoteko za kodo dodaj vsaj link na licenco in avtorstvo.

mislim da se ti ni treba obremenjevat z define za platforme na katere ne boš delal porta. to lahko skoordiniraš kasneje. malo se varuj kakšnih reinterpret_castov.(zanjič mi je ravno pri portanju eden zrl zivce >:~ )

fino je tudi da se odločiš s čim boš generiral make,nmake,dsw-je, etc... Meni za moja sranja bolj ali manj zadošča premake. ki pa zna biti za tvoje potrebe malo preskromen.Malo pobkljaj okoli tega.
Pust' ot pobyedy k pobyedye vyedyot!

Vesoljc ::

vsaka datoteka bo itaq imela svojo glavo (a nisi pogledu generatorja 8-)).

kar se pa portabilnosti tice, je pa itaq tko, da je bolje bit pripravljen, ne? win ter linux bo ziher, ce se bo pa komjuniti zmigu pa tud kej vec :D

reinterpret_cast? ce bo slo vse po nacrtih, ga ne bi smel rabiti :\

o mejkanju bom pa uposteval nasvet!
Abnormal behavior of abnormal brain makes me normal...

trs ::

Izogibaj se templateom, RTTIju in podobnim packarijam in bo vse v redu ;) Za linux pa pride prav ce uporabis -Wall -W -ansi -pendantic flage ;) Sicer pa je na splosno dobro da uporabljas cim bolj pedantne flage za C/C++ compilerje. Za kasne sistemske stvari mogoce bi ti prisel prav APR(apache portable runtime) ... Ne pazit samo na MSB/LSB ampak tudi na 64-bit platforme, torej nic int -> pointer mumbo jumbo in pazi da se long uporablja z longi in int z inti ;)

Se ena stvar na katero mogoce lahko pazis(razen ce bo projekt izkljucno v anglescini) je UNICODE. UTF-8 je nekako dobra izbira za Unix, windows pa so cisto druga pesmica ...

lp,
trs

Vesoljc ::

caki caki, zakaj bi se izogibal template-om ter rtti-ju? soliden prevajalnik jih mora prebavit!
pedantnost ter perfekcionizem are my middle name ;)
za 64 bitov bo itaq poskrbljeno, pa tudi pointer mumbo jumbo otpade. o unicode-u pa tudi resno razmisljam...

se ena stvar, imamo recimo tole:
#define REAL_PRECISION              64

#if REAL_PRECISION >= 64
typedef double    my_real
#else
typedef  float    my_real


kako se izognit tistim warningom ter pretvarjanju (f in podobno)? ker dvojnih funkcij se mi res ne da pisati...
Abnormal behavior of abnormal brain makes me normal...

noraguta ::

disable-ej jih z pragmo.
Pust' ot pobyedy k pobyedye vyedyot!

Vesoljc ::

heh

tole sem najdu.
Abnormal behavior of abnormal brain makes me normal...

trs ::

Kar se tice templateov in rttija je res, da jih soliden compiler mora prebavit, vendar zal niso vsi solidni ;) Poleg tega pa templatei generirajo abnormalno dosti simbolov, kar zna bit problem pri start-up casu aplikacije. Pri RTTIju pa je problem v tem, da ce prevedes kaksen kos z RTTIjem(recimo kaksen library) potem moras vse prevajat z RTTI opcijami (vsaj vcasih je blo tako za KDE - ce si prevedel QT z RTTI, potem si moral cel KDE prevajat s tem).

V glavnem, jaz jih raje ne uporabljam... se da prav lepo zivet tudi brez teh dveh featurejev.

Sicer pa presoja je tvoja ;)

lp,
trs

Vesoljc ::

ok, naslednja stvar - struktura direktorijev!

- bin
- lib
- include
- source
- doc

tko?
Abnormal behavior of abnormal brain makes me normal...

napsy ::

mogoce se kak arch imenik
"If you die, you die. But when you live you live. There is no time to waste."

BigWhale ::

izogibaj se capsov v imenih datotek... ;>

Vesoljc ::

aber warum?
Abnormal behavior of abnormal brain makes me normal...

napsy ::

Sicer je pa že nekaj podobnega na http://www.boost.org/.
"If you die, you die. But when you live you live. There is no time to waste."

Zgodovina sprememb…

  • spremenil: napsy ()

Vesoljc ::

malo bolj natancen si pa lahko :|
Abnormal behavior of abnormal brain makes me normal...


Vredno ogleda ...

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

OpenBSD praznuje 20 let

Oddelek: Novice / Operacijski sistemi
138948 (6175) opeter

ERROR IN COMMAD LINE -BIN CUE

Oddelek: Pomoč in nasveti
5755 (699) Skrat
»

c++ header file

Oddelek: Programiranje
5798 (757) Vesoljc
»

Recenzija novega Siddhartine albuma Rh- (strani: 1 2 )

Oddelek: Sedem umetnosti
637188 (5797) Tic
»

problem v c++ kako prebrati matriko?

Oddelek: Programiranje
131338 (1155) robinzon

Več podobnih tem