Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт июн 22, 2018 07:45

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 04, 2008 21:25 
Не в сети

Зарегистрирован: Пт авг 01, 2008 02:20
Сообщения: 33
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Что за "фортовская запись"? в Форте можно использовать любую запись.

именно по этому у Вас и нужно спросить, а не у одинесника, который кроме одинеса ничего невидел, или сишника, который говорит, что лучше си ничего нету.
Цитата:
В идеальном языке - одно слово:
ПРОСТО-УГАДАЙ-ЧО-Я-ХОЧУ-И-СДЕЛАЙ!

идеал недостижим. Но мы можем к нему на чуток стать поближе.
Цитата:
Все-таки скорее Языковая среда, а не Операционная система.

ну а как оно будет называться... если будет "ПРОСТО-УГАДАЙ-ЧО-Я-ХОЧУ-И-СДЕЛАЙ" - то волшебная палочка)

Но если серьезно, то просто было бы интересно, если каждый кто в теме, попробовал бы представить как он видит в своей реализации например те команды что я указал выше. Я указал выше то, как это я вижу. Может будет не полностью свой вариант, а какие-то доправления к моему варианту... Или другие не менее полезные свойства. Ведь у каждого есть собственный уникальный опыт.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 04, 2008 21:29 
Не в сети

Зарегистрирован: Пт авг 01, 2008 02:20
Сообщения: 33
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
при работе с определенной таблицей будет определенный синтаксис наиболее удобный для работы именно с этой таблицей

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 04, 2008 21:31 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4920
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
victor79 писал(а):
для учетных систем таблицы это что-то такое, что используется по десять штук в разных вариантах в одном модуле. И для каждой делать что-то уникальное, это расточительно.

Не обязательно расточительно. Но надо на конкретном примере.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 04, 2008 21:58 
Не в сети

Зарегистрирован: Пт авг 01, 2008 02:20
Сообщения: 33
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
конкретный пример из практики (для 1С и не совсем 1С)

Код:
т = СоздатьОбъект("МояТаблица");
// заполнение таблицы
т.НовыеКолонки("Регион,Покупатель,ТМЦ,Количество-Число,Сумма-Число");
ДляВсехСтрокИсходнойТаблицы Цикл
с = т.НоваяСтрока();
с.Регион = ...;
с.Покупатель = ...;
с.ТМЦ = ...;
с.Количество = ...;
с.Сумма = ...;
КонецЦикла
// а может хотелось бы так
т.Загрузить(
   ИсходнаяТаблица.ВыбратьПоЗначению(Регион=...,Покупатель=...),
   "Регион,Покупатель,ТМЦ,Количество,Сумма"
);
// дальше вывод
спУровени = Список("Регион,Покупатель,ТМЦ");
Печать = СоздатьОбъект("ТаблицаПечатиТипаЕксель");
Печать.ВывестиСекцию("ШапкаПечати");
ВывестиРекурсивно(т, 1);
Печать.ВывестиСекцию("Подвал");
Печать.Показать();

Процедура ВывестиРекурсивно(т, Уровень=1)
    Рекв = спУровни.ПолучитьЗначение(Уровень);
    т = т.ПолучитьИтоги(Рекв, "Количество,Сумма"); // получает свернутую таблицу по одному реквизиту
    т.ВыбратьСтроки();
    Пока т.ПолучитьСтроку() = 1 Цикл
        Печать.ВывестиСекцию("Строка");
        Если Уровень < спУровени.РазмерСписка() Тогда
             ВывестиРекурсивно(т.ПолучитьПодмножество(), Уровень+1); // ПолучитьПодмножество - развернутые строки только из текущей строки итогов
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры


вот код. С одной стороны как его можно сделать наглядней/понятней/болеебыстрочитаемым. С другой стороны можно ли его представить как-либо по другому.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 04, 2008 23:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6330
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
victor79 писал(а):
Но если серьезно, то просто было бы интересно, если каждый кто в теме, попробовал бы представить как он видит в своей реализации например те команды что я указал выше. Я указал выше то, как это я вижу. Может будет не полностью свой вариант, а какие-то доправления к моему варианту... Или другие не менее полезные свойства. Ведь у каждого есть собственный уникальный опыт.

Интересное направление и интересная идея. Со своей стороны наблюдаю, что Форт не должен становиться инструментом "ради чистой идеи". Работа по развитию - это одно, а когда возникает конкретная задача, надо пытаться реализовать ее на том, что есть, делая для себя пометки на будущее там, где выявились недоработки в инструменте. Исходя из этого, я бы не рекомендовал заниматься переписыванием движка транслятора (это развитие) с целью улучшить решение конкретной задачи. Рано или поздно начнется путаница, когда один и тот же эффект окажется возможным получить либо коррекцией транслятора, либо переписыванием прикладной программы... и будут муки выбора и куча заплаток. Эффективнее смотреть, что уже есть, и попытаться вытащить из этого максимум возможного.
Насколько я вижу из постановки задачи, есть желание сделать красивый и удобный синтаксис для более качественного описания задачи. Напрашивающийся путь - "обернуть" готовые функции на Си или 1С в слова Форта. Эти слова можно будет назвать так, как удобнее, приписать им нужную семантику, а исходным критерием сделать - "чтобы было красиво". Потом, по мере опробования кода, будет понятно, в какую сторону копать. Однако первым же результатом будет большой плюс от интерактивности полученной программы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 05, 2008 01:57 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4920
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
Мне кажется, что для форта был бы более приемлем следующий синтаксис, то есть как то-так:
victor79 писал(а):
т = СоздатьОбъект("МояТаблица");
// заполнение таблицы
т.НовыеКолонки("Регион,Покупатель,ТМЦ,Количество-Число,Сумма-Число");

<pre>
Колонки: МояТаблица
строка Регион
строка Покупатель
строка ТМЦ
число Количество
число Сумма
;Колонки
100 МояТаблица Список

</pre>
при этом "Колонки:" начнет создание структуры, а "Список" свяжет структуру с неким идентификатором и именем МояТаблица

ну и так далее.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 05, 2008 03:53 
Не в сети

Зарегистрирован: Пт авг 01, 2008 02:20
Сообщения: 33
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
в соседней ветке увидел ссылку из которой выдрал ценную мысль
Цитата:
Но с моей точки зрения гораздо важнее не то, что отпала необходимость в куче сисколов, а то, что "объектов" особенности поведения которых необходимо знать для качественного программирования стало намного меньше! К примеру, в юниксах у файлов одни особенности, у специальных файлов (юникс-сокеты, пайпы, некоторые устройства) другие, а у сокетов третьи - а в Inferno всё это одинаковые файлы с одинаковым поведением.

(http://www.habrahabr.ru/blog/os_inferno/12905.html)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 05, 2008 06:05 
Не в сети

Зарегистрирован: Пт авг 01, 2008 02:20
Сообщения: 33
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
ну и так далее...

Код:
/ типов в системе всего два - число и объект.
/ числа ВСЕ вещественнные, для универсальности
/     основной объем цифр все равно финансовых, а они вещественные, потому
/     сокращение на арифметеке не будет если вылавливать где все же есть целые
/     а по быстродействию, в таких системах основной тормоз это доступ к базе
/     а сами алгоритмы мало съедают
/ объекты могут иметь подтип. строки в ковычках это объекты подтипа строка
/ создается возможность автоинтерпретация строк типа "МояСтрока" (без S") в объект
/ объекты должны уметь распускать свою память при отсутствии ссылок на них
/       т.е. по сути interface
/ русский язык используется потому что делать программу на обоих языках
/   очень утомительно переключать раскладки, а на английском
/   многие специфичные финансовые термины трудно все понимать

"Регион, Покупатель, ТМЦ, Число: Количество,Сумма" Таблица
ПЕРЕМЕННАЯ т

0 "Регион" <ЗначениеРегиона> "Номенклатура" <ЗначениеНоменклатуры>
ИсходнаяТаблица ВыбратьПоЗначениям / в стеке указатель на новую таблицу

т Загрузить \ результат выборки из исходнойтаблицы должен автораспуститься
                  \и автороспуск не в загрузить, а что-то вроде как в interface делается

\ дальше, список - это таблица с одной колонокой
\ а строка при передаче как параметр, где должен быть список/таблица
\    автоматом интерпретируется как список, разделенный запятыми
\ сначала хотел написать такой код:
\   "Значение" Таблица ПЕРЕМЕННАЯ спУровни
\   "Регион,Покупатель,ТМЦ" спУровни Загрузить
\ но потом сообразил как сделать универсальнее
"*" 0 0 "Регион,Покупатель,ТМЦ" Выгрузить \ метод Выгрузить см.ниже
ПЕРЕМЕННАЯ спУровни

ОбъектПечати ПЕРЕМЕННАЯ Печать
"ШапкаПечати" Печать ВывестиСекцию
Печать спУровни т ВывестиРекурсивно
"ПодвалПечати" Печать ВывестиСекцию

: ВывестиРекурсивно
    \( т , спУровни , Печать \) \ где-то я такие конструкции уже видел
                                \ считывает в процедурные переменные значения из стека
  1 1 спУровни [@ \ получили значение из списка (оно же таблица) из первой строки, первой колонки
  ПЕРЕМЕННАЯ Рекв \ процедурная переменная - исчезнет при выходе из процедуры
 
  "Количество,Сумма" Рекв ПолучитьИтоги
  УСТАНОВИТЬ т \ здесь т такая же перем как и Рекв, и ее так же можно переназначать

  т ДляКаждойСтроки строкаТаблицы \ это определяет переменную строкаТаблицы,
                                                        \ действительную в пределах цикла
      "СтрокаПечТаблицы" Печать ВывестиСекцию \ настройка, какие значения в печ.форму попадают
                                              \ делается в конструкторе печ.формы
                                              \ (там указываются названия переменных)
      спУровни КоличествоСтрок Если
          Печать
          "*" 2 0 спУровни Выгрузить \ выгружает таблицу в копию
                       \ "*" - все колонки, 2 0 - со второй строки и до конца
          строкаТаблицы ПолучитьПодмножество / выдаст таблицу со строками принадлежащими текущей строке итогов
          ВывестиРекурсивно
      КонецЕсли
  КонецЦикла
\ имена КонецЕсли и КонецЦикла используются вместо Тогда и Цикл (как для форта роднее)
\   по причине, что это скорее ограничивающая конструкция типа ";" указывающая что
\   завершается кусок кода. Это как в конце программы пишется BYE почему то, а не
\   ЗДРАСТИ с указанием перед ним постфиксного кода программы
;

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 05, 2008 08:48 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
victor79 писал(а):
довольно таки забавное занятие - программировать на несуществующем языке, хороший синтаксис получился.


Не только забавное, но и полезное:)

victor79 писал(а):
Будут ли по этому коду какие мысли/замечания?


Можно подумать над использованием ЕСЛИ перед условием ( обычное использование при уменьшении функциональной гибкости конструкции )
или ЕСЛИ после условия ( близко к ассемблерному пониманию ветвления)

P.S. Один из вариантов конструкцию ветвления может выглядеть так
? условие ТОГДА ... ИНАЧЕ ... ;
или так
? условие { ... | ... }


Последний раз редактировалось Kopa Вт авг 05, 2008 09:23, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 05, 2008 08:54 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
victor79 писал(а):
Но если серьезно, то просто было бы интересно, если каждый кто в теме, попробовал бы представить как он видит в своей реализации например те команды что я указал выше. .


Это может быть начальной постановкой задачи для конкурса решения задач.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 06, 2008 04:16 
Не в сети

Зарегистрирован: Пт авг 01, 2008 02:20
Сообщения: 33
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
может ли мне кто помочь в реализации интерпретатора, для кода указанного мной выше?
1. Как определять переменные типа VALUE но в вызове процедуры, и это имя должно действовать тока в пределах этого вызова. И если из этого вызова вызовется следующая процедура, то в ней эта переменная уже не должна быть доступной.
2. Нужен разбор строк, так же как компилятор разбирает числа, тока я никак не найду, где и как это сделать.
и прочие советы будут не бесполезны, я с фортом пока всего неделю ковыряюсь)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 06, 2008 04:41 
Не в сети

Зарегистрирован: Пт авг 01, 2008 02:20
Сообщения: 33
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
я тут думаю, а не проще ли и не лучше ли это написать не по принципу, что бы сам spf воспринимал этот код, а что бы он его преобразовывал в другой код, который уже выполняется фортом (или в ассемблер). А если так, то не проще ли мне написать это на более родном для меня языке типа дельфи?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 06, 2008 07:54 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
victor79 писал(а):
А если так, то не проще ли мне написать это на более родном для меня языке типа дельфи?

Интересно, а поймет ли англичанин такие слова как Ded Moroz, Baba Yaga, Zmej Gorynych и тому подобные вещи,
известные каждому русскому с детства?

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 06, 2008 08:03 
victor79 писал(а):
1. Как определять переменные типа VALUE но в вызове процедуры, и это имя должно действовать тока в пределах этого вызова. И если из этого вызова вызовется следующая процедура, то в ней эта переменная уже не должна быть доступной.
2. Нужен разбор строк, так же как компилятор разбирает числа, тока я никак не найду, где и как это сделать.
и прочие советы будут не бесполезны, я с фортом пока всего неделю ковыряюсь)


1. Одна из реализаций локальных переменных lib\ext\locals.f
2. Строка -> число для Форт ( смотри. >NUMBER )
Библиотека работы со строками
~ac\lib\str5.f ( в этом направлении и копайте и по другим библиотекам)

P.S.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 06, 2008 08:07 
victor79 писал(а):
А если так, то не проще ли мне написать это на более родном для меня языке типа дельфи?


Несколько Форт реализаций на Дельфи существуют.


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB