Здравствуйте, dmz, Вы писали:
dmz>Ну, больше конечно. Но других атомов в окамле, насколько мне известно, нет. Так что в моем dmz>случае можно считать их атомами.
А зачем статически-типизированному языку атомы?
Я встречал атомы только в динамике. И то не везде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, dmz, Вы писали:
dmz>1) Васт ис "нормальное цитирование" и чем оно отличается от ненормального. В гугл чур не посылать, не я эту тему поднял dmz>2) Запары с атомами я не вижу, пока мы тут обсуждаем, я их уже сделал. Собственно, они понадобились, поскольку dmz>ничего глобального в языке пока нет, а вот какого-то рода константы нужны.
Константы и атомы — это две большие разницы (с).
Зачем тебе вообще атомы? И что ты вообще пытаешься сделать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Константы и атомы — это две большие разницы (с).
Что бы не вдаваться в ненужные подробности, будем понимать под ними тоже, что под ними понимают в эрланге и руби.
VD>Зачем тебе вообще атомы?
Надо. Например, констант нет (и теперь наверное и не будет).
VD>И что ты вообще пытаешься сделать?
Я не пытаюсь, я уже сделал. Язык скриптовый. Со сборкой мусора и статической типизацией. И выводом типов.
Для микроконтроллеров с 2 — 5 Kb RAM.
Удобно. Структур нет, объектов нет (и лень пока делать, мороки много). Надо вот распарсить какую-нибудь сроку, и сохранить до
поры результаты в каком-то структурированном виде.
def parse_nmea(s)
{
result = [];
while ... {
if ... then result = (`Longitude, parse_longitude(s, i) :: result;
elif ... then result = (`Latitude, parse_latitude(s, i) :: result;
elif ... then result = (`Quality, parse_quality(s, i) :: result;
elif ... then result = (`Satellites, parse_satellites(s, i) :: result;
}
ret result;
}
MZ>Иметь быстро сравниваемые и идентифицируемые строки.
Ну даже не то, что бы строки. Способ идентифицировать что-либо. Строки — очень дорогая штука,
я думал что я ими одними обойдусь, но накладно. А атом — вполне влезет в машинное слово.
dmz>def parse_nmea(s)
dmz>{
dmz> result = [];
dmz> while ... {
dmz> if ... then result = (`Longitude, parse_longitude(s, i) :: result;
dmz> elif ... then result = (`Latitude, parse_latitude(s, i) :: result;
dmz> elif ... then result = (`Quality, parse_quality(s, i) :: result;
dmz> elif ... then result = (`Satellites, parse_satellites(s, i) :: result;
dmz> }
dmz> ret result;
dmz>}
dmz>
Ой, знакомое слово увидел, ты тоже в морской навигации? Я правда сейчас уже в другой области. У нас тоже был свой скриптовый язык, но совсем своебразный, для связи софта с железом. В основном для трансляции софтовых команд в железячные. Все остальное было old plain C. А зачем вам нужен скриптовый язык, точнее для каких задач? Какие преимущества?
Lisp is not dead. It’s just the URL that has changed: http://clojure.org
Y>Ой, знакомое слово увидел, ты тоже в морской навигации? Я правда сейчас уже в другой области. У нас тоже был свой скриптовый язык, но совсем своебразный, для связи софта с железом. В основном для трансляции софтовых команд в железячные. Все остальное было old plain C. А зачем вам нужен скриптовый язык, точнее для каких задач? Какие преимущества?
1) Грузить скрипты динамически, по GPRS или SMS
2) Менять поведение в зависимости от обстоятельств (профиля). Как для разных типов трекеров, так и для одинаковых трекеров в разных ситуациях.
Ядро тоже на си, там виртуальная машина и FreeRTOS (нужность последней пока под вопросом, но пока не мешает во всяком случане).
Здравствуйте, dmz, Вы писали:
dmz>В Эрланге — так: any_string_starting_from_lowercase
В Erlang атом может состоять из любых символов, но описанный Вами — случай рекомендованный для применения. Остальные надо заключать в одинарные кавычки. Например:
В ряде интерфейсов такие "необычные" атомы явно используются: например, '$1', '$2'... в match specs, или '$gen_call' в специальных сообщениях для gen_server и аналогов.
(Это не ответ на Ваш вопрос, просто замечание по ходу.)
dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?
Я вообще сомневаюсь, что тут может быть какое-то общее решение. Символов мало, и выбор каждого из них даст конфликт с чем-то, а ограничение синтаксиса кому-то помешает... так что тут выбор скорее эстетический, чем по какому-то ещё принципу: выбор должен минимально мешать синтаксису языка.
"Mamut" <9088@users.rsdn.ru> writes:
> Если считать, что код в основном набирается на латинице, то tick(`) тоже > неплохо,
` — непривычен для windows пользователей. Когда я перешел на linux и
впервые столкнулся с `, набивая команду из книжки, несколько часов убил
на то, чтобы понять, почему команда не работает. А не работала она потому,
что я набирал ' и для меня, как для windows пользователя они выглядели идентично.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, dmz, Вы писали:
dmz>>Какой подход для вас наименее раздражающий?
CS>А какая грамматика/синтаксис лежит в основе твоего языка?
CS>У меня (в tiscript) например грамматика C derived (JS). CS>Поэтому символы (формально: символ есть perfect hash values) это CS>nmtokens начинающиеся c '#'.
CS>Т.е. CS>
CS>Что близко к определению ID в CSS (тоже С derived grammar). CS>CSS родственная технология tiscript поэтому близость важна.
Для «скриптового языка в принципе» не очень комильфо — есть привычное Linux-соглашение для скриптов, что # всегда должен быть комментарием, чтобы в первой строке можно было написать:
Здравствуйте, DemAS, Вы писали: DAS>что я набирал ' и для меня, как для windows пользователя они выглядели идентично.
Вообще, в некоторых странах принято одинарные кавычки использовать `вот так' (обратите, например, внимание на сообщения от ghci), так что возможно, что эта специфика тех стран, где одинарные кавычки не в ходу.
Г>Для «скриптового языка в принципе» не очень комильфо — есть привычное Linux-соглашение для скриптов, что # всегда должен быть комментарием, чтобы в первой строке можно было написать:
Г>
Г>#!bin/tiscript
Г>
Это не проблема, например в луа первая строчка просто пропускается если начинается с '#'.
The first line in the file is ignored if it starts with a #.
Нечто подобное предусмотрено во всех скриптовых языках, в которых '#' не означает начало комментария.
Здравствуйте, MasterZiv, Вы писали:
MZ>DemAS пишет:
>> А в чем между ними разница? Если долго объяснять — буду благодарен за >> ссылку.
MZ>Атом может быть переменной.