LINUX.ORG.RU
Ответ на: комментарий от Forum0888

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

Впрочем, в 1С это как раз в полный рост. «ВЫБРАТЬ Поле1 / Поле2 ИЗ Таблица» и «ВЫБРАТЬ Поле1, Поле2 ИЗ Таблица» + Выборка.Поле1 / Выборка.Поле2 легко могут дать разные результаты, потому что в первом случае делит SQL, а во втором 1С. Более того, даже поиск по равенству строки в SQL без учёта регистра, а в языке 1С с учётом регистра.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

В SQL СВОЯ арифметика и она лишь местами похожа на «обычную».
Поэтому проблема «потеряной/лишней копейки» может возникнуть в алгоритмах, которые не знают правил арифметики SQL.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от Forum0888

И я про то же. Но это не мешает писать программы, очень тесно интегрированные с SQL.

Так и float. Если интерфейс к внешней системе умеет конвертировать из внутреннего представления лиспа и обратно, то абсолютно несущественно, насколько арифметика лиспа соответствует арифметике внешней системы.

monk ★★★★★
()
Ответ на: комментарий от rtxtxtrx

База бухгалтерская. Чтобы по слову «иванов» находился «Иванов» надо часто. Альтернативы: либо удвоить объём базы продублировав все текстовые поля, либо искать по базе без индексов.

Решили, что проще сделать, чтоб СУБД не различала регистр. А если кому-то очень надо, в запросе есть условие ПОДОБНО (которое LIKE в англоязычном).

monk ★★★★★
()
Ответ на: комментарий от monk

В твоем представлении индексы - это что-то типа НЁХ. А на деле - это просто файл, где все значения этого самого индекса, он полностью читается в оперативу и там какие-то операции над ним происходят.

rtxtxtrx ★★
()
Ответ на: комментарий от rtxtxtrx

В этом файле записи отсортированы по значению. Если значение является строкой с учётом регистра, то на ILIKE будет равенство множества не идущих подряд записей индекса.

monk ★★★★★
()
Ответ на: комментарий от monk

Да на это уже срать, что там линейный поиск. Можно смело утверждать что в оперативу загружено постоянно до 25% размера таблиц. Там нет никаких проблем в регистронезависимом сравнении строк: A - это 41 (в ASCII), a - 61, те чиселки сравниваются x == 41 or x == 61 (41 + 20), там внутреняя какая-то кодировка для репрезентации всех возможных символов юникода. У меня есть база данных одного топового сайта, там всего-навсего 20+ гигабайт данных за 15 лет скопилось. Даже по самой большой таблице с миллионами записей линейный поиск происходит за доли секунды

rtxtxtrx ★★
()
Ответ на: комментарий от monk

Не будет и не должна. Там где-то в документации прописано это требование. В шарагах никогда не будет баз по 20 гигов как на сайтах с миллионами посетителей в месяц

rtxtxtrx ★★
()
Ответ на: комментарий от rtxtxtrx

В шарагах никогда не будет баз по 20 гигов

Фирма по продаже комп комплектующих со своим сервисным центром спокойно набирала 20Гб за год. Приходилось писать обработки и обрезать остатки в последние рабочие дни года.

Причем вообще 20 млн посещений в месяц? это же не 20 млн продаж которые занесли заказы в БД.

Obezyan
()
Ответ на: комментарий от lovesan

В смысле? Для учёта в столовой необходимо на каждое блюдо списать ингредиенты с учётом партий прихода. Таким образом на одну продажу товаров будет около сотни записей по десятку полей каждая. Человек покупает полдюжины товаров. За день проходит по крайней мере сотня человек. Получается порядка миллиона полей ежедневно. На каждое надо порядка десятка байтов. Десять мегабайт. Сто дней — гигабайт. Год три гигабайта. Пять лет — пятнадцать гигабайт. И это только бухгалтерский учёт продаж. Без учёта закупок, ежемесячных регламентных перерасчётов себестоимости, расчёта калькуляций и прочего.

monk ★★★★★
()
Ответ на: комментарий от monk

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

Obezyan
()
Ответ на: комментарий от lovesan

Да причем тут я, вы же реально не осознаете насколько 1С продвинулась в плате автоматизации задач предприятий. Если бы вы хоть раз в жизни столкнулись с нагрузками по данным которые происходят в 1С.

OLTP? не слышали

Лавсан, Лавсанище, ну хватит уже писать о том о чем вообще не понимаете. 1С как раз реализует и OLTP и OLAP (ROLAP), причем это работает быстро. Вы таких архитектур и не видели. Например, такая схема используется в ДИТ г. Москва.

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

Obezyan
()
Ответ на: комментарий от lovesan

Тебе нужен отдельный OLTP на 100 транзакций в день? Зачем???

А хранить надо, иначе когда к тебе придёт ИФНС с проверкой и потребует обосновать, почему ты пять лет назад на расходы поставил именно эту сумму, то эти данные тебе понадобятся.

monk ★★★★★
()
Ответ на: комментарий от Obezyan
Процедура ПриветМир()
    Сообщить("Здравствуй, Мир!");
КонецПроцедуры

У этого языка низкий порог вхождения.

Более того, после этого очень низкого порога сразу идут ступеньки в полуподвальное помещение.

Нельзя использовать букву «ё».

Запрещено административным кодексом с внесением в реестр нарушителей и алиментщиков.

Программный код 1C расположен в конфигурации. Сама конфигурация состоит из объектов, а объекты — из модулей. Именно здесь хранится код.

Именно там.

tp_for_my_bunghole
()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 2)
Ответ на: комментарий от Obezyan

От сука, я плакаю.

programmist1s . ru

KimKilWan:
«найти хороший самоучитель по языку программированию 1С». Можете посоветовать хороший самоучитель?

1с:
нет

Аноним:
Че за нет. Культурнее отвечайте.

аа:
аххаха

Аноним:
а культурнее это как? Если они Вам ответят «Извините, нет» — так лучше?))

Абдула:
иди ты нахрен гребенная обида

Аноним:
Че за нет. Че за че, все твое че прочекали до боли обида по жизни. соболезную за не сложившуюся несчастливую жизнь. злоба обида, походу ты неудачник чикало

tp_for_my_bunghole
()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 1)
Ответ на: комментарий от tp_for_my_bunghole

Санжар:
у меня есть проблема
{МодульУправляемогоПриложения(12)}: Ошибка при вызове метода контекста (Предупреждение)
Предупреждение(«Ish vaqti tugagan»);
по причине:
Использование модальных окон в данном режиме запрещено!

Кирилл:
Используйте метод «Сообщить()»

Gummi:
Если хотите использовать именно Предупреждение, то используйте ПредупреждениеАсинх. Не забудьте и процедуру тоже объявить, как Асинх. Ну и почитайте про асинхронные методы.

tp_for_my_bunghole
()
Ответ на: комментарий от tp_for_my_bunghole

Тесты можно было бы писать с ключевым словом «НАПРИМЕР», «НУДОПУСТИМ», «ПРЕДПОЛОЖИМ», всё с различной семантикой.
Для mock objects можно разработать не имеющие аналогов операторы «КАКБЫ», «КАКБУДТО».

Вместо примитивных exceptions нужны «УКЛОНЕНИЕ», «ВОЛЬНОСТЬ».
catch заменить на «ПРИНЯТЬМЕРЫ» как более менее лучшее усовершенствование.
type switch усовершенствовать в «НУТИПА».

tp_for_my_bunghole
()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 2)
Ответ на: комментарий от tp_for_my_bunghole

Все еще выше чем порог входа в JS :) Опять же, простота использования бизнес объектов это преимущество. Более сложные вещи там тоже есть, объединения как в SQL, планом видов характеристик (EAV) и прочее.

Можно сколько угодно зубоскалить, но когда сталкиваешься с необходимостью автоматизации воинской части где нужны зарплатные и финансовые ведомости на год, которые печатают на А3, с динамическим количеством колонок и столбцов и при хочется укладываться по времени расчетов хотя бы минут в 5 то приходится вызывать 1С-ников, т.к. только они могут сделать такую систему за вменяемые сроки.

Вы просто не сталкивались с серьезными проектами на 1С. Это на уровень выше чем сайтики клепать с масштабированием на AWS.

Obezyan
()
Ответ на: комментарий от monk

О сетевом файловом доступе в 1С 7.7

Фирма 1С «не осилила»/«не захотела» решить этот вопрос.
Он решаем и скорость работы по сети раз в шесть быстрее, чем в 1С 7.7.
Вообщем-то вполне приемлемо даже для работы с базами где-то до 50GB (это 100%).
Впрочем как никак 1С 7.7 это 1996 год и для того времени это была весьма прогрессивная новая технология.

Путь использования реляционных баз для обеспечения возможности использования объектов 1С это «милостыня бедному».
То что реализовано лишь подтверждает качественную реализацию MSSQL.

Никогда не было желания разработать а-ля run-time 1С, но нужно
признать, что некоторые объекты в 1С неплохо реализованы.
Правда их архитектура представления данных (как бы это сказать) - «кастрированная».

Так как ныне компьютера имеют быстродействующие CPU, ..., то это
«сглаживает» любую не очень качественную (речь не о 1С) архитектуру работы с данными.

Архитектура представления данных в SQL пригодна лишь для некой ниши задач.
Популярна она потому, что в эту нишу попадает класс (некоторых) учетных задач.

Проблема ныне в том, что лет шестьдесят назад были разработаны ХОРОШИЕ технологии, которые были неплохо приспособлены к возможностям ЭВМ тех годов.
К сожалению пока

Воз и ныне там.

Ныне разработано много NOSQL баз данных.
ИМХО их основная проблема в том, все они пытаются «натянуть сову на глобус».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 6)
Ответ на: комментарий от monk

Для учёта в столовой необходимо на каждое блюдо списать ингредиенты с учётом партий прихода

Sorry, улыбнуло.
Это хороший пример того, какие «задачи» ныне решает IT.

Да и мир ныне такой же.

Forum0888
()
Ответ на: комментарий от Forum0888

Это хороший пример того, какие «задачи» ныне решает IT.

Решает сложные задачи учета. Кто никогда не перемещал сырье в производство по технологическим картам не поймет о чем идет речь.

Obezyan
()
Ответ на: комментарий от Forum0888

Забавно, как вы кинулись что-то читать и выискивать косяки чтобы доказать какая 1С кривая. Ну какая v7.7 если на дворе v8.3? Это настолько устаревшая версия что существует наверное в совсем полуподвальных шарашках на 5 чел, там ее скорости хватает с головой.

Obezyan
()
Ответ на: комментарий от Obezyan

которые несколько переусложнены ещё на бумажной стадии развития бумагооборота как адаптивная реакция на специфичность фикции собственности в постимперской России

затем цельнотянута в электронную форму

ну а сей период именно благодаря лёгкости внесения нормативных изменений в нпа и даже(о нет) законы - и провидящие будущее апдейты разработчиков однойS - и привило к динамической монополии

т.е. все довольны - учёт и контроль есть!

постоянные изменения(ой- усовершенствования) нормативной базы есть!

синхронное изменение софта есть

синхронное изменение норм что бы была необходимость быть клиентом софто-поставщика есть

все доволны!

qulinxao3 ★☆
()
Ответ на: комментарий от Obezyan

Вообще-то он уже неоднократно упоминал ранее в треде, что работал с 1С и имеет свои какие-то, э-э-э, наработки. Так что обвинять человека, что

вы кинулись что-то читать и выискивать косяки чтобы доказать какая 1С кривая

не совсем уместно.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Obezyan

Объективно это не так уж и много (в церне же ща пета порядки регистрации событий)

при этом на фоне листочка и тетрадки ИП - таки да масштабища

так то 1с специфический инструмент со своими достоинствами и недостатками

и это хорошо что у РФ есть как «свой» поисковик так и «своя» система «всего?» учёта-контроля-оперативного_управления-стратегического_управления

однако возникает вопрос - 1с кремль уже автоматизировала?

qulinxao3 ★☆
()
Ответ на: комментарий от Obezyan

Кстати, 1С ещё и хорошо сочетается с темой. Язык 1С создавался примерно для той же ниши, что и Go: надо, чтобы не очень грамотные программисты не могли ничего кардинально сломать, но могли напрограммировать всё, что им надо.

И тоже: вроде недостаточно абстракций, свои классы создавать нельзя, функции в переменные сохранять нельзя. Зато как в Go есть корутины, так в 1С есть вшитые ORM и GUI.

monk ★★★★★
()
Ответ на: комментарий от Obezyan

Они ничего не могут. Какие-то дебило-интеграторы просили им специальную апи сделать под их конфиг, когда же я написал что можно обойтись одни видом и вызовом процедуры, это существо сказало, что sql не знает и слилось. Хотели 200.000 за интеграцию, но конфиги для них какой-то гениальный 1сник написал, который программировать могет, а они нет даже 100 строчек написать не в стоянии за 200k. Тогда я и понял, что шутки про 1сников - это не тож самое, что угнетение похапешников, последние программисты, но все стебутся с используемого ими языка… Тут же у нас что-то вроде виндовых сисьадминов, не умеющих в сосноли три команды набрать

rtxtxtrx ★★
()
Ответ на: комментарий от J

Это да, но в этом мире всё - ЛЕГАСИ.

Разработчики обычно не чураются «старого» (если кто понимает о чём речь).

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от rtxtxtrx

Тут же у нас что-то вроде виндовых сисьадминов, не умеющих в сосноли три команды набрать

«1сник» просто такое же абстрактное понятие как «компьютерщик». Если эникея, который джумлу ставит, попросить что-то к ней дописать, он тоже скажет, что пэхапэ не знает. Отсюда надо делать вывод, что все компьютерщики тупые?

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от qulinxao3

все доволны!

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

Obezyan
()
Ответ на: комментарий от monk

Кстати, 1С ещё и хорошо сочетается с темой. Язык 1С создавался примерно для той же ниши, что и Go: надо, чтобы не очень грамотные программисты не могли ничего кардинально сломать, но могли напрограммировать всё, что им надо.

И тоже: вроде недостаточно абстракций, свои классы создавать нельзя, функции в переменные сохранять нельзя. Зато как в Go есть корутины, так в 1С есть вшитые ORM и GUI.

Приятно, когда в общей беседе есть собеседники которые понимают тему обсуждения. Бессмысленный спор и попытки объяснить превращаются в диалог. Спасибо.

Obezyan
()
Ответ на: комментарий от monk

Это ложь. Современная бухгалтерская/зарплатная конфа размером от 1 до 3Гб отжирает в работе около 2-4Гб RAM на одного юзера в реальной работе - и это только процесс 1ски отжирает, а ведь еще винда тоже кушать хочет.

mikamiel
()
Ответ на: комментарий от rtxtxtrx

Они ничего не могут. Какие-то дебило-интеграторы просили им специальную апи сделать под их конфиг, когда же я написал что можно обойтись одни видом и вызовом процедуры, это существо сказало, что sql не знает и слилось.

Вы правы в том что многих разработчиков 1С нужно пороть розгами на конюшне. Из-за низкого порога вхождения туда часто попадают не те люди которых стоило бы пускать на порог ИТ отдела. Точно такая же ситуация с JS-разработчиками.

По теме - я вообще не знаю ни одного реального примера который не мог бы быть автоматизирован на 1С. Если базовых возможностей 1С и ActiveX не хватало, то писалась внешняя компонента (dll) и все необходимое приводилось к сущностям 1С.

Obezyan
()
Ответ на: комментарий от qulinxao3

и реально не праздный вопрос когда 1с дорвутся до автоматизации кремля?

Без понятия, я не писал ничего «серьезного» на 1С уже лет 10. Как и на Лиспе :) что не мешает мне быть в курсе происходящего и там и там.

Obezyan
()
Ответ на: комментарий от Forum0888

Потому же, почему браузер кратно жрёт больше памяти, чем видеопроигрыватель аналогичного разрешения. УФ — браузер с XML. Обычные формы — примерно GTK.

monk ★★★★★
()
Ответ на: комментарий от mikamiel

Многие всё ещё используют Управление Торговлей 10.3, она на обычных. Причём, именно поэтому. Новая Торговля удобнее, в ней больше возможностей, но если ради неё надо всему персоналу обновить компьютеры и всё равно она будет на новых компьютерах работать медленнее, чем старая на старых, то уж лучше надёжное работающее решение.

А современный компьютер даже без 1С требует хотя бы 8ГБ, иначе ОС тормозить будет.

monk ★★★★★
()
Ответ на: комментарий от monk

Не в упрёк Вам расскажу одну быль.

Как-то вёл разработки конфигурации в которой объём данных был где-то 30GB.

У другого программиста самый нагруженный отчёт формировался 30 минут, у меня с теми же данными, ОС и конфигурации за четыре минуты.
У него компьютер использовался не для работы, а приятного время провождения.

Windows нужно уметь настроить и тогда всё летает.
Заметьте вопросов разработки вообще в посте не коснулся.

Что касаемо Windows 10 и 11, то не знаю ни одного довода, который бы меня убедил, что они нужны.

То же самое могу сказать о Visual Studio 13.
Нет никакой необходимости в установке иной версии.

Разрабатываемый кроссплатформенный run-time будет производительно работать в любой ОС (и это не бахвальство).
Использую его в 1С, так как в нём много вкусных плюшек.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 14)
Ответ на: комментарий от Forum0888

Что касаемо Windows 10 и 11, то не знаю ни одного довода, который бы меня убедил, что они нужны.

Довод простой. Под новое оборудование не будет драйверов для старых ОС.

Разрабатываемый кроссплатформенный run-time будет производительно работать даже на Windows 98 (и это не бахвальство).

Можете попробовать установить Windows 98 на любой современный компьютер.

monk ★★★★★
()
Ответ на: комментарий от monk

Для меня это не довод.
Кстати вопрос просто решаем формированием потскрипт файла, а посткрипт все устройства печати поддерживают.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Forum0888

посткрипт все устройства печати поддерживают

Это было давно. Нынче PCL, GDI и прочая фигня…

И при чём тут устройства печати, если под Win98 у тебя даже видеокарта не заведётся?

monk ★★★★★
()
Ответ на: комментарий от monk

Windows 98 упомянул лишь в контексте того, что разрабатываемое API будет эффективно работать на любой ОС (суждения о том, что её нужно установить не было).

Это было давно. Нынче PCL, GDI и прочая фигня…

Шутка

Фигнёй некогда заниматься.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Forum0888

Ну это уже на какие-то сказки похоже. Сборка большого проекта потребует много гибибайт RAM, никакие танцы с бубном по настройке ОС не помогут (по секрету, и небольшой проект может много сожрать — чем они современные средства разработки кормят, что у них такой аппетит?!).

Virtuos86 ★★★★★
()
Ответ на: комментарий от lovesan

Тем не менее на роль склада говна, по которому надо делать запросы, они годятся лучше, чем что-либо другое.

Если бы тебе пришлось писать бухгалтерскую программу, ты бы её не на RDBMS делал? А на чём?

monk ★★★★★
()
Ответ на: комментарий от Virtuos86

Немного о настройках Windows.

1) Заходим «Журналы приложений и служб» и отключаем все логи

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

3) В службах отключаем использование несколько десятков (они совершенно не нужны любому пользовательскому процессу)
К COM не прикасаемся и даже не смотрим в его сторону, он НУЖЕН (без COM винда станет линуксом).

Какие службы отключаем: «Сервер», «Рабочая станция», ...

Это никак не отразится на работу в домене, ...

4) ...

Это лишь была прелюдия ...
У меня так!

Проблема в том, что многие админы толком то и не знают ничего о службах Windows, настройках эффективной её работы, ...

Но щёки первоклассно надувать умеют и картриджы менять.

Всё как обычно.

За разработку даже заикаться не буду.
Это десять больших ОКЕАНОВ, которые нужно уметь переплыть.

Сложно на форуме вести диалоги.
Многие «спецы» учат, учат, учат ... и постоянно дают знать о том, что они СПЕЦЫ, а оппонент ... (ну вы поняли).

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 5)
Ответ на: комментарий от monk

Иногда упоминаю 1С 7.7.

Почему?

Так как использую конфигурации на 7.7 для отладки run-time API.
Всё дело в том, что API умеет работать с объектами как в memory так и на hdd (не сериализация, а бинарный файл, содержащий данные одного или нескольких объектов).

Так вот любая конфигурация 1С 7.7 (иносказательно) это иерархическое дерево, содержащие данные
(любая конфигурация 1С 7.7 или 1С 8.3 это по существу некое представление иерархического дерева. Но таковым в memory у них оно не является ),
загружаю в объект, содержащий все метаданные и данные.

Non problem создать объект, который будет содержать метаданные и данные любой конфигурации 1С 8.3 (мне пока это не нужно).

И ещё, объекты создаются динамически согласно метаданных.
Можно к примеру создать объект, который содержит метаданные и данные конфигурации для 1С 7.7 или 1C 8.3.

Разрабатываемое API не является а-ля 1С.
Конфигурации 1С для него это просто некий объект (использую для отладки).
Надеюсь понятно о чём речь.

Но на форуме СПЕЦЫ УЧАТ - «нам смешно, что вы упоминаете 1С 7.7 »

ЛОР он такой!

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 6)
Ответ на: комментарий от Forum0888

Эшо

Кстати API корректно работает с любым базовым типом данных (в т.ч. float).
Всё дело в том, что в метаданных поля имеются данные о его значности (для числовых полей).
Для работы с float имеются некоторые «тонкости» и безусловно они учитываются.

Расскажите о разработанном Вами клиенте для 1С.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 3)
Ответ на: комментарий от Forum0888

Примерно так:

(define (get-data)
  (define com (com-create-instance "V83.ComConnector"))
  (define v82 (com-invoke com "Connect" "Srvr=\"1cvm\";Ref=\"buh2014\";Usr=\"Monk\";Pwd=\"*****\""))
  (define Запрос (com-send v82 (NewObject "Запрос")))
  (define Субконто (com-send v82 ПланыСчетов Хозрасчетный (НайтиПоКоду "10") ВидыСубконто))
  (define КоличествоСубконто (com-send Субконто (Количество)))
  (define ИменаСубконто
    (for/list ([i (in-range КоличествоСубконто)])
                   (format "Субконто~a" (add1 i))))
  (define ЧастьЗапросаСубконто
    (string-join (for/list ([i (in-range КоличествоСубконто)])
                   (format "Субконто~a," (add1 i)))))
  (define парамСубконто
    (let ([res (com-send v82 (NewObject "Массив"))])
      (for ([i (in-range КоличествоСубконто)])
        (com-send res (Добавить (com-send Субконто (Получить i) ВидСубконто))))
      res))
  (com-set-property! Запрос "Текст" 
                     (format "ВЫБРАТЬ Организация, Период, Регистратор, Счет, ~a 
СуммаОборотДт, СуммаОборотКт, КоличествоОборотДт, КоличествоОборотКт
ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, , &Субконто, , , ) КАК ХозрасчетныйОбороты"
                             ЧастьЗапросаСубконто))
  (com-send Запрос (УстановитьПараметр "Субконто" парамСубконто))
  (define Выборка (com-send Запрос (Выполнить) (Выбрать)))
  (define objects (make-hash))
  (define (parse-1c value)
    (define type (com-send value (Метаданные) (ПолноеИмя)))
    (define metatype (second (regexp-match #rx"(.*)\\." type)))
    (define uid (com-invoke v82 "XMLСтрока" (com-send value (УникальныйИдентификатор))))
    (define key (list type uid))
    (define found (hash-ref objects key #f))
    (cond 
      [found found]
      [else       
       (define name
         (cond 
           [(string=? metatype "Документ") (format "~a от ~a"
                                                   (com-send value Номер) 
                                                   (date->string (com-send value Дата)))]
           [(string=? metatype "Справочник") (com-send value Наименование)] 
           [(string=? metatype "ПланСчетов") (com-send value Код)]
           [else uid]))
       (define new (ref type uid name))
       (hash-set! objects key new)
       new]))
  (define data-fields
    (map (λ (field) (if (string? field) field (symbol->string field))) 
                  (append ИменаСубконто '(Организация Период Регистратор Счет 
                                                      СуммаОборотДт СуммаОборотКт 
                                                      КоличествоОборотДт КоличествоОборотКт))))
  (define (get-data-row)
    (for/list ([field (in-list data-fields)]) 
      (define value (com-get-property Выборка field))
      (if (com-object? value)
               (parse-1c value)
               value)))
monk ★★★★★
()
Ответ на: комментарий от monk

Спасибо!

Не для того, чтобы «поддеть» Вас.

А для Linux, как?

Сегодня «разговорился».
Разработал API (совместимый с API 1С) для работы с mxl.
К 1С «гвоздями не прибит» (можно использовать в любом скриптовом ЯП).

Когда-нибудь «пооткровенничаю» «для чего?» (не с целью разработки а-ля 1С ОДНОЗНАЧНО).

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 4)
Ответ на: комментарий от Forum0888
(define (new-level elem-gi attributes namespaces expected-content seed)
  (define имя-элемента (по-русски (if (cons? elem-gi) (cdr elem-gi) elem-gi)))
  (set! текущее-состояние 
        (match текущее-состояние
          [(cons уровень возврат) (cons (add1 уровень) возврат)]
          [(состояние при-входе _ _)
           (or (при-входе имя-элемента attributes)
               (cons 0 текущее-состояние))])))

...

(define p (ssax:make-parser NEW-LEVEL-SEED new-level
                            FINISH-ELEMENT finish-element
                            CHAR-DATA-HANDLER char-data
                            DOCTYPE doctype
                            UNDECL-ROOT undecl-root))

(time (call-with-input-file "Файл выгрузки.xml"
        (λ (f)
          ;(read-char f)
          (read-line f)
          (let/ec k
            (set! return k)
            (p f #f)))))

На Windows, впрочем, сейчас также. Через XML намного быстрее.

monk ★★★★★
()
Ответ на: комментарий от monk

Так как в Лисп можно в run-time использовать исходные тексты
модулей, то наверное можно для вашего клиента разработать
run-time генератор Лисп модулей согласно некоего исходного алгоритма или запроса.

То бишь некий свой ЯП.

Шутка

Совместимый с синтаксисом ЯП фирмы 1С.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от Forum0888

Но на форуме СПЕЦЫ УЧАТ - «нам смешно, что вы упоминаете 1С 7.7 »

Упоминание вами v7.7 было сделано в контексте указания недостатков платформы 1С, на что вам справедливо заметило несколько комментаторов что аппелировать к версии 15 летней давности в этом случае не уместно. Это как обсуждать винду и двигать тезисы уровня «Современная Windows плохая потому что Windows 8 не могла…».

Вместо того чтобы просто принять аргумент и продолжить обсуждение вы начинаете рассказывать как хорошо вы владеете v7.7 (мы за вас рады, серьезно, хорошо когда человек - специалист) и пытаетесь «давить авторитетом» скатываясь к концу спитча в Лавсановщину. Не нужно.

Obezyan
()
Ответ на: комментарий от Obezyan

Просто вы поняли всё «по своему».
Посты были вовсе не о том, что Вы сказали.

В предыдущих постах объяснил о чём были суждения.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Forum0888
  1. Заходим «Журналы приложений и служб» и отключаем все логи

Ну и как к вам относиться как к специалисту после таких заявлений?

Но щёки первоклассно надувать умеют

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

Obezyan
()
Ответ на: комментарий от Forum0888

Синтаксис у 1С простой. Проблема в огромной стандартной библиотеке. Там одна ТаблицаЗначений чего стоит с операциями свёртки, сортировки и индексированного поиска.

А клиента и начал делать, потому что местами синтаксиса 1С явно не хватает.

monk ★★★★★
()
Ответ на: комментарий от monk

Мне проще.
Разрабатываемое API позволяет работать с: переменными, массивами, списками, деревьями, ... (но это не а-ля 1С API).
Из а-ля 1С, лишь API для работы с mxl, но оно не «прибито гвоздями» к 1С, а использует API run-time.

Ладно, расскажу одну из причин почему разработал API для работы с mxl.
Можно перенести исходные тексты отчётов из 1С 7.7 в 1С 8.3 ничего не изменяя в исходном коде (но это не основная причина).

Акцентирую то, что API run-time можно использовать в бинарном коде любого ЯП.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 3)
Ответ на: комментарий от Forum0888

Можно перенести исходные тексты отчётов из 1С 7.7 в 1С 8.3 ничего не изменяя в исходном коде (но это не основная причина).

У тебя поддерживается работа в стиле 7.7, когда код в MXL тоже выполняется?

monk ★★★★★
()
Ответ на: комментарий от monk

Да, но используются не переменные 1С, а переменные из run-time.

Функционирует всё на удивление просто.
В исходном коде 1С ничего менять не нужно, 1С использует переменные run-time как свои родные.
В run-time переменные не Variable, но при их использовании они конвертируются в Variable.
Скорость выполнения даже чуть выше чем в родном коде 1С, так как эффективность «подсаживает» COM.

Вот когда разработаю свой объектно-ориентированный ЯП, тогда всё будет
многократно эффективней (начал его разработку, но приостановил из-за того, что разработка GUI, более приоритетная задача).

Простой пример:

// Переменные, используемые для формирования отчета
//
typedef struct НаселПункты__ {

  TCHAR  *VpPage;                                          // Номер листа
  TCHAR  *Header001;                                       // Заголовок шапки
  INT    VpКод;                                            // Код населенного пункта
  INT    VpКодСбыт;                                        // Код в отделе сбыт
  TCHAR  *VpНазвУлицы;                                     // Название улицы
  TCHAR  *LinkПотребитель;                                 // Расшифровка
  TCHAR  *VpНаимОператора;                                 // Наименование оператора
  TCHAR  *VpПодпись;                                       // Подпись

} НаселПункты_;                                            // typedef struct НаселПункты__ {

Ещё раз акцентирую, что API работает в run-time и компиляторы «c досады нервно грызут ногти».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 8)
Ответ на: комментарий от Forum0888

Да, но используются не переменные 1С, а переменные из run-time.

Это реально круто. А то в 1С 8 сделали «разделение представления и алгоритмов», теперь на каждый отчёт кучу однотипного кода приходится писать.

monk ★★★★★
()
Ответ на: комментарий от monk

На самом деле может быть использовано много *.h и любой вложенности #include.
В struct поддержан общепринятый синтаксис и расширенный (определения семантики полей и struct).
В частности в struct возможно использовать инициализацию полей и структур, ..., ...
У меня это именуется подсистемой поддержки сишного интерфейса (можно использовать метадата базы, ...).
Имеются конечно разные способы задания метаданных.
Много чего «сказать есть».
В постах лишь немножко рассказал о разрабатываемом API.

Sorry, хотя и использую 1С уже лет двадцать, но СТО ПУДОВ не считаю себя 1С-ником.
Разработчикам 1С РЕСПЕКТ.

Ещё немножко.
API для работы с mxl использует freetype (перевёл его на C++, убрал десятки макросов, ..., но название оставил исходное).

Через какое-то время опубликую исходники.
Разработано лишь процентов 10 - 15 от планируемого.

В частности будет разработано API для использования баз знаний.

Не разрабатываю а-ля 1С.

Разрабатываемое API - кроссплатформенное core, которое можно будет использовать в любом проекте на любом ЯП.

Где-то так.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 8)
Ответ на: комментарий от Obezyan

По теме - я вообще не знаю ни одного реального примера который не мог бы быть автоматизирован на 1С.

Всякое бывает: https://www.henricodolfing.com/2020/05/case-study-lidl-sap-debacle.html

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

https://www.henricodolfing.com/2020/05/case-study-lidl-sap-debacle.html

Это же SAP. Он известен своим подходом «вы должны переделать свой бизнес под наш софт».

А в статье этот тезис вообще не ставится под сомнение:

One would expect the Lidl organization to learn from this lesson. But nothing seems less true. According to the latest reports, the retailer has decided to continue to develop the old, self-developed ‘Wawi’ system. So that they can continue the way of stock valuing in the old, familiar way. And therefore do not have to change.

В 1С гибкости на порядок больше. При необходимости вообще пилится что угодно по желанию заказчика. Я с одним помощником делал из 1С:Управление торговлей 10 систему учёта ремонтами сотовых телефонов. С учётом аналогов деталей, сроков ремонта, стадий ремонта и выпиской всех документов (накладная, кассовый ордер, счёт-фактура) одной кнопкой. Цена вопроса была примерно 200 тысяч рублей. Другим в 1С:Зарплата 2.5 за месяц сделал расчёт зарплаты с расчётным «месяцем» с 27-го по 27-е число.

А здесь за сотни миллионов евро не смогли учёт в закупочных ценах реализовать. Я в шоке.

monk ★★★★★
()
Ответ на: комментарий от monk

Я в шоке.

Аналогично. Собственно, из-за освежающего эффекта мне и полюбилась эта история.

В 1С гибкости на порядок больше.

Мне кажется, тут больше дело в корпоративной культуре, нежели в технических особенностях. Компанию, где я работаю, давеча SAP купила и у меня пол года зад пылал от того, как всё становится сложнее и хуже. Потом привык. Лучше не стало, просто привык.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Мне кажется, тут больше дело в корпоративной культуре, нежели в технических особенностях.

И в технических. 1С всё-таки родня линуксу: вся конфигурация в исходниках, можно легко сделать «такое же, но с перламутровыми пуговицами» или, наоборот, с нуля построить всё, что душа пожелает.

SAP - это даже не Windows. Это старый (до Mac OS X) макинтош. Делать надо именно так, как нами задумано. Делать надо то, что мы задумали. Возможный выбор только в рамках предусмотренного. Если что-то не предусмотрены, то это вам не надо.

monk ★★★★★
()
Ответ на: комментарий от ugoday

Всякое бывает: https://www.henricodolfing.com/2020/05/case-study-lidl-sap-debacle.html

Там прямо в начале статьи написано почему не взлетело: About a thousand staff and hundreds of consultants implemented a new company-wide system for inventory control.

Это не техническая проблема. SAP славится своим умением впаривать кровавый энтерпрайз (пролезая в фирму за откаты манагерам) и устроить дойку жирного клиента. В 1С тоже бывают истории распила, но таких крупных факапов я не помню.

Лидл (4 500 магазинов) вполне сможет работать на 1С, также как и Магнит (28 707 магазинов - работает на 1С 8.3) или Пятерочка (19 000 магазинов - работает на 1С еще с версии 7.7). Вот 7-Eleven (79 000 магазинов) может испытать некоторые трудности с масштабированием на 1С, но там больше вопрос к качеству архитектуры.

Obezyan
()
Ответ на: комментарий от Obezyan

У 1С есть место, где он не очень хорошо работает: крупные одиночные базы. То есть, когда у тебя не тысячи отдельных магазинов, а один крупный сложный завод.

Например, при внедрении на КАМАЗе, насколько я помню, чуть ли не половину отчётов переписали на прямые запросы к SQL. Скорости платформы на тех масштабах уже не хватало.

Хотя эти проблемы были когда только вышла 8.2. С тех пор уже раза четыре значительно улучшали производительность на крупных базах.

monk ★★★★★
()
Ответ на: комментарий от monk

monk, ничего «крутого» в этом нет и всё крайне тривиально.
Просто такого рода API давно должно было быть разработано кем-то другим (задач ведь полно).

Почему так?

Потому что нынешние технологии - «наскальные».
Они вообщем-то как бы и хороши были для 60-х, но ныне двадцать первый век и ЭВМ стали немного другими (хотя «запашёк» у них тот же, что и в 60-х).

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 4)
Ответ на: комментарий от Forum0888

«наскальные» ибо https://en.wikipedia.org/wiki/Bullshit_Jobs

вот теже «новомодные» RPA которые по сути автокликеры во многом.

экономика эффективна в предметах «роскоши» - решения устраняющие маржу экономически бессмысленны сами по себе - но только как часть более общего решения дающего прибыль и или вытесняющее опонентов

в чём сила рыночка - продуцирование иммунитета по его сохранению

qulinxao3 ★☆
()
Ответ на: комментарий от Forum0888

Немного конкретики.

Технология разработки ЯП с использованием грамматик не пригодна для создания ЯП с хорошим синтаксисом.

Линковщики застыли в 60-х и не понимают, что такое динамические переменные и много много более.

Популярные текстовые форматы данных - ЛАБА.

...

Имеется ли прогресс?

Безусловно.
Разработано много хороших алгоритмов для разного типа задач.

Так что, всё же «И жизнь хороша и жить хорошо».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Obezyan

Так я к тому и веду. Если всем этим прекрсным «a thousand staff and hundreds of consultants» дать в руки 1С, то вот вообще не понятно отчего результат будет иным. Так что «реальный пример который не мог бы быть автоматизирован на 1С» вполне возможнен, ибо помимо технологического, есть и иные аспекты реальности.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Так что «реальный пример который не мог бы быть автоматизирован на 1С» вполне возможнен

Я имел ввиду сугубо технический аспект. А имитацию бурной деятельности за откаты можно проводить в любом проекте, любой сферы деятельности. Это не проблема программного продукта.

Obezyan
()
Ответ на: комментарий от monk

Довод простой. Под новое оборудование не будет драйверов для старых ОС.

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

Я лично когда речь идет о клиентском софте, в 2023м году сразу готов говорить - минимальная поддерживаемая версия винды - Windows 10. Ретрограды, контрамоты и говноеды пусть идут к херам, ковыряются в грязи, и жрут говно. Хера им с три а не софт. Пусть ставят себе хоть Windows 3.11 и играют там в пасьянс «косынка».

Это я еще не говорю про Security Updates итд, которые под ОС с вышедшим сроком поддержки и вообще годности(типа семерки), не делают.

lovesan ★★★
()
Ответ на: комментарий от lovesan

Я лично когда речь идет о клиентском софте, в 2023м году сразу готов говорить - минимальная поддерживаемая версия винды - Windows 10.

Так и запишем — не осилил.

Ретрограды, контрамоты и говноеды

…в переводе с твоего на русский — это люди, которые не хотят выбрать старую работающую технику, видимо.

ковыряются в грязи, и жрут говно

– то, чем всем придётся заниматься на убитой отходами планете. К сожалению, всем, а не только тем, кто не умеет в совместимость с умеренно старыми ОС, это действительно проблема.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от lovesan

Я лично когда речь идет о клиентском софте, в 2023м году сразу готов говорить - минимальная поддерживаемая версия винды - Windows 10

Напомни, почему ты до сих пор не свалил на винфак

alex1101
()
23 февраля 2024 г.
Ответ на: комментарий от Forum0888

Так как в Лисп можно в run-time использовать исходные тексты модулей, то наверное можно для вашего клиента разработать run-time генератор Лисп модулей согласно некоего исходного алгоритма или запроса.

То бишь некий свой ЯП.

Шутка

Совместимый с синтаксисом ЯП фирмы 1С.

да нет, не шутка. лет 11 назад мне надоела 7.7 и 8.2 – я почувствовал как тупею. и я начал изобретать свой её аналог (вдохновившись 2Cgpl, только там простой интерпретатор, а я писал компилятор/транспилятор). оказалось не сильно сложно.

написал парсер 7.7 на ANTLR и транслятор его распарсенного AST в другое всякое.

в ANTLR 3.4 есть метод ((Tree)parser.tree).toStringTree(), который прямо так берёт и выводит AST сгенерированного parser в виде S-выражений.

как-то копипастил её на лоре в несколько постов, там несложно. парсер сам простой, основная сложность – в ANTLR грамматике. опять же, если делать правильные семантические предикаты – то тоже нетривиально, если забить и делать динамически – но гораздо проще.

я пытался взять за образец грамматику из оберона, допилить до русскоязычного и отладить – сразу делать тесты грамматики правильные на gUnit. основное время заняли сами тесты.

примерно за пару месяцев, не сильно тратя время по паре часов вечерами – допилил прототип. основное время заняло чтение книжек по ANTLR и настройка плагина ANTLR в Eclipse.

потом немного повозился с правильным pretty printing-ом, но забил – готовая функция в Emacs и так неплохо справляется с форматированием лисп-кода.

в общем, получился такой простой и примитивный транслятор грамматики 7.7 и любой программы на ней в S-выражения.

потом с небольшим количеством макросов на лиспе, которые непосредственно исполняли либо переводили на другой язык (например, лисп) – получился готовый интерпретатор/компилятор 7.7 в лисп.

ещё возился с перенацеливанием с целевого лиспа в целевой оберон, затем аду.

потом в мумпсы.

в общем, поразвлекался пару месяцев вечерами.

anonymous
()
Ответ на: комментарий от Forum0888

Технология разработки ЯП с использованием грамматик не пригодна для создания ЯП с хорошим синтаксисом.

что такое «хороший синтаксис» и почему он хорош?

это какая именно технология и почему? что на ANTLR, что на CoCo/R пишется несложно, и синтаксис любой можно довольно просто сделать.

есть более правильная идеологически – K framework. там примерно как в ANTLR v3 gUnit, нужно начинать сразу с тестов и определять семантические предикаты, продвигаться сразу в семантику.

там тоже не очень сложно выглядит.

Линковщики застыли в 60-х и не понимают, что такое динамические переменные и много много более.

вот да, по Вашей ссылке, Владимир – на UCSD p-code system нашёл рассадник цитатник высказываний и книг Эдсгера Дейкстры и Никлауса Вирта.

сейчас вот перечитывал «Долой жирные программы». где он как раз рассказывал про design decisions повлиявшие на то как он Oberon-2 делал.

сделали расширение типов – правильное, с учётом наследования, перехода через границы модулей.

в какой-то другой книжке про оберон (то ли алгоритмы+данные=программы, то ли про конструирование компиляторов) – про метод пошагового уточнения /stepwise refinement и разницу между независимой и раздельной компиляцией модулей. (или это в книжке про модулу?)

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

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

при этом модули не приходится перекомпилировать заново. на них вообще могут исходники отстутствовать.

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

видно все эти ценности и проектные решения которые были сознательно выбраны в проекте оберон.

в общем, долой жирные программы!! довольно познавательным чтивом оказалось, с эдаким design rationale

даже Plan 9 и Inferno выглядят какой-то вторичной и опоздавшей попыткой исправиться. сравнивая оберон и limbo, второй как-то более на виртуальную машину завязан (она хоть и регистровая Dis, но всё таки, с модульностью и корректной статической типизацией там другой подход).

в общем, что оберон, что активный оберон, что инферно выглядит какой-то более продуманной расширяемой операционной средой.

да даже тот же p-code в паскалях, m-сode в модулах, o-code в BCPL.

чем это вот жёлто-красное поделие, ога. :))

anonymous
()
Ответ на: комментарий от anonymous

что такое «хороший синтаксис» и почему он хорош?

Например в Си if ( VpInt01 = VpInt02 ) является синтаксически правильным, а наверняка должно быть if ( VpInt01 == VpInt02 ).
Оператор запятая тоже может способствовать ошибкам в исходном коде.
Например:

 VpInt01 = VpInt03 > 1,
           15,
           16;
Полная чушь, а компилятор видит в этом что-то полезное.

Всякие красивые синтаксические «фантики», ...

в общем, что оберон, что активный оберон,

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

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Forum0888

Полная чушь, а компилятор видит в этом что-то полезное.

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

синтаксис в этом смысле должен устранять неоднозначности – например, if {LogicExp} then {op} else {op} endif одназначно подразумевает, что выражение логическое вычисляющееся в true/false, что op – оператор а не выражение, то есть, для которого важны побочные эффекты а не возвращаемое значение и т.п.

в этом смысле попытка налепить всё в одно-единственное выражение – пример того, как делать можно, но не нужно: нарушается соответствие синтаксиса и семантики, плотно упаковывая в одно выражение.

с другой стороны, если бы например это был функциональный язык. то op может быть например лямбдой, которую можно погрузить в другую лямбду либо конструкцию наподобие let over lamda – то есть, замыкание. то есть, упрощая композицию за счёт корректных типов выражений.

anonymous
()
Ответ на: комментарий от Forum0888

Оператор запятая тоже может способствовать ошибкам в исходном коде.

Это ещё что, вот у А. В. Столярова которого некоторые огульно хаят не читая – есть лисп InteLib, полученный трансляцией в С++ выражения.

в описании есть некая «операция пробел», конструирующая лисп-выражения в некоторой алгебре.

типа как в языке Io пробелом можно показывать вызов метода прототипного ООП и цепочечный вызов методов, только здесь раскрутка S-выражений в С++-выражения некоторых классов получается частично во время компиляции шаблонами, частично – во время выполнения.

лисп был раскручен в более-менее полноценный диалект схемы.

был у него студент, который написал аналогичную раскрутку на D, а не на С++.

D в этом смысле более перспективный язык – из-за CTFE и информации о типах времени выполнения, typeinfo в модулях.

было это (InteLib) примерно в 2006, диалект на D (Scheme4d.tar.gz) – примерно 2007..2008.

в это время D был диалекта D1, со многими ограничениями. например, 3D стрелялку Deadlock на D писал h3r2tic сайт наподобие quake – там на CTFE были шейдеры и множество фич завязаны. D1 в то время был не зрелым – в линкере digital mars OPTLINK были проблемы, некоторые фичи были в стандартной библиотеке phobos не доделаны. в той стрелялке они сделали свой форк D1, рантайма phobos и попутно написали средство сборки xfbuild.

ещё он делал Nuklear-подобный GUI: Hybrid, стрелялку Deadlock, xfbuild и CTFE raytracer на D ctrace.

большинство наворотов в Hybrid, Deadlock, ctrace сделаны во время компиляции (CTFE).

сейчас он похоже, растом увлёкся.

сейчас этот код Scheme4d бы стоило на D2 переписать.

например, когда в разработку D подключился Александреску – там появился std.algorithm как более полноценный аналог boost-а и Loki (про локи кажется тот же Александреску книжку написал, которой можно детей пугать – пример шаблонов головного мозга показывающий скорее то, как делать не надо. впрочем, в книге Александреску про D2 с описанием std.algorithm стало наконец понятно, к чему это всё было – из-за более полноценной поддержки typeinfo и CTFE в D, библиотеки наподобие STL std.algorithm поддерживает «лямбды времени компиляции» которые транслируются как string mixin, template mixin в D.

например, на D2 есть библиотека с некрасивым названием pegged позволяющая написать рекурсивный нисходящий парсер на CTFE выражениях времени компиляции.

из примеров в этой библиотеке есть, например, Oberon-2 или extended_pascal.

PEG выражения во время компиляции (CTFE) параметризуются нужной грамматикой и раскрываются в итоговые выражения через string mixin/template mixin – в полноценный код на языке D.

то есть, если бы например в подобном стиле переписать на D2 вот тот код Scheme4d.tar.gz студента Столярова – то возможно, получилось бы вообще обойтись только выражениями времени компиляции, с ещё меньшими накладными расходами на рантайм-поддержку объектных выражений полученных в алгебре программ с «операцией пробел» трансляцией из S-выражений исходного лиспа в целевой D2 (а не С++)

в общем, сделать такой лисп с минимальным рантаймом – потому что в основном вся раскрутка происходит во время компиляции, CTFE макросами.

в InteLib на С++ А.В. Столярова с «операцией пробел» в этом смысле не совсем правильный СTFE, ибо С++.

На D2 этот подход был бы реализован более прозрачно и правильно.

anonymous
()
Ответ на: комментарий от Forum0888

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

подход не такой уж и новый – всё новое это хорошо забытое старое.

«лишняя функция – это бОльшая ненадёжность и узязвимость», поэтому фичи и концепции нужно оценивать не столько поо количеству – сколько по качеству.

просто концепции – существенные, essential в основании должны быть правильные. допускающие адекватное расширение.

Э. Дейкстра давным-давно писал про «скромного программиста» humble programmer, дисциплину программирования, упрощение до минимализма, а не примитивизма используемых концепций.

минимализм – это про то, как выразить бОльший смысл малыми средствами.

примитивизм – это когда нет никаких бОльших смыслов кроме примитивно накаляканых.

в этом смысле, нужно как писал А. Белый в книге «Символизм как миропонимание» – не столько пассивное мировозрение, мировосприятие, любомудрие и прочее потакание собственной важности.

сколько активное преобразование реальности, этакий перфоманс – миропонимание. того как применить все эти символы и концепции, подходы, принципы и парадигмы.

Н. Вирт уточнил в stepwise refinement методе пошагового уточнения – как правильно нужно набрасывать абстракции.

в «долой жирные программы!» – выяснилось, что важно не просто количество фич, но их качество: структура, модульность, адекватное расширение типов.

в книге про устройство компонентной модели SOM для OS/2, например, тоже похожий подход: берём сначала принципы (ABI не должно ломаться при изменении класса в предка и потомка, двигая его по иерархии наследования) – то есть, реализация этих принципов должна сохранять некоторые инварианты. потом реализуем эти принципы и получается некоторый shim, trampoline для реализации SOM API, и компилятор VisualAge C++ который С++ классы в такие вот SOM классы на plain C ABI прозрачно транслирует.

для поддержки адекватного расширения типов – вводят метаинформацию, typeinfo о модулях и другой, более объектно-ориентированный линкер, лоадер.

в Plan 9 компилятор kencc тоже кстати переделывают 6c/6l, 8c/8l – более другой линкер/лоадер.

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

и не ждать пока по полчаса C++ шаблоны на BOOST или STL откомпилируются :))

в общем, и Никлаус Вирт в оберонах и Керниган, Пайк и Ритчи в Plan9 и Inferno, и Волтер Брайт, Александреску, h3r2tic,PhilippeSigaud показали – чего можно достичь адекватно структурированной модульностью.

даже на С можно писать аккуратно и модульно. только большинство так не делает :)

С++ в этом смысле наоборот, провоцирует писать монолитные жирные программы.

и пока продаются фичи по количеству, а не по качеству (никто же не покупает «правильную архитектуру» как более ценную фичу) – этот театр абсурда и будет продолжаться.

в оберонах, инферно, да даже том же p-code и паскалине – нужно немножко отстраниться назад и посмотреть не замыленным взглядом.

какие фичи наиболее важные, а какие концептуально не правильны.

как должно развиваться ядро системы, и как её модули.

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

в общем, интересные соображения появляются.

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

или ещё каком языке – допускающим адекватное конструирование высокоуровневых конструкций из адекватно подобранных низкоуровневых.

например, была такая реализация оберона на языке Ocaml: Oxford_Oberon-2_compiler и соответствующий курс как и соответствующий ему курс по конструированию_компиляторов

репозиторий на гитхабе: Spivoxity/obc-3

ещё у него есть picopascal на котором написан picoProlog

anonymous
()
Ответ на: комментарий от Forum0888

операция пробел

вот тут подробнее написано:

А. В. Столяров. Парадигмы программирования и алгебраический подход к построению универсальных языков программирования.

в публикациях этого весьма интересного автора

//правда ощущение – как про моноид в категории эндофункторов
// у мольера вон тоже герой внезапно обнаружил, что оказывается,
// он прозой разговаривал – только не знал что это так по-учёному называется

шок. скандалы, интриги. расследования.

anonymous
()