English
Студия Артемия Лебедева представляет…
parser


Последние новостиПтичкаИз раздела FAQ
[29 июня 2012]  Выпущена версия 3.4.2:

Выложенная ранее RC версия объявлена релизом.

Также обновлены все SQL драйвера (версия API осталась прежней, т.е. старые драйвера будут продолжать работать), документация, библиотеки xml (для win32 версии) и архив с конфигурационным файлом.

Полный лог изменений доступен в CVS.



[23 июня 2012]  Выпущен релиз кандидат версии 3.4.2.

Классу curl добавлено три новые опции: verbose, stderr и maxfilesize.

Добавлен конструктор ^date::today[], создающий объект типа date на 00:00:00 текущего дня.

Метод ^дата.sql-string[] теперь может принимать один из следующих строковых параметров: «datetime», «date» или «time». В зависимости от параметра вызова он возвращает дату+время, только дату или только время.

Конструктор ^file::create[...] теперь поддерживает binary формат.

Добавлен новый формат вызова конструктора ^file::create[]: ^file::create[строка или файл[;$.name[имя файла] $.mode[text|binary] $.content-type[...] $.charset[...]]].

При выполнении конструктора ^file::create[text;...;содержимое] выполняется нормализация переводов строк в «содержимом». При создании файлов binary нормализация не делается.

Методы ^file:dirname[путь], ^file:basename[путь], ^file:justname[путь] и ^file:justext[путь] теперь корректно обрабатывают пути в формате Windows.

Методы ^file:dirname[путь] и ^file:basename[путь] теперь работают как одноимённые команды *nix.

Конструктор ^file::load[...;http://...] разбирает все полученные от удалённого сервера cookies и помещает их в таблицу .cookies со столбцами name, value, expires, max-age, domain, path, httponly и secure.

Конструктор ^file::base64[закодированное;опции] и метод ^string:base64[закодированное;опции] теперь имеют опцию $.strict(true), при задании которой происходит выдача исключения, если невозможно декодирование всей закодированной строки. Без указания этой опции, как и раньше, возвращается лишь то, что было возможно декодировать.

Снижено потребление памяти при декодировании base64 строки с помощью конструктора ^file::base64[закодированное] и метода ^string:base64[закодированное].

В теле метода ^хэш.foreach обращение к некоторым методам итерируемого хэша (таким как ^хэш._count[], ^хэш._keys[], ^хэш.contains[ключ], ^хэш._at[...]) теперь не приводит к возникновению исключений «hash flocked».

Метод ^json:string[объект;опции] теперь производит поиск методов сериализации, указанных с помощью опций вида $.имя-класса[$метод] также и в родительских классах.

Метод ^json:string[объект;опции] теперь умеет сериализовывать объекты класса xdoc. Параметры преобразования объекта в строку могут быть переданы с помощью опции $.xdoc[].

Метод ^json:string[объект;опции] в качестве значений опции $.file[] в дополнение к значениям text и base64 позволяет задать значение stat, которое равносильно отсутствию опции (способ сериализации файла «по умолчанию»).

Методу ^json:string[объект;опции] теперь с помощью опции $._default[$метод] можно указать пользовательский метод, который будет вызываться для сериализации объектов всех пользовательских классов (кроме тех, для которых метод сериализации явно задан с помощью опций вида $.имя-класса[$метод]).

Методу ^json:parse[json-строка;опции] теперь с помощью опции $.array[$метод] можно указать пользовательский метод, который будет вызываться для разбора массивов.

Методу ^json:parse[json-строка;опции] теперь с помощью опции $.taint[язык преобразования] можно указать «язык», который будет присвоен всем строкам результирующего хэша.

После выполнения метода ^json:parse[json-строка;опции] в результирующем хэше все числовые значения теперь представлены в виде double (double имеет более широкий диапазон, чем используемый ранее для целых чисел int).

Расширен диапазон обрабатываемых значений методом ^math:convert[...]. Кроме этого, при возникновении переполнения (при указании очень больших чисел) теперь возникает исключение.

Появилась встроенная поддержка работы с серверами memcached, реализованная с использованием библиотеки libmemcached.

Добавлен метод ^reflection:uid[объект], возвращающий уникальный идентификатор объекта.

Добавлен метод ^reflection:delete[объект или класс;имя поля], с помощью которого можно удалить поле у указанного объекта или класса (действует аналогично ^хэш.delete[ключ], но для объектов и классов).

Добавлены методы ^reflection:method[класс или объект;имя метода] и ^reflection:field[класс или объект;имя поля] с помощью которых можно получить метод или значение поля у указанного объекта или класса.

При работе метода ^строка.match[] в кодировке UTF8 символьные классы \w и т.п. теперь также включают в себя unicode properties (раньше включали в себя только ASCII символы).

Метод ^строка.replace[...] теперь может быть вызван с двумя строковыми параметрами: «что искать» и «на что заменить». Подобный вариант вызова (как и вариант вызова, когда в таблице замен указана только одна пара для замены) дополнительно оптимизирован.

Метод ^таблица.count[] теперь поддерживает опции. При задании строкового значения columns будет возвращено количество столбцов в именованной таблице (равносильно следующему: $c[^таблица.columns[]]^c.count[]), cells — будет возвращено количество ячеек в текущей строке таблицы, rows — метод вернёт количество строк в таблице (равносильно вызову без параметров).

Метод ^таблица.select(выражение)[опции] теперь может принимать отрицательные значения в опции $.offset. В этом случае отсчёт целевой строки ведётся с конца таблицы и значение -1 соответствует последней строке.

Добавлена валидация входных параметров в следующих DOM-методах: createElement, createElementNS, createAttribute, createAttributeNS, createEntityReference, getAttribute, getAttributeNS, setAttribute, setAttributeNS, removeAttribute, removeAttributeNS, getAttributeNode, getAttributeNodeNS, hasAttribute, hasAttributeNS, getElementById, getElementsByTagName, getElementsByTagNameNS.

Методу ^xdoc.file[опции] добавлена новая опция $.name[имя файла].

Методам ^xdoc.string[опции] и ^xdoc.file[опции] добавлена опция $.charset[], выполняющая те же самые функции, что и уже имеющаяся опция $.encoding[]. Вы не можете, однако, указывать две эти опции одновременно.

Если у ^switch или ^case указано значение типа bool, то их значения сравниваются сравниваются как bool (раньше сравнивались как double).

Исключения при выполнении операторов ^break[] и ^continue[] вне цикла теперь имеют тип «parser.break» и «parser.continue» соответственно (было: «parser.runtime»).

В конфигурационном методе (@conf[]) класса MAIN можно указать $STRICT-VARS(true), после чего обращение к неинициализированным переменным будет приводить к исключению.

Преобразование данных вида file-spec теперь не трогает символ «'» (апостроф) (раньше он преобразовывался в «_26»).

MySQL драйверу добавлена новая опция local_infile=1, с помощью которой можно включить поддержку LOAD DATA LOCAL из клиентской библиотеки, если MySQL сервер был собран без указания опции --enable-local-infile (подробности).

Версия скомпонована с последними версиями библиотек PCRE (8.30) и libxml2 (2.8.0).


Исправлен ряд ошибок:

При выполнении ^empty.split[...] возвращается таблица с одной пустой ячейкой.

В HTTP заголовке content-disposition имя файла теперь заключается в кавычки.

Запись пустого $request:post-body на диск теперь не приводит к исключению «saving stat-ed file».

При выполнении $t[^table::create{$empty}] теперь создаётся именованная пустая таблица с одним пустым столбцом.

Раньше выполнение ^число.div(0) и ^число.mod(0) не вызывало исключений.

Если в классе присутствует setter (@SET_name[]) и default getter (@GET_DEFAULT[]), то при обращении к свойству $name не возникает исключения «property has no getter method», а происходит выполнение default getter-а.

Исправлена ошибка, возникающая иногда при работе с partial классами.

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



Что такое Parser?
Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать. Parser начал создаваться в Студии Лебедева в 1997 году. Сегодня подавляющее большинство сайтов, создаваемых Студией Лебедева, делаются с его помощью.

А зачем он вообще?
Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать хорошие сайты. Работа с формами, cookies, табличными файлами, базами данных и XML — часть языка, а модульность языка позволяет легко наращивать функциональность.

Если есть PHP, то для чего Parser?
PHP — это язык программирования, требующий соответствующей подготовки. На Parser могут работать далеко не профессиональные программисты. Parser именно тем и хорош, что позволяет простым смертным создавать и поддерживать сложные динамические сайты без больших затрат времени.

Я программировал на других языках, можно ли, в двух словах, что же такого удобного в Parser?
Parser в известном смысле — макроязык, в нём нет оператора print; весь текст, набранный в исходном файле, суть большой оператор print. Конструкции Parser являются погруженными в текст.
Получается, что вы не пишете программу, которая выводит текст — наоборот, в имеющийся текст вы добавляете логику, ^if(условие){действие}, и организацию, блоки(методы), на которые вы разбиваете HTML-код:

@header[]
...
@footer[]
...
@navigation[]
...
@body[]
...

Я в браузере вижу код на Parser, он не обработался, в чем может быть причина (использую веб-сервер Apache)?
Парсер все-таки не назначен обработчиком ваших документов.
Для проверки функционирования парсера наберите в адресной строке броузера:
http://ваш_сайт/cgi-bin/parser3.cgi (или .exe, для версии под Win32)
Вы должны увидеть примерно следующее:

Parser/3.x.x
Если вы это увидели, парсер скопирован куда следует, права на него установлены правильные.

Если парсер скопирован правильно и вы не забыли прописать в .htaccess инструкции, указанные в документации, возможно вы забыли разрешить апачу обработку .htaccess в файле httpd.conf с помощью инструкции AllowOverride.
Чтобы проверить, обрабатывается ли у вас .htaccess — впишите в него какую-нибудь заведомо неверную инструкцию, например «mytest», в самое начало. Если при релоаде страницы вы не увидите 500 ошибку (она обязательно появится если все настроено верно) — значит данный файл у вас не обрабатывается. Измените значение AllowOverride или обратитесь к вашему администратору.



Parser 3 — простой и удобный объектно-ориентированный язык, позволяющий быстро создавать хорошие сайты.

  • Теперь на 30% удобнее!
  • Новое ядро (переработанное и, разумеется, улучшенное)
  • Новый улучшенный синтаксис
  • Поддержка XML, XSL, XPath и DOM
  • Доступен в документированных исходных текстах
  • Расширенная поддержка баз данных
  • Поддержка объектно-ориентирующихся программистов
  • Подробная документация по языку на русском языке (160 страниц!)
  • Поддержка UTF-8