bayrell / BayLang

BayLang compiler source code
https://bayrell.org/ru/docs/baylang
Apache License 2.0
4 stars 0 forks source link

Новый вид языка 0.11 #71

Closed ildar-ceo closed 1 year ago

ildar-ceo commented 3 years ago

1) Убрать разницу между статическими и инстансными функциями. Все функции в классе являются статическими. Добавить синтаксический сахар для a.push(10). На самом деле это a::push(a, 10);

2) Сделать возможность в одном файле писать несколько классов и саму программу.

Пример кода:

namespace App;

struct Test
{
    int x;
    int y;

    Test setX(self, int value)
    {
        self <= x <= value;
        return self;
    }

    Test setY(self, int value)
    {
        self <= y <= value;
        return self;
    }

}

Test obj;
obj = new Test();
obj = obj.setX(5);
obj = obj::setX(obj, 5)
obj = Test::setX(obj, 5);

var a1 = new Collection()
    |> .push(1)
    |> .push(2)
    |> .push(3)
    |> .map
    (
        int (int value) => value * 2
    )
;

log(a1);

a1 = Collection::push(a1, 10);
a1 = a1.push(100);

fn push10 = curry Collection::push(?, 10);
a1 = a1
    |> push10
    |> push10
;

log(a1);
ildar-ceo commented 2 years ago

class Test extends CoreApp
{

    /**
     * Component mounted
     */
    async onMounted(this)
    {
        this.subscribe(classof AppEvent);
        parent.onMounted();
    }

}

эквивалентно:


class Test extends CoreApp
{

    /**
     * Component mounted
     */
    async Test onMounted(this)
    {
        this = this.subscribe(classof AppEvent);
        parent.onMounted();
        return this;
    }

}
ildar-ceo commented 2 years ago

Можно написать так:

var a1 = [];
fn push10 = curry Collection.push(10);

pipe a1
    .push(1)
    .push(2)
    |> .push(3)
    |> push10
    .map
    (
        int (int value) => value * 2
    )
;