LINUX.ORG.RU
Новости — Разработка

Blaise - новый компилятор языка Pascal

 , ,


1

6

Грэм Гелденхейс (Graeme Geldenhuys), разработчик графического пользовательского интерфейса fpGUI, системы сборки PasBuild, системы тестирования FPTest и отладчика opdebugger представил Blaise - компилятор для диалекта языка программирования Object Pascal.

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

Основные черты нового диалекта:

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

  • Удален тип object, вместо него предлагается использовать record, для которого доступно определение методов.

  • Удалены устаревшие операторы ввода/вывода assign, reset, rewrite, blockread и типы file и text.

  • Предложен единственный строковый тип, заменяющий ShortString, AnsiString, WideString, OpenString и UnicodeString.

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

  • Добавлено определение переменных в месте использования.

Для генерации машинного кода в компиляторе используется QBE (c9x.me), генератор на основе LLVM находится состоянии разработки.

В планах проекта создание LSP-сервера, поддержка языка в Visual Studio Code, а также создание инструмента для миграции с Delphi и Free Pascal.

>>> Blaise Pascal Compiler

★★★

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

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

Ты не понял. Пример, где это нужно, я придумать могу. Но я не знал, как именно это записывается в pascalABC.NET, да и самого pascalABC.NET у меня под рукой нет.

А в твоём примере я не понял, i после begin и i, отмеченное var-ом после for – это одна переменная или две? Этот пример действительно собирается?

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

да, это разные переменные, ещё такую же можешь завести в блоке var перед begin
можешь ещё внутри цикла сделать блок begin и там завести переменную
да, этот пример рабочий
разработчики fpc такой ереси не хотят

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

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

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

Согласен.

Как по мне, концепция устарела.

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

Это с одной стороны. С другой - за рамками виртовского паскаля уже дофига всего, что есть в FPC. Поэтому, ну мутная тема, что считать «настоящим паскалем» в нынешних реалиях. Де факто, что в FPC засунут, то и Паскаль.

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

Как по мне, концепция устарела.

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

Поэтому, ну мутная тема, что считать «настоящим паскалем» в нынешних реалиях.

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

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

Во-первых, омерзительно; во-вторых, полумера.

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

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

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

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

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

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

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

Нужна информация - настрой редактор или IDE.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)

https://github.com/graemeg/blaise/releases/tag/v0.7.0:

Blaise v0.7.0 (alpha) — Independence Day 🎉
This release marks a milestone: Blaise is now fully independent of Free Pascal. FPC is no longer required anywhere in the toolchain. The bootstrap chain is: released Blaise binary → compiles source → new Blaise binary. From here on, every release builds the next.

dataman ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.