DRAKON.SU

Текущее время: Пятница, 19 Апрель, 2024 13:11

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 12:05 

Зарегистрирован: Пятница, 06 Июль, 2012 11:40
Сообщения: 10
Здравствуйте, уважаемые участники конференции!

Узнал о ДРАКОНЕ буквально вчера, и очень заинтересовался. Прочитал книгу Паронджанова "Краткое описание", стало еще интереснее. Теперь думаю о первом практическом применении, и поскольку я погружен в веб-технологии, то интересует в первую очередь использование в вебе. Например, для создания программ на JavaScript.

Я читал в соседнем разделе форума топик об IDE, где заявлено о поддержке языка, но сам пока не пробовал. Мне не совсем ясно, что имеется ввиду - поддержка синтаксиса и процедурной части языка, или серьезная поддержка современного JavaScript, как объектного процедурно-функционального языка? И вообще, ДРАКОН умеет это делать?

То, что ДРАКОН умеет красиво программировать алгоритмы классических процедурных языков - это я уже понял.
А как применять его для объектно-ориентированных и объектных языков типа JS?
Как реализуются генерация и обработка событий?
Как реализовать варианты callbacks?

Например, рассмотрим следующий код на JS:

Код:
//Define a walk_the_DOM function that visits every
//node of the tree in HTML source order, starting
//from some given node. It invokes a function,
//passing it each node in turn. walk_the_DOM calls
//itself to process each of the child nodes.

var walk_the_DOM = function walk(node, func) {
  func(node);
  node = node.firstChild;
  while (node) {
    walk(node, func);
    node = node.nextSibling;
  }
};

// Define a getElementsByAttribute function. It
// takes an attribute name string and an optional
// matching value. It calls walk_the_DOM, passing it a
// function that looks for an attribute name in the
// node. The matching nodes are accumulated in a
// results array.

var getElementsByAttribute = function (att, value) {
  var results = [];
  walk_the_DOM(document.body, function (node) {
    var actual = node.nodeType === 1 && node.getAttribute(att);
    if (typeof actual === 'string' && (actual === value || typeof value !== 'string')) {
      results.push(node);
    }
  });
  return results;
};

Пример взят из книги Дугласа Крокфорда "JavaScript: The Good Parts", O'Reilly, 2008.

Можно ли создать схему на ДРАКОНЕ, которая бы описывала этот алгоритм и создавала такой код?

Заранее благодарю за ответы!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 13:03 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 83
Здравствуйте, Артем.

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

Если хотите попробовать, могу предложить свою программку - в режиме редактора - dal_vjaz_2,
тема "программы AB_VJAZ и DAL_VJAZ" или в режиме просмотрщика - dal_2_view в теме КУБ-СИЛУЭТ ... .

Предупреждаю сразу:
1) у меня не ДРАКОН, а более упрощенный вариант языка - структурные блок-схемы в стиле ДРАКОНа
2) програмки эти использую пока только я, да и то эпизодически, они на стадии тестирования -
поэтому хотите, берите как есть, код открыт, замечания приветствуются.
Для пробы я взял простенький скрипт-калькулятор и вставил в него служебные комментарии ДАЛВЯЗ
для языка С, что, как я понимаю, действует и для JavaScript.
После вставки комментариев скрипт запустился и работал:
Код:
/*i.1    */
<html>
<head>
<title>Калькулятор</title>
</head>
/*i.2    */
<script language="JavaScript">
<!--
// deklaracja zmiennych
var wynik=0, op=0, nowe=0, nowe2=0, done=1, oset=0, kropka, temp;


/*i.3   */

function reset(value)
{
document.form1.ekran.value = value;
wynik = 0,
op    = 0,
nowe  = 0,
nowe2 = 0;
done  = 1;
oset  = 0;
}

/*i.4  */

function wspolna(new_temp)
{
kropka = 1;
if(nowe || done) {
nowe = 0;
done = 0;
temp = new_temp;
}
for(var i=0; i<temp.length; i++) if (temp[i]=='.') kropka=0;
}
...

Конечно лучше было бы поместить срипт в отдельный файл, без html-обрамления ...

Ну, в общем, попытайтесь, может вам оно и пригодится.

Успехов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 13:13 

Зарегистрирован: Пятница, 06 Июль, 2012 11:40
Сообщения: 10
Дмитрий_ВБ

Боюсь, я не понял, как я могу использовать это. Да и как оно отвечает на мой вопрос - тоже, простите пожалуйста :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 13:18 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 83
Ну, типа, я имею в виду, что в теме "AB_VJAZ и DAL_VJAZ" есть подробное описание,
на пальцах тут не рсскажешь.
А на ваш конкретный вопрос я не ответил потому, что как я уже сказал я по JavaScript не спец.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 13:25 

Зарегистрирован: Пятница, 06 Июль, 2012 11:40
Сообщения: 10
Хочу добавить по куску кода, который в первом комменте.
Чем больше на него смотрю, тем больше убеждаюсь в необходимости ДРАКОНА.
Конечно, такой код - красив и лаконичен. Но только вчера я понял, что он ужасен для восприятия. То есть красоту можно оценить только после минут и минут медитации над таким кодом.
Согласны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 13:28 

Зарегистрирован: Пятница, 06 Июль, 2012 11:40
Сообщения: 10
Дмитрий_ВБ писал(а):
Ну, типа, я имею в виду, что в теме "AB_VJAZ и DAL_VJAZ" есть подробное описание,
на пальцах тут не рсскажешь.
А на ваш конкретный вопрос я не ответил потому, что как я уже сказал я по JavaScript не спец.


Дело в том, что в вашем коде всё обычно, процедурно. Как это на ДРАКОНЕ осуществить - вполне понятно. А вопрос мой как раз и состоит в том, как описывать наиболее интересные части JavaScript, например:

* prototypes и наследование объектов
* closures
* события
* callbacks


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 13:45 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 83
Ну, описания объектов и всякие сложные вещи можно в ДАЛВЯЗ оформить как текстовые записи -
они будут рассматриваться просто как текст, программа не будет пытаться строить из них схемы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 14:32 

Зарегистрирован: Понедельник, 09 Август, 2010 22:28
Сообщения: 128
Артем, из своего опыта web программирования могу сказать, что для данного случая одним Драконом не справишься. Этот язык позволяется хорошо описывать сложную логику, но не способен описать работу со сложными структурами данных. Для этого нужно использовать что-то другое, позволяющее визуализировать, как меняется структура данных по ходу работы программы.

Для первой функции я бы вообще Дракон не использовал. А нарисовал бы дерево HTML элементов и пояснение, как идет обход дерева в коде:

Код:
node = node.firstChild;
  while (node) {
    walk(node, func);
    node = node.nextSibling;
  }


В вашем примере мне не понравилась 2-я функция. Там в комментарии написано: "It takes an optional matching value". Однако в коде нигде явно не прописано присваивание значения по умолчанию переменной value. И только по ходу программы можно догадаться, что оно "string". Вот этот ужасный кусок:

Код:
    var actual = node.nodeType === 1 && node.getAttribute(att);
    if (typeof actual === 'string' && (actual === value || typeof value !== 'string')) {


Отвечаю на вопросы:

1. как описывать наиболее интересные prototypes и наследование объектов

На Драконе - никак. Это язык для описания алгоритмов, а не структур данных.

2. closures

Функциия, возвращающая другую функцию. Это гибрид структуры и процесса. На чистом Драконе вы сможете описать только процесс. Для описания closure как таковой придется использовать что-то дополнительно к Дракону.

3. события

Событие - это просто функция плюс условия, при котором она будет вызвана: нажатие клавиши, таймер и т.д.

4. callbacks

Функция в качестве аргумента. Аналогично: гибрид процесса и структуры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 14:48 

Зарегистрирован: Пятница, 06 Июль, 2012 11:40
Сообщения: 10
usr345

Спасибо за ответ, думаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 15:14 

Зарегистрирован: Вторник, 13 Декабрь, 2011 15:31
Сообщения: 113
Это не отвечает на Ваши вопросы, но возможно Вам оно понадобится для использования Javascript с ДРАКОН-ом. Goto in Javascript http://summerofgoto.com/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: ДРАКОН в объектной формализации
СообщениеДобавлено: Пятница, 06 Июль, 2012 19:33 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Артём Неганов писал(а):
...
Мне не совсем ясно, что имеется ввиду - поддержка синтаксиса и процедурной части языка, или серьезная поддержка современного JavaScript, как объектного процедурно-функционального языка? И вообще, ДРАКОН умеет это делать?
...
Первое - на что уже указали. И некоторая конкретика.
usr345 писал(а):
...
Для этого нужно использовать что-то другое, позволяющее визуализировать, как меняется структура данных по ходу работы программы.

Для первой функции я бы вообще Дракон не использовал. А нарисовал бы дерево HTML элементов и пояснение, как идет обход дерева в коде:

Код:
node = node.firstChild;
  while (node) {
    walk(node, func);
    node = node.nextSibling;
  }

...
Да, это уже будет спецификация программы. Подобно тому, как обсуждалось для этой статьи - см. раздел "Балансировка".
Подобная задача ставилась раньше. Вот некоторые мысли: viewtopic.php?p=72538#p72538 - м.б. поможет.

usr345 писал(а):
...
Отвечаю на вопросы:

1. как описывать наиболее интересные prototypes и наследование объектов

На Драконе - никак. Это язык для описания алгоритмов, а не структур данных.
Короче, в связке д.б. схемы типов. Допустим, такие, как здесь описано. Но также нужно как-то задать связывание данных и действий в исполнителе. Т.е. снова возвращаемся к задаче, указанной выше...
Мейер для своей системы решил задачу реализацией схемы наследования. Синтаксис и примеры можно найти в выдержке отсюда: viewtopic.php?p=72093#p72093. Решение кажется в целом оптимальным для "классовых" языков. По структуре такие схемы, конечно, не маршрутные, как импер-схемы процессов. Это или "прошитые" деревья, или сети (многосвязные графы). Их тоже можно выводить "исчислением графов".
usr345 писал(а):
...
2. closures

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

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

Функция в качестве аргумента. Аналогично: гибрид процесса и структуры.
Тут, пожалуй, как со вторым - только уже процедуру передаём как параметр.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JavaScript + ДРАКОН?
СообщениеДобавлено: Пятница, 06 Июль, 2012 19:38 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
vasili111 писал(а):
Это не отвечает на Ваши вопросы, но возможно Вам оно понадобится для использования Javascript с ДРАКОН-ом. Goto in Javascript http://summerofgoto.com/
Тогда уж и вот это: viewtopic.php?p=73061#p73061.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB