parser

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

 

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

Парсер. Мнение. Зачем нужен.

egr 19.11.2004 13:30

1. Парсер, реально это набор удобных оберток над многими более низкоуровневыми абстракциями, вроде соединений с БД и выполнении определенных типов запросов, вроде прокрутки двумерных массивов (таблиц) и пр.

Например, в C# (ADO.NET) для соединения с БД и выполния запроса не возвращающего данных, нужно проделать примерно следующее:
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "...";
OleDbCommand command = new OleDbCommand("UPDATE ...", conn);
conn.Open();
command.ExecuteNonQuery();
conn.Close();
В парсере же:
^connect[ConnectionString]{
	^void:sql{
		UPDATE ...
	}
}
С запросами возвращающими данные в C#, ещё сложнее, - нужно задействовать другие, весьма непростые для новичков абстракции вроде DataReader, DataSet, DataAdapter и т.д. В парсере же все проще. Например получение данных в двумерный массив (таблицу) с которым потом можно просто работать, выглядит так:
^connect[ConnectionString]{
	$table[^table::sql{
		SELECT
			col1,
			col2,
			...
		FROM
			table
	}]
}
и далее таблицу можно прокручивать, выбирая при этом нужные столбцы, а так же делать другие вещи. Например прокутка выглядит так:
^table.menu{
	$table.col1 $table.col2<br/>
}
и в сравнении с C# в котором, скажем прокрутка какого-нибудь ArrayList выглядит так:
	ArrayList array = <init code>;
	IEnumerator enum = array.GetEnumerator();
	while (enum.MoveNext())
	{
		...
		enum.Current
		...
	}
т.е. приходится задействовать достаточно сложные для новичков абстракции типа интерфейсов. С другими типами многомерных структур там ещё сложнее, я не говорю уже про C++ и прочие.

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

3. А вообще для критически важных приложений, если вы не перец уровня пафа, использование парсера нецелесообразно, если только вы не используете те же инструменты что и лебедевцы (апач, мускул, оракль, юникс), т.е. не стоит использовать задекларированные СУБД вроде PostgreSQL, MS SQL и др., также не стоит пользоваться ISAPI вариантом и IIS веб-сервером.

Просто эти вещи практически не тестируются в реальной работе, и если не хочется быть подопатным кроликом, то не стоит. А если хочется, нужно как минимум знать C++ чтобы провить исходники в случае необходимости.