parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Предложения по языку.

Maxx 17.09.2007 16:49 / 17.09.2007 16:55

Накопилось тут несколько мыслей, хотелось бы знать мнение птицеведов и птицеводов. :)

1. Есть класс $form, у него есть метод :fields, возвращающий все поля формы.
Может сделать аналогичный метод у $env?
C помощью него можно было бы легко узнать все переменные окружения, избегая внешних perl/bash скриптов (http://www.parser.ru/forum/?id=31048) и таких трудно понимаемых сходу изменений - http://www.parser.ru/forum/?id=20681
Тоже самое с $request и $cookie

2. Есть классы, к полям объектов которых можно безболезненно обращаться (void), не получая при этом ошибку. Такими классами являются почти все (hash,file,image,int...), кроме date, xdoc,table и частично string.
Например:
$h[^hash::create[$.text[text]]]
$f[^file::load[text;index.html]]
$d[^date::now[]]
$t[^table::create{one  two}]
$h.missing_field <- нет ошибки
$f.missing_field <- нет ошибки
$d.missing_field -> exception "field not found"
$t.missing_field -> exception "column not found"
С string отдельный случай:
$s[]
$s.missing_field <- нет ошибки
$s[string]
$s.missing_field -> exception "string method not found"
Думается надо превратить это в какую то более менее стройную систему - либо void всегда (за исключением может table), либо всегда ошибка (за исключением может hash).
В общем стройности хочется.
Второй вариант очевидно не compatible, поэтому, как вариант, - ключ $STRICT(1) в конф. файле - для переключения режимов работы, либо строго, либо нет (по старому). В область действия этого ключа можно отнести и давно обсуждаемую проблему видимости локальных переменных.

3. Значения по умолчанию.
@someFunction[$hParam[^hash::create[]];$i(100)]
вместо
@someFunction[hParam;i]
$hParam[^hash::create[$hParam]]
$i(^i.int(100))
4. Хотелось бы методы, возвращающие список из таблицы (с указанием столбца, разделителя, encloser-а) и из хэша (список ключей или список значений указнного поля)
Вариант применения, например в SQL-запросах WHERE IN (^h.list[])

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

Например:
$h[^hash::create[
  $.f1[$.name[Петя]]
  $.f2[$.name[Вася]]
]]
^h.foreachByField[k;v][v.name]{
          $v.name
}[,][asc]
..... выведет Вася,Петя

Практически все выше перечисленное обсуждалось с Мишей, 4-й пункт в частности не моя, а его идея.
4. и 5. - реализуемы на парсере, но мне кажется такие базовые вещи должны быть на более низком уровне.

Все это мое ИМХО и просто поток сознания. Просто хочется сделать парсер еще удобнее и легче/гибче.
Знаю заранее что кто нибудь скептически предложит реализовать это самому. Книжки по Си читать начал, но до реализаций еще рано :)

Кто что думает?