Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ada-kysymyksiä

alottelijaa [29.04.2009 14:20:12]

#

Hei taas

Tutkiskelin aikani kuluksi mitä kaikkia kieliä oikein on olemassa ja kiinnostuin adasta. Olen sillä jotain pieniä tietovisoja ym. tehnyt harjoitusmielessä.

1) onko adalle mitään grafiikkakirjastoja?
2) häviääkö nopeudessa paljonkin esim. c++:lle?
3) taskit erityisesti näyttävät kiinnostavilta, eli saako niillä tehtyä monisäikeisiä sovelluksia (vrt. C++:n boost threadit esim.) vai olenko käsittänyt asian päin mäntyä

E: jos joku on kiinnostunut täältä löytyy helppolukuinen ada opas harjoituksien kera :)

jlaire [29.04.2009 14:51:33]

#

1) Löytyy OpenGL, SDL yms. ainakin tämän listan mukaan.
2) En tiedä, mutta jonkunlaisen käsityksen nopeuseroista saa shootoutista.
3) Juurikin näin asia tuntuu olevan. Wikibookista: "a task in Ada terminology is similar to a thread".

alottelijaa [29.04.2009 14:53:34]

#

ok, kiitos vastauksesta

Schedler [01.05.2009 14:13:39]

#

Kohtaan 2) voi varmaan todeta että riippuu sovelluksesta. Adassa on ominaisuuksia, joita kääntäjä voi hyödyntää optimointiin.

Esimerkkeinä tästä vaikkapa osoittimien rajoitettu näkyvyysalue, joka estää ei-toivotut aliasoinnit. Toinen esimerkki on taulukoiden (array) osoittaminen. Adassa kaikki osoitukset taulukoihin tarkastetaan yli- ja alivuotojen osalta. Kielissä joissa tämä on rakennettu erikseen päälle kääntäjä joutuu lisäämään tarkastuksen if(min_index < index < max_index) käytännössä jokaiseen taulukko-osoitukseen. Adassa tätä ei tarvita jos taulukko-osoituksen tyyppi on rajoitettu. Esimerkki alla:

-- Tyypit on määritetty seuraavasti:
type Index_T is range 1..20;
type Messages_T is array(Index_T) of Message_T;

Tällä määrittelyllä ei ole mahdollista luoda Messages_T -tyyppistä taulukkoa siten, että sen indeksimuuttuja saisi jonkin arvon sallitun 1..20 ulkopuolelta.

3) Adassa rinnakkaissuoritus (concurrency) on tosiaan rakennettu kieleen sisään. Lisäksi tämä on hieman korkeammalla abstraktiotasolla kuin monissa muissa kielissä. Esimerkkinä vaikkapa protected -tyypit:

protected type Buffer_T is
     entry Insert (Item : in  Item_T);
     entry Remove (Item : out Item_T);
  private
     Buffer : Item_T;
     Empty  : Boolean := True;
  end Buffer_T;
  ...

Kyseisen Buffer_T:n käyttö eri taskeista on mahdollista ilman pelkoa ei-atomisista päivityksistä, koska kyseessä on protected -tyyppi. Ohjelmoijan ei siis tarvitse erikseen miettiä poissulkemista esim. semaforien avulla.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta