Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Zonnon ohjelmointikieli

jalski [21.02.2010 21:16:16]

#

Aloitin hiljattain tutustumiseni .NET maailmaan, kun löysin Zonnon ohjelmointikielen. Täytyy sanoa, että jollakin oudolla tavalla pidän tästä ohjelmointikielestä.

Syntaksiltaan se on hyvin paljon Modula-2:n kaltainen. Säikeisiin se käyttää active object pohjaista toteutusta, josta se käyttää nimitystä activity. Nämä aktiviteetit voivat kommunikoida keskenään käyttäen ennalta määriteltyä protokollaa.

Jos on tekemisen puutetta, niin tutustukaa: http://www.zonnon.ethz.ch/

Alla esimerkkinä syntaksista simppeli Windows Forms esimerkki:

module Main;
import System, System.Windows.Forms as Forms, System.Drawing.Point as Point;



type {public, ref} MainForm = object implements Forms.Form

var {public}
	button : Forms.Button;
	label : Forms.Label;


activity Hello;

begin
	System.Threading.Thread.Sleep(integer(5000));
	label.Text := "Hello from activity!";
end Hello;


procedure {public} onClick(sender: object; args: System.EventArgs);

begin
	Forms.MessageBox.Show("Ouch!", "Test");
end onClick;



begin
	Text := "Zonnon test application";
	Width  := 640;
	Height := 480;

	label := new Forms.Label;
	label.Text := "Hello world!";
	label.Location := new Point(200, 200);
	Controls.Add(label);

	button := new Forms.Button;
	button.Text := "Hit Me!";
	button.Dock := Forms.DockStyle.Bottom;
	button.add_Click(onClick);
	Controls.Add(button);

	CenterToScreen;
end MainForm;



var mainForm: MainForm;

begin
	mainForm := new MainForm;
	new mainForm.Hello;
	Forms.Application.Run(mainForm);
end Main.

Metabolix [21.02.2010 21:34:55]

#

Täytyy sanoa, että olet sisentänyt ja välittänyt koodin melko epäselvästi. Erityisesti MainForm-tyypin raja on vaikea bongata, tai siis tuosta ei pikaisella silmäyksellä ei hahmota, mitkä asiat kuuluvat kyseiseen tyyppiin. Mielestäni olisi paljon parempi sisentää koko sisältö.

module Main;

import
    System,
    System.Windows.Forms as Forms,
    System.Drawing.Point as Point;

type {public, ref} MainForm = object implements Forms.Form
    var {public}
        button: Forms.Button;
        label: Forms.Label;

    activity Hello;
    begin
        System.Threading.Thread.Sleep(integer(5000));
        label.Text := "Hello from activity!";
    end Hello;

    procedure {public} onClick(sender: object; args: System.EventArgs);
    begin
        Forms.MessageBox.Show("Ouch!", "Test");
    end onClick;
begin
    ...
    CenterToScreen;
end MainForm;

var mainForm: MainForm;

begin
    mainForm := new MainForm;
    new mainForm.Hello;
    Forms.Application.Run(mainForm);
end Main.

Itse kieli ei erityisemmin vakuuta: Mihin tarvitaan taas syntaksiltaan hieman muista poikkeava kieli sen sijaan, että vain laajennettaisiin aiempia uusilla ominaisuuksilla (activity)? Tässäkin on yksittäisiä pieniä eroja, joista ei nähdäkseni ole mitään etua esimerkiksi siihen, miten Pascalissa on asia hoidettu.

jalski [21.02.2010 22:07:32]

#

Mielestäni juuri tuo end sanan jälkeinen nimen toistaminen tekee siitä helpon hahmottaa ilman ylimääräisiä sisennyksiä.

Pascaliin verrattuna koko moduulin (module) konsepti on uusi ja pohjautuu Modula-2:sta. Kielestä löytyy tuki säikeille ohjelmointikielitasolla (active object = activity). String tyyppi merkkijonoille ja varmasti lisäksi suuri joukko eroja ja uudistuksia Pascaliin verrattuna.

Metabolix [21.02.2010 22:28:50]

#

Suosittelen tarkempaa perehtymistä (nykyaikaiseen) Pascaliin: String-tyyppi siinä on ollut iät ja ajat, ja moduulit (unit) haetaan käyttöön uses-lauseella. Jos katsotaan jotain yleisesti käytettyä Object Pascalin murretta, niin tuskinpa tuossa olioiden puoleltakaan kummoisia ihmeitä löytyy.

Nimen toistaminen ei ole riittävä väline helppoon hahmottamiseen. Jos koodia on satoja rivejä, kumman huomaa helpommin: sisennyksen loppumisen vai yksittäisen MainForm-sanan? Jos yhä pidät perustelustasi kiinni, niin vilkaistaanpa Basicia, jossa näppärästi näkee kunkin rakenteen lopusta, mikä rakenne on kyseessä. Koodaisitko mielelläsi ensimmäisellä seuraavista tyyleistä?

Sub Aliohjelma()
If a Then
    Teko(x)
While b Do
    Juttu(y)
End While
End If
If d Then
    Muuta(w)
End If
End Sub
Sub Aliohjelma()
    If a Then
        Teko(x)
        While b Do
            Juttu(y)
        End While
    End If
    If d Then
        Muuta(w)
    End If
End Sub

Sami [21.02.2010 23:54:59]

#

Jokseenkin kaikilla kielillä voi koodata tuolla haluamallasi tavalla kommenttien avulla, eli rakenteen loppuessa toistetaan se nimi. Esimerkiksi c/c++/java:

int foo() {
  return 2;
} // end foo

jalski [22.02.2010 09:01:37]

#

Metabolix: Totta kai sisennys helpottaa lukemista. Basic esimerkkisi oli aika kärjistetty, kokonaan ilman sisennyksiä.

Oma esimerkkini oli muuten sisennetty, mutta MainForm -tyypin jäsenenille olisi voinut lisätä aloituskohdaksi yhden tabulaarin. Yllä olevassa viestissä tarkoitin, että tässä en nähnyt sitä tarpeelliseksi: tuohon esimerkki moduliinhan on käytännössä toteutettu vain yksi luokka MainForm, johon on määritelty yksi activity ja metodi.

Oma tapani ohjelmoida Zonnonilla on jakaa ohjelma moduuleihin ja toteuttaa moduulissa aina yksi luokka tai muu kokonaisuus.

Olet oikeassa, että en ole tutustunut nykyaikaiseen Pascaliin. Omat kokemukseni Pascalista ovat peruskoulun ala-asteelta. Silloin ainakin Pascalin unit toimi aika eri tavalla, kuin Zonnonin module. Zonnonin module toimii itseasiassa aika samalla tavalla, kuin Infernon Limbon module.

Vastaus

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

Tietoa sivustosta