На каком языке написан 1с: Предприятие» — что под капотом? / Хабр

Встроенный язык

Встроенный язык является важной частью технологической платформы «1С:Предприятия 8», поскольку позволяет разработчику описывать собственные алгоритмы функционирования прикладного решения.

Встроенный язык имеет много общих черт с другими языками, такими как Pascal, Java Script, Basic, что облегчает его освоение начинающими разработчиками. Однако он не является прямым аналогом какого-либо из перечисленных языков.

Вот лишь некоторые, наиболее значимые особенности встроенного языка:

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

Событийная ориентированность встроенного языка

Назначение встроенного языка в системе 1С:Предприятие определяется идеологией создания прикладных решений. Прикладные решения в 1С:Предприятии 8 не кодируются целиком. Большая часть прикладного решения создается разработчиком путем визуального конструирования — создания новых объектов конфигурации, задания их свойств, форм представления, взаимосвязей и пр. Встроенный язык используется лишь для того, чтобы определить поведение объектов прикладного решения, отличное от типового, и создать собственные алгоритмы обработки данных.

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

событиями. События могут быть связаны с функционированием объектов прикладного решения или с самим прикладным решением, как таковым.

Например, с функционированием объекта прикладного решения Справочник связан ряд событий, среди которых есть событие ПередЗаписью:


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

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

Универсальные коллекции значений

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

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

Перечислим кратко их возможности:

Массив

Представляет собой пронумерованную коллекцию значений произвольного типа. К элементу массива можно обращаться по его индексу. В качестве элементов массива могут выступать, в частности, другие массивы. Это позволяет создавать многомерные массивы.

Структура

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

Соответствие

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

Список значений

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

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

Таблица значений

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

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

Дерево значений

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

COMSafeArray

Представляет собой объектную оболочку над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.

Фиксированный массив

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

Редактор текстов и модулей

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

1С:Программирование для начинающих. Детям и родителям, менеджерам и руководителям. Разработка в системе «1С:Предприятие 8.3»

Авторы: М.Г. Радченко


«1С:Предприятие» перешло на российскую Java

ПО Свободное ПО Открытое ПО

|

Поделиться

    Вслед за оператором платежной системы «Мир» фирма «1С» выбрала отечественную Java. Компания будет включать российскую платформу Liberica JDK в комплекты поставок ПО, требующих соответствующей среды исполнения.

    «1С» выбирает российскую Java

    Как стало известно CNews, фирма «1С» выбрала отечественную платформу Liberica JDK компании Bellsoft в качестве стандартного средства запуска компонентов программ системы «1С:Предприятие», написанных на языке программирования Java. Кроме того, Bellsoft будет оказывать техническую поддержку фирме «1С».

    Среду исполнения Java, входящую в состав пакета Liberica JDK, планируется включать в комплекты поставок ПО «1С», в составе которого есть Java-компоненты. В частности, инструмент разработчика 1C:Enterprise Development Tools (EDT) для своей работы нуждается в среде исполнения Java, пояснили CNews в Bellsoft.

    1C:EDT – это кроссплатформенная расширяемая среда разработки прикладных решений для платформы «1С:Предприятие». Она создана на основе популярной интегрированной среды разработки Eclipse с открытым исходным кодом на Java. 1C:EDT включает инструменты автоматизации разработки, а также позволяет расширять функциональность инструментов разработки с помощью дополнений (плагинов).

    «1С» выбрала Liberica JDK в качестве стандартной среды исполнения Java-компонентов своих программ

    Представитель «1С» в разговоре с CNews подтвердила факт перехода на Liberica JDK, однако воздержалась от рассказа о подробностях.

    Почему не Oracle JDK

    Говоря о возможных причинах выбора фирмы «1С» в пользу Liberica JDK при наличии альтернатив в виде Oracle JDK и OpenJDK, генеральный директор компании Bellsoft Александр Белокрылов отметил, что «благодаря сотрудничеству с Bellsoft «1С» получает возможность предоставлять миллионам своих пользователям безопасную и надежную среду исполнения Java, а также – возможность оперативно исправлять обнаруженные дефекты прямо в проекте OpenJDK». По его мнению, экспертиза и опыт инженеров Bellsoft позволяют поддерживать в новых версиях Liberica JDK компоненты, которые были исключены из поддержки Oracle JDK, например, JavaFX.

    «Подобные преимущества, как показал опыт, являются существенными для ряда клиентов Bellsoft. Также важным аспектом было изменение лицензионной политики и отсутствие возможности использовать Oracle JDK без коммерческой подписки на поддержку», – пояснил Белокрылов.

    Напомним, что в апреле 2019 г. корпорация Oracle изменила условия использования Oracle JDK. По условиям новой лицензии, бесплатно применять Oracle JDK/JRE в коммерческих целях стало запрещено. До этого момента фирма «1С» рекомендовала именно эту сборку для запуска среды разработки 1C:Enterprise Development Tools.

    В примечании к релизу EDT версии 1.11.0, который состоялся летом 2019 г., предлагалось при отсутствии соответствующей подписки вместо Oracle JDK использовать один из дистрибутивов на базе OpenJDK, среди которых фигурировал и Liberica JDK.

    Что такое Liberica JDK

    Liberica JDK – это среда разработки и запуска Java-приложений. Продукт создан российской компанией Bellsoft на основе проекта с открытым исходным кодом OpenJDK. Liberica JDK позиционируется разработчиком в качестве полноценной замены Oracle JDK. Liberica JDK включена в реестр российского ПО, допущена ФСБ для использования с сертифицированными криптографическими средствами и протестирована на совместимость с рядом отечественных операционных систем.

    Дмитрий Курашев, UserGate: Экосистемный подход будет определять развитие рынка ИБ в России

    Безопасность

    Liberica JDK поддерживает широкий выбор платформ включая как современные 64-битные Linux x86, ARM, так и устаревшие (legacy) 32-битные, Solaris SPARC, x86, PowerPC. Система также гарантировано работает на российских ОС: Astra Linux, «Альт», «Ред ОС», «Роса». Таким образом, Liberica JDK подходит для работы в гетерогенном окружении.

    Первоначальный разработчик Java – компания Sun Microsystems, в 2009 г. поглощенная Oracle, в 2007 г. открыла исходный код Java под свободной лицензией GNU GPL v2 и создала проект OpenJDK, позволив другим компаниям участвовать в развитии платформы.

    Начиная с версии 11, которая вышла в сентябре 2018 г., платформа Oracle JDK является платной. Последнее публичное обновление Java 11 вышло в феврале 2019 г. В данный момент и до декабря 2026 г. доступ к патчам безопасности и критическим исправлениям для Java 11 возможен только для коммерческих клиентов Oracle. Java 8 – еще одна актуальная версия платформы, вышла в марте 2014 г., а публичные обновления ее пользователи перестали получать в январе 2019 г. Bellsoft предлагает коммерческую поддержку версий Java 8 и 11 на собственной платформе Liberica JDK до 2031 и 2027 г. соответственно.

    Liberica JDK, по заявлению представителей Bellsoft, включает все исправления критических уязвимостей, дефектов и оптимизации производительности. Bellsoft, наряду с Red Hat, SAP, Google и IBM, входит в пятерку компаний, вносящих наибольший вклад в разработку OpenJDK (по числу отправленных исправлений). Это дает возможность заказчикам российской компании получать исправления безопасности синхронно с Oracle Java.

    Проект в НСПК

    В конце сентября 2020 г. CNews сообщил о том, что оператор платежной системы «Мир», «Национальная система платежных карт» (НСПК), перешла на Liberica JDK. До перехода на отечественный дистрибутив Java в организации использовалась оригинальная платформа Oracle JDK.

    Александр Грицай, Forecast NOW: Как сделать продукт для управления запасами лучше, чем у многомиллиардных ИТ-корпораций?

    Импортозамещение

    Разработка компании Bellsoft применяется НСПК в качестве платформы для систем процессинга, клиринга и программы лояльности. Также, по условиям соглашения, Bellsoft оказывает оператору техническую поддержку.

    • Приложения для слежки за чужим смартфоном, за которые вам ничего не будет

    Дмитрий Степанов


    Все ли языки написаны на C?

    Все ли языки написаны на языке C?

    Язык — это набор абстрактных математических правил и ограничений («если я напишу , получится , — получится »). На самом деле ничего не написано.

    Он указывается, как правило, в виде смеси формализованного подмножества английского языка, математической нотации и, возможно, какого-либо специализированного языка спецификации. Синтаксис часто указывается в варианте EBNF или ABNF.

    Например, вот спецификация выражения для из спецификации ISO Ruby Language:

    Синтаксис

    • For-Expression для для переменных [Нет линейного концевого терминатора] в Экспрессия DO-CLAUSE END
    • 7
    • для переменной левая сторона | несколько левых

    Семантика

    для выражения оценивается следующим образом:

    1. Вычислите выражение . Если вычисление выражения завершается break-expression , next-expression или redo-expression , поведение не определено. В противном случае пусть O будет результирующим значением.
    2. Пусть E будет вызов первичного метода формы первичное выражение [здесь нет разделителя строк] .each do | блок-параметров | block-body end , где значение первичного выражения равно O , список параметров блока является для переменной , 0 блок-тело

      составной оператор

      из пункта .

      Оценка E ; однако, если блок, блок-тело которого является составным оператором из do-clause из for-expression , вызывается во время этой оценки, шаги в §11.3.3, кроме шага c) и Шаг e) 4) должен быть предпринят для оценки этого вызова.

    3. Значение for-expression является результирующим значением вызова.

    Вот другой пример из правил соответствия типов Scala:

    Полиморфный тип [a 1 >: L 1 <: U 1 , … , a n >: L n <: U n 2T 90 соответствует полиморфному типу [a1 >: L’ 1 <: U' 1 , … , a n >: L’ n <: U' n ]T’ , если, принимая L’ 6 1 1 <: a 1 <: U' 1 , … , L’ n <: a n <: U'n есть T <: T′ и L i <: L′ i и U′ i <: U i для i ∈ { 1 , …} .


    Является ли язык C матерью/отцом всех языков?

    Нет, это не так. С довольно молод. Есть много древних языков. Поскольку путешествие во времени физически невозможно, Си просто не может иметь никакого влияния на эти старые языки.

    • Планкалкюль (1943)
    • Скоростное кодирование (1953)
    • Фортран (1954)
    • ИПЛ (1956)
    • Лисп (1958)
    • Алгол (1958)
    • КОБОЛ (1959)
    • ВЕСЕЛЫЙ (1960)
    • АПЛ (1962)
    • СИМУЛА ​​(1962)
    • СНОБОЛ (1962)
    • CPL (1963)
    • БАЗОВЫЙ (1964)
    • PL/I (1964)
    • РПГ (1964)
    • БКПЛ (1966)
    • ИСВИМ (1966)
    • СВИТОТ (1967)
    • Форт (1968)
    • ЛОГОТИП (1968 г.)
    • РЕФАЛ (1968)
    • Б (1969)
    • БЛАЖЕНСТВО (1970)
    • Паскаль (1971)
    • КРЛ (1971)
    • Малый разговор (1972)

    Все они существовали еще до изобретения C. И многие другие не имеют в себе влияния C, даже после того, как он существовал. Семейство языков PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Active Oberon, Component Pascal) представляет собой совершенно отдельную линию. Все семейство Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket и т. д.) также не связано. Функциональные языки (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F#, Haskell, Gofer, Clean) и все семейство языков с зависимой типизацией (Agda, Coq, GURU, Idris) максимально далеки от C. То же самое верно для семейства Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), семейства логического программирования (PLANNER, Prolog, Mercury), SQL и многих других.

    Все концепции (ООП и т. д.) реализованы на языке C?

    Первыми языками с объектно-ориентированными концепциями были Simula (1960) и Smalltalk (1972), но объектно-ориентированные системы были построены еще в 1953 году (не называя их так). Опять же, это произошло задолго до того, как появился C, поэтому объектно-ориентированный программирования не может иметь никакого отношения к C.

    Что значит, что «язык A написан на языке B»?

    спросил

    Изменено 3 года, 5 месяцев назад

    Просмотрено 9к раз

    Я часто слышу, что язык A написан на языке B. Например, PHP было написано C , C# написано на C++ .

    Кто-нибудь может объяснить, что это значит и правильно ли это? Это как-то связано с компилятором интерпретатора, используемого языком?

    Кроме того, на каких факторах основывается выбор языка реализации?

    • языки программирования
    • не зависящие от языка

    6

    Большинство языков программирования делятся на две категории: интерпретируемые и компилируемые языки.

    Компилируемый язык транслируется компилятором в машинный код, язык, который ЦП выполняет шаг за шагом напрямую. С другой стороны, интерпретируемый язык использует посредника, интерпретатора, для запуска языкового кода. Интерпретатор сам по себе является другой программой, обычно компилируемой в машинный код.

    PHP является интерпретируемым языком. Вам нужна отдельная программа для запуска PHP-кода , компьютер не запускает программу напрямую. Эта отдельная программа, интерпретатор PHP, сама написана на C.

    C# — компилируемый язык, но он не компилируется в машинный код. Вместо этого он компилируется в специальный язык, байт-код, для запуска на виртуальной машине. Java — еще один пример такой установки. Вы можете видеть это как гибрид между компиляцией и интерпретацией, где виртуальная машина является интерпретатором. Виртуальная машина для C# (CLI или Common Language Infrastructure) написана на C++.

    Другие примеры:

    • Python: Интерпретатор Python компилирует код Python в байт-код Python, а затем интерпретирует байт-код. Сам интерпретатор написан на C. С тех пор были добавлены новые реализации, в том числе одна, которая компилирует python для работы в том же CLI, который используется для C #, называемая IronPython, и одна, которая работает на виртуальной машине Java, Jython. Чтобы завершить круг, есть версия Python, написанная на (подмножестве) Python, PyPy.
    • Ruby: Ruby начинался как чисто интерпретируемый язык, но самая последняя версия переключилась на использование байт-кода. Для Ruby также есть проект IronRuby, который компилируется в CLI, и проект JRuby для Java VM.

    5

    В основном вы правы. Если говорят, что Ruby написан на C, это означает, что интерпретатор языка и части базовой библиотеки написаны на C. вызывает функции, которые находятся либо в другом текстовом файле (если они написаны на Ruby), либо в скомпилированном коде C, поскольку большая часть базовой функциональности требует прямого доступа к системным ресурсам, таким как память, файловая система и многое другое. И некоторые функции, требующие очень высокой производительности.

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

    Факторы для принятия решения могут быть такими же, как и для других сложных приложений. Производительность одна. Возможность писать код, который может напрямую обращаться к системным ресурсам. Поэтому в большинстве случаев это должен быть скомпилированный язык (хотя теоретически вы можете написать интерпретатор Ruby на Python). Доступность в разных системах важна, если вы хотите, чтобы ваш язык работал в Linux, Win, OS X и других.

    6

    Это просто означает, что большая часть ядра языка A написана на языке B. То, что «ядро языка A» может отличаться от языка к языку, но в общих чертах вы правильно догадались, это означает, что это компилятор или интерпретатор. Решающим фактором при выборе языка для написания другого языка, как и почти в каждом проекте, является то, с какими языками лучше знакомы разработчики.

    Тем не менее, «язык А написан на языке Б» является чрезмерным упрощением для большинства современных языков. Если мы возьмем Python в качестве примера, хотя эталонная реализация CPython действительно была написана на C, существуют реализации, написанные на других языках, таких как Jython (написанная на Java), IronPython (написанная на C#), PyPy (написанная на Python), CLPython (написан на Common Lisp), Stackless Python (написан на C и Python) и Unladen Swallow (написан на C++).

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

    8

    С точки зрения использования языка программирования язык программирования — это просто программа. Это может быть компилятор, интерпретатор или виртуальная машина. Все эти вещи — просто компьютерные программы, и поэтому могут быть написаны на любом языке.

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

    7

    Очень похожая фраза с совершенно другим значением — «написание языка А на языке Б», например. «написание C на Java».

    Описывает код, который синтаксически корректен для одного языка, но использует структуры, идиомы и соглашения из другого языка. В примере «написание C на Java» признаками этого будут объявление всех локальных переменных поверх каждого метода, использование целочисленных констант вместо перечислений, использование идентификаторов_с_подчеркиванием и т. д.

    Обычно это происходит, когда кто-то работал с одним языком в течение долгое время (особенно когда они работали только с этим языком) и очень плохо знакомы с текущим языком (или не заинтересованы в написании чистого кода).

    2

    Технология по своей сути является итеративным процессом. Мы начинаем с простых инструментов, а затем используем их, чтобы сделать еще лучше. Первые языки ассемблера представляли собой перевод стандартизированных байт-кодов инструкций для чипа в масштабе 1:1; архитектура 8086 и ее ассемблер стали доминировать над другими архитектурами, такими как Z80, RISC и т. д., и поэтому мы начали разрабатывать языки, которые можно было бы переварить в ассемблере 8086, такие как FORTRAN, COBOL, Pascal и C. Программа, которая интерпретирует исходный код эти языки должны быть написаны на чем-то более примитивном, иначе вы закончите спором о курице и яйце; если исходный код для первого компилятора C был написан на C, то что скомпилировало этот исходный код C, и не будет ли он по определению первым компилятором C?

    По сути, «C# написан на C++» следует понимать как означающий, что первый и/или самый популярный компилятор и библиотеки времени выполнения/ядра, которые подчиняются спецификации языка C# (то есть Microsoft .NET Framework, и команда- программа-компилятор строк CSC.exe) написаны на C++.

    «Язык А написан на языке Б» означает, что единственной реализацией языка А (или единственной широко используемой) является та, которая фактически является проектом, разработанным на языке Б, и единственной завершенной, актуальной Спецификация -date для A — это исходный код B, который реализует его таким образом, что, если документация и программа B не совпадают, программа B обычно считается правильной.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *