|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.05.2015, 17:39 | #31 | |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,774
|
Давным-давно, когда я только начинал проект, пытался читать документацию Cache, поскольку мне про нее то же самое говорили. Мол, ООП, все дела. Но то ли тогда я не сильно продвинутым был, то ли разработчики Cache и правда навертели, то ли маркетинг постарался, но их документация мне показалась словоблудием в тех местах, где шло описание концепций. Даже не помню, есть ли в ней декларативные средства для манипуляций с объектами -- аналог DML в SQL.
Проще сравнивать будет, наверное, с новомодными NoSQL-СУБД, достоинства и недостатки которых лежат на поверхности. Работает быстро, но всю обвязку нужно писать вручную, типа как в FoxPro, поэтому подходит только для определенного круга задач. Чтобы такая СУБД смогла полностью заменить реляционную, нужны всё те же декларативные средства -- аналог DML из SQL. Вот эту задачу я и пытаюсь решить в Канторе, опираясь на функциональное программирование, а за основу синтаксиса взяв SQL. Декларативная работа с объектами в Канторе носит название контейнерной арифметики, и функционально близка SQL и map-reduce из ФП. Это будет не в первой альфе, вначале нужно основу реализовать. Но будет. Из-за всех этих концепций "Hello, world!" в Канторе сложней в реализации, чем в Алисе, например, поскольку абстракций тупо больше. Цитата:
Модель данных в Канторе не является иерархической, поскольку иерархия (вложенные пространства имен) -- только одно измерение, а есть еще наследование (граф) и обобщение (иерархия), если говорить о классах. Каждый узел одновременно находится в нескольких измерениях и является их пересечением. Это, наверное, похоже на кубы OLAP. Число измерений не ограничено. В рамках Кантора я называю эту модель фрактальной, поскольку растет она путем дробления и уточнения, что и дает фрактал. |
|
02.05.2015, 18:05 | #32 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
Цитата:
I'm learning to live...
|
|||
02.05.2015, 18:25 | #33 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Active X. OLE. COM Server
Тя-я-якс... Недавно разработанная фичка, которая понадобилась в производстве - взаимодействовать с .NET сборкой, зарегистрированной в качестве СОМ сервера. Да-а-а... Вот и такое бывает... Библиотека предоставляет некие методы, которые нужно вызывать и получать их результаты. Поэтому решил озаботиться и этим, учитывая что автор "слился" и отмораживается от намеков на усовершенствование своих творений под натиском юзеров. Ну юзера то смирились (а чем им остается?), а я нет. По крайней мере решил твердо - оснастить Алису возможностью взаимодействовать с такими библиотеками.
Значит по мотивам вот этих тем: http://www.programmersforum.ru/showthread.php?t=276584 http://www.programmersforum.ru/showthread.php?t=276143 http://www.programmersforum.ru/showthread.php?t=276091 http://www.programmersforum.ru/showthread.php?t=275861 недавно родился новый класс. Код:
Ну или: Код:
По факту есть всего два метода: set и invoke. Первый служит для работы со свойствами, а конкретно задает им значение: Код:
Чтоб считать свойство достаточно к нему просто обратиться: Код:
Может позже как-нибудь откажусь от set в пользу чего-то проде Код:
Вызов метода: Код:
Если это функция то соответственно invoke что-то вернет. Пример: Код:
Визуальные ActiveX в планах. Сейчас прорабатываю теорию. Пока не все понимаю, но дорогу осилит ползущий.
I'm learning to live...
|
02.05.2015, 18:46 | #34 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
OpenDialog. SaveDialog.
Поскольку Алиса уже активно юзается пользователями моих филиалов (кроме меня для них почти никто не пишет ПО) я время от времени учитываю их пожелания. Одним из таких пожеланий был запрос на выбор файлов. Например пользователь хочет отправить пару файлов по почте.
Ввиду этого приделал диалоги. Код:
mask тоже опционален и задает фильтр для отображения файлов в диалоге для открытия или сохранения. По умолчанию включен режим множественного выбора файлов. Т.е. за раз можно выделить несколько файлов в каталоге. Методы показа диалогов:
Слил я для упрощения все это в один класс, в отличии от стандартных диалогов, которые друг к другу не относятся. Если выбрано несколько файлов перебрать их поможет все тот же scan. Переменная диалога, в котором, становится итератором. И легкий примерчик, показывающий собственно решение вышеуказанной задачи выбора файлов, которые нужно двинуть на мыло: Код:
Иначе od.scan пройдется по списку имен выбранных файлов, каждое имя которого попадет в итератор, и будет передано объекту почтовика в качестве вложения. функция utf8 перекодирует из ASNI в UTF8. О ней позже. Далее ml.send толкает почту. Больше диалог ничего не умеет, да ничего другого и не нужно. Единственное что могу добавить: После открытия диалога od получает статус массива. Таким образом обращение типа od[3] вернет путь к файлу в списке, номер которого три. Или False если номер такой в списке отсутствует. Начинается с нуля. Так что теоретически можно и без scan в цикле проход сделать. Но scan лучше будет.
I'm learning to live...
|
02.05.2015, 18:51 | #35 | ||
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,774
|
Цитата:
На самом деле это мой термин, пока не общепринятый. Остальные -- общепринятые. Цитата:
Примеры кода на Канторе можно увидеть в этюдах. Cамый длинный этюд -- WideParamStr, в нем я экспериментировал с синтаксисом итераторов. Так примерно и будет выглядеть. Последний раз редактировалось Vapaamies; 02.05.2015 в 18:53. |
||
02.05.2015, 19:15 | #36 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Не опередившая. Буквы ты попутал ) Цитата:
Цитата:
I'm learning to live...
|
|||
02.05.2015, 19:34 | #37 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
02.05.2015, 20:27 | #38 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Потоки.
Чисто из "академичоского" опыта да и просто для интереса был добавлен класс распараллеливания процессов. Если быть точным - треды.
Однако вынужден признать что эффективность треад в Алисе ставится под сомнением ее правилами области видимости и области жизни переменных. Почему, я расскажу позже. Поэтому потоки не применяю, но в качестве платформы на будущее они есть. Класс: Код:
Простенький пример: Код:
Для управлением треда есть методы stop (останавливает тред совсем), pause (ставит на паузу) и resume (продлжает тред) Проверки состояния треда не предусматривал. Синхронизации тоже нет. Если же в start передать имя исполнимого файла Код:
флаг wait указывает заморозку основного потока, из которого вызван запуск пока запущенная программа не отработает. флаг noconsole заставляет запущнные процессы не светиться на экране, если они консольные. Иногда всетки нужно выполнять запуск определенных процессов, тут ниче не поделать. Однако же класс сей использую редко.
I'm learning to live...
|
02.05.2015, 21:10 | #39 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Зарезервированные слова. Системные функции.
Такс. Плюшки и фички вроде перечислил. Есть еще парочка, о которых я не упоминаю, но они маловажны. Так то исходник я выложил, если кому интересно может подсмотреть имена классов в функции TAlisaSet.Exe, отвечающая за присваивание и создание объекта.
Теперь по порядку по операторам и зарезервированным словам. Полный список и реализация описаны в исходнике в TAlisaInterpretter.LetsDo В эту функцию кстати строкой передается код Алисы. Собственно она и является ядром интерпретатора. Там же парсер там же исполнитель. Итак. Присваивание: Взято из паскаля. Я как и Вирт неприемлю Сишное равно, ибо считаю что равно служит для сравнения, а не для присваивания. Поэтому перенял у Вирта его "фаллический" оператор "Равно с яйками". Одобрено Фрейдом. Код:
Т.е. к примеру код Код:
Выше вы можете наблюдать такую картину: Код:
Вообще все операции являются выражением, все возвращает результат. Операция присвоения штука сложная и неоднозначная. Проблема в структуре самих переменных, которые в общем то являются объектами. О них распишу ниже отдельно. Поэтому с присвоением приходится быть аккуратным. Арифметика: Вообще для выражений предусмотрены следующие операторы:
Инкремент и декремент в отличии от Си имеет только одну форму. В основном все арифметички работают с числами, однако есть некоторые отличительные особенности. Например делением можно разделить строку на массив подстрок. Аналогом может послужить метод Split() в популярных ЯВУ. Пример: Код:
Насколько я помню в Питоне есть такая фичка. А может путаю. Но где-то в каком-то ЯВУ я точно видел такое. Оператор * тоже умеет кое что помимо умножения. И тоже для строки. Код:
Применение сему я нашел в составлении отчетов в текстовом виде, когда например нужно пролинеить псевдографикой. Вычитание тоже с сюрпризом. Вычитание подстроки из строки означает удаление всех вхождений этой подстроки. Код:
От такая от фигулька нестандартная ) Нда...
I'm learning to live...
Последний раз редактировалось Stilet; 03.05.2015 в 14:46. |
02.05.2015, 21:11 | #40 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Условные операторы
Условные операции
Здесь собственно самое необычное реализованно в if и in Поскольку и они возвращают результаты я свободно могу написать Код:
Код:
Под понятием "выполнит" кроется проверка. Если начало с ковычек - это строка. Ее нужно просто вернуть. Если обнаружено число - тоже вернуть. А если первый символ - "(" это выражение. Его нужно отдельно выполнить. И опять таки вернуть результат. Причем выражение может представлять из себя блок. Тогда результирующим будет последнее выражение в этом блоке. Пример: Код:
Вот и получается аналог Оракловского DECODE() или фокспрошного IIF() Ну или Сишного ()?:. Оператор in скомунизжен из паскаля, и представляет из себя поисковик значений в массиве или строке. Код:
Если есть массив типа Код:
Код:
а Код:
Ибо в массиве такого значения нет. Продолжение следует...
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хочу написать программу для себя | Marishka.S | Помощь студентам | 7 | 02.10.2011 17:23 |