Теория и практика многоязычного программирования: как изучать и сочетать в работе

28.11.2018      291082

В ноябре вышел ежемесячный рейтинг самых популярных языков программирования TIOBE. Основа ранжирования – результаты поисковых запросов с названием языка. Выяснилось, что первая четверка осталась стабильной с ноября 2017 года: Java, C, C++ и Python. 

Всего в рейтинге TIOBE перечислено 100 ЯП. Рассказываем, как из всего многообразия выбрать новый язык для изучения и работы, и разбираемся в особенностях многоязычного программирования. 

Почему появляются новые ЯП

В рейтинге TIOBE не только популярные Java и Python: не спешат уйти со сцены Fortran, Ada и Lisp, разработанные в 1960-1980 годах. Они продолжают работать, и рынку нужны специалисты для сопровождения и развития существующих программ. Если вы решите устроиться программистом в компанию Boeing, то вам придется изучить достаточно прогрессивный для своего времени и не очень распространенный в наше язык программирования Ada.

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

Старые

  • Fortran, Cobol, PL\I, Basic, Pascal, Ada, Lisp и т.д.

Мейнстримные

  • C, C++, Java, C#, JavaScript, Python, Ruby, PHP и т.д.

Нишевые

  • D, Clojure, OCaml, Haskell и т.д.

Новые и будущие

  • Go, Swift, Hack, Rust, Kotlin, Scala и т.д.

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

  • необходимость избавиться от архаичного наследия «старых» языков;
  • уровень абстракции в ЯП недостаточен для решения сложных задач;
  • желание разработчиков сохранить контроль над эволюцией языка.

Новые языки от известных ИТ-компаний, появившиеся в последнем десятилетии:

Компания

Год

Язык

Описание

Apple

2014

Swift

язык общего назначения на замену Objective C

Facebook

2014

Hack

замена PHP

Google

 

2009

Go

язык реализации веб-приложений

2011

Dart

более надежная и производительная замена JavaScript

JetBrains (СПб, Россия)

2011

Kotlin

простая и эффективная замена Java

Microsoft

2012

TypeScript

«улучшенный» JavaScript (аннотация типов, классы)

Mozilla

2010

Rust

язык реализации алгоритмов для многоядерных архитектур

RedHat

2011

Ceylon

«упрощенный» Java

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

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

Структурирование многоязычных приложений

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

Пирамида Ола Бини

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

 

Пирамида Ола Бини

 

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

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

Основное назначение языков программирования из верхнего слоя – быстрая поставка ПО. Это языки переднего края, максимально приближенного к своим потребителям, настолько, что даже знаний непрограммиста может хватить для создания своего веб-сайта или построения БД для личного учета. В этом слое разрабатывается самый значительный объем ПО и ему соответствует самая широкая часть пирамиды Бини.

Слой

Описание

Языки

Предметный слой

Быстрая прикладная разработка

1С, SQL, XML, XAML, веб-шаблонизаторы

Динамический слой

Быстрая продуктивная, гибкая разработка

JavaScript, Python, Clojure

Стабильный слой

Стабильный, высокопроизводительный, хорошо протестированный функционал

Java, C#, Scala

Разделение языков по уровню типизации

Системный архитектор Нил Форд предложил разделить языки программирования по признаку типизации: сильная-слабая, статическая-динамическая. Такое разделение позволяет соотнести ЯП по слоям пирамиды Бини.

При таком делении к стабильному слою относятся языки с сильной статической типизацией. На таких ЯП пишутся:

  • компиляторы;
  • драйверы устройств;
  • встроенное ПО;
  • билинговые системы;
  • серверное ПО;
  • высоконагруженные сервисы;
  • компьютерные игры.

К динамическому слою относятся языки с динамической сильной типизацией. ПО этого слоя: скрипты автоматизации, скрипты администрирования и создания тестов, веб-разработка (бэк-енд), прототипирование.

На верхнем слое располагаются предметно-ориентированные языки с динамической слабой типизацией. Это языки, на которых пишется ПО прикладного уровня: системы учета, скрипты с упрощенным синтаксисом для программирования формул или встроенной техники, devops, моделирование бизнес-правил и интеграции. 

 

Языки по типизации: сильная-слабая, статическая-динамическая с выделением слоев Бини

 

Функциональное деление (будущее языков)

Нил Форд предположил, что в будущем стабильные языки программирования по Бини станут поддерживать функциональный стиль в большем объеме. Этот стиль программирования входит в моду: программы бухгалтерского учета пока еще не пишут на Haskell, но многие языки начинают поддерживать операции с функциями высшего порядка. Такие понятия, как «декларативный», «чистые функции», «каррирование» проникают в лексикон все большего количества программистов.

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

Мультипарадигмальные языки

Современные языки идут по пути поддержки мультипарадигмальности. ЯП, исторически поддерживающие парадигму процедурного и объектно-ориентированного (ОО) программирования, начинают вводить элементы поддержки парадигмы функционального стиля. Функциональные языки, наоборот, расширяют свои возможности, вводя поддержку ОО-парадигмы.

Мультипарадигмальность увеличивает мощь языка, но может и привести к проблемам. Когда один проект разрабатывается разными командами с использованием различных парадигм, то существует риск разработки несовместимых библиотек. Разработка в ОО-парадигме стимулирует использование структур, а в функциональной – композицию и функции высшего порядка. В результате смешения парадигм могут получиться различающиеся алгоритмы, с которыми нельзя работать без взаимной адаптации. Эти условия усложнят проект. Подобные проблемы команды разработчиков уже испытывали при переходе с Java на Ruby или с C на C++.

 

Распределение языков по слоям приложения по функциональному признаку

 

Выбор языков

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

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

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

В языке С++ и в Java есть определение классов. Одна и та же синтаксическая конструкция «ТКласс Класс» в первом случае определит ссылку на объект указанного класса, а во втором – создаст сам объект. Попытка работать на C++ со ссылкой как с инициализированным объектом приведет к сбою программы.

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

Выбор для образования

Цель

Язык

Узнать, как устроен и работает компьютер

C

Научиться работать со сложными структурами данных

C#, Java

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

C++

Научиться строить большие и сложные сайты

JavaScript

Выбор для работы

Цель

Язык

Недостатки

Нужна быстрая и эффективная программа?

C, C++

трудно писать; трудно поддерживать

Быстро написать и получить работающую программу или сайт?

JavaScript, Python, Ruby

работает медленно, часто ломается (зависает), пока происходит поиск ошибок

Быстро написать небольшой веб-сайт?

PHP

для дальнейшего улучшения веб-сайта может потребоваться много усилий

Выбор для проекта

Выбор языка в проекте зависит от множества факторов, вот некоторые из вопросов, которые помогут программисту определиться:

  • Какова кривая освоения языка?
  • Насколько эффективны существующие фреймворки?
  • Хорошо ли развито сообщество языка?
  • Как быстро можно найти нужных разработчиков?
  • Легко ли язык интегрируется в многоязычную среду?

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


Автор:
Обозреватель


См. также

Новость ИТ-Новость Языки программирования

Журнал Института инженеров электротехники и электроники IEEE Spectrum подготовил рейтинг самых популярных языков программирования в 2023 году. Статистика разделена на три категории.

01.09.2023    1771    VKuser24342747    4       

2

Новость ИТ-Новость Языки программирования

С помощью библиотек и средств визуализации Python можно будет манипулировать данными Excel, а затем использовать полученные результаты в формулах, диаграммах и сводных таблицах.

28.08.2023    1018    VKuser24342747    0       

2

Новость ИТ-Новость Языки программирования

Спустя пять лет разработки вышел релиз компилятора для языков программирования Python и Cython – проект Cython 3.0. Он позволяет транслировать код Python в представление на C/C++.

28.07.2023    1659    VKuser24342747    0       

2

Новость GIT Искусственный интеллект ИТ-Новость Языки программирования Программист

GitLab представила собственную нейросеть Code Suggestions, способную генерировать код по запросу на естественном языке. ИИ-помощник поддерживает работу с 13 языками программирования.

10.07.2023    1578    VKuser24342747    0       

1

Новость Рейтинг Языки программирования

Stack Overflow представил рейтинг языков программирования за 2023 год. В исследовании учитывали не только частоту применения языка, но и интерес разработчиков к нему. Также компания составила рейтинг платформ и ИИ-инструментов. 

20.06.2023    1979    VKuser24342747    1       

2

Новость Google ИТ-Новость Языки программирования

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

14.12.2022    7466    VKuser24342747    0       

3

Новость ИТ-Новость Языки программирования (Устарело) Разработка

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

01.12.2022    8770    VKuser24342747    11       

3

Новость Linux ИТ-Новость Языки программирования

Ричард Мэттью Столлман, основатель Фонда свободного программного обеспечения, представил руководство по языку C и расширениям GNU. Пособие доступно всем желающим и предназначено как для опытных, так и начинающих программистов.

19.09.2022    12201    VKuser24342747    0       

4

Сколько языков программирования вы знаете?


Мне достаточно 1С (16.67%, 17 голосов)
16.67%
Хорошо знаю и работаю с популярными: Java, Python, С (12.75%, 13 голосов)
12.75%
Немного знаком с несколькими, но не работаю с ними (47.06%, 48 голосов)
47.06%
Один, но задумываюсь об изучении дополнительных (23.53%, 24 голосов)
23.53%

Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
72. alex_bitti 98 29.11.18 13:37 Сейчас в теме
(69) кто то нашел пирамиду перевернутую в сети и решил по своему разумению вставить туда языки)) причем ключевое слово "своему"
76. kalyaka 1112 29.11.18 22:28 Сейчас в теме
(69) согласен, статья не отвечает прямо на эти вопросы.
Статья подана в формате новости с привязкой к событию в сокращенном варианте.

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

И еще несколько идей, более полно раскрыты в оригинальной полной статье: количество языков будет только увеличиваться, многоязычные проекты будут обретать все большую популярность, языки общего назначения будут поддерживать все в большей степени функциональную парадигму, также в языках общего назначения будут популяризироваться средства создания собственных языков DSL. В последнем случае DSL будет разрабатываться для решения узких задач с максимально доступными для непрограммистов абстракциями и простым языком работы с ними.
70. Vovan1975 13 29.11.18 12:45 Сейчас в теме
Вопрос в стиле "какой язык выбрать для изучения" дебильный вопрос сам по себе.

Может сначала стоит определиться с тем, в какой предметной области интересно работать, затем собрать инфу про то какие языки там используются и затем собственно рассматривают какие эти языки больше нравятся.
77. kalyaka 1112 29.11.18 22:35 Сейчас в теме
(70) кто знает куда Вас может забросить судьба? :)
Совсем даже не факт, что язык, на котором Вы учились, Вы будете использовать в работе.

Посыл в том, что языков много и их количество будет только возрастать. Любой язык, однажды запущенный в промышленную эксплуатацию, будет жить неопределенно долго (пока что-то на нем работает). И потому для изучения нужно выбрать языки, на которых можно наилучшим образом можно изучить базовые навыки программирования.
71. alex_bitti 98 29.11.18 13:36 Сейчас в теме
автор ошибся с расположением языка 1С
73. alex_bitti 98 29.11.18 13:44 Сейчас в теме
автор пытается изобрести велосипед, есть языки низкого уровня, есть высокого, низкий уровень это уровень сигналов, высокий это программирование с использованием платформ, не вижу разницы между Jawa и 1С в таком контексте, попробуйте переубедить, причем я не о производительности платформы, так платформа 1С не худший вариант для разработки, хотя сама написана на языке высокого уровня
75. Perfolenta 206 29.11.18 20:44 Сейчас в теме
(73) сигналы тут ни при чем... уровень языка меряется усложнением абстракций...
например, язык самого низкого уровня это последовательность команд процессора в виде последовательности чисел...
на следующем уровне появляется ассемблер, который позволяет абстрагироваться от адресной арифметики...
на следующем уровне появляются языки типа Си, которые позволяют абстрагироваться от команд процессора...
на следующем уровне появляются такие абстрактные понятия, как классы и объекты... и на сегодня пока всё, более высоких уровней нет...
С точки зрения деления на уровни, язык 1С более низкоуровневый, чем Java, т.к. на нем нельзя создавать классы, но если приплюсовать к нему платформу (которая все же языком не является), то вместе с ней язык 1С выходит примерно на один уровень с Java.
Однако языки одного уровня могут быть богатыми и бедными на средства выражения. Язык 1С на этот счет довольно бедный язык, что ограничивает возможности программиста самовыражаться, но зато делает язык простым. Язык С++, наоборот, дает возможность очень гибко самовыражаться, но из-за этого он становится слишком сложным.
Ну и конечно, языки программирования делятся по парадигмам программирования, которые в них используются (императивные, декларативные и т.д), но многие языки сегодня становятся гибридными, мультипарадигменными. Но это уже другая история :)
79. kalyaka 1112 29.11.18 22:50 Сейчас в теме
(75)
Язык 1С на этот счет довольно бедный язык

Поправлю, не "бедный", а "простой". В этом вообщем то и суть предметно-ориентированных языков: быть максимально простыми. При этом с точки зрения реализации абстракций 1С высокоуровневый, т.к. чем ниже уровень, тем ближе к процессору, а реализация Таблицы значений никак не объект уровня байтов.

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

Также есть DSL внешние, а есть внутренние. Внешние, как 1С или SQL, существуют сами по себе, а внутренние описываются базовым языком общего назначения. Последнее интересно тем, что здесь возникает два уровня языка: базовый и DSL. И не факт, что DSL здесь будет для бизнеса, возможно DSL просто будет заменять большие куски кода на основном языке без необходимости их писать (так называемое метапрограммирование).
82. Perfolenta 206 30.11.18 02:42 Сейчас в теме
(79) вы не внимательно прочитали мой комментарий, там и написано "бедный"....."что делает его простым"... а так же "если приплюсовать к нему платформу"... ТаблицаЗначений, как и остальные объекты не являются частью самого языка, а являются частью стандартной библиотеки... так вы можете и ассемблер отнести к языкам высокого уровня, ведь из него тоже можно вызывать библиотеки... вот на днях тут человек внешнюю компоненту на ассемблере написал... перечитайте, пожалуйста, мой комментарий еще раз...
сам язык 1С не является предметно-ориентированным (DSL) языком, т.к. не содержит ни каких специальных языковых конструкций... например, Андрей Овсянкин, сделал OneScript, т.е. отделил язык 1С от предметно-ориентированной платформы... теперь вы можете на нем писать что угодно, вовсе не обязательно программы учета (более того, вы теперь на нем НЕ можете легко написать программу учета :))... но теперь он выглядит как низкоуровневый, т.к. для написания классов приходится применять чудеса изобретательности (правда, такие чудеса уже добавлены Овсянкиным в виде специальных загрузчиков модулей становящихся классами)... вот если бы в языке 1С существовал, например, оператор Проводка, тогда он был бы предметно-ориентированным...
Последний ваш абзац я совсем не понял... например, Visual Basic существует как отдельно, так и в виде встроенного в приложения, да и в виде скриптового варианта тоже... но он остается тем же языком, того же уровня, во всех своих вариантах... в одном приложении он обрабатывает тексты, в другом математику и данные, а в третьем изображения и графику... универсальный язык общего назначения, как и язык 1С...

Тут еще есть один интересный момент. Повышая уровень языка, т.е. вводя в него новые уровни абстракции можно выкинуть низкоуровневые команды, а можно оставить... например, в С++, который вырос из С, низкоуровневые возможности решили оставить, а в Java, который в качестве синтаксической основы так же взял язык C, решили всю низкоуровневую часть выбросить.... хотя оба языка С++ и Java высокоуровневые и поддерживают парадигму ООП... в С++ при желании можно писать почти как в Java (оставим за скобками "рантайм", говорим только о том, как выглядит программа)...
115. kalyaka 1112 02.12.18 17:37 Сейчас в теме
(82)
1С не является предметно-ориентированным (DSL) языком, т.к. не содержит ни каких специальных языковых конструкций.

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

Андрей Овсянкин по сути создал новый язык OneScript
сфера применения 1Script: это DevOps и подобные задачи для целей 1С проектов
и это уже больше язык общего назначения, чем DSL, т.к. не выполняется условие Фаулера:
предметно-ориентированный язык позволяет закодировать частные задачи в рамках большой системы
, а OneScript не ограничен рамками какой-то системы и позволяет решать общие задачи.

Последний ваш абзац я совсем не понял
Вот здесь можно кратко почитать про виды DSL: Внутренние и внешние DSL
И еще, я исхожу из того, что язык определяется не только синтаксисом, а синтаксисом+семантикой+стандартной библиотекой+средой исполнения (CLR, JVM, MS Office, Платформа 1С). По такому определению языка язык VB и VBA из вашего примера - это разные языки, где 1-й - общего назначения, а 2-ой - DSL.
121. Perfolenta 206 02.12.18 20:30 Сейчас в теме
(115) как хотите, ваше право, можете плюсовать стандартные библиотеки и среду исполнения к самому языку, однако, как вы тогда собираетесь определить, к какому языку принадлежит стандартная библиотека Net Framework и среда CLR? Они являются основой всех Net языков. И на виртуальной машине JVM с её стандартными библиотеками так же базируются несколько языков... Они по вашему разными языками не являются?
И почему это вдруг язык OneScript стал другим языком, если он до точки запятой совпадает с языком 1С? Вы не сможете различить текст написанный на этих языках...
Вы можете изобретать любые определения, но в жизни, вы знаете язык, если вы на нем можете бегло говорить и понимать... то же самое и в языках программирования... VBA, если вы внимательно посмотрите на его название, называется VB for Applications, т.е. тот же VB, но для приложений, он не становится другим языком...
Еще раз настаиваю на своем мнении - язык является предметно-ориентированным, если он содержит конструкции и операции предназначенные для выполнения действий в предметной области! Если язык ничего подобного не содержит, то это язык общего назначения, пусть даже и внедренный в какое-то приложение... Сегодня он внедрен в одно приложение и управляет одной предметной областью, а завтра его внедрят в другое приложение без изменений и он будет управлять другой предметной областью...
Лет 10 назад я написал калькулятор и внедрил в него язык VBScript, это что, я новый язык изобрел?
124. kalyaka 1112 02.12.18 22:27 Сейчас в теме
(121)
на виртуальной машине JVM с её стандартными библиотеками так же базируются несколько языков... Они по вашему разными языками не являются?
Был такой язык (в принципе он есть) J++, синтаксически аналог java. Этот язык был введен Microsoft для миграции программистов с java на CLR. Однако есть проблема, этот язык конкурирует с собственным языком MS C#. Естественно MS не заинтересована в его развитии и продвижении, его роль в данном случае - маркетинг, продвижение своей платформы.
Этим примером я хотел показать, что синтаксически и семантически близкие языки на одной платформе являются конкурирующими и причина их существования может быть не техническая необходимость.
Нормальная ситуация, когда на одной платформе много языков, но возможности их различны. Существуя на одной платформе каждый из них может наиболее эффективным образом использовать возможности другого.

если вы внимательно посмотрите на его название, называется VB for Applications, т.е. тот же VB, но для приложений, он не становится другим языком...
Синтаксис одинаковый, однако один интерпретируемый, а другой - компилируемый. 1-ому доступны глобальные объекты, которых нет во 2-ом. По моему для VB даже можно настроить типобезопасность.
В общем цели у этих языков различные. 1-ый - типичный DSL, 2-ой - язык общего назначения.

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

Это не обязательно, главное чтобы он был понятен специалисту предметной области. Определение предметно-ориентированного языка дал Фаулер (я приводил его в посте 114).
Есть языки, в которых DSL можно описывать прямо в основном языке и тем самым вводить новые синтаксические конструкции. Например в языке 1С нельзя написать цикл по убыванию или с любым шагом, а если бы в языке поддерживался внутренний DSL, то такую синтаксическую конструкции можно было бы ввести.
Другой пример, для заказчика написали калькулятор и встроили в него java на JVM, однако этот язык для него слишком сложен и для его упрощения пишут описание DSL. В такой схеме упрощенный java - DSL вначале преобразуется по правилам в java, а потом компилируется в JVM.
написал калькулятор и внедрил в него язык VBScript, это что, я новый язык изобрел?

Если движок не был взят от MS, то скорее всего вы не в полной мере реализовали функциональность языка, ту самую, которая поддерживается стандартной библиотекой. Например, у вас могло не быть операций ввода/вывода, записей в файл и т.д. Т.е. вы создали свой язык для решения конкретных задач калькулятора.
И, кстати, даже язык 1С официально не имеет название, а называется он просто "Встроенный язык"! Так и в вашем случае, вы просто реализовали встроенный язык. Другое дело, что его синтаксис похож на синтаксис VBScript.
Ну так синтаксические конструкции во многих языках похожи. Различия наблюдаются в различной семантике и во встроенных абстракциях.
125. Perfolenta 206 03.12.18 00:30 Сейчас в теме
(124)
Синтаксис одинаковый, однако один интерпретируемый, а другой - компилируемый.
ну вы даёте... в VB6, к вашему сведению, когда вы запускаете программу в IDE, она запускается под интерпретатором, а когда хотите получить готовый EXE файл, она обрабатывается компилятором и работает она при этом одинаково... это что два разных языка?
1-ому доступны глобальные объекты, которых нет во 2-ом. По моему для VB даже можно настроить типобезопасность.

Это уже смешно, вы можете с той же легкостью управлять объектной моделью Ворда прямо из программы на VB6, вам достаточно почти без изменений скопировать код VBA, т.к это один и тот же язык... и обратное верно...

В Java может быть еще более сложный процесс, когда программа стартует на интерпретаторе, потом переходит на машинный код сформированный JITом, а потом возвращается насовсем или на время в интерпретатор... у Java что, язык на ходу раздваивается?
Мы вообще говорим о языке или о том как и чем потом текст на нем обрабатывают для того, что бы наконец опуститься до исполняемого машинного кода?
Когда я делал калькулятор, я вообще не создавал язык, зачем, если есть готовые встраиваемые скриптовые языки? Но после встраивания VBScript не мог стать ни другим языком ни предметно-ориентированным... он просто получал доступ к объектной модели калькулятора... так и язык 1С просто имеет доступ к объектной модели платформы, но в самом языке нет ни каких предметно-ориентированных возможностей... если знаете, то назовите хотя бы одну...
Язык 1С может официального названия и не имеет, но сам по себе он есть и Андрей Овсянкин его успешно от платформы отделил, дав название OneScript, но язык от этого ни чуть не изменился... может быть со временем изменится, как раз в случае изменений синтаксиса или добавления новых операторов или операций, но на данный момент Андрей не хочет вносить изменений нарушающих правила языка 1С... возможно жизнь заставит, но пока это тот же язык...
посмотрите сколько компиляторов и интерпретаторов от разных производителей у Питона, у С++ и у других языков, но это всё еще компиляторы Питона и С++, а не других языков... а еще у языка может быть несколько версий, когда старый компилятор не может обработать программу новой версии языка, но ведь это все еще тот же язык, а не другой...
Мне кажется, что вы мутите воду затрудняясь признать, что не правы... Язык и его окружение (трансляторы, библиотеки и т.д.) это две разные сущности... окружение языка можно поменять и он при этом другим языком не станет... хотя, ваше право думать иначе... можете дописать еще один объект в библиотеку и сказать, что это уже другой язык, ориентированный совсем в другую предметную область... кстати, в библиотеку 1С добавили возможность решать системы линейных уравнений, как считаете, не изменилась ли предметно-ориентированность языка?
127. kalyaka 1112 03.12.18 07:37 Сейчас в теме
(125)
кстати, в библиотеку 1С добавили возможность решать системы линейных уравнений, как считаете, не изменилась ли предметно-ориентированность языка?
Это типично для предметных языков - расширять возможности языка не за счет повышения выразительности синтаксиса, а за счет расширения встроенных возможностей среды.
Ок, возможно вы правы и Андрей добавит в конце концов в свой язык поддержку ООП или даже лямбду, но что это даст нам, программистам на встроенном языке 1С? Тут просто нужно понять, что встроенный язык 1С это действительно встроенный язык, цель которого в описании отличий поведения платформы от типового поведения в предопределенных обработчиках событий. Дальнейшее развитие языка предполагается только за счет добавления возможностей платформы.
Я предполагаю, что лучшие востребованные решения, которые сейчас делаются в виде подсистем (БСП, ЭДО и т.д.) в конечном счете будут реализованы в платформе, а обработчики переопределяемых модулей будут вызываться самой платформой.
В общем смысл этого разговора в поиске адекватного восприятия возможностей встроенного языка 1С. Вот вы например верите, что компания 1С вынашивает планы по добавлению в язык ООП или хотя бы подключение фреймворков?
131. Perfolenta 206 03.12.18 16:13 Сейчас в теме
(127)
Тут просто нужно понять, что встроенный язык 1С это действительно встроенный язык, цель которого в описании отличий поведения платформы от типового поведения в предопределенных обработчиках событий.
с таким определением я полностью согласен...
я тут спорил только с тем, что язык 1С предметно-ориентированный... с моей точки зрения это не так, язык 1С это язык общего назначения встроенный в платформу... предметно-ориентированной является платформа 1С, содержащая специализированную библиотеку, объекты которой создаются и используются с помощью языка 1С... а сам язык, после отделения от платформы в виде OneScript не потребовал ни чистки ни доработки для того, что быть обычным языком общего назначения... да, простым и достаточно примитивным, но вполне пригодным на практике...
126. Perfolenta 206 03.12.18 01:26 Сейчас в теме
(115)
Вот здесь можно кратко почитать про виды DSL: Внутренние и внешние DSL
по вашему совету кратко почитал статью по вашей ссылке и вот что обнаружил: "Синтаксис внутреннего DSL не может нарушать синтаксис базового языка общего назначения. В противном случае компилятор базового языка не смог бы проводить синтаксический анализ полученного кода и компилировать его."

Откуда вполне логично следует, что язык 1С это GPL, на базе которого построен внутренний DSL...

Добавим сюда цитату из оригинальной книги Фулера: " Внутренний DSL представляет собой предметно ориентированный язык, представленный с помощью синтаксиса языка программирования общего назначения. Это стилизованное использование языка программирования для предметно ориентированных целей. Вы можете услышать еще один термин встроенный DSL, используемый в качестве синонима для внутреннего DSL. Хотя это достаточно широко используемый термин, я избегаю его употребления, потому что термин ‘‘встроенный язык’’ может применяться к языкам сценариев, встроенным в приложения, таким как VBA в Excel или Scheme в Gimp."

Выводы: во-первых, по Фаулеру язык 1С однозначно язык общего назначения используемый для предметно-ориентрованных целей, а во-вторых, Фаулер отделяет языки сценариев встроенные в приложения от DSL...

А главное, Фаулер честно говорит: "‘‘Предметно-ориентированный язык’’ является полезным термином и концепцией, но имеет очень размытые границы. Об одних вещах можно с уверенностью говорить, что это DSL, а о других можно говорить и так, и эдак. Как и в большинстве случаев в области программного обеспечения, этот термин никогда не имел строгого определения."
132. kalyaka 1112 03.12.18 16:39 Сейчас в теме
(126)
Синтаксис внутреннего DSL не может нарушать синтаксис базового языка общего назначения

Эта фраза относится к DSL, запрограммированном на базовом языке. Такая возможность есть например в языке Сlojure. В Jave вроде тоже анонсировали такую возможность, по крайней мере в посте 52. есть ссылка на их продукт от JetBrains, который позволяет строить DSL на базе Java.
Внешний DSL - это язык, поддерживаемый системой, он описан и как то реализуется. Пример такого языка: SQL.
134. kalyaka 1112 06.12.18 00:13 Сейчас в теме
(126)
Синтаксис внутреннего DSL не может нарушать синтаксис базового языка общего назначения


Вот здесь Neal Ford приводит интересный пример DSL на C#, который показывает творческий подход к языку: без специальных средств, просто используя возможности языка исходный код:
ICar car = new Car();
IMarketingDescription desc =
    new MarketingDescription();
desc.Type = "Box";
desc.Subtype = "Insulated";
desc.Length = 50.5;
desc.Ladder = "Yes"
desc.LiningType = Lining.Cork;
desc.Description = desc;
Показать
был превращен в следующий:
ICar car = Car.describedAs()
    .Box
    .Insulated
    .Includes(Equipment.Ladder)
    .Has(Lining.Cork);

Там же приводится пример внутреннего DSL - это язык LINQ.
135. Perfolenta 206 11.12.18 12:06 Сейчас в теме
(134) на OneScript давно пишут в таком стиле...

ВербальноеВыражение = Новый ВербальноеВыражение()
.НачалоСтроки()
.Затем("http")
.МожетБыть("s")
.Затем("://")
.ЧтоНибудьНоНе(" ")
.КонецСтроки();

это из библиотеки verbal-expressions... то же самое и в других библиотеках... являются ли эти библиотеки DSL? нет, не являются, это просто библиотеки... с вашим подходом любую библиотеку надо называть DSL, т.к. в ней есть своя объектная модель, свой АПИ и свой стиль, присущий её автору...

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

А еще, не плохо бы определиться, что значит термин "предмет"... с моей точки зрения, это должно быть что-то не связанное с программированием... математика, биология, инженерия, бухгалтерия и т.д.... манипуляции с кодом и данными это главный предмет любого языка... а вот манипуляции с использованием понятий не относящихся к программированию можно признать предметно-ориентированными...
137. kalyaka 1112 12.12.18 23:12 Сейчас в теме
(135)
манипуляции с использованием понятий не относящихся к программированию можно признать предметно-ориентированными
Согласен! DSL как раз должен работать с объектами отождествляемыми с предметной областью (документы, справочники, регистры).

Если же вместо DSL мы используем библиотеку объектов, то в этом случае мы все-равно остаемся на уровне общего языка, т.к. вместо оперирования объектами предметной области у нас попрежнему будут классы, наследование, отношения, методы, структура и т.д. Вот здесь интересное представление DSL как возможность миновать уровень построения абстракций и сразу писать решение с использованием объектов предметной области.
138. Perfolenta 206 13.12.18 14:43 Сейчас в теме
(137) статья про ЯОП интересная, но пока это все на уровне идей и концепций... на данный момент программисты прочно застряли в ООП..
многим пишущим на Си подобных языках не нравятся языки типа 1С из-за многословности, но я считаю, что в ближайшее время это может измениться... в связи с развитием речевых технологий появилась реальная возможность надиктовывать программу... поэтому я за 1С подобные многословные языки... сам я, делая свой 1С подобный язык, стараюсь ориентировать его на будущую диктовку, но, к сожалению, не могу отказаться и от всяких скобочек и спец.символов, т.к. надо, что бы и руками текст набирался кратко и быстро... приходится вводить в язык как бы дублирование одних и тех же возможностей, для ручного ввода и для речевого ввода... хотел к новому году познакомить общественность с тем, что получается, но к НГ, как обычно, навалилось обычной работы так, что свободного времени почти нет, т.е. скорее всего не успею... руки чешутся, а времени не хватает... обычная проблема обычного человека :)
101. alex_bitti 98 30.11.18 15:10 Сейчас в теме
(75) вы ошибаетесь, низкоуровневый это аппаратный язык, вы писали когда нибудь драйвер или новый протокол обмена, может пакет описывали, вот это низкоуровневый, какие классы? вы извините не о том, низкоуровневый это не оскорбление)) это иерархия, в виде правильной пирамиды, естественно в с++ можно больше написать чем в 1с, но это не делает 1С ниже или выше уровнем, вы говорите только про функциональные возможности а это извините не то
110. Perfolenta 206 30.11.18 18:00 Сейчас в теме
(101) вы, по-моему, не читали или не внимательно читали мои комментарии... ваше право...
104. alex_bitti 98 30.11.18 15:19 Сейчас в теме
(75) то есть в 1С нет классов? хм... мы из одной вселенной, давайте поговорим об полиморфизме наследовании, то есть всего этогт нет? ладно, класс TForm в ваших любимых ооп языках, тоже не класс, не надо мерить все одним местом
111. Perfolenta 206 30.11.18 18:18 Сейчас в теме
(104) извините, я не знаю из какой вы вселенной, но в 1С нет классов и в 1С нет наследования... все, что вы можете в языке 1С это создавать экземпляры объектов, классы которых были созданы на другом языке (на котором написана платформа)... с определенной натяжкой можно считать, что вы создаете классы мышкой в конфигураторе добавляя реквизиты, но это слабое утешение... в языке 1С нет ни каких средств для создания классов... ни в коем случае не хочу вас обидеть...
113. Sapiens_bru 4 01.12.18 10:29 Сейчас в теме
(73) Мой мизерный опыт изучения десктопной Java позволил за пару дней собрать пару страниц кода выполняющих следующее:
Приложение запускается в винде, выводит на экран IP адрес компьютера (или несколько если несколько подключений активно)
Если по этому адресу и порту 1245 послать http get запрос приложение его ловит. Без всяких веб серверов
В присланном запросе приложение ищет параметр "barcode" и берёт его значение в качестве параметра для java.robot
Робот последовательно "нажимает" клавиши штрихкода, вызывая клавиатурное событие на компе.

Приложение заняло 43кб, из которых 40 это иконка. Позволило совместно с написанным мною же мобильным приложением тестировать работу со сканером шк без самого сканера. Полный аналог беспроводного клавиатурного сканера. Использовал для проверки настроек кассовых программ не только на 1С.

Напишите это на 1С?

С другой стороны стандартная для 1С задача организации складского учёта на чистой яве даже с spring решается на 2-3 порядка дольше.

Ява - язык общего назначения. 1С предметно-ориентированный.
122. Perfolenta 206 02.12.18 20:51 Сейчас в теме
(113) тут есть нюанс, я уже писал о нем выше... сам по себе язык 1С также является языком общего назначения, а вот платформа 1С является предметно-ориентированной...
Когда вы писали свою программу на Java, вы наверняка использовали одну из библиотек работающих с портами... так вот, при наличии подобной библиотеки вы могли бы написать то же самое на языке 1С, а что бы не затрагивать платформу, могли бы запустить ее под управлением интерпретатора OneScript. На языке 1С вы можете описать любую логику, т.к. это тоже язык общего назначения... в языке 1С нет предметно ориентированных конструкций, операторов и операций... есть только предметно-ориентированная библиотека платформы...
129. Sapiens_bru 4 03.12.18 08:44 Сейчас в теме
(122)Существует математическое определение языка программирования и 1С ему соответствует. Существует обывательско-программистское определение ЯП (условия есть? циклы есть? функции есть?) и 1С ему тоже соответствует. На 1С можно написать что угодно, имея соответствующие библиотеки. Однако я не считаю 1С языком общего назначения, так как в попытках создавать приложения на 1С без поддержки платформы 1С мы оказываемся с очень примитивным инструментом в руках, напоминающим JS / Basic / Pascal первых версий.
1С предметно-ориентированный не потому что в нём есть языковые конструкции типа "Проводка", а потому что в нём нет языковых конструкций ставших стандартом для ЯП общей разработки. Без 1С платформы язык 1С почти бесполезен, его не стоит рассматривать вне контекста (в котором работает 99.99% написанного на нём)
Я не призываю к развитию языка 1С, как типового ООП языка наподобие Java, это просто не нужно. Наоборот, некоторая убогость языка заставляет программистов использовать платформу для решения задач, что и выливается в скорость разработки и её специфичность.
130. Perfolenta 206 03.12.18 16:02 Сейчас в теме
(129)
Существует математическое определение языка программирования
не существует...
Существует только критерий полноты по Тьюрингу...
Да, язык 1С примитивный, но полноценный... сейчас он существует в виде OneScript отдельно от платформы 1С и может быть использован для любых целей, особенно, если появится много разнообразных библиотек, которых уже не мало, но надеюсь появится больше...
Думаю, что ООП версия языка 1С вслед за OneSript-ом скоро появится... по крайней мере, если ни кто не опередит, одну из версий делаю я :)... не знаю, как его примут программисты 1С, посмотрим, но моя дочь 10-ти лет уже приняла :)
78. acanta 29.11.18 22:42 Сейчас в теме
Вот я человек, потерявший работу, но что-то там помнила из курса программирование в институте. Прихожу в подобие офиса (все такие..) беру коробку 1С и еду устанавливать ее клиенту. У клиента требуется полчаса что-нибудь рассказывать(по возможности) или просто почистить диск компьютера (уточнив что можно стереть и куда поставить 1с с базой) и вытащить ярлык на рабочий стол.
Иногда - можно попить чаю с печеньками.
Это такой вот бизнес процесс (в него разумеется включается еще и реклама в журнале "Баланс", который выписывался в обязательном порядке много лет, семинар в налоговой о том, какие формы в этом квартале и звонок бухгалтера на фирму "выпишите счет").

Напишите пож-ста бизнес процесс продажи приложения на php или Java.
Откуда ваши клиенты о вас узнали, как они нашли ваши контакты, как они узнали о том, что ваше приложение достаточно хорошее и нужное(отзывы, общение с коллегами).
Кто захочет стать первым клиентом, а кто и при каких обстоятельтсвах может стать последним?
Уверены ли вы, что клиент, купивший ваше приложение, сообщит вам о своих пожеланиях дальнейшего развития, или поработает и купит другое, у ваших конкурентов (которые за это время написали чуть больше чем вы поддерживали).
Или он наймет программиста php с вашими исходниками.
83. Perfolenta 206 30.11.18 02:50 Сейчас в теме
(78) может я не совсем понял, что вы хотели сказать (или спросить), но то, что вы написали, ни как не относится к языкам программирования... у программистов 1С с клиентами и работодателями бывают все те же самые приключения и проблемы, что и у программистов на других языках... никакой разницы нет... тоже могут нанять другого программиста работать с вашими исходниками... могут не заплатить и т.д.
93. acanta 30.11.18 13:53 Сейчас в теме
Кесарю-кесарево. Оставьте 1с ее учетные задачи. Есть такое представление, что 1с (как и бизнес вообще) это само по себе уже социальная сеть или корпоративный форум-чат с разным железным взаимодействием, и в этой социальной сети участвует все так называемое экономически активное население страны.
Все остальные игры и сети это уклонение от экономической активности.
123. Perfolenta 206 02.12.18 21:02 Сейчас в теме
(93) да, согласен, интересное представление... вся жизнь либо игра либо война...
А на счет "Оставьте 1с ее учетные задачи." не совсем согласен... платформе 1с да, надо оставить учет, а вот языку нет, он способен на большее... с появлением языка OneScript язык 1С уже может использоваться шире... а с учетом новых 1с-подобных языков, например, Гонец, и еще пара на подходе, возможно появятся и другие возможности... главное хотеть развивать своё и поддерживать своих создателей... у нас как-то люди склонны молиться заграничным Джобсам и Маскам, а свои ростки давить критикой, вместо помощи... плохо это...
109. acanta 30.11.18 17:12 Сейчас в теме
Какая разница, пишете вы "Документы.ПриходнаяНакладная" или "ПодсистемаСклад.Документы.ПриходнаяНакладная", или вы считаете что одной-двумя общими подсистемами мы не обойдемся, все подсистемы станут рано или поздно общими?
А именно это и происходит с механизмом расширений. Мы берем конфигурацию как общую подсистему, и отпочковываем от нее (!) отдельные подсистемы каждую со своими объектами.
Проблема в том, что эти объекты на самом деле таблицы или реестры каких то данных, и эти данные вместе с расширением не могут быть выгружены и перенесены в другую конфигурацию.
А без этой возможности оно выглядит убого.
Представьте себе отраслевые строительные классификаторы или медикаменты. Наклепал расширение, завел в расширенный справочник данные, отсоединил и присоединил расширение вместе с данными (и закрыл свое расширение от любопытных).
120. kalyaka 1112 02.12.18 18:12 Сейчас в теме
(109) Разница качественная: в 1-ом варианте мы имеем дело с DSL, а во 2-ом - с языком общего назначения с библиотекой. И то, и другое используется в общей практике ИТ индустрии (см. применимость у Фаулера "Предметно-ориентированные языки программирования", основной посыл в выборе варианта с большей выразительностью для решения задач предметной области), однако 1С выбрала 1-й вариант (о назначении языка 1С я писал в 115).
112. пользователь 30.11.18 21:43
Сообщение было скрыто модератором.
...
128. Anesk 17 03.12.18 08:40 Сейчас в теме
Работы в языке 1С очень много. Другие языки конечно же не будут лишними и можно решать более сложные задачи, особенно по интеграции 1с с котом
133. starik-2005 3093 03.12.18 18:08 Сейчас в теме
+О как всех понесло на тему ЯП!

Все куда проще. Новые языки программирования - это надстройки к "старым" языкам программирования, которые позволяют ускорить процесс создания приложений определенного типа/класса.

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

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

Почему часто хороший и большой проект требует больше одного ЯП? Ну вот взять, к примеру, 1С. Можно путем неимоверных усилий сделать такое, как сделал народ в Деловых Линиях - вбухали бабла в железяки, экспертов и саппорт, в итоге поддерживают решение, работающее на грани возможностей, зато вроде как быстро сделали - сэкономили. Но если грамотно подходить к этому, то нужно было отделить фронтэнд от бэкенда, как делают это взрослые дяди. Во фронте сделать клиентский интерфейс с быстрой транзакционной системой на JAVA + пыха (можно и без него в принципе для их-то мизерного количества подключений), а уже бэкэнд + MDM лепить на 1С, куда через ws валить всю инфу и откуда получать данные справочников. В итоге и на лицензиях бы сэкономили, и с производительностью бы не геморроились. Но, как говорил классик: "опыт - сын ошибок трудных". Хотя, на мой скромный взгляд, они так ничему и не научились.
136. Perfolenta 206 11.12.18 13:01 Сейчас в теме
(133)
Все куда проще. Новые языки программирования - это надстройки к "старым" языкам программирования, которые позволяют ускорить процесс создания приложений определенного типа/класса.

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


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