Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Синтаксис атрибутов функций #250

Open
Mazdaywik opened this issue Aug 4, 2019 · 1 comment
Open

Синтаксис атрибутов функций #250

Mazdaywik opened this issue Aug 4, 2019 · 1 comment
Assignees

Comments

@Mazdaywik
Copy link
Member

Это в постановке задачи #122 стояло, но почему-то не было реализовано. Ключевые слова $INLINE и $DRIVE могут стоять перед определением функции, в позиции ключевого слова $ENTRY:

$INLINE Apply {
  ...
}

Сейчас поддерживаются только списки функций вида

$INLINE Apply, Fetch, MapReduce;

Тем более, что источником идеи был Си++, где ключевое слово inline находится именно при определении функции.

@Mazdaywik
Copy link
Member Author

Кстати, мысль: не добавлять этот синтаксис. Вместо этого ввести «атрибуты функций», которые записываются между именем и фигурной скобкой:

Func [INLINE, BUILTIN, META, SPEC e.X, INTRINSIC] {
  = 'Hello, World!';
}

Атрибуты перечисляются через запятую, после атрибута может следовать какая-либо последовательность токенов, например, шаблон для $SPEC.

Атрибуты можно применять и для внешних функций:

$EXTERN Add [BUILTIN, INTRINSIC];

Атрибут BUILTIN в примерах выше означает, что данная функция встроенная. В частности, это значит, что для совместимости с классическим Рефалом-5, её нельзя переопределить.

В принципе, с атрибутами будут не нужны ключевые слова $INLINE, $DRIVE и $SPEC, их можно заменить определениями или внешними объявлениями ($EXTERN) функций с соответствующими атрибутами. Список entry-имён тоже становится не нужен: его можно заменить несколько неуклюжей записью

$EXTERN FuncName [ENTRY];

Можно допустить запись вида

$EXTERN [ENTRY, INTRINSIC] Foo, Bar [META], Baz;

Все функции получают атрибуты ENTRY и INTRINSIC, функция Bar также получает атрибут META.

@Mazdaywik Mazdaywik changed the title Синтаксис $DRIVE Func { … } Синтаксис атрибутов функций Nov 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant