Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Как я уже говорил, инкапсуляция в Оберонах также построена на концепции модуля — все типы, объявленные в модуле прозрачны друг для друга, а доступ внешних клиентов к сущностям модуля осуществляется посредством спецификаторов доступа.По небольшому опыту с golang, где используется аналогичный подход, — довольно удобная вещь (там видимость определяется тем заглавная или прописная первая буква идентификатора).
Go is mostly in the C family (basic syntax), with significant
input from the Pascal/Modula/Oberon family (declarations, packages), (дальше про другие языки)
Сейчас стоит просто Оберон и это правильно, ибо это всё Обероны, включая Компонентный Паскаль( о чём, опять же, явно пишут его создатели, приложившие руку и к созданию Оберона-2, тем более, что и компилятор там от Оберона-2).
…
Чтл касается некое различие типов — это совсем не важно, ведь когда в Активный Оберон были добавлены комплексные типы, перечисления, беззнаковые, адрес, синтаксис определения типов остался тем же самым и язык также остался языком семейства Оберон.
В Модуле-3 также есть объявление переменных по месту(почти по месту) и вывод типа переменной по типу результата первого присваивания. Но, при этом oна осталась языком семейства Модула и синтаксис не изменился.
А портирование(выполнено моим сотрудникам) нового Project Oberon на нашу железяку (VAX-11), было выполнено за два выходных, это довольно просто сделать для такого маленького и проработанного проекта.
А портирование(выполнено моим сотрудникам) нового Project Oberon на нашу железяку (VAX-11), было выполнено за два выходных, это довольно просто сделать для такого маленького и проработанного проекта.
В данном случае мне нравится когда мухи отдельно, котлеты отдельно. И при этом чтобы компилятор проверял, что реализация модуля не противоречит его спецификации (иногда полезно разрабатывать отталкиваясь от спецификации на модуль, а не от реализации, то есть вначале пишем спеку, потом реализуем, причем по спеке можно также автоматически сгенерировать реализацию-заглушку).
На всякий случай: я за объявление переменных по месту использования, а не в единой могучей секции VAR :-)
import pkg.*;, плюсовое using namespace xxx; или хаскелевский неквалифицированный import Data.XXX должны использоваться как можно реже, желательно никогда. Обязательные явные квалификаторы (с возможными алиасами) — одна из моих любимых фич golang.MODULE OOC:SSA;
IMPORT
SYSTEM, Log, Object, Object:Boxed, Object:BigInt, ADT:Dictionary,
Sym := OOC:SymbolTable, OOC:SymbolTable:Predef, OOC:IR,
OOC:SSA:Opcode, ResultClass := OOC:SSA:Result, OpndClass := OOC:SSA:Opnd;
Вот и получается, что никакого страдания нет, а если оно у тебя есть, то связано не только см Обероном, но и другими языками. Ведь не назовёшь же серьёзной проблемой ЯЗЫКА непонимание где что находится в ПРОЕКТЕ?
На любом языке, открыв чужой проект в каком нибудь нотепаде ( ты же обероновские модули в неком подобии нотепада сиотришь, когда для С++ используешь наdороченную и настроенную IDE?) нужно потратить время на то чтобы разобраться что где лежит, настроить ту самую супер IDE и вперёд.
Оберон умер, да здравствует Оберон! Часть 2. Модули