Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 13:19
Оценка:
В Лиспе - атомы, кажется, выглядят так: `atom
В Эрланге - так: any_string_starting_from_lowercase
В Руби - так:  :atom
В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];


Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?
beep
Re: Какой бы синтаксис выбрать для атомов?
От: Cyberax Марс  
Дата: 10.02.09 13:26
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?

Может использовать префикс "^"? Вроде даже красиво: "^atom".
Sapienti sat!
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 13:30
Оценка:
C>Может использовать префикс "^"? Вроде даже красиво: "^atom".

Ага, как в универе, "пи-с-ду[ж|ш]кой", "пи-с-домиком". Не знаю, совпадает с ксором, но вроде лексер получится убедить,
что это разные конструкции. Есть еще вариант с баксом и решеткой, правда решетку я под комменты взял, но можно переиграть.

Но что-то ничего не нравится. Можно заставлять явно аннотировать. Можно использовать вики-нотацию — т.е. слово в вики-нотации —
это автоматически атом. Меня все эти варианты раздражают, вот и решил заслушать Vox Dei, так сказать.
Re: Какой бы синтаксис выбрать для атомов?
От: x-code  
Дата: 10.02.09 13:46
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>
dmz>В Лиспе - атомы, кажется, выглядят так: `atom
dmz>В Эрланге - так: any_string_starting_from_lowercase
dmz>В Руби - так:  :atom
dmz>В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];
dmz>


dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Если я правильно понимаю — атом во всех этих языках это что-то вроде именованной константы или элемента перечисления?
Если так — из предложенных вариантов менее раздражающий `atom (символ ` воспринимается не как операция)
Хотя я привык к enum'ам
Re: Какой бы синтаксис выбрать для атомов?
От: palm mute  
Дата: 10.02.09 13:56
Оценка:
Здравствуйте, dmz, Вы писали:

А для атомов точно нужен синтаксис, atom('foo') не пойдет?

dmz>
dmz>В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];
dmz>

Придерусь, полиморфные варианты — это больше, чем атомы.
Re: Какой бы синтаксис выбрать для атомов?
От: CrystaX Россия https://www.crystax.net/
Дата: 10.02.09 14:06
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Меня больше всего эрланговский стиль устраивает. Хотя если попробовать обосновать — вряд ли смогу привести достаточно разумные доводы.
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 14:09
Оценка:
PM>А для атомов точно нужен синтаксис, atom('foo') не пойдет?

Ну как-то вообще громоздко.

if x == atom('AAA') then ... ;


PM>Придерусь, полиморфные варианты — это больше, чем атомы.


Ну, больше конечно. Но других атомов в окамле, насколько мне известно, нет. Так что в моем
случае можно считать их атомами.
Re: Какой бы синтаксис выбрать для атомов?
От: Mamut Швеция http://dmitriid.com
Дата: 10.02.09 14:09
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>
dmz>В Лиспе - атомы, кажется, выглядят так: `atom
dmz>В Эрланге - так: any_string_starting_from_lowercase
dmz>В Руби - так:  :atom
dmz>В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];
dmz>


dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Эрланг или Руби. Но все зависит не только от синтаксиса атомов, но и от синтаксиса языка в целом
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>


dmitriid.comGitHubLinkedIn
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 14:17
Оценка:
M>Эрланг или Руби. Но все зависит не только от синтаксиса атомов, но и от синтаксиса языка в целом

Ну эрланг для них слишком много требует, а вот возьмем руби. Существенно, что именно двоеточие перед знаком атома? Или неважно?
Re[3]: Какой бы синтаксис выбрать для атомов?
От: Cyberax Марс  
Дата: 10.02.09 14:17
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Ага, как в универе, "пи-с-ду[ж|ш]кой", "пи-с-домиком". Не знаю, совпадает с ксором, но вроде лексер получится убедить,

dmz>что это разные конструкции. Есть еще вариант с баксом и решеткой, правда решетку я под комменты взял, но можно переиграть.
xor можно и словом записывать, не такая уж и частовстречающаяся операция.

В идеале лучше всего было бы атомы по контексту определять, без их синтаксического выделения. Только вот можно ли так сделать...
Sapienti sat!
Re[3]: Какой бы синтаксис выбрать для атомов?
От: Mamut Швеция http://dmitriid.com
Дата: 10.02.09 14:35
Оценка:
M>>Эрланг или Руби. Но все зависит не только от синтаксиса атомов, но и от синтаксиса языка в целом

dmz>Ну эрланг для них слишком много требует,


привыкаешь

dmz> а вот возьмем руби. Существенно, что именно двоеточие перед знаком атома? Или неважно?


нужен простой символ, который просто печатать. Именно потому "крышка"(^) не подходит, имхо. Двоеточие лучше.

Если считать, что код в основном набирается на латинице, то tick(`) тоже неплохо, но tick — достаточно мелкий символ. Можно апостроф/одинарную кавычку ('), она более заметна, но возникают проблемы, если в языке используются одинарные кавычки для строк/символов

Есть вариант с @. Возражения те же, что с крышкой, хотя, имхо, @ набирать удобнее.

Если в языке не используются конструкции с точкой, можно использовать точку.

Ни в коем случае не вертикальную черту(|). Ее неудобно набирать и на разных клавиатурах она находится в разных местах.

Как вариант — знак вопроса (в Эрланге им отмечаются define-ы):
-define(HELLO, "hello, world").

start() ->
    io:format("~p~n", [?HELLO]);


Большинство других символов отпадают из-з их "ambiguity" (это скобки, +, -, =, ", %)


Я бы выбрал или двоеточие или вопросительный знак. Но если в языке есть тернарный оператор (? или можно использовать любые символы в названиях переменных (item.exists?), то я бы еще сильно подумал
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>


dmitriid.comGitHubLinkedIn
Re[4]: Какой бы синтаксис выбрать для атомов?
От: Mamut Швеция http://dmitriid.com
Дата: 10.02.09 14:35
Оценка:
C>В идеале лучше всего было бы атомы по контексту определять, без их синтаксического выделения. Только вот можно ли так сделать...

плюс перекрытие области видимости
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>


dmitriid.comGitHubLinkedIn
Re: Какой бы синтаксис выбрать для атомов?
От: Mr.Cat  
Дата: 10.02.09 15:09
Оценка:
Здравствуйте, dmz, Вы писали:
dmz>
dmz>В Лиспе - атомы, кажется, выглядят так: `atom
dmz>


Не вдаваясь в суть, можно и `atom, и 'atom.
Вообще, лучше не запаривайтесь отдельно с атомами, а сделайте нормальное цитирование.
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 15:28
Оценка:
MC>Вообще, лучше не запаривайтесь отдельно с атомами, а сделайте нормальное цитирование.

1) Васт ис "нормальное цитирование" и чем оно отличается от ненормального. В гугл чур не посылать, не я эту тему поднял
2) Запары с атомами я не вижу, пока мы тут обсуждаем, я их уже сделал. Собственно, они понадобились, поскольку
ничего глобального в языке пока нет, а вот какого-то рода константы нужны.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 15:33
Оценка: +1
M>нужен простой символ, который просто печатать. Именно потому "крышка"(^) не подходит, имхо. Двоеточие лучше.

Ну в общем, я не очень понимаю разницу между shitf-tilda, shift-6 или shift-2, но решил, что во избежание лучше взять
кракозябру, которая еще нигде не используется. Таким образом пространство сужается до

@ $ ? `


, и, в общем, неважно что это будет, так как всегда можно поменять одно на другое.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 15:37
Оценка:
C>В идеале лучше всего было бы атомы по контексту определять, без их синтаксического выделения. Только вот можно ли так сделать...

Можно, но внесет изрядную неочевидность.

if moo == foobar then puts("FOOBAR"); # тут определился атом

...
# а вот тут он втихую перекрылся, так как в одной области видимости 
# вполне можно иметь одинаковые идентификаторы, но при этом один будет скрывать 
# в порядке обхода AST, что будет иногда приводить к странным ошибкам
def foobar() 
{
...
}


А если мы объявим функцию foobar раньше, чем одноименный атом, то стрельнет ошибка типов. В общем,
не стоит оно ни проблем при использовании, ни проблем при реализации.
Re: Какой бы синтаксис выбрать для атомов?
От: FR  
Дата: 10.02.09 15:48
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Я за кракозябру, это уже вполне привычно и узнаваемо для знакомых с функциональщиной.
Re: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 10.02.09 16:25
Оценка: +1
dmz пишет:
> В Лиспе — атомы, кажется, выглядят так: `atom
> В Эрланге — так: any_string_starting_from_lowercase
> В Руби — так: :atom
> В Окамле — как-то так: type atoms of [`Atom1, `Atom2, `Atom3];

Вы всё-таки про атомы, или про символы ?
Атом — это всё, что не список, а элемент списка (или последовательности).
Т.е. символы и константы разных типов.

> Какой подход для вас наименее раздражающий? Меня тут все раздражает — в

> лиспе кракозябра,

В лиспе `atom — квотированный символ. И то не так, а так: 'atom.
А просто символ — просто atom.

В прологе, кстати, то же самое, но только в нижнем регистре.
Posted via RSDN NNTP Server 2.1 beta
Re: Какой бы синтаксис выбрать для атомов?
От: c-smile Канада http://terrainformatica.com
Дата: 10.02.09 17:27
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий?


А какая грамматика/синтаксис лежит в основе твоего языка?

У меня (в tiscript) например грамматика C derived (JS).
Поэтому символы (формально: символ есть perfect hash values) это
nmtokens начинающиеся c '#'.

Т.е.
this.one = 1; эквивалентен
this[#one] = 1;


Что близко к определению ID в CSS (тоже С derived grammar).
CSS родственная технология tiscript поэтому близость важна.
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 17:50
Оценка: 1 (1)
CS>А какая грамматика/синтаксис лежит в основе твоего языка?

Питонолуа:

def parse(s)
{
    local i = 0;
    local end = strlen(s);
    local e = [];
    while i < end
    {
        if strnth(s, i) == ',' 
        then {
            local ss = strsub(s, i+1, 2);
            if streq(ss, "EE") then e = ss :: e;
            elif streq(ss, "DD") then e = ss :: e;
            elif streq(ss, "FF") then e = ss :: e;
        }
        i = i + 1;
    }
    ret e;
}


def main()
{
    local l = [];
    l = parse("AAA,BB,CC,DD,EE,FF#");
    while !nil(l) #когда нибудь тут будет foreach
    {
        putsn(head(l));
        l = tail(l);
    }
    debug_dump_mem();
}
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.