Metaohjelmoinnin soveltamisesta

Ihan kiva, että tämä kysymys metaohjelmoinnista nousi esille. Kiitos osallistuneille. Kaivelin tietoa mm. C#:n "expression tree" ominaisuudesta, joka tuntuu melko lailla samalta, mitä minä olen kömpelöllä tavalla "tikuista" implemetoinut äskettäin harrasteprojektissani, toteuttaessani ajonaikaista PEG-kielioppikuvaus->datarakenneohjattu parseri toteutusta. Tuo datarakenne on melko lailla == "expression tree". Mutta joskus myöhemmin tarvitsen samassa projektissa toteutusta, jossa esim jotakin algoritmia kuvaava semanttinen verkko (joka on em. parserilla jäsennelty ja rakennettu lojban-kielisestä kuvauksesta) on edelleen muutettava suorituskelpoiseksi koodiksi, mielellään kaikki ajonaikaisesti, ilman että esim generoitu lähdekoodia on välillä käännettävä ulkoisella työkalulla. Haluaisin pysyä C :ssa. Siksi olen jo yhtenä mahdollisuutena harkinnut XLISP-tulkin porttamista sisäiseksi osaksi sovellustani. Sovellus kääntäisi semattisen verkon lohkon XLISP-koodiksi ja käynnistäisi aina tarvittessa XLISP-tulkin. Mutta tehtävään voi olla tyylikkämpiä ratkaisuja, joista en ole yhtään tietoinen. En kuitenkaan aio vaihtaa C :sta esim pythoniin tai C#:ssaan (siis minun asemassani monoon). Mutta XLISP:ille olen valmis harkitsemaan parempia vaihtoehtoja.
8393
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat
  • Aloittaja

    Kiitos, tuota täytyy kokeilla!

    Äänestä

Tossa aiemmin mitä tosta ihmeteltiin, ei kai liittynyt suurelta osalta siihen, ettei koodia voisi muokata tai siinä olisi joku mahdottomuus. Enemmän minä ja muutama muukin ihmettelivät sitä miksi toisen ohjelman kannattaa luoda koodia. Miksi ei kannattaisi suorittaa sitä toiminnallisuutta suoraan koodia luovalla logiikalla? Mihin sitä luotua koodia tarvitaan siinä välissä? Ok, jos suoritettava koodi vaikka siirretään jonnekin, niin sellaisessahan sitä tarvitaan koska luojaa ei ole siinä ympäristössä. Mutta missä tätä kannattaisi yleensä käyttää?

Äänestä
  • Itsekään en oikein ymmärrä itse itseään muokkaavan koodin hyötyä. Saman asian kuitenkin aina voi tehdä tekemällä tulkin samalle koodille kuin millä ohjelma on tehty. Tämä taas tuntuu hieman norsupyssymäiseltä idealta ja mieluummin sitten tekisi vaan jonkin skriptauskielen tai jopa vaan konfiguraatiotiedoston joka toteuttaa tasan sen mitä tarvitaan. Ja kun sitä konfiguraatiotiedostoakaan ei varmaan tarvitse levylle kirjoittaa, niin mieluummin vaan tallettaa sen sijaan tilasäännöt muuttujiin - ja tässähän sitä oltiinkin taas perinteisessä ohjelmoinnissa. Sen sijaan voin kyllä kuvitella kuinka vaikeaa on analysoida koodia, joka muuttaa itse itseään. Saakohan tällaisesta koodista edes selvää kukaan muu kuin sen kirjoittaja?

    Äänestä

  • Onhan noissa Microsoftin kääntäjissäkin "välikielet" (Microsoft Intermediate Language). Eivät vaan näy koodaajille: http://fi.wikipedia.org/wiki/Välikieli

    Äänestä

  • Aloittaja

    dx2 kirjoitti:

    Itsekään en oikein ymmärrä itse itseään muokkaavan koodin hyötyä. Saman asian kuitenkin aina voi tehdä tekemällä tulkin samalle koodille kuin millä ohjelma on tehty. Tämä taas tuntuu hieman norsupyssymäiseltä idealta ja mieluummin sitten tekisi vaan jonkin skriptauskielen tai jopa vaan konfiguraatiotiedoston joka toteuttaa tasan sen mitä tarvitaan. Ja kun sitä konfiguraatiotiedostoakaan ei varmaan tarvitse levylle kirjoittaa, niin mieluummin vaan tallettaa sen sijaan tilasäännöt muuttujiin - ja tässähän sitä oltiinkin taas perinteisessä ohjelmoinnissa. Sen sijaan voin kyllä kuvitella kuinka vaikeaa on analysoida koodia, joka muuttaa itse itseään. Saakohan tällaisesta koodista edes selvää kukaan muu kuin sen kirjoittaja?

    "Itsekään en oikein ymmärrä itse itseään muokkaavan koodin hyötyä." Minäkin epäilen, että itseään muuttava koodi voi olla vakava stabiilisuushaaste, mutta myös yksinkertaistaa joitakin toteutuksia. Kuitenkaan en minä sellaista aio yrittää. C -koodi ei muutu. Semanttisen verkon sisältö muuttuu, mutta se ei olekaan suoritettavaa koodia, vaan dataa. Mutta osa tästä datasta edustaa proseduraalista tietämystä, joka on mielekästä konvertoida suoritettavaksi koodiksi esim tietämyksen todenperäisyyden testaamiseksi. Kyseessä on eräänlainen chatbot projekti, tarkoituksena kerätä semanttista tietoa interaktiivisesti lojban-kielisen keskustelun avulla. Botti edustaa, jos ei ihan oikeaa tekoälyä, niin semanttista teknologiaa. Mutta ainakin toistaiseksi se on puhdas harrasteprojekti.

    Äänestä

  • dx2 kirjoitti:

    Itsekään en oikein ymmärrä itse itseään muokkaavan koodin hyötyä. Saman asian kuitenkin aina voi tehdä tekemällä tulkin samalle koodille kuin millä ohjelma on tehty. Tämä taas tuntuu hieman norsupyssymäiseltä idealta ja mieluummin sitten tekisi vaan jonkin skriptauskielen tai jopa vaan konfiguraatiotiedoston joka toteuttaa tasan sen mitä tarvitaan. Ja kun sitä konfiguraatiotiedostoakaan ei varmaan tarvitse levylle kirjoittaa, niin mieluummin vaan tallettaa sen sijaan tilasäännöt muuttujiin - ja tässähän sitä oltiinkin taas perinteisessä ohjelmoinnissa. Sen sijaan voin kyllä kuvitella kuinka vaikeaa on analysoida koodia, joka muuttaa itse itseään. Saakohan tällaisesta koodista edes selvää kukaan muu kuin sen kirjoittaja?

    minulla on generinen skripti joka generoi antille build.xml:n jota voi sitten käyttää useamman kerran jos asetukset eivät muutu. tässä on kyse siitä että ant xml:n pitää olla staattinen mutta vaatimukset vaativat jotain muuta.isommat projektit helpompia hallita.

    Äänestä

Eikös metaohjelmoinnilla yleensä tarkoiteta generics/template-tyyppisiä ominaisuuksia, jotka löytyvät kielistä kuten Ada, C ja Java? C#:ssakin tuo ominaisuus on, mutta muistaakseni se on jotenkin pahasti sössitty. Generics-ominaisuus ei kyllä ole koodin generointia tai muuttamista lennossa nähnytkään. Enemmän se on sukua makrojen käytölle. Mutta erittäin kätevä ominaisuus kyllä.

Äänestä

Kommentoi aloitusta


UPDATE_6997029 kirjoitti:

Ihan kiva, että tämä kysymys metaohjelmoinnista nousi esille. Kiitos osallistuneille. Kaivelin tietoa mm. C#:n "expression tree" ominaisuudesta, joka tuntuu melko lailla samalta, mitä minä olen kömpelöllä tavalla "tikuista" implemetoinut äskettäin harrasteprojektissani, toteuttaessani ajonaikaista PEG-kielioppikuvaus->datarakenneohjattu parseri toteutusta. Tuo datarakenne on melko lailla == "expression tree". Mutta joskus myöhemmin tarvitsen samassa projektissa toteutusta, jossa esim jotakin algoritmia kuvaava semanttinen verkko (joka on em. parserilla jäsennelty ja rakennettu lojban-kielisestä kuvauksesta) on edelleen muutettava suorituskelpoiseksi koodiksi, mielellään kaikki ajonaikaisesti, ilman että esim generoitu lähdekoodia on välillä käännettävä ulkoisella työkalulla. Haluaisin pysyä C :ssa. Siksi olen jo yhtenä mahdollisuutena harkinnut XLISP-tulkin porttamista sisäiseksi osaksi sovellustani. Sovellus kääntäisi semattisen verkon lohkon XLISP-koodiksi ja käynnistäisi aina tarvittessa XLISP-tulkin. Mutta tehtävään voi olla tyylikkämpiä ratkaisuja, joista en ole yhtään tietoinen. En kuitenkaan aio vaihtaa C :sta esim pythoniin tai C#:ssaan (siis minun asemassani monoon). Mutta XLISP:ille olen valmis harkitsemaan parempia vaihtoehtoja.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu