Комментарии к ссылкам на открытые .NET проекты.

Автор Тема: Комментарии к ссылкам на открытые .NET проекты.  (Прочитано 16798 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Либо вашим, если поделитесь
Не смогу - могу написать аналогичный - но именно тот нельзя - таков уговор.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Вот чтобы не тратить время на разработку такого парсера,
Кто не хочет, тот может пользоваться NCalc.

Лично мне всегда было интересно знать, как правильно создавать парсеры, а так же иметь навыки написания хотя бы их простых вариантов (например, того же парсера математических выражений). В главах 6 и 7 книги "Практика программирования на C++" Беарне Стровструп на примере создания калькулятора показал как это делается. Автор сначала показал две неудачные попытки создания калькулятора, наглядно демонстрируя шаги и ошибки, которые обычно программисты допускают при решении подобных задач. Затем, в третьем варианте решения автор наглядно показал как это делать правильно и объяснил почему именно так. Решение Стровструпа основано на разработке и применении грамматики. Собственно после этого примера я и заинтересовался EBNF (расширенной формой Бэкуса-Наура) - перевёл для себя стандарт ISO/IEC 14977:1996(E), ссылку на который давал выше.

Продемонстрированное Стровструпом решение (парсер математических выражений) позволяет не только выполнять базовые наборы арифметических операций, но и расширять созданное решение произвольным набором пользовательских функций (sum, random, sqrt, etc). Я делал это в качестве тренировки - никаких проблем не возникло. Такое масштабирование является достаточным именно за счёт продуманной архитектуры приложения, учитывающей саму возможность масштабирования.

Код, присутствующий в обозначенных выше главах весьма компактен. Он написан на C++, но является весьма простым и понятным (на мой взгляд) в т.ч. и для тех, кто пишет на др. языках (например на C#). Так что переложить его на свой язык труда не составит. Насколько я помню, у меня это когда-то заняло один вечер и приобретённый опыт считаю не лишним, поскольку не люблю "чёрные ящики", ломающиеся в самый неподходящий момент (имхо).

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
В главах 6 и 7 книги "Практика программирования на C++" Беарне Стровструп
Кстати, сегодня вышел из типографии перевод обновлённой версии этой книги, в которой учтены особенности C++11 и C++14. Издательство украинское, печатают в Москве. В Питере, на книжной ярмарке ДК им. Крупской, эта книга только по предзаказу, т.к. не распродан ещё старый запас предыдущего издания. Срок доставки 1-2 недели, цена, на сегодняшний день, 2 000 руб.

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
На самом деле я далеко не уверен, что ncalc крашит автокад. Просто весь код, кроме ncalc, много раз преверен (хотя это и не является гарантией) - остаётся только сесть с разными утилитами для отслеживания памяти и проч, и искать где я напортачил

Кстати, сегодня опять поискал альтернативы - нашёл 2 варианта: DataTable.Compute и попробовать использовать Roslyn
Алексей

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Велосипед. Программно создаёшь объект сессии PowerShell и исполняешь в нём любые выражения, в т.ч. и математические. Когда объект становится ненужным - прибиваешь его. В примере хостинга PowerShell я показывал в т.ч. и вычисление математических выражений. Используются не сторонние библиотеки, но "родной" механизм, присутствующий в Windows.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Если найдется более компактный и более грамотный вариант такого парсера - буду только рад.
PowerShell. :)

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
ИМХО, небезопасно. У меня выражения для вычисления пишут инженеры. И тут они смогут наделать делов.
Алексей

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
ИМХО, небезопасно. У меня выражения для вычисления пишут инженеры. И тут они смогут наделать делов.
Например? "Наделать делов" они смогут и без твоего кода (от этого не застрахован никто, ибо у каждого психа своя программа в голове - всех случаев не предусмотреть).

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Вычисления могут запускаться на всех компах в конторе, т.е. без моего кода "наделать делов" они могут только у себя. С PS в этом случае - на компах всех проектировщиков.
Код же выполняется не в песочнице? Это, конечно, паранойя, но хотелось бы ограничить возможности только вычислениями математики
Алексей

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Вычисления могут запускаться на всех компах в конторе, т.е. без моего кода "наделать делов" они могут только у себя. С PS в этом случае - на компах всех проектировщиков.
Код же выполняется не в песочнице?
Для работы в PowerShell с удалённым компьютером необходимы права администратора [домена]. Если этих прав у юзера нет, то сессии PowerShell он сможет создавать лишь на localhost. Ты можешь ограничивать наборы cmdlet, доступных пользователям в рамках созданного тобой объекта PSSession.

Это, конечно, паранойя, но хотелось бы ограничить возможности только вычислениями математики
Дело твоё.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
NCalc дает возможность не только вычислять математические выражения, но и использовать параметры. В качестве параметров могут выступать любые типы объектов, даже объекты AutoCAD (например - Point3d). Для их обработки можно довольно легко и быстро добавить нужные функции. Я сильно сомневаюсь, что инструмент вычисления выражений в PowerShell имеет тот же функционал.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Я сильно сомневаюсь, что инструмент вычисления выражений в PowerShell имеет тот же функционал.
Ты "сильно" не знаешь возможности PowerShell. :) Он позволяет не только использовать параметры, но и самому на лету формировать произвольные, нужные тебе определения функций с последующим их использованием. Так же можно создавать переменные, в т.ч. и такие, которые представляют собой ссылки на функции, которые (в свою очередь) можно передавать в качестве параметров в др. функции. Кроме того, строки, заключённые в одинарные кавычки, обрабатываются иначе, чем строки, заключённые в двойные кавычки (что само по себе, как показывает практика, является очень удобным подходом - подробности легко находятся в справке и гугле).

Цитата: Дмитрий Загорулькин
В качестве параметров могут выступать любые типы объектов, даже объекты AutoCAD (например - Point3d). Для их обработки можно довольно легко и быстро добавить нужные функции.
Напугал ёжика пятой точкой. :) Всё это так же доступно в PowerShell. Сразу видно, что ты не смотрел мой "мультик" по теме хостинга PowerShell в AutoCAD...