Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [AWL] новый скрипт-язык 
V
    Опции темы
regis
Дата 16.3.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Ну вот, хочу предложить вашему вниманию новый язык программирования -- AWL. Работает, как интерпретатор. По своей идеологии он представляет собой нечто среднее между традиционными императивными языками (от BASIC до Java) и списковыми (LISP, Scheme). Собственно, в основе лежат списки, и вся работа ядра языка основана на них.

Завтра/послезавтра выложу в этой теме несколько ссылок для скачивания -- тогда приглашаю всех тестировать и критиковать мое творение. ;)


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Void
Дата 16.3.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



Интересно. Как человек, досужий до формальных языков и компиляторостроения, жду с нетерпением. (Что мешало сразу выложить? Интерес раззадориваешь? smile )


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
setq
Дата 16.3.2006, 19:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не томи — выкладывай уже! smile
  Вверх
regis
Дата 17.3.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Не буду вас томить. ;)

ftp://odds_ends.rsl.ru/pub/sergei/Irbis/awl.zip

в архиве есть интерпретатор, описание в PDF, и несколько примеров.

Если будут проблемы со скачиванием (не должно быть) пишите сюда...

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
svg
Дата 17.3.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2005

Репутация: 1
Всего: 18



А пошто только бинарник?
Исходники давай.

Рассматривать этот мини-калькулятор с точки зрения пользователя не интересно.

Интересно посмотреть на реализацию.

PM MAIL   Вверх
Void
Дата 17.3.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



Аудитория требует слайд… пардон, исходников. Загадочные сообщения об ошибках и регулярные молчаливые вылеты (например, при попытке рекурсивного вызова пользовательского функтора) не способствуют экспериментам.

Пара вопросов по реализации:
1) Модель интерпретатора: прямая интерпретация текстового представления / интерпретация AST / генерация байткода? (Подозреваю второе).
2) Управление памятью: подсчет ссылок / консервативный или точный сборщик мусора / детерминированное время жизни?
3) Внутреннее представление списков: цена доступа к N-му элементу и конкатенации — O(1) / O(N)?

Ну и наконец, самый главный вопрос: в чем причина создания yet another scripting language и какие планируются дополнения в языке?

Цитата
Непрямое присваивание является мощным средством, не имеющим прямых аналогов в
большинстве традиционных языков программирования.

Ну, смотря что понимать под традиционными языками. Ленивые вычисления широко распространены.
А сам AWL в какой-то степени ленивый язык, по крайней мере аргументы функторов, как я понял, вычисляются лишь по мере необходимости.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
regis
Дата 20.3.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Прежде всего, по поводу пользовательских функторов. Пока они реализованы очень примитивно -- фактически, как простенькие макроподстановки, у них нет собственного пространства имен (используют глобальное) и т.п. Так что пока забудьте про рекурсию (и даже использовать функтор как один из аргументов его самого тоже нельзя). Я сейчас работаю над этим.

Теперь ответы по реализации:

1) Не знаю, что такое "интерпретация AST", но подозреваю что вы правы. ;)
Внутри программный код представляется так же, как и прочие структуры данных -- т.е. те же списки и термы. Его выполнение -- это, грубо говоря, вызов определенного для терма метода eval. Никакого байт-кода не нужно.

2) Подсчитываются ссылки.

3) Списки на то и списки: доступ к N-му элементу в принципе требует O(N) времени. Конкатенация тоже не быстрая. Поэтому я подумываю о введении массивов наряду со списками (см. далее).

> в чем причина создания yet another scripting language

Намекну, что AWL расшифровывается как Alternative Web Language...

> ....и какие планируются дополнения в языке?

Уйма. Нормально работающие функторы, ООП, намного больше операций над числами, строками и списками, многомерные массивы, хэши, регулярные выражения, полноценный ввод-вывод и т.п.
С другой стороны -- все, что требуется для реализации функций языка как гипермедиа-средства. Как минимум, переносимая оконная графика и виджеты, форматирующие текст.
В общем, идей много.



--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 20.3.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата(Void @ 17.3.2006, 20:04)
Цитата
Непрямое присваивание является мощным средством, не имеющим прямых аналогов в
большинстве традиционных языков программирования.

Ну, смотря что понимать под традиционными языками. Ленивые вычисления широко распространены.
А сам AWL в какой-то степени ленивый язык, по крайней мере аргументы функторов, как я понял, вычисляются лишь по мере необходимости.

Не спорю, так оно и есть. Я имел в виду в основном то, что для приверженцев традиционных процедурных языков, типа C или Java, такие средства будут в новинку.

Наконец, насчет исходников. Я в принципе не против, если есть желающие помочь в разработке. А так -- чего на них любоваться? ;)



--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Ignat
Дата 20.3.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Цитата(regis @ 20.3.2006, 12:32 Найти цитируемый пост)
Намекну, что AWL расшифровывается как Alternative Web Language...

А есть ли смысл?


--------------------
Теперь при чем :P
PM   Вверх
Void
Дата 20.3.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



Цитата(regis @ 20.3.2006, 14:32 Найти цитируемый пост)
Внутри программный код представляется так же, как и прочие структуры данных -- т.е. те же списки и термы. Его выполнение -- это, грубо говоря, вызов определенного для терма метода eval.

Ага, ну примерно так я себе это и представлял.
Цитата(regis @ 20.3.2006, 14:32 Найти цитируемый пост)
Списки на то и списки: доступ к N-му элементу в принципе требует O(N) времени.

Просто, к примеру, в Python стандартный тип называется списком, но поощряется его использование в качестве массива, так что вряд ли там доступ к элементу O(N).
Цитата(regis @ 20.3.2006, 14:51 Найти цитируемый пост)
Наконец, насчет исходников. Я в принципе не против, если есть желающие помочь в разработке. А так -- чего на них любоваться? ;)

За себя могу сказать, что код я с интересом посмотрю и потестирую. Возможно, что-то предложу в реализации. Пока нет ни времени, не четкого понимания, что к чему.
Цитата(regis @ 20.3.2006, 14:32 Найти цитируемый пост)
по поводу пользовательских функторов. Пока они реализованы очень примитивно -- фактически, как простенькие макроподстановки, у них нет собственного пространства имен ... Я сейчас работаю над этим.

Кстати, тут возможны два варианта: dynamic scoping vs lexical scoping. И автоматически возникает вопрос о поддержке замыканий. В общем, in any case, исходники стоит опубликовать и держать в актуальном состоянии smile
Цитата(regis @ 20.3.2006, 14:32 Найти цитируемый пост)
Уйма. Нормально работающие функторы, ООП, намного больше операций над числами, строками и списками, многомерные массивы, хэши, регулярные выражения, полноценный ввод-вывод и т.п.

Мощно. Нужно упомянуть FFI с Си. Без этого любой скриптовый язык — игрушка. И чем более прозрачным будет FFI, тем лучше.
И все-таки, я не пойму, где killer application для AWL даже с учетом всех этих фич? Чем он будет выгодно отличаться от Python/Ruby/Perl/того же LISP в конце концов?


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
regis
Дата 21.3.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата(Void @ 20.3.2006, 20:36)
И все-таки, я не пойму, где killer application для AWL даже с учетом всех этих фич? Чем он будет выгодно отличаться от Python/Ruby/Perl/того же LISP в конце концов?

Основное отличие AWL -- то, что с самого начала есть прицел на декларативно-процедурное Web-программирование. Попробую дать примерчики того, как это может выглядеть на практике...

HTML/XML -- примеры чисто декларативных языков. AWL -- декларативно-процедурный. Там, где в HTML используем тэги для разметки текста -- что-нибудь вроде:

<P><font size=3><B>Список клиентов</B> [<I>Март-2006</I>]</P>

в AWL используем функторную запись:

P(Font_size(3, B("Список клиентов"), " [", I ("Март-2006"), "]"));

- примерно так. Собственно, создатель AWL-страницы может кодировать ее даже не задуиываясь над тем, что работает с языком программирования, а не просто разметки текста. Соответственно, не надо никаких специальных средств для определения стилей и пр. -- пользовательские функторы уже есть (и они намного мощнее чем все, что есть в CSS):

! Article_Header (Author Title Date) = (
Align_Right (Font_size (14, I(Author))),
Align_Center (Font_size (16, B(Title), ' ', Font_size (9, Date)))
);

получим не просто стиль, а готовый генератор для стандартных заголовков статей. Собственно, можно даже добавить в вышеприведенное тело статьи, т.е. целиком "завернуть" ее код в функтор, а header/footer для нее будут генерироваться автоматически.

По идее, вообще практически все стилевые тэги стандартного HTML можно реализовать в виде библиотечных средств. То же относится, например, к нумерованным спискам (<OL> .. </OL>):

! NumList (L) = { i = 0; i ++ < #L ?? (B(i+1, '.'), ' ', L[i], Br) };

Теперь NumList(['C' 'Pascal' 'Java']) будет автоматически генерировать список

1. C
2. Pascal
3. Java

- с номерами выделенными п/ж и пр. Также можно определить словарные списки (<DD>/<DT>) и пр. Думаю, можно (и нужно) определить даже стили для таблиц. Таблица -- это, по сути, набор боксов для вставления в них текста + разделительные линейки для красоты + встроенный менеджер геометрии, управляющий размерами и положением ячеек. По большей части, все это можно создать средствами самого AWL -- при этом программист (дизайнер) будет иметь полный контроль над реализацией этих средств, о чем сегодня и не мечтает.

Это далеко не все, но пока вынужден прерваться...

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
svg
Дата 22.3.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2005

Репутация: 1
Всего: 18



Хм, из всего выше изложенного ясно, что автор полон энтузиазма,
но стоит на твердых позициях вульгарного материализма при
подходе к предмету.

Дедушка Ленин в одном был несомненно прав - в настоятельной
рекомендации стремления к получению твердых знаний.

Рекомендую:

1. прогрызть дыру в "Dragon Book";

2. посмотреть по сторонам, понять ситуацию
и прислушаться к тому, что думаю по данному вопросу
люди, не менее талантливые, чем ты сам, например вот эти:
Links Филиппа Вадлера


PM MAIL   Вверх
regis
Дата 23.3.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



> Хм, из всего выше изложенного ясно, что автор полон энтузиазма,
> но стоит на твердых позициях вульгарного материализма при
> подходе к предмету.

Насчет "энтузиазма" -- верно, насчет "вульгарного материализма" -- поясните.

> Рекомендую:

> 1. прогрызть дыру в "Dragon Book";

Это вы про Ахо, Сети и Ульмана? Много слышал про эту книгу, но никогда не читал, и не понимаю, зачем надо прогрызать в ней дыру. ;)
Боюсь, что в связи с данной задачей она не особенно актуальна. Там, как я знаю, в основном рассматриваются лексеры, парсеры и оптимизация кода -- для AWL важно другое (по крайней мере, в данный момент).

> 2. посмотреть по сторонам, понять ситуацию
> и прислушаться к тому, что думаю по данному вопросу
> люди, не менее талантливые, чем ты сам, например вот эти:
> Links Филиппа Вадлера

Вы знаете, я всю жизнь смотрю по сторонам и (как мне кажется) неплохо понял ситуацию.
Ссылку я посмотрел, бегло. В детали этого Links я не вникал, но первое что вижу в скриптах -- до боли знакомые HTML-треугольнички. Значит, Yet Another Server Technology -- даже если она *очень* хорошая, все равно ориентирована на работу с HTML-разметкой, тупыми клиентами и протоколами, устаревшими до своего рождения.
Я бы уж скорее обратил внимание на Curl (www.curl.org, кажется). Это по крайней мере перспективнее (хотя тоже не скажу, что я в восторге).

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 24.3.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Я обещал еще несколько идей... теперь по поводу организации взаимодействия между клиентом и сервером. Было б идеально, если б протокол работал в рамках собственно модели AWL -- т.е. передавал/получал AWL объекты. Как это будет работать? Примерно так:

request ("awl://myserver.org") => возвращает всю корневую AWL-страницу, размещенную на myserver;

request ("awl://myserver.org", param1, param2, ... paramN) => дополнительно передает ей параметры (напр., для поиска).

Может потребоваться загрузить не документ целиком, а какие-то его подузлы; сервер должен обеспечивать такую функциональность. В идеале вообще клиент должен иметь возможность формировать и передавать код фильтра, выполняемого на сервере, и выбирающего там все то, что нужно.
Протокол должен обеспечивать компактную и максимально эффективную передачу AWL-объектов. Если вместо текстуального представления списков/термов передавать их внутреннее (бинарное), использовать сжатие строк и пр., то можно добиться кое-чего. Может (и наверное должна быть) более сложная модель запросов -- асинхронная... что-нибудь вроде request_async (resource, onload) -- где код onload будет выполняться, когда resource загружен. (Думаю, что здесь closures и прочие функциональные штучки как раз могут пригодиться). Естественно, должно быть кэширование (на локальном компьютере -- локальный кэш-сервер: AWL-браузеров может быть много, желательно, чтобы они совместно использовали кэшированные ресурсы).

Хмм, ну вот пока и все. Извиняюсь за некоторую сумбурность изложения -- я сам пока еще нахожусь "на стадии обдумывания", и на многие вопросы сам четкого ответа дать не смогу. Но программа-минимум на сегодня -- довести до работающего и достаточно мощного состояния сам язык AWL. В этом очень рассчитываю на вашу помощь!


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 25.4.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Новая рабочая версия интерпретатора ждет желающих ее потестировать здесь:

http://awl-project.narod.ru/awl-240406.zip

Теперь:

- синтаксические ошибки не фатальны;
- рекурсивные функторы работают!
- ряд новых операций/функторов -- см. исходники примеров.


Очень рассчитываю на всех, особенно на Void'а...
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Void
Дата 25.4.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



regis, я бы с удовольствием, но у меня Access Denied (черт бы побрал провайдера). Выложите куда-нибудь в другое место или кидайте мне на мыло. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
regis
Дата 27.4.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Void, отослал вам на e-mail.

А что у вас с провайдером: не дает скачивать файлы с народа.ру, или как?
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Void
Дата 30.4.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



Итак, посмотрел новую версию AWL. Не скажу, что плотно тестировал, но не нашел к чему придраться с т.з. техники, разве что к отсутствию нормальной документации (надпись «106 функторов» только дразнит smile ).

Предложение опубликовать исходники (под любой лицензией) остается в силе. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
regis
Дата 3.5.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Спасибо! Но вы мне здорово льстите -- багов в интерпретаторе до сих пор достаточно много. (Часть из них я уже нашел, но где они не скажу ;) )

Исходники будут опубликовны. Планирую их выложить, как только приведу в такое состояние, что за них не будет стыдно. ;)

И документация тоже будет. Скоро будут автоматически генерироваться (из исходников) полный список функторов + строгое описание синтаксиса языка. (Все это, правда, уже будет на английском.)

Теперь всем кто интересовался проектом: хотел бы знать ваше мнение по поводу идей и перспектив развития языка.

1) Должен ли, например, AWL иметь больше особенностей из функциональных языков? Должны ли поддерживаться closures и continuations? Какие виды структурирования данных желательно иметь (N-мерные массивы и хэши скоро будут, а еще?)

2) Любые предложения и идеи касательно реализации ООП в AWL.

3) Подумываю также, чтобы реализовать Win-интерфейс, пока в простейшем виде, чтобы можно было хотя бы открывать окошки и рисовать в них что-нибудь. В связи с этим можно обсудить уже существующие в скрипт языках средства GUI (Tcl/Tk, Perl + Prima и т.д.) Что советуете взять за основу?

 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Void
Дата 3.5.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



Цитата(regis @  3.5.2006,  15:28 Найти цитируемый пост)
Но вы мне здорово льстите -- багов в интерпретаторе до сих пор достаточно много.

Я же сказал, что тестировал достаточно поверхностно smile
Цитата(regis @  3.5.2006,  15:28 Найти цитируемый пост)
Все это, правда, уже будет на английском.

No problem.
Цитата(regis @  3.5.2006,  15:28 Найти цитируемый пост)
1) Должен ли, например, AWL иметь больше особенностей из функциональных языков? Должны ли поддерживаться closures и continuations?

Обязательно функторы как first-class values: должно быть возможно принимать их в качестве параметров и возвращать из других функторов. Отсюда с очевидностью следует необходимость замыканий.
Насчет continuations и currying (partial function application) не уверен.
Цитата(regis @  3.5.2006,  15:28 Найти цитируемый пост)
Какие виды структурирования данных желательно иметь (N-мерные массивы и хэши скоро будут, а еще?)

Кортежи? Как эффективные списки фиксированной длины.
Еще вопрос в тему: нужен ли pattern matching?
Цитата(regis @  3.5.2006,  15:28 Найти цитируемый пост)
2) Любые предложения и идеи касательно реализации ООП в AWL.

Сложный вопрос. Если в полезности всех предыдущих предложений я заранее уверен, тут надо думать, чт́о будет удобнее, для каких целей…
Кроме модели Python/Ruby (dynamic strong duck typing) ничего в голову пока не идет.

Так или иначе должна присутствовать обработка ошибок, наверное, в виде exceptions handling. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
regis
Дата 10.5.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата

Цитата(regis @  3.5.2006,  15:28 Найти цитируемый пост)
1) Должен ли, например, AWL иметь больше особенностей из функциональных языков? Должны ли поддерживаться closures и continuations?

Обязательно функторы как first-class values: должно быть возможно принимать их в качестве параметров и возвращать из других функторов. Отсюда с очевидностью следует необходимость замыканий.


Фактически, функторы уже реализованы как вполне полноценный тип данных: можно создавать анонимные функторы, можно присваивать их переменным, передавать как параметры и возвращать значением из других функторов. Но и в случае это не будут замыкания (значения локальных параметров теряются после возврата).

Кстати, интересно было б знать, как реализованы замыкания в других языках -- сохраняется весь контекст вызова функции, или как?

Цитата

Цитата(regis @  3.5.2006,  15:28 Найти цитируемый пост)
Какие виды структурирования данных желательно иметь (N-мерные массивы и хэши скоро будут, а еще?)

Кортежи? Как эффективные списки фиксированной длины.
Еще вопрос в тему: нужен ли pattern matching?


Кортежи -- это, как я понимаю, то, что в Python называется tuples?

А pattern matching -- это регулярные выражения? Они, конечно, будут.

Цитата

Так или иначе должна присутствовать обработка ошибок, наверное, в виде exceptions handling.


Согласен, что исключения должны быть. Тем более, что, похоже, это будет основной и единственный способ явной передачи управления.

 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Void
Дата 12.5.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



Цитата(regis @  10.5.2006,  15:05 Найти цитируемый пост)
Кстати, интересно было б знать, как реализованы замыкания в других языках -- сохраняется весь контекст вызова функции, или как?

В принципе, да. В компилируемых языках можно позволить себе оптимизацию на основе статического анализа использования замыкания.
Не знаю, как это ложится на рантайм-модель AWL, но мне реализация видится примерно следующей: при входе в функтор выделяется объект, хранящий локальное состояние функции (фактически, фрейм стека виртуальной машины). С любым функтором связывается фрейм его внешнего окружения. Разумеется, на фрейм должны считаться ссылки (или он должен собираться GC), чтобы решить проблему времени жизни замыкания, превышающего время жизни контекста вызова.
Кстати, у Аппеля в Tiger Books (Modern Compiler Implementation in C/Java/ML) есть кое-что по этому поводу, хотя в целом книги нацелена на статические компилируемые языки. Если найдете “…in ML” в электронном виде, сообщите пожалуйста, буду очень благодарен smile
Цитата(regis @  10.5.2006,  15:05 Найти цитируемый пост)
Кортежи -- это, как я понимаю, то, что в Python называется tuples?

Да. Собственно, везде, где они есть, они называются tuples smile
Цитата(regis @  10.5.2006,  15:05 Найти цитируемый пост)
А pattern matching -- это регулярные выражения? Они, конечно, будут.

Я не совсем то имел в виду. Регулярные выражения лично я предпочитаю видеть библиотекой, а не вшитым в язык набором конструкций. Впрочем, в AWL трудно провести границу, учитывая, что любые операции есть функторы. А под pattern matching я имел в виду это (ну или это). Затрудняюсь оценить полезность сопоставления с образцом в скриптовом языке, просто для меня эта возможность автоматически записывается в “+” любого языка, который ее поддерживает.

Добавлено @ 18:12 
Кстати, как насчет инфиксных функторов, определяемых пользователем? 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
regis
Дата 16.5.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата

В принципе, да. В компилируемых языках можно позволить себе оптимизацию на основе статического анализа использования замыкания.
Не знаю, как это ложится на рантайм-модель AWL, но мне реализация видится примерно следующей: при входе в функтор выделяется объект, хранящий локальное состояние функции (фактически, фрейм стека виртуальной машины). С любым функтором связывается фрейм его внешнего окружения. Разумеется, на фрейм должны считаться ссылки (или он должен собираться GC), чтобы решить проблему времени жизни замыкания, превышающего время жизни контекста вызова.


Именно в этом то проблема (рантайм-модель, и язык сугубо бестиповой).
(М.б. попытаться "обернуть" возвращаемый функтор в некий (систменый) объект, сохраняющий контекст хотя бы частично? Вот это может сработать. Подумаю...)

Кстати: было б интересно взглянуть на практическое применение замыканий. Я имею в виду не простенькие иллюстрации этой концепции (которые можно найти в man для perl, например), а конкретный пример задачи, которая с использованием замыканий решается существенно проще/изащней, чем без оных. Если дадите ссылку, буду очень благодарен!

Цитата

Кстати, у Аппеля в Tiger Books (Modern Compiler Implementation in C/Java/ML) есть кое-что по этому поводу, хотя в целом книги нацелена на статические компилируемые языки. Если найдете “…in ML” в электронном виде, сообщите пожалуйста, буду очень благодарен smile


Если найду в e-виде, обязательно кину ссылку.

Цитата

Цитата(regis @  10.5.2006,  15:05 Найти цитируемый пост)
А pattern matching -- это регулярные выражения? Они, конечно, будут.

Я не совсем то имел в виду. Регулярные выражения лично я предпочитаю видеть библиотекой, а не вшитым в язык набором конструкций. Впрочем, в AWL трудно провести границу, учитывая, что любые операции есть функторы. А под pattern matching я имел в виду это (ну или это). Затрудняюсь оценить полезность сопоставления с образцом в скриптовом языке, просто для меня эта возможность автоматически записывается в “+” любого языка, который ее поддерживает.


Хмм, сначала попробую получше разобраться в концепции, а потом скажу, нужна она в AWL или нет. ;)

Цитата

Добавлено @ 18:12 
Кстати, как насчет инфиксных функторов, определяемых пользователем?  


Ну, по большому счету это уже расширение синтаксиса. Учитывая то, что парсер реализован вполне стандартно (flex + bison), это будет сделать непросто -- там особо синтаксис не порасширяешь.
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Void
Дата 16.5.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



Цитата(regis @  16.5.2006,  17:26 Найти цитируемый пост)
(М.б. попытаться "обернуть" возвращаемый функтор в некий (систменый) объект, сохраняющий контекст хотя бы частично? Вот это может сработать. Подумаю...)

Собственно, именно это я и предложил smile Просто условно разделил «системный объект» на собственно функтор (я так понимаю, на уровне рантайма он имеет древовидное представление — AST) и его контекст, который я не очень остроумно обозвал фреймом.
Цитата(regis @  16.5.2006,  17:26 Найти цитируемый пост)
Кстати: было б интересно взглянуть на практическое применение замыканий. Я имею в виду не простенькие иллюстрации этой концепции (которые можно найти в man для perl, например), а конкретный пример задачи, которая с использованием замыканий решается существенно проще/изащней, чем без оных.

imho, б́ольшее практическое значение имеют не замыкания сами по себе, а функции высшего порядка. Однако без замыканий HOF теряют значительную часть своей выразительности.
Цитата(regis @  16.5.2006,  17:26 Найти цитируемый пост)
Если дадите ссылку, буду очень благодарен!

Мне очень неудобно давать ссылку на самого себя, но так уж получилось, что буквально вчера я пытался пролить свет на этот вопрос в другой теме smile
Цитата(regis @  16.5.2006,  17:26 Найти цитируемый пост)
Учитывая то, что парсер реализован вполне стандартно (flex + bison), это будет сделать непросто -- там особо синтаксис не порасширяешь.

Понятно. Что ж, отложим этот вопрос на неопределенный срок. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
regis
Дата 18.5.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата

Цитата(regis @  16.5.2006,  17:26 Найти цитируемый пост)
(М.б. попытаться "обернуть" возвращаемый функтор в некий (систменый) объект, сохраняющий контекст хотя бы частично? Вот это может сработать. Подумаю...)

Собственно, именно это я и предложил smile Просто условно разделил «системный объект» на собственно функтор (я так понимаю, на уровне рантайма он имеет древовидное представление — AST) и его контекст, который я не очень остроумно обозвал фреймом.


Я имел в виду именно то, что в AWL "оборачивание" придется делать как-то явным образом (наверное). Приведу пример: если нам нужен генератор функций, прибавляющих что-то к аргументу. В AWL уже можно написать довольно изящно:

` Генератор унарной функции, прибавляющей фиксированную константу N к аргументу X `
! make_adder (N) = !(X) = (X + N);

вот только работать это правильно не будет (значение N вне вызова make_adder будет undef).

С другой стороны, если добавить специальную конструкцию для сохранения каких-то переменных контекста (скажем bind (A, B, C...) сохраняет переменные A B C...), то можно написать нечто вроде:

! make_adder (N) = bind (N, !(X) = (X + N));

и вот это уже будет полноценным замыканием. Не ручаюсь, что все будет именно так, просто иллюстрирую идею.

Цитата

imho, б́ольшее практическое значение имеют не замыкания сами по себе, а функции высшего порядка. Однако без замыканий HOF теряют значительную часть своей выразительности.
Цитата(regis @  16.5.2006,  17:26 Найти цитируемый пост)
Если дадите ссылку, буду очень благодарен!

Мне очень неудобно давать ссылку на самого себя, но так уж получилось, что буквально вчера я пытался пролить свет на этот вопрос в другой теме smile


Спасибо за ссылку. Скачал "Функциональное программирование" Филда и Харрисона -- буду читать понемногу.

Цитата

Цитата(regis @  16.5.2006,  17:26 Найти цитируемый пост)
Учитывая то, что парсер реализован вполне стандартно (flex + bison), это будет сделать непросто -- там особо синтаксис не порасширяешь.

Понятно. Что ж, отложим этот вопрос на неопределенный срок.  


Кстати говоря, можно реализовать средствами самого языка очень многие синтаксические расширения. (В сущности, свой мини-парсер можно смастерить и им пользоваться.) Ну, например, если очень хочется иметь инфиксные бинарные операции (op1, op2...), не так уж трудно написать функтор вроде my_parser который понимал бы что-нибудь вроде:

my_parser ([EXPR1 op1 EXPR2 op2 EXPR3 op1 EXPR4])

и автоматически переводил это скажем в

func_op2 (func_op1 (EXPR1, EXPR2), func_op1 (EXPR3, EXPR4)).

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

Еще раз спасибо! Кстати, хотел вам добавить + в репутацию, но выяснил, что для этого 100 постов надо иметь. Примите пока словестную благодарность за помощь и интерес к моему проекту. ;)
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 13.7.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Работа понемногу продолжается. Уже скоро будет доступна для тестирования новая версия AWL -- с базовыми средствами ООП, поддержкой модуляризации (через include) и другими приятными вещами.

Пока я ее тестирую, про новые возможности можно почитать вот здесь:

http://awl-project.narod.ru/AWL-new.htm

Любые комментарии, как всегда, приветствуются. Если что-то непонятно, не стесняйтесь спрашивать здесь -- постараюсь ответить.
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 21.7.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Как я вижу, счетчик посещений растет, но люди все равно молчат, как партизаны.  smile 

Впрочем, их дело. Новость, которой хочу поделится,  состоит в том, что я уже понемногу подключаю интерпретатор к Win, и собираюсь написать несколько простых программ, рисующих в окнах что-нибудь простое, но красивое (напр., фрактальные кривые). Как только будет готово, выложу здесь (вместе с интерпретатором).
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 3.8.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 3.8.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



regis, круто!
Успел заметить  BINTREE.AWL -> BTree.Insert, сопоставление значению (cmp), компилер не отслеживает все возможные вариации и ответвления, это на дебаге сильно сказываеться. В OCaml компилер сразу может определить при каком условии ни одна из веток не будет подходящей, следовательно либо ты учитываешь этот вариант, либо добавляешь ветку "всё остальное" (_), в котором обычно кидаешь исключение. Правда компилер ошибаеться если используються guards, но это мелочи smile  Главное меньше ошибок можно допустить, ясность кода.

В целом очень одобрямс  smile

P.S. возможность не явного декларирования локальных переменных в функторе есть страшное зло, которое лучше отключить. Как ты правильно заметил результат будет не предсказуем если такая переменная была определена выше по контексту ("снаружи"), следовательно убери эту ещё одну возможность выстрелить себе в ногу smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 4.8.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата
Успел заметить  BINTREE.AWL -> BTree.Insert, сопоставление значению (cmp), компилер не отслеживает все возможные вариации и ответвления, это на дебаге сильно сказываеться. В OCaml компилер сразу может определить при каком условии ни одна из веток не будет подходящей, следовательно либо ты учитываешь этот вариант, либо добавляешь ветку "всё остальное" (_), в котором обычно кидаешь исключение. Правда компилер ошибаеться если используються guards, но это мелочи smile  Главное меньше ошибок можно допустить, ясность кода.


Строго говоря, это не guards (таких вещей в AWL нет пока), а обычный условный оператор с несколькими ветвями. Т.О. вся ответственность за логику проверяемого условия лежит на программисте. М.б. надо добавить что-нибудь вроде switch, причем чтобы интерпретатор проверял логическую непротиворечивость условий? Тут есть о чем подумать.

Цитата
P.S. возможность не явного декларирования локальных переменных в функторе есть страшное зло, которое лучше отключить. Как ты правильно заметил результат будет не предсказуем если такая переменная была определена выше по контексту ("снаружи"), следовательно убери эту ещё одну возможность выстрелить себе в ногу 


Тут полностью согласен, что это не такая удачная идея, как мне раньше казалось. Теперь мне как минимум очевидно, что если переменная не декларирована явно в функторе/классе, то она должна попадать в *глобальное* пространство имен. Ну, а если будет режим, требующий явного объявления всех переменных (типа use strict в Perl), то в этом случае будут варнинги или ошибки.

Цитата
В целом очень одобрямс  smile


Спасибо! То ли еще будет...
Я пока только сделал самый примитивный интерфейс с Win API; в будущем, конечно, вся обработка Win-сообщений, например, будет не такой неуклюжей, как сейчас -- все будет упаковано в удобную ООП-оболочку. И, конечно, графических, шрифтовых и пр. примитивов будет намного больше. Думаю, что скоро на AWL уже простенькие игрушки можно будет писать.  smile 



Это сообщение отредактировал(а) regis - 4.8.2006, 13:36
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 4.8.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(regis @  4.8.2006,  12:35 Найти цитируемый пост)
Строго говоря, это не guards

Угу, я не говорил что это guards, просто похожий механизм используеться для сопостовления типу, например:

Код
//ещё пока в дизайне язык, но принцип как в OCaml и подобных
match(value) {
    String v (v == "тест") -> console.print("Строка 'тест'"); //сопостовляем типу String, а guard/выражение (v == "тест") отсеет все строки не "тест"
    "тест2" -> console.print("Строка 'тест2'"); //это то же самое как и выше, просто короче
    String v -> console.pritn("A string: "+v); //все строки, кроме test и test2, позиция этой ветки безразлична ;-)

    Integer v -> console.print("Integer: " + v); //ловим все числа
    90 -> console.print("Number 90"); //как и со строками
}

//Как видишь конструкция напоминает swtich из C, но тип не ограничен числом, опредляеться динамически (RTTI) и позволяет избавиться от
//instanceof (как в Java, хотя оставлю для удобства) и возможно приведение к типу (пока не доказал).


У тебя нет сопоставление типу (кстати это большое ограничение в языке с динамическими типами), только проверяеться значение как если бы все ветки были универсальный_тип (выражение/guard) ->.... С типами ещё ясно, но с guards которые могут быть любыми выражениями конечно сложно отследить, НО! попытаться стоит и если получиться, респект тебе на всю жизнь smile
Можно как то ограничить выражения...

Цитата(regis @  4.8.2006,  12:35 Найти цитируемый пост)
надо добавить что-нибудь вроде switch, причем чтобы интерпретатор проверял логическую непротиворечивость условий?

Взгляни на конструкцию выше, это более базовый, универсальный swtich, ты почти у этого (у тебя выражения, а не единственное "равнество значению" для выбора ветки).

Цитата(regis @  4.8.2006,  12:35 Найти цитируемый пост)
Ну, а если будет режим, требующий явного объявления всех переменных (типа use strict в Perl), то в этом случае будут варнинги или ошибки.

Ну язык ещё не вышел, може просто изначально убрать проблему? Сэкономишь много критики  smile 

Цитата(regis @  4.8.2006,  12:35 Найти цитируемый пост)
И, конечно, графических, шрифтовых и пр. примитивов будет намного больше. Думаю, что скоро на AWL уже простенькие игрушки можно будет писать. 

Попытаюсь на досуге реализовать пару обычных задачек, возможно ещё какие общие требования всплывут. Главное сделать язык удобным, на вид он пока нравиться smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Void
Дата 4.8.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 6
Всего: 173



regis, во-первых, присоединяюсь к одобрению Sardar: налицо значительный прогресс smile

Цитата(regis @  4.8.2006,  15:35 Найти цитируемый пост)
Я пока только сделал самый примитивный интерфейс с Win API; в будущем, конечно, вся обработка Win-сообщений, например, будет не такой неуклюжей, как сейчас -- все будет упаковано в удобную ООП-оболочку. 

Меня смущает, что интерпретатор получается монолитным: все библиотеки намертво вкомпилены. Мне кажется, значительно больше пользы может сейчас принести создание FFI, чтобы можно было без проблем создавать модули на Си и других языках, и экспортировать из них в AWL функции, классы и т.д. Тогда можно будет создавать байндинги к любым графическим библиотекам.

И ещё: по-прежнему не хватает документации. Если нет времени и возможности писать её сейчас, то даже грамматика yacc и несколько внутренних заголовочных файлов будут кстати.

Цитата(Sardar @  4.8.2006,  16:54 Найти цитируемый пост)
У тебя нет сопоставление типу (кстати это большое ограничение в языке с динамическими типами), только проверяеться значение как если бы все ветки были универсальный_тип (выражение/guard) ->

В принципе, никто не мешает ввести встроенные функции типа is_integer, чтобы с помощью guards эмулировать сопоставление по типу, если я правильно понял, что ты имеешь в виду.

Цитата(Sardar @  4.8.2006,  16:54 Найти цитируемый пост)
С типами ещё ясно, но с guards которые могут быть любыми выражениями конечно сложно отследить, НО! попытаться стоит и если получиться, респект тебе на всю жизнь smile

В случае произвольных выражений в guards, скорее всего, нереально. Ограничить можно (Так, например, сделано в Erlang: в guards разрешён только фиксированный набор операторов и функций с константным временем выполнения, т.к. язык нацелен на софт-реалтайм), но, пожалуй, полезнее будет отслеживать то, что можно, например операторы сравнения чисел (т.е. решать систему линейных неравенств), а остальное отдавать на откуп программисту.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Sardar
Дата 4.8.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(Void @  4.8.2006,  15:42 Найти цитируемый пост)
В принципе, никто не мешает ввести встроенные функции типа is_integer, чтобы с помощью guards эмулировать сопоставление по типу, если я правильно понял, что ты имеешь в виду.


Никто не мешает, но! это не красиво, так же не красиво как множество if...else с instanceof. Во внутренней форме конечно это всё if'ами реализовать просто. Преавда тут маленькая не точность, у меня то "жёсткие типы", потому все эти String, Integer и т.п. имеют смысл, а в AWL типов вроде как нет, следовательно is_integer и прочее не нужно... хотя текущий виртуальный тип можно было бы отслеживать, если только какой другой инновационной идеи за "общим типом" нет smile
Но как сказал ранее можно просто попытаться анализировать выражение... я даже не знаю как подступиться к этому...

Цитата(Void @  4.8.2006,  15:42 Найти цитируемый пост)
Мне кажется, значительно больше пользы может сейчас принести создание FFI

+1, но для прототипа языка это пока не важно. Модули и бинарная совместимость нужна когда будет точно очерчен и доказан(обоснован) язык, и начнёться следующая стадия: компиляция в промежуточные формы, статистика по коду и отсюда динамические трансформации, JIT компиляция если пойдёт как обычный язык (а в вебе AWL' у ИМХО ничего не светит, его ниша общее программирование...) и другое. Естественно жизнь себе можно очень сильно упростить генеря код под Java/(.Net/mono).

Цитата(Void @  4.8.2006,  15:42 Найти цитируемый пост)
И ещё: по-прежнему не хватает документации.

+1 !


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 8.8.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Здравствуйте все!
Значит, по порядку:

- согласен, что документация - больной вопрос. Я как раз сейчас плотно ею займусь.

- синтаксис и автогенерированный список функторов будут выложены буквально на днях.

- также и функторы-предикаты для тестирования типов, конечно, будут весьма полезны (is_int, is_string, is_list и так далее). Насчет guards - не знаю (насколько я понимаю, чтобы этот механизм имел смысл, все-таки нужна строгая типизация?)

- насчет монолитности интерпретатора: в принципе, все расширения, такие как интерфейс с Win, несложно вынести в DLL-ки, например. Наверное, когда все будет отлажено, я так и сделаю. Насчет подключения модулей на ходу будет, конечно, сложнее... буду разбираться с FFI. Пока это, действительно, не очень приоритетно.

- JIT-компиляция? Честно говоря, и я так далеко не заглядывал.  smile  Хотя, конечно, было бы здорово, но смущает один момент: насколько я понимаю, чтобы код генерировался более-менее эффективный, нужна строгая типизация? В java или C#, например, именно так обстоит дело. В языке с полностью динамической типовой моделью мне плохо верится в JIT: не могу представить, чтобы это удовлетворительно работало, например, с Perl или Python.

- наконец, о реальной сфере применения AWL. Уже как прикладной скрипт-язык -- было б совсем неплохо! Но и насчет основы для некой альтернативной Web-технологии - я вполне сохраняю оптимизм. (Честно говоря, когда я начинал возиться с этим проектом, мне эта идея казалось полной утопией, а сейчас по прежнему кажется утопией, но уже не такой полной. ;) )

Попытки написать что-нибудь на AWL полностью одобряю и поддерживаю. ;) Если будет написано что-нибудь интересное, дайте мне взглянуть.


PM MAIL WWW   Вверх
Sardar
Дата 8.8.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(regis @  8.8.2006,  10:05 Найти цитируемый пост)
насколько я понимаю, чтобы этот механизм имел смысл, все-таки нужна строгая типизация?

guard это условие, отсеивающее ветвь подошедшую по типу значения, просто удобно писать:
Код
 "строка" -> работай со словом "строка"
 "тесты" -> работай со словом "тесты"

Заметь типы в обеих ветвях одинаковые, но guards: v == "строка" и v == "тесты" выфильтровывают не нужне тебе значения. Если все guards конвертнуть во временные уникальные типы, то в match от них можно будет отказаться, но это не читаемо и оскорбительно для человека smile

Цитата(regis @  8.8.2006,  10:05 Найти цитируемый пост)
также и функторы-предикаты для тестирования типов, конечно, будут весьма полезны (is_int, is_string, is_list и так далее)

Значит всё таки каждая переменная имеет свой текущий тип? Это не плохо конечно, но тогда просто необходима конструкция match наподобии той, что выше по топу, ибо куча if'ов с is_int, is_list и т.д. есть зло.

Цитата(regis @  8.8.2006,  10:05 Найти цитируемый пост)
чтобы код генерировался более-менее эффективный, нужна строгая типизация? 

Нет, смотри на objective-C smile
JIT не компилирует твой код с потерей всех "динамических" качеств. В целом интерпретаторы деляться на два типа:
  • те что выполняют AST (исходник деревом), наиболее просто в реализации и наиболее тормознуто
  • те что выполняют байт код, подход эффективней и гибче.
Если твой интерпретатор работает с байткодом, то каждая инструкция выполняеться неким куском нативного кода. Простейший JIT, дающий прогу в памяти неимоверных размеров и по скорости медленней чем оригинальный байткод - это просто заменить весь байткод на конкретные инструкции проца и вызовы процедур. Дальше больше, threaded код позволяет сделать софтину малой и быстрой на процах с большим кешем и большой разницей между скоростью проца и скоростью памяти/шины (эта разница только растёт млин...), такой код будет быстрее байткода и иногда быстрее C'шного кода. Нечто среднее из обоих методов + оптимизатор и есть JIT.  При этом те же хеш-таблицы, деревья и прочее чем ты представлял обьекты/структуры остаються такими же, как и сборщик мусора. Просто конвертируеться байткод в нативное + основные либы, например работа с большими числами, могут полностью заменяться более быстрыми аналогами JIT


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 10.8.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Прежде всего, выкладываю вот что:

http://awl-project.narod.ru/_functors.htm - каталог функторов

http://awl-project.narod.ru/_synchart.htm - полный синтаксис языка

(Каталог пока неполный, в синтаксической таблице встречаются некоторые глюки, но чем богаты...)



Цитата
Значит всё таки каждая переменная имеет свой текущий тип? Это не плохо конечно, но тогда просто необходима конструкция match наподобии той, что выше по топу, ибо куча if'ов с is_int, is_list и т.д. есть зло.


Строго говоря, у переменных типа нет, но вот у значений, которые содержатся в переменных, он, конечно есть. "Куча if-ов", конечно, не лучший вариант: намного изящнее, например, создать список из списков (предикат, имя типа)... , и выполнять поиск в нем -- что нибудь вроде:

TypeChecker = [(! is_int, "Integer") (! is_float, "Float") (! is_string "String")];

(Ну и так далее, сколько потребуется элементов.) Тогда для выражения EXPR можно будет сделать так:

     l_loop (T, TypeChecker, T[0] ! (EXPR) ? TYPE_STR = T[1]:    );

(присваиваем TYPE_STR тип выражения EXPR -- в общем, идея понятна)

Цитата

Цитата(regis @  8.8.2006,  10:05 Найти цитируемый пост)
чтобы код генерировался более-менее эффективный, нужна строгая типизация? 

Нет, смотри на objective-C smile
JIT не компилирует твой код с потерей всех "динамических" качеств. В целом интерпретаторы деляться на два типа:

    * те что выполняют AST (исходник деревом), наиболее просто в реализации и наиболее тормознуто
    * те что выполняют байт код, подход эффективней и гибче.

Если твой интерпретатор работает с байткодом, то каждая инструкция выполняеться неким куском нативного кода. Простейший JIT, дающий прогу в памяти неимоверных размеров и по скорости медленней чем оригинальный байткод - это просто заменить весь байткод на конкретные инструкции проца и вызовы процедур. Дальше больше, threaded код позволяет сделать софтину малой и быстрой на процах с большим кешем и большой разницей между скоростью проца и скоростью памяти/шины (эта разница только растёт млин...), такой код будет быстрее байткода и иногда быстрее C'шного кода. Нечто среднее из обоих методов + оптимизатор и есть JIT.  При этом те же хеш-таблицы, деревья и прочее чем ты представлял обьекты/структуры остаються такими же, как и сборщик мусора. Просто конвертируеться байткод в нативное + основные либы, например работа с большими числами, могут полностью заменяться более быстрыми аналогами JIT


Не буду спорить, но мне казалось, что байт-код и JIT -- разные вещи, и втрой термин, вроде, предполагает именно генерацию фрагментиков машинного кода (родного для хост архитектуры). В крайнем, случае, возможно, речь идет о "шитом коде", т.е. генерируются адреса рутин, которые потом напрямую вызываются. Хотя, конечно, тут я совсем не эксперт и могу плавать. ;)

Вот вопрос "AST versus байткод" -- тема интересная. Мне не раз встречались упоминания того, что байт-код, в принципе, эффективнее, чем AST, но пока не совсем ясно, за счет чего. Видимо, потому, что ссылки на код "ближе" друг к другу, кэш используется более эффективно, и это дает выигрыш?



Это сообщение отредактировал(а) regis - 10.8.2006, 12:28
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 15.8.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Пока со всеми прощаюсь: ухожу в отпуск! Недели четыре меня в Интернете не будет.

Но, надеюсь, когда вернусь, смогу уже продемонстрировать что-нибудь новое.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 21.9.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



I'm back! ;)

Пока хочу предложить вашему вниманию, новый, основательно подправленный и дополненный мануал по AWL - http://awl-project.narod.ru/AWL-doc.pdf. (Описания средств ООП, массивов и хэшей пока там нет, будут в следующем издании.) А пока очень рассчитываю на критику (конструктивную), и, если какие-то вопросы, тоже прошу не стесняться.

А скоро будет доступна новая версия интерпретатора, с полноценной поддержкой графики, реализованной через ООП (виджеты), как это и должно быть. Надеюсь, всем понравится. ;)



Это сообщение отредактировал(а) regis - 21.9.2006, 15:16
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 21.9.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



regis, файл не открываеться, ридер ругаеться. Отправь мне на мыло, положу на нормальное зеркало. Вообще отстойным народом.ру не нужно пользоваться smile

ja.doma (где гулял с собакой) gмаил _точка_ цом


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 21.9.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Может, он просто не докачался (размер должен быть 390,111)? Я скачал его FDM-ом, проверил, вроде нормально открывается... Хотя то, что народ -- весьма отстойный хостер -- увы, правда.  

А ваш адрес хочу уточнить: ja.doma <<@>> gmail <<.>> com ( без лишних <> и пробелов, конечно)?

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 21.9.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Да, боязнь спамеров теперь уже образ жизни (15-45 в сутки получаю, благо выфильтровываютсья гуглом хорошо).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 22.9.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



OK. Отослал.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 22.9.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317





--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 22.9.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Спасибо!

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 3.10.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Новая версия и немного новых примеров:

http://awl-project.narod.ru/awl-wg.zip

Здесь уже есть полноценная оконная система, основанная на иерархии виджетов, хотя ее еще предстоит дорабатывать. Вот с документированностью ООП AWL пока плохо, так что если будут вопросы, не стесняйтесь. Если будут проблемы скачивания с народа --  могу выслать на мэйл.


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 6.10.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Зеркало побыстрее народа.ру: http://sardar.vingrad.ru/AWL/awl_and_demos.zip

В демках графика (рисование примитивами, отрисовка шрифтов etc). Красиво смотряться фракталы (Мандельброта и другие), при отрисовке тормозят, загружают на 2ядернике 1 ядро (не многопоточно значит?) на 50% всего. По памяти больше 2Мб не хавает. При ресайзе окошек фрактал Ньютона подвисает, kill спасает ситуацию, в остальных окошка проблем не замечено.

Как и раньше исходников нет, но это не мешает сказать wow! смотря на эту красоту smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 9.10.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Спасибо за отзыв.

Фракталы, действительно, едят довольно много процессора -- все-таки, вычисления требуются довольно объемные. Никакого мультитрединга в рамках AWL пока конечно нет, хотя кто знает -- может, когда-нибудь и будет. Памяти, действительно, и у меня потребляет около 2Mb, что даже как-то много: в конце интерпретатор выводит Memory stat peak = 38770. Наверное, в Win в статистику памяти процессора тоже включаются все задействованные DLL-ки. А вот kill-ом убивать мне не разу не приходилось: иногда программа подвисала даже на минуту, но потом все равно отвисала и продолжала рисовать нормально. Я думаю, что это шалости виндового планировщика -- AWL тут не при чем, ручаюсь.

А насчет исходников: а разве сами AWL-модули не в счет? Сплошные исходники ведь.  smile 

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 10.10.2006, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Больше 1100 просмотров! Недурно.  smile 

Вот еще небольшая информация к размышлению: я переписал тот код, который рисует Мандельброта, на Perl (5.8.7, для вывода графики используется Prima TK). Если сравнить скорость работы: Perl, конечно, быстрее -- но всего раза в полтора! По моему, очень неплохо -- если учесть, что AWL пока довольно плохо оптимизирован, и ресурсов "убыстрения" еще много.

Пока это прикидки "на глазок": будут аккуратные данные, обязательно их выложу. Вообще, фракталы хорошо использовать как бенчмарки: скорость видна очень наглядно.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 11.10.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(regis @  10.10.2006,  10:42 Найти цитируемый пост)
если учесть, что AWL пока довольно плохо оптимизирован, и ресурсов "убыстрения" еще много.

Будь оно хотя бы открытым, можно было бы посоветовать чего. Тут отписал идею лицензии.

Цитата(regis @  9.10.2006,  11:03 Найти цитируемый пост)
А насчет исходников: а разве сами AWL-модули не в счет? Сплошные исходники ведь.

Угу, ну дык говорим про исходники не ради галочки то (и в этом случае это вообще документы), а что бы пощупать софтину изнутри. По ману любой может реализовать AWL сам (ни в Европе, ни в России запретить не сможешь smile ), так в чём проблема? smile

Цитата(regis @  9.10.2006,  11:03 Найти цитируемый пост)
Никакого мультитрединга в рамках AWL пока конечно нет

А человеческая (помесь императивной/явно_управляемой с "неявной") многопоточность будет? А то как то двухядерник есть (ноут), а толку мало smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 12.10.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Так проблема совершенно ни в чем. Я уже писал выше, что планирую опубликовать исходники: единственное, что меня останавливает на данный момент -- это их откровенная сырость (мертвый код, ненужные переменные, морально устаревшие комментарии и TODO, пр., пр.) Когда все это будет приглажено, можно будет выкладывать под какой-нибудь лицензией типа GPL. Впрочем, все, кому не терпится посмотреть -- пишите мне, я вышлю (если публично пообещаете не смеяться над некоторыми местами слишком громко  smile )

Реализовать нормальную многопоточность, повторюсь, идея соблазнительная. Но чтобы это было нормально, нужны средства запуска/останова/установки приоритетов для потоков, нужны средства синхронизации, вроде мониторов и т.п. Мне бы пока с текучкой разобраться. ;)

А вообще, по вопросу о дальнейших планах: кто нибудь знает, реально ли у нас что-нибудь издать как bookware? (Кто не знает, поясню: это когда издается книжка о каком-нибудь софте + сам софт прилагается к ней на диске.) Насколько я знаю, многое на западе распространялась как bookware -- Minix, например, на котором потом был основан Linux. Мне интересно, насколько это реально у нас.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 12.10.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



 smile 
Цитата(regis @  12.10.2006,  13:26 Найти цитируемый пост)
Мне интересно, насколько это реально у нас.

Смотря какие ограничения ты внесёшь в свою bookware лицензию. Проще конечно пользовать LGPL или вообще BSD, это позволит тебе писать уникальные проприетарные продукты пользуясь свободными либами (тут свои заморочки). Книгу можно продавать, но так сходу её не каждый купит...  Если действительно есть силы и талант написать что то новое, затем распространить AWL, то конечно книга будет покупаться. Только не просто это книги писать smile

Если когда нибудь напишешь SAPI модули для апача, IIS и прочих, т.е. AWL станет вебязыком как PHP, то можно хорошо заработать толкая среду разработки к нему вместе с фреймворком и готовым кодом на все случаи жизни. Плюсы подхода в том, что твой AWL будут расширять другие, помогая тебе его развивать, прям как в PHP. Решение конечно комплексное, деньги ты в первые 2 года будешь только терять.

Цитата(regis @  12.10.2006,  13:26 Найти цитируемый пост)
Minix, например, на котором потом был основан Linux.

Линух не был основан на minix, это две совершенно разные оси (старый миникс и страничной памяти не поддерживал, что выводит линух на качественно другой уровень вообще). Сейчас миникс 3 становиться интересной осью, но опять же не имеет ничего общего с линухом (может дрова на миних перенесут какие, но это сложней).
 smile 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 16.10.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата
Если действительно есть силы и талант написать что то новое, затем распространить AWL, то конечно книга будет покупаться. Только не просто это книги писать


Книга в виде мануала уже есть, надо только дописать отсутствующие разделы. Ну и, конечно, повнятнее растолковать то, что неясно, дать больше примеров, добавить приложения: подробный справочник по функторам, синтаксис и т.п. Мне сейчас интересно другое: какое из наших издательств в принципе взялось бы это издать, хотя бы небольшим тиражом? (Понятно, что издательству значительно проще издать 1001-ю книгу про Javascript, PHP и пр. -- чем публиковать что-нибудь принципиально новое, но связанное с риском.)

Кстати, насчет PHP: я вообще не думал о том, как можно было б использовать AWL на сервере -- пока это на 100% клиентская технология. (Хотя, конечно, одно другому не мешает.)

Цитата
Линух не был основан на minix, это две совершенно разные оси (старый миникс и страничной памяти не поддерживал, что выводит линух на качественно другой уровень вообще).


"Основан" -- понятие с очень нечеткой семантикой.  smile 
Исходной код Линукса, конечно, не содержит что-либо от Миникса и 100%но лицензионно чист. Если же говорить о Миниксе как об источнике идей -- да, он таковым безусловно был, о чем сам Линус в "Just for fun" прямо пишет. Впрочем, согласен, что эта тема здесь -- совершенно не в топик.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
cleg
Дата 16.10.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.9.2006

Репутация: 1
Всего: 3



посмотрел полный список функторов, а что - генератора случайных чисел нет? 
а то он тут понадобился, а городить свой - влом.
PM MAIL   Вверх
regis
Дата 17.10.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



В новых версиях -- есть (rnd, set_rnd). Через пару дней новую версию выложу.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
cleg
Дата 17.10.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.9.2006

Репутация: 1
Всего: 3



а, пасибо! :-)

я думаю назрел вопрос о полноценном сайте smile
PM MAIL   Вверх
regis
Дата 19.10.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Вопрос уже не назрел, а прям-таки перезрел.  smile 

Думаю, что скоро -- сейчас вот закончу очередной этап переделки интерпретатора, можно будет его выложить с торжественным открытием сайта (и присваиванием, наконец, официального номера версии).


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 23.11.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Итак: проекту AWL исполняется год!

Своеобразный юбилей, и как раз к нему есть ряд новостей:

1) Языку удалось привлечь определенное внимание компьютерной прессы.
Украинский ж-л "Мой компьютер", № 47 (426) -- см. http://mycomputer.ua/issuetoc/

2) Понемногу открывается официальный сайт: http://awl-project.narod.ru
Там уже есть ссылки на большую часть ресурсов, в т.ч. примеры и документацию.

3) Наконец, там же вы найдете новый AWL интерпретатор, версию 0.5.0
(считаю язык готовым примерно наполовину, исходя из этого и присвоил номер версии).
Основные отличия:

массивы и хэши доведены до ума;
оконная система существенно переработана;
большинство ошибок теперь не игнорируются молча, а сопровождается более-менее внятной диагностикой.

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

Комментарии, как всегда, приветствуются.


Это сообщение отредактировал(а) regis - 23.11.2006, 15:46
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
cleg
Дата 23.11.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.9.2006

Репутация: 1
Всего: 3



кстати о прессе - статья будет через пару недель выложена в он-лайн.


regis,  были обращения после статьи? :-)
PM MAIL   Вверх
regis
Дата 23.11.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Были, конечно. Посещаемость сайта возросла очень здорово.

(Кстати, ссылка, которая сверху, похоже устарела: на http://mycomputer.ua/issuetoc/ уже оглавление следующего номера лежит. А 47-й, наверное, теперь где-нибудь в архиве?)


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
cleg
Дата 23.11.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.9.2006

Репутация: 1
Всего: 3



через пару недель статью выложат на сайте. и на главной странице МК ссылка будет.

PM MAIL   Вверх
cherep
Дата 1.12.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 11.1.2006
Где: Москва

Репутация: нет
Всего: 4



Цитата

Кстати, насчет PHP: я вообще не думал о том, как можно было б использовать AWL на сервере -- пока это на 100% клиентская технология. (Хотя, конечно, одно другому не мешает.)


А как же "Alternative Web Language"??

Немного посмотрел на язык, даже запускал программы. Сразу скажу - немного испугал синтаксис - страшненький, по-моему, хотя кому-как smile
Но, автору респект за упорство и проделанную работу, имеющую результатом вполне работоспособный язык.

Мне вообще новые языки интересны чисто с практической точки зрения, по этому я смотрю на них прежде всего в таких разрезах:

1) На что нацелен язык, т.е. в какой области применения позиционируется
2) Синтаксис языка, т.е. желательна его понятность, простота и синтаксическая чистота (особенно если это язык общего назначения) - это прямым образом отобразится на его распространенности, поскольку "встречают по одежке".
3) Чем он отличается от нынесуществующих, и какова в нем изюминка, чем он лучше их и соответственно какой смысл выбрать именно его, а не что нибуть-другое, ведь очевидно, что выбирать новую еще не окрепшую технологию - это всегда большой риск.

Можно ли прокомментировать по этим пунктам?

Это сообщение отредактировал(а) cherep - 1.12.2006, 17:13
PM MAIL WWW ICQ   Вверх
regis
Дата 4.12.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7




Цитата
А как же "Alternative Web Language"??


Именно так. Просто, пока я прикидываю перспективы AWL как исключительно клиентской Web-технологии (если так понятнее – как альтернативу JavaScript/Flash/SVG/XHTML, а не ASP/PHP/SSI и т.д.). Конечно, если бы еще AWL имелся на сервере, причем серверные компоненты гладко и без швов интегрировались с клиентскими – это было б просто замечательно. Но пока я об этом даже не думаю: т.к. прежде, чем всерьез планировать это, надо иметь более четкое представление о собственной функциональности AWL клиента.

Цитата
Немного посмотрел на язык, даже запускал программы. Сразу скажу - немного испугал  синтаксис - страшненький, по-моему, хотя кому-как 


Во-первых, на самом деле синтаксис не такой уж страшный ;) Впрочем, если есть конкретные идеи, что можно улучшить – предлагайте, я слушаю.
Во-вторых, что более важно, синтаксис очень вариантный. В AWL действительно уйма операций -- но практически все допускают функциональную запись как альтернативу "операторной" (семантически, никакой разницы нет). Т.е. не нравятся условные операции в виде a ? b : c -- пишите if (a, b, c); не нравятся циклы в виде a ?? b -- пишите while (a, b) или даже while (a) :: b ну и так далее.
(В опубликованных примерах, действительно, в основном используется «операторный» синтаксис, т.к. он мне нравится своей компактностью. Но я свои вкусы никому не навязываю.)

Цитата
Но, автору респект за упорство и проделанную работу, имеющую результатом вполне  работоспособный язык.


Спасибо.

Цитата
Мне вообще новые языки интересны чисто с практической точки зрения, по этому я смотрю на  них прежде всего в таких разрезах:

1) На что нацелен язык, т.е. в какой области применения позиционируется
Во-первых, как Alternative Web Language (клиентскую web-технологию). В принципе, в AWL реализуемо будет все то, для чего сейчас используются HTML/CSS (форматирование гипертекста, стилевая разметка и т.п.), Javascript (интерактивные компоненты и взаимодействие с пользователем) и ActionScript/SVG (векторная графика и анимация). Скоро будет на сайте небольшой проект того, как это могло бы выглядеть в реальной жизни.

Во-вторых, просто в качестве вполне самостоятельного переносимого скрипт языка.

В-третьих, возможно, как встраиваемый скрипт-язык для больших систем (наподобие Lua).

Цитата
2) Синтаксис языка, т.е. желательна его понятность, простота и синтаксическая чистота  (особенно если это язык общего назначения) - это прямым образом отобразится на его  распространенности, поскольку "встречают по одежке".


Согласен, добавлю от себя, что любой синтаксис – это некий компромисс между практичностью (которая требует, например, использовать арифметические операции с привычной системой приоритетов), и, как вы говорите, «синтаксической чистотой» (самый «чистый» синтаксис из возможных в LISP – вся программа состоит из атомов и списков – только практичен ли он?) AWL как раз хорош тем, что позволяет во многих ситуациях выбрать синтаксис по вкусу.

Цитата
3) Чем он отличается от нынесуществующих, и какова в нем изюминка, чем он лучше их и  соответственно какой смысл выбрать именно его, а не что нибуть-другое, ведь очевидно, что  выбирать новую еще не окрепшую технологию - это всегда большой риск.


Сравнивать со всеми существующими языками будет очень долго. ;)
Для примера, можно взять Perl, Python и Ruby. (Сразу скажу, что из этой тройки я хорошо знаком только с Perl, насчет остальных языков могу и ошибаться.)

Синтаксис: если вам не нравится AWL, то что вы скажете о Perl ;) ?
Нет, про сам язык ничего плохого сказать не могу, но все-таки синтаксис… Особенно явные анахронизмы, оставшиеся от юниксовских оболочек и AWK: переменные с сигилами, barewords, интерполяция в строках, замечательные имена системных переменных типа $% или $:. (Многое из Perl-синтаксиса унаследовано в Ruby, что последний не красит.)
Вот в Python синтаксис проще и логичней – но то, что слишком большую роль в нем играют отступы и концы строк, мне кажется изрядным недостатком.

Вообще, то что в AWL нет ключевых слов, как таковых, я считаю большой удачей. Есть только стандартные функторы. Собственно синтаксис языка менять нельзя, но определять новые функторы (фактически, переименовывать старые) можно сколько угодно. Кстати, AWL полностью интернационален: хотя имена стандартных функторов имеют англоязычную основу -- определите, скажем, русскоязычные синонимы для них, и получится русский AWL.

В отличие от AWL, Perl вообще неспособен работать интерактивно (Python может, насчет Ruby не знаю).

Далее, в AWL последовательно реализован «принцип эквивалентности кода и данных». Могу ошибаться, но, по-моему, ни в одном из рассматриваемых выше языков этого нет. Соответственно, невозможны напрямую такие вещи, как «ленивое» присваивание или передача параметров.

Реализация ООП в Perl и Python мне кажется не слишком удачной. Особенно в Perl, где объекты, фактически, являются просто хэшами, которым придан «объектный» вид. Вот в Ruby с ООП хорошо (даже слишком: «чисто объектный» подход, где все функции является методами, мне не нравится).

В отличие от AWL, ни в одном из рассматриваемых языков нет многомерных массивов. (Можно, конечно, создать массив ссылок на массивы и т.п. --  но полноценным многомерным массивам это не замена, затрудняет реализацию таких операций, как реструктурирование, транспонирование, итерация по любому измерению и т.п. -- в AWL всего этого пока нет, но планируется).

Реализация ассоциативных массивов в AWL существенно лучше, чем в Perl, т.к. допускает произвольный тип ключей.

Наконец, учтите встроенные графические возможности. Конечно, к любому из перечисленных языков можно прикрутить внешнюю графическую библиотеку, вроде Tk, wxWidgets или Qt. Но в результате получается нечто достаточно монстрообразное, и не очень пригодное для использования на компьютерах малой мощности. Ну а AWL с полноценной графической подсистемой вполне уместится даже в слабеньком сотовом телефоне -- во всяком случае, надеюсь на это.

Собственно, пока все. Если есть еще вопросы -- задавайте.


Это сообщение отредактировал(а) regis - 4.12.2006, 11:49
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 5.12.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Кстати, на сайте -- обновление. Выложен актуальный список всех функторов языка, с перекрестными ссылками и т.п. Только на английском, но надеюсь, что это не препятствие.


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Artemios
Дата 5.12.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Цитата(regis @  4.12.2006,  11:46 Найти цитируемый пост)
В отличие от AWL, ни в одном из рассматриваемых языков нет многомерных массивов<...>
затрудняет реализацию таких операций, как реструктурирование, транспонирование, итерация по любому измерению и т.п.

В Python-е numarray:
Цитата
Using numarray, it is possible to write many efficient numerical data processing applications directly in Python without using any C, C++ or Fortran code<...>
numarray is efficient for large arrays (>20,000 elements)<...>
numarray currently has ports of Numeric packages for linear algebra, random numbers, and fourier transforms.

и Numpy:
Цитата
# a powerful N-dimensional array object
# sophisticated (broadcasting) functions
# basic linear algebra functions
# basic Fourier transforms
# sophisticated random number capabilities


Все за счет расширяемости языка. Расширяемость бы и AWL очень пригодилась -- не мешает об этом все-таки подумать.

Цитата(regis @  4.12.2006,  11:46 Найти цитируемый пост)
Реализация ассоциативных массивов в AWL существенно лучше, чем в Perl, т.к. допускает произвольный тип ключей.

как и в Питоне -- dict.

Цитата(regis @  4.12.2006,  11:46 Найти цитируемый пост)
Конечно, к любому из перечисленных языков можно прикрутить внешнюю графическую библиотеку, вроде Tk, wxWidgets или Qt. Но в результате получается нечто достаточно монстрообразное

Для питона, опять же, монстрообразность проявляется только при сборке в Windows независимого от интерпретатора и библиотек приложения. Для *nix библиотеки родные. Плюс такого подхода -- кроссплатформенность.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
regis
Дата 8.12.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата
В Python-е numarray:
и Numpy:


Хорошие расширения, только хочу заметить, что поддерживаются исключительно числовые массивы. В AWL тип элементов может быть любым.

Цитата
Все за счет расширяемости языка. Расширяемость бы и AWL очень пригодилась -- не мешает об этом все-таки подумать.


Так собственно я об этом думаю. Как опубликую исходники, все увидят, что язык расширяется очень легко.

Цитата
Цитата(regis @  4.12.2006,  11:46 Найти цитируемый пост)
Реализация ассоциативных массивов в AWL существенно лучше, чем в Perl, т.к. допускает произвольный тип ключей.

как и в Питоне -- dict.


В Питоне есть, я знаю.

Цитата
Цитата(regis @  4.12.2006,  11:46 Найти цитируемый пост)
Конечно, к любому из перечисленных языков можно прикрутить внешнюю графическую библиотеку, вроде Tk, wxWidgets или Qt. Но в результате получается нечто достаточно монстрообразное

Для питона, опять же, монстрообразность проявляется только при сборке в Windows независимого от интерпретатора и библиотек приложения. Для *nix библиотеки родные. Плюс такого подхода -- кроссплатформенность.


Говоря о монстрообразности, я имел в виду не собственно размер исполняемого файла: понятно, что при использовании внешних библиотек он будет намного меньше -- но сам-то код из них никуда не денется. Так что, ни память, ни процессорные ресурсы не уменьшатся от того, что библиотеки разделяемые.

Добавлено @ 13:33 
Кстати, раз уж мы говорим о графических возможностях...

Раз "низкоуровневая" оконная графика для AWL уже есть, пора подумать о реализации более высокоуровневым вещей, в первую очередь простых элементов управления: кнопки разных типов, поля ввода, списки и т.п. Тут, как я понимаю, возможны два подхода.

Первый (Java + AWT, JavaScript и Web): использовать "родные" для оконной среды элементы управления.

Второй (Java+Swing, Perl + Prima, TCL + Tk): реализовывать самому, вручную рисовать и обрабатывать события клавиатуры и мыши.

Первый подход, очевидно, проще, (и скорее всего, эффективнее) но системно-зависим. Второй подход потребует куда больше труда. Зато: полная переносимость, все элементы управления выглядят одинаково под любой платформой, проигрыш в производительности, хоть и есть, но незначительный (когда я увидел Prima-приложения под Perl, было трудно поверить, что все элементы управления отрисовываются Perl-кодом).

Хотел бы знать ваше мнение, какой подход лучше, и вообще что стоит брать за концептуальную основу. Взаимодействие виджетов, например, очень изящно в Qt реализовано (сигналы + слоты), хотелось бы в AWL иметь нечто подобное... В общем, буду рад идеям.



Это сообщение отредактировал(а) regis - 8.12.2006, 13:23
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 28.12.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



На сайте есть серьезные обновления.

- Выложена новая версия мануала в HTML/PDF. Наконец-то более-менее внятно документированы классы, объекты, виртуальные функции (эти главы еще будут дорабатываться).

- И еще один новый документ -- AWL-graphics.html -- более-менее внятно описывает то, как в среде AWL работает графика. Это особенно советую почитать. Как мне кажется, графической системы, построенной на подобной идеологии, ни в одном из распространенных языков нет. (Даже странно -- преимущества, на мой взгляд, вполне очевидны...)

Ну вот пока и все. Лично мне кажется, что за прошедший год удалось кое-чего реального добиться. ;) Надеюсь, что в следующем удастся добиться намного больше!

С наступающим всех!

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 19.1.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Кстати, на сайте, наконец-то, выложена моя многострадальная статья "Ошибка тысячелетия". Те, кто ее не читал в свое время, теперь имеют возможность прочесть.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 1.2.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Сегодня выложил новую версию интерпретатора (0.5.1)!

http://awl-project.narod.ru/awl-000501.zip

И в разделе "Примеры" на сайте (http://awl-project.narod.ru/awl-examp.htm) тоже имеется кое-что новенькое...


Это сообщение отредактировал(а) regis - 1.2.2007, 17:10
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 21.3.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Есть идея добавить материал про AWL, в англоязычную/русскоязычную Wikipedia. Кто-нибудь здесь имеет опыт активной работы над Википедией?

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 6.4.2007, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Жми http://ru.wikipedia.org/wiki/AWL , там жми "Создать новую страницу", пиши. Вёрстка элементарна, , всё что между == == это заголовок (количество = определяют уровень), блок текста отделённый пробелами (indent) это код. Там же ссылка на песочницу, где можно опробовать вёрстку. Пусть по началу не красиво, как только появиться, найдётся куча народу что поправят (я поправлю).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 6.4.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Спасибо! Но кое-что я уже сотворил самостоятельно:

http://en.wikipedia.org/wiki/AWL_programming_language

Не судите строго -- это пока только first attempt. На следующей неделе планирую добавить еще раздел-другой, прежде всего про графику и верстку документов.
Комментарии, идеи и исправления моего English (который, боюсь, far from perfect) приветствуются...

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 23.4.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Новая версия AWL -- 0.5.3.

Самое существенное, что в ней реализовано: базисные средства работы с метадокументами, реализующими форматирование и вывод текста.
Несколько примеров того, как это работает, я тоже выложил; см. в самом конце http://awl-project.narod.ru/awl_examp_RU.htm



Это сообщение отредактировал(а) regis - 23.4.2007, 13:55
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 23.4.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата
Being a weakly typed language, AWL requires no type declarations...

Немного не точно. С типами есть два свойства:
  • динамичные (duck typing) и статичные
  • строгая и не строгая типизация
Первое определяет является ли указание типа обязательным (статичные) или отслеживается транслятором (динамичные). Второе допускает не явное преобразование типов (не строгая, т.е. строки в числа и т.п) или нет (строгая, явное конвертирование необходимо). В таком свете AWL будет языком с динамичными типами и не строгой типизацией если быть точным smile

Отсутствие запятых в списке аргументов функции сбивает с толку, особенно осознавая что при вызове запятые таки ставим. ИМХО это ухудшает читабельность.

Код
<: ["\t#" n ": " from " => " to "\n"];

Такая запись просто угнетает. Здесь же не конкатенация, а собирается список, который затем пугающего вида "<:" печатается в консоль? ИМХО как то это не эффективно со списком выглядит. Лучше сделать явный оператор конкатенации строк (уже не помню был такой у тебя или нет...), отличный от арифметического сложения.

Вижу активное использование рекурсии, но на сколько эффективно выполнены вызовы? Заменяет ли компиллер простые вызовы inline вставками кода? tail-recursion оптимизации? Иначе будет тормозить...

Цитата
One unusual feature of AWL object system is a temporary class-instance binding

Что имелось в виду? То что свойство при каждом обращении ищется вновь и вновь в run-time'е? Так это просто (если объект хештаблицей реализовать,  большинство скриптовых движков такие) и не эффективно по сравнению высчитыванием смещения на момент трансляции.

Чего я ещё не вижу это хорошего синтаксиса, уж больно он страшен в нынешнем виде. Также хочется быть кратким, следовательно должно быть много syntatic sugar. К примеру (язык от балды):

Код
//File.reader - открывает файл как поток байтов и возвращает его в read only режиме
//поток имеет итератор, можно задать размер буффера если читаем блоком, а не по символьно
blocks = File.reader("some_bin.file").iterator(1024);

//заметим что файл будет читаться в процессе итерирования, исключения bubble'ятся наверх
//connection это объект RsyncConnection, отсылающий инфу согласно rsync протоколу, просто для примера
//конструкция [ exp for var in list ] из Python'a
connection.send([(some_rolling_checksum(string), md5(string)) for block in blocks]);

В две строчки зачитали файл и просчитали хеши для каждого блока, затем отправили серверу на поиск совпадений. Если отбросить API, то видим очень выразительную [for in] конструкцию. Вот что то подобное хотелось бы в AWL.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
setq
Дата 23.4.2007, 22:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Sardar @  23.4.2007,  20:07 Найти цитируемый пост)
ИМХО как то это не эффективно со списком выглядит. Лучше сделать явный оператор конкатенации строк...


Хммммммммм. А почему конкатенация эффективнее в данном случае?



Цитата(Sardar @  23.4.2007,  20:07 Найти цитируемый пост)
Чего я ещё не вижу это хорошего синтаксиса, уж больно он страшен в нынешнем виде.


Угу. +1
  Вверх
Sardar
Дата 23.4.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(setq @  23.4.2007,  21:53 Найти цитируемый пост)
м. А почему конкатенация эффективнее в данном случае?

Чисто субъективное мнение, "выглядит" не эффективно в плане создания списка smile  Хотя строка после конкатенации тоже обычно связанный список (копировать символы в новую глупо и расточительно). Тут скорее вопрос в читабельности и в личных предубеждениях.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 26.4.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Sardar, прежде всего, спасибо! Вижу, что статью Вы посмотрели. ;)

Цитата

Цитата
Being a weakly typed language, AWL requires no type declarations...

Немного не точно. С типами есть два свойства:


  • динамичные (duck typing) и статичные

  • строгая и не строгая типизация

Первое определяет является ли указание типа обязательным (статичные) или отслеживается транслятором (динамичные). Второе допускает не явное преобразование типов (не строгая, т.е. строки в числа и т.п) или нет (строгая, явное конвертирование необходимо). В таком свете AWL будет языком с динамичными типами и не строгой типизацией если быть точным smile


Все совершенно правильно -- в AWL: 1) вообще нет деклараций типов, 2) автоматические преобразования между скалярными типами (напр. числа <-> строки).
Но вот как аккуратно выразить эту мысль на английском?

Цитата

Отсутствие запятых в списке аргументов функции сбивает с толку, особенно осознавая что при вызове запятые таки ставим. ИМХО это ухудшает читабельность.


Для этого есть весьма простой резон: в списках параметров/переменных у функторов/классов имеются только идентификаторы, поэтому от запятых можно воздержаться. В то время как в вызовах синтаксис не столь однозначен.
Впрочем, если в списке есть только синтаксически-атомарные выражения (литералы, переменные...), то тоже вполне можно обойтись без запятых. Но для обрамления списка потребуется использовать квадратные скобки. Пример:

Код


! myfunc (X Y Z) = ....; ` что-то делает `

myfunc (A*2, B*3, C*4);
myfunc ([A B C]);        ` равносильно myfunc (A, B, C) `
myfunc ([10 20 30]);    ` равносильно myfunc (10, 20, 30) `



Цитата

Код
<: ["\t#" n ": " from " => " to "\n"];

Такая запись просто угнетает. Здесь же не конкатенация, а собирается список, который затем пугающего вида "<:" печатается в консоль?[/code]


Именно так: <: - это оператор вывода, причем если первый операнд является потоком стандартного вывода (это не обязательно консоль!), он может опускаться. Что же тут такого угнетающего? IMHO, читается получше, чем операции ввода-вывода в C++ типа

cout << xx << "," << yy << "," << zz;

Но вот если б в C++ еще добавили отдельные операции ввода/вывода (перегрузка << и >> явно была не самой удачной идеей), и еще разрешили опускать первый операнд, когда он самоочевиден -- то получилось бы примерно то же, что и в AWL.
Теперь по поводу списков:

Цитата

ИМХО как то это не эффективно со списком выглядит.


Нет, как раз со списком будет самый эффективный вариант. Если вы думаете, что вычисление списка непременно создает его копию -- это, конечно, неверно. При выполнении приведенного кода *вообще* никаких операций выделения памяти не будет. (Кстати, в AWL начиная примерно с 5.0.1 работа со списками оптимизирована довольно хорошо: по умолчанию списки никогда не копируются без нужды. Если явно нужна копия списка List, примените l_copy(List)).

Цитата

Лучше сделать явный оператор конкатенации строк (уже не помню был такой у тебя или нет...), отличный от арифметического сложения.


Разумеется, есть такой! A +$ B (или s_cat(A,B)) -- конкатенация A и B, рассматриваемых как строки. С его помощью этот код можно переписать так:

Код
<: ("\t#" +$ n +$ ": " +$ from +$ " => " +$ to +$ "\n");


Но это как раз НЕ будет эффективным вариантом! Нет смысла создавать новую строку, только чтобы вывести ее и немедленно уничтожить.

Цитата

Вижу активное использование рекурсии, но на сколько эффективно выполнены вызовы?


Как я понял, вы про пример "Ханойские башни"? Ну, здесь в принципе трудно обойтись без рекурсии, алгоритм такой.

Цитата

Заменяет ли компиллер простые вызовы inline вставками кода?


Для этого, прежде всего, нужно заложить в компилер какой-то критерий того, что является "простым" вызовом, и что -- нет. Это далеко не очевидно.
В принципе, здесь стоит ориентироваться на то, как сделано в Scheme. (Там кроме собственно "функций" допустимы "макросы" -- по сути, инлайн функции, код которых подставляется при компиляции. Сделано все это очень культурно. Достаточно сказать, что немало штатных средств языка является такими макросами, подставляемыми незаметно для пользователя. Сделать похожий механизм в AWL -- очень соблазнительно.
Но, в любом случае, это должно быть явным, без самодеятельности компилятора.)

Цитата

 tail-recursion оптимизации? Иначе будет тормозить...


Опять-таки хорошая идея, но нет пока. Вообще, оптимизировать стоило бы многое, и хвостовая рекурсия все-таки не самая первая в этом списке.
(Оптимизация хвостовой рекурсии жизненно важна в том же Scheme: там даже обычнные циклы через рекурсию реализуются, и без оптимизации это было б медленновато. Но в AWL реализовано немало явных итераторов, поэтому это далеко не так критично.)

Цитата

Цитата
One unusual feature of AWL object system is a temporary class-instance binding

Что имелось в виду? То что свойство при каждом обращении ищется вновь и вновь в run-time'е? Так это просто (если объект хештаблицей реализовать,  большинство скриптовых движков такие) и не эффективно по сравнению высчитыванием смещения на момент трансляции.


Нет, имеется в виду совершенно другое. Попробую объяснить этот механизм на пальцах.

В большинстве ОО-языков операции над объектами реализуются через методы класса. С технической точки зрения, что метод имеет один неявный аргумент (ссылку на объект) вдобавок ко всем прочим, и так получает доступ к этому объекту. Другими словами, связывание "класс-экземпляр" происходит при вызове методов (а время его действия ограничено времением выполнения метода). В AWL все не так.

Упомянутое связывание реализуется отдельной операцией:

Код

    object.expr


формально означает "для object (как текущего экземпляра своего класса) вычислить/выполнить expr". В частности: object.component позволяет обратиться к компоненте object; object.method (...) -- вызвать метод применительно к object и т.д., как в большинстве ОО-языков. НО: выражение expr может быть *произвольным* (т.е. включать обращения к разным компонентам, вызовы разных методов и т.п.) В сущности, операция '.' в AWL работает примерно как with в Паскале (в C++ или Java аналогов нет).

Как все это правильно назвать по английски -- не знаю. Наверно, термин надо придумывать: точных аналогов именно такой ОО-модели, вроде, нигде не встречается. А жаль!

Цитата

Чего я ещё не вижу это хорошего синтаксиса, уж больно он страшен в нынешнем виде. Также хочется быть кратким, следовательно должно быть много syntatic sugar.


А вот здесь не вижу конкретики: что именно и как стоит улучшить. ;)
Ничего особенно страшного в синтаксисе нет. Любой незнакомый язык поначалу производит пугающее впечатление, но в процессе обучения это обычно проходит. ;)
И насчет синтаксического сахара замечание странноватое: 90% синтаксиса AWL (практически все унарные-бинарные операции с их приоритетами и т.п.) представляет собой как раз тот самый сахар. Без него AWL код представлял бы собой практически чистый аналог LISP (разве что там сплошные вложенные списки, а в AWL была бы смесь вложенных списков, вызовов функторов и блоков). Внутреннее представление программы именно таким и является. Впрочем, никто не мешает совсем забыть про "сахар", и программировать именно в таком стиле -- просто это, ИМХО, непрактично.

Цитата


К примеру (язык от балды):

Цитата

Код
//File.reader - открывает файл как поток байтов и возвращает его в read only режиме
//поток имеет итератор, можно задать размер буффера если читаем блоком, а не по символьно
blocks = File.reader("some_bin.file").iterator(1024);

//заметим что файл будет читаться в процессе итерирования, исключения bubble'ятся наверх
//connection это объект RsyncConnection, отсылающий инфу согласно rsync протоколу, просто для примера
//конструкция [ exp for var in list ] из Python'a
connection.send([(some_rolling_checksum(string), md5(string)) for block in blocks]);

В две строчки зачитали файл и просчитали хеши для каждого блока, затем отправили серверу на поиск совпадений. Если отбросить API, то видим очень выразительную [for in] конструкцию. Вот что то подобное хотелось бы в AWL.



В этом примере я не совсем понял, что делает iterator(1024), и какая связь между переменной block и телом цикла (она там вроде не используется?) Но, в общем, все это тривиально переводится на AWL и будет выглядеть примерно так:

Код

blocks = File.reader ("some_bin.file");
l_loop (block, blocks,
    connection.send (some_rolling_checksum(string), md5(string)));


Как видите, разница невелика.
Понятно, здесь предполагается что функторы some_rolling_checksum и md5 определены где-то, а к объекту File применим "метод" reader.
А итератор l_loop -- и есть аналог для for ... in ...
Подробнее здесь:
http://awl-project.narod.ru/func_main.html#func_l_loop


Это сообщение отредактировал(а) regis - 26.4.2007, 10:57
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 26.4.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(regis @  26.4.2007,  09:50 Найти цитируемый пост)
Для этого есть весьма простой резон: в списках параметров/переменных у функторов/классов имеются только идентификаторы, поэтому от запятых можно воздержаться. В то время как в вызовах синтаксис не столь однозначен.

Парсер вполне способен и ключевые слова отличать по контексту, тогда они станут доступны как идентификаторы (по моему даже старый фортран был такой), но это убивает читабельность. Скобки, разделители инструкций и прочее применяется именно для повышения читабельности, хотя парсеру они и не всегда нужны.

Интересно как передать функции список, так что бы он не развернулся на параметры? Не стоило ли сделать для этого отдельный оператор как в Python'е?


Цитата(regis @  26.4.2007,  09:50 Найти цитируемый пост)
Что же тут такого угнетающего?

А почему нельзя было просто print или echo? Как сторонний человек без предрассудков по языкам, "<:" воспринимается гораздо хуже чем слово smile
А вообще print должно быть некой общей API функцией пишущей в любой поток (поточное, не блокирующее IO тоже нужно). Как часть языка оно смотрится не очень...

Цитата(regis @  26.4.2007,  09:50 Найти цитируемый пост)
С его помощью этот код можно переписать так

Чем больше смотрю на синтаксис, тем больше понимаю что это шифровка smile
Интересно узнать как реализованы списки. Быть может к лету напишу простейший транслятор AWL -> Java.

Цитата(regis @  26.4.2007,  09:50 Найти цитируемый пост)
Но, в любом случае, это должно быть явным, без самодеятельности компилятора

Контролируемые макросы это хорошая вещь, но и отслеживание вызова простой функции не проблема. Я не знаю как реализована AWL VM, но представим что:
  • компилер транслирует код в модульные файлы (классы, что угодно)
  • модульный файл содержит описание структур и код функций, где каждая также описывает все вызываемые функции и другую инфу (это полезно для разного рода анализаторов).
  • перед выполнением модуль (частично) подгружается, для каждой функции поднимаются вызываемые функции. Если вызываемая функция достаточно мала, то она вставляется как код, а не вызов.
Компилер пусть снабжает функции аннотациями, контролирующими процесс линковки. Например к вызову может добавить тег try-inline, если вызываемая функция оказывалась годной для вставки. Тогда на момент линковки загрузчик может следовать советам компилера и пробовать только помеченные вызовы, тем самым поднимая скорость загрузки. Естественно в памяти всей этой метаинфы уже нет, загруженные модули слинкованы на прямую.

Цитата(regis @  26.4.2007,  09:50 Найти цитируемый пост)
В AWL все не так

Очень смахивает JavaScript и по моему Objective-C. В рантайме искать свойства/методы объекта просто, но накладно. У тебя получилось реализовать это без постоянного поиска при каждом обращении к свойству (прямая линковка)?


Хорошо что развиваешь проект. Не буду больше попусту критиковать, попробую в ближайшие пару недель разобраться с синтаксисом и внутренним устройством.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 28.4.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата
Парсер вполне способен и ключевые слова отличать по контексту, тогда они станут доступны как идентификаторы (по моему даже старый фортран был такой), но это убивает читабельность. Скобки, разделители инструкций и прочее применяется именно для повышения читабельности, хотя парсеру они и не всегда нужны.


ИМХО, в списках параметров запятые не убавят читабельности, и не прибавят.

Цитата
Интересно как передать функции список, так что бы он не развернулся на параметры? Не стоило ли сделать для этого отдельный оператор как в Python'е?


Не знаю, как в Питоне, а в AWL все намного проще:

Код

! myfunc (L) = L[0] + L[1] + L[2];   ` например... `

myfunc (10, 20, 30);   `вернет 60 `


В данном случае список не "развертывается", потому что развертываться некуда: параметр у функтора только один, он и получит все значения. И если параметр не один, но список переданных значений длиннее списка параметров -- последний получит все "неприсвоенный" хвост списка. Кстати, присваивания происходят так же.

Цитата
Цитата(regis @  26.4.2007,  09:50 Найти цитируемый пост)
Что же тут такого угнетающего?

А почему нельзя было просто print или echo? Как сторонний человек без предрассудков по языкам, "<:" воспринимается гораздо хуже чем слово smile


Ну, во первых, как всегда, Output <: (a, b, c) -- это лишь синоним для f_put (Output, a, b, c). Второй синтаксис использовать никто не мешает.
Опять-таки, никто не мешает определить свои функторы, под названием print или echo или как-нибудь еще (а фэны Паскаля или Дельфи захотят, чтобы были write и writeln ;) ) Пожалуйста, пишем следующее:

! print (L) = <: L;

или, скажем:

! write(L) = <: L;
! writeln (L) = <: (L, "\n");

и пользуемся на здоровье...

Цитата
А вообще print должно быть некой общей API функцией пишущей в любой поток (поточное, не блокирующее IO тоже нужно). Как часть языка оно смотрится не очень...


Функтор f_put и пишет в любой поток, который задается его первым аргументом (Просто, если первый аргумент -- undef, то предполагается стандартный вывод). И понятие "часть языка" в AWL довольно условно (можно сказать даже что стандартная математика или присваивания в AWL -- *не часть языка*: стандартные функторы, и только.)

Цитата
Чем больше смотрю на синтаксис, тем больше понимаю что это шифровка smile 


Кстати, при нормальной раскраске код будет восприниматься намного проще. А написать лексический колоризатор для AWL-кода -- это пара пустяков, намного проще, чем, скажем, для Perl.

Цитата
Интересно узнать как реализованы списки.


Очень просто:

Код

struct X_List {
    Expr *first;    // head of list
    Expr *next;   // tail of list
    };


Понятно, что реальное определение X_List длиннее, но суть та же. ;)

Цитата
Быть может к лету напишу простейший транслятор AWL -> Java. 


Кстати, если вы всерьез хотите этим заняться, я готов прислать все исходники.

Цитата
Цитата(regis @  26.4.2007,  09:50 Найти цитируемый пост)
В AWL все не так

Очень смахивает JavaScript и по моему Objective-C.


Про Obj-C я практически ничего не знаю, так что судить не берусь. В JavaScript -- так точно нельзя.

Цитата
В рантайме искать свойства/методы объекта просто, но накладно. У тебя получилось реализовать это без постоянного поиска при каждом обращении к свойству (прямая линковка)?


Именно так и реализовано. Именно поэтому, кстати, обращение к внутренностям класса извне класса должно быть квалифицированным (т.е. должно предваряться Class!!). 

Цитата
Хорошо что развиваешь проект. Не буду больше попусту критиковать, попробую в ближайшие пару недель разобраться с синтаксисом и внутренним устройством.


"С внутренним устройством" без исходников точно не разберетесь. ;)


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Sardar
Дата 4.5.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(regis @  28.4.2007,  11:05 Найти цитируемый пост)
ИМХО, в списках параметров запятые не убавят читабельности, и не прибавят

Сужу субьективно конечно, но без запятых на список это не похоже. Особенно когда в списке строки, не разобрать где что.

Цитата(regis @  28.4.2007,  11:05 Найти цитируемый пост)
Именно так и реализовано. Именно поэтому, кстати, обращение к внутренностям класса извне класса должно быть квалифицированным (т.е. должно предваряться Class!!

Кстати, это самая не приятная вещь в языке, постоянно указывать имя класса с методом. Полное ощущение что вызываем просто фукцию с более длинным именем и передаём ей просто структуру. В то время как помним что ООП это в первую очередь связывание данных (состояния) с кодом.



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
regis
Дата 11.5.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



[quote]
Цитата(regis @  28.4.2007,  11:05 Найти цитируемый пост)
ИМХО, в списках параметров запятые не убавят читабельности, и не прибавят

Сужу субьективно конечно, но без запятых на список это не похоже. Особенно когда в списке строки, не разобрать где что.[quote]

Отчасти согласен: когда в списке данные разного типа, запись с квадратными скобками действительно может выглядеть не очень. Т.е. лучше этого избегать.

Цитата

Цитата(regis @  28.4.2007,  11:05 Найти цитируемый пост)
Именно так и реализовано. Именно поэтому, кстати, обращение к внутренностям класса извне класса должно быть квалифицированным (т.е. должно предваряться Class!!

Кстати, это самая не приятная вещь в языке, постоянно указывать имя класса с методом. Полное ощущение что вызываем просто фукцию с более длинным именем и передаём ей просто структуру. В то время как помним что ООП это в первую очередь связывание данных (состояния) с кодом.


Ну, фактически в C++ (и вроде в Java) все также. Тоже извне класса надо обращаться по квалифицированному имени, например:

MyClass::a + MyClass::b + MyClass::c

Замечу, что в обоих языках не нужды ставить этот оператор постоянно, т.к. языки -- с явной типизацией, и по типу пекременной (или результата  выражения), компилятор сам знает, куда обращаться. В AWL, увы, так нельзя (пока более строгой типизации нет).

Зато в AWL есть другое: оператор квалификации применим не  только к отдельным идентификаторам, но и к выражению в целом. Т.е. в выпеприведенном случае можно написать что-то вроде:

MyClass!! (a + b + c)

и этого вполне достаточно. Сложность "квалифицированного" выражения не ограничивается -- это может быть и целый блок, т.е. можно просто написать

MyClass!! { expr1, expr2 ..... exprN }

имея в блоке доступ к компонентам и функторам-методам MyClass без лишней головной боли.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 21.6.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Больше 3000 просмотров темы! Неплохо...

Ну вот, выложил я новую версию AWL: 0.5.4!

http://awl-project.narod.ru/awl-000504.zip

(В архиве есть и документация.)

Основные отличия от предыдущих:

- поддержка (пока очень экспериментальная) Unicode строк.

- поддержка (еще более экспериментальная) регулярных выражений (patterns).
  (См. в functor_index все функторы с именами типа rx_*)

- Исправлено несколько старых ошибок. Некоторые ситуации новый интерпретатор
обрабатывает строже, чем раньше (если при выполнении старого кода
появляются сообщения об ошибках, большинство из них можно игнорировать.
В любом случае, скоро примеры будут существенно обновлены.


Это сообщение отредактировал(а) regis - 21.6.2007, 10:25
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 21.9.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Привет всем!

Уже неделю, как на http://awl-project.narod.ru/ выложена новая (0.5.5) версия языка, и документация. Скоро будет несколько новых примеров, возможно и manual будет обновлен.


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 12.10.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Ну, наконец-то вышел журнал "Мир ПК" октябрь'2007.
В нем есть кое-что, имеющее отношение к теме. ;)

(У статьи будет продолжение; выйдет ориентировочно в декабрьском номере.)

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
regis
Дата 29.12.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Давно не писал в эту тему. ;(

Из новостей:

- сайт http://awl-project.narod.ru обновлен. Новую версию языка (0.5.6) теперь можно скачать.
- она же есть на CD для журнала "Мир ПК", # 12/ 2007, вместе с моей статьей о методах создания оконных приложений на AWL.

Ну и, конечно, всех -- с наступающим! Желаю всего наилучшего в новом году!

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Nirvana
Дата 14.1.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 14.1.2008
Где: СССР

Репутация: -1
Всего: -1



Код

I. Нужно сделать AWL в виде модуля Apache.
II. Можно временно сделать так:
     а) Копируем awl.exe в cgi-bin
     б) В корне сайта создаем файлик .htaccess и пишем там
          AddHandler awl-parsed-html awl
          Action awl-parsed-html /cgi-bin/AWL.exe
III. Сделать возможность работать с блоками html.

PM MAIL WWW   Вверх
regis
Дата 18.1.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Nirvana, идея понятна. ( Похоже, я уже вам отвечал, почтой. )

Вот кстати: в Wiki появилась страничка, посвященная AWL, на немецком:

http://de.wikipedia.org/wiki/AWL_(Programmiersprache)

Big thx to Carlos Franke. Если кто-нибудь читает по немецки, буду рад, если он взглянет на статью
(сам я, увы, в немецком ни бум-бум).

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.3111 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.