OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 29 Ноябрь, 2022 17:18

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 07 Декабрь, 2021 15:28 

Зарегистрирован: Четверг, 05 Август, 2021 14:16
Сообщения: 44
Наткнулся на статью и перевел.

Краткое сравнение Компонентного Паскаля и Java.

Куно Пфистер, Oberon microsystems



Component Pascal является для Pascal тем же, чем Java для C и C++: современным и безопасным языком нового поколения, сочетающим гибкость динамических языков с надежностью статических языков. Как и Java, он опирается на десятилетия опыта и позволяет легко повторно использовать имеющиеся навыки.Также как и Java, он поддерживает компонентное программное обеспечение гораздо лучше, чем его предшественники. По сравнению с Java, он проще в изучении и позволяет создавать более эффективный код.

Самое очевидное различие - это "внешний вид и ощущение" двух языков. Компонентный Паскаль синтаксически явно относится к семейству Паскаль, а Java - к семейству Си. Но это относительно поверхностное различие. Что касается более важного "проектирования для безопасности", то Java и Компонентный Паскаль тесно связаны, в то время как Си и даже оригинальный Паскаль (например, немаркированные записи вариантов) сравнительно небезопасны. Помимо прочего, безопасность также подразумевает автоматическую сборку мусора. Сборка мусора необходима, чтобы избежать утечек памяти и, что более важно, висячих указателей. И Java, и Компонентный Паскаль поддерживают динамическую загрузку кода и метапрограммирование (reflection). В результате оба языка могут использовать одну и ту же систему времени выполнения. Это доказывает операционная система реального времени JBed и компилятор Component Pascal, который производит стандартные файлы классов байт-кода Java. Заметим, что C или C++ не могут быть переведены в байт-код Java из-за присущего им недостатка безопасности.

В этом фундаментальном отношении Компонентный Паскаль и Java ближе, чем Java к C++!

Компонентный Паскаль более эффективен, чем Java. В отличие от Java, он также поддерживает статические (размещаемые в стеке) структуры данных и имеет параметры переменных (VAR) (с вариантами IN и OUT). В зависимости от приложения, это может оказать заметное влияние на эффективность. Например, рассмотрим вызов метода Компонентного Паскаля:

font.GetMeasures(ascender, descender, maxWidth)

который возвращает три значения в качестве параметров OUT. В Java нет эффективного способа выразить это простое утверждение. Вместо этого метод Java может выделить, установить и вернуть вспомогательный объект, который содержит три значения результата. Обычно это слишком тяжелый способ, поскольку он подразумевает не только выделение кучи, но и введение нового класса и файла класса. Другим решением может быть предоставление трех различных методов, по одному для каждого параметра результата. Это означает три вызова метода вместо одного. Наконец, параметры VAR можно эмулировать с помощью массивов длины 1. Помимо некрасивого использования массивов, это подразумевает ненужные проверки диапазона, проверки типов и выделение вспомогательных объектов из кучи. Обширное выделение кучи нежелательно, в частности, в системах реального времени, поскольку необходимость выделения в реальном времени сильно ограничивает свободу выбора гибких алгоритмов управления памятью. Наконец, в Компонентном Паскале более эффективно реализуются массивы, что может быть важно для численных и других приложений, требующих больших вычислений.

Java имеет встроенную поддержку потоков. Компонентный Паскаль не предоставляет эту возможность в языке, поскольку это приводит к созданию непортабельного программного обеспечения: Потоки Java могут вести себя по-разному на разных платформах. Кроме того, схема потоков Java слишком ограничена для программ жесткого реального времени: Java-потоки поддерживают только десять различных приоритетов, назначаемых пользователем. Системы жесткого реального времени, с другой стороны, требуют политик планирования, ориентированных на конечный срок, таких как планирование по принципу "раньше всех", которые динамически применяют практически неограниченное число приоритетов.

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

Java имеет еще одну особенность, которая является проблематичной для систем реального времени: семантика инициализации. Инициализация класса Java откладывается до тех пор, пока он не будет использован в первый раз. Это разумно для интернет-программ, поскольку позволяет избежать (down)загрузки классов, которые никогда не используются. Однако для систем реального времени это фатально: обработчик прерываний, который должен реагировать за 20 микросекунд, не должен вызывать время инициализации в несколько миллисекунд только потому, что он используется в первый раз... Более того, ленивая инициализация хороша для интерпретатора, но она заставляет компилятор генерировать неоптимальный код.

Обратите внимание, что JBed добавляет API реального времени, который преодолевает ограничения встроенного механизма потоков Java, и строго отделяет обработку исключений от отладки. Что касается проблемы инициализации, еще предстоит выяснить, сможет ли Sun ослабить определение языка, чтобы разрешить более раннюю инициализацию. Ленивую инициализацию реализовать несложно, но это не то, чего вы хотите в системе реального времени. Несмотря на это небольшое уродство, Java все еще остается гораздо лучшим языком, чем C++, даже для систем реального времени].

Компонентный Паскаль добавляет несколько новых возможностей (например, экспорт только для реализации, явный атрибут NEW для новых методов, методы EMPTY, записи LIMITED), которые помогают держать под контролем большие развивающиеся системы компонентного программного обеспечения, делая рефакторинг менее рискованным. По сути, Component Pascal позволяет лучше выразить паттерны проектирования в явном виде в интерфейсе фреймворка, чтобы компилятор мог проверить согласованность компонентов с их компонентными фреймворками. Это очень важно для приближения к конечной цели - безопасному подключению и воспроизведению независимо разработанных компонентов - другими словами: к недорогому компонентному программному обеспечению.

Вероятно, самым важным отличием является сложность: определение языка Java включает более тридцати классов с более чем 300 методами. Более того, функции языка (а иногда даже стандартные классы) очень тесно связаны между собой, что часто затрудняет понимание одной функции без понимания других. В результате, повседневное использование Java оказалось сложным и более трудоемким, чем ожидалось. Компонентный Паскаль - гораздо менее сложный и компактный язык, чем Java. На это есть две основные причины. Во-первых, Компонентный Паскаль, несмотря на свой небольшой размер, является языком, который можно понять и использовать постепенно, постепенно раскрывая новые возможности, когда они необходимы. Во-вторых, Компонентный Паскаль оставляет многие возможности Java библиотекам. Примером могут служить упомянутые выше механизмы потоков и синхронизации. В результате поощряется дальнейшее чистое наслоение механизмов и абстракций, в то время как Java и большая часть библиотеки классов, кажется, образуют обширную и концептуально плоскую "паутину" концепций.

(c) 1997-1999 Oberon microsystems, Inc.

Ссылка на оригинал https://folk.ntnu.no/haugwarb/Programmi ... _java.html


Вложения:
Краткое сравнение Компонентного Паскаля и Java.txt [12.98 КБ]
Скачиваний: 89
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Декабрь, 2021 18:51 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3271
Здорово, возможно эта статья когда-то легла в основу публикации
http://oberon2005.oberoncore.ru/paper/cp_java.pdf
Но есть и отличия с первого взгляда.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2022, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB