LINUX.ORG.RU

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

 , ,


2

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 ★★★★★
()
Ответ на: комментарий от hobbit

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

Проблема решается самим Питоном — он отказывается работать с такими файлами :)

А кроме того, некоторые редакторы умеют показывать разные символы, чтобы различать разные виды пробелов и табов.

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

Проблема решается самим Питоном — он отказывается работать с такими файлами :)

С каких это пор?

А кроме того, некоторые редакторы умеют показывать разные символы, чтобы различать разные виды пробелов и табов.

А некоторые не умеют. Ну и если текст большой?

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

С каких это пор?

Не выяснял. Гугло-ИИ пишет, что с 3-ей версии.

А некоторые не умеют.

Vim умеет, Emacs умеет, VSCode умеет, Eclipse умеет, Kate умеет, Nano умеет, mcedit умеет, KDevelop умеет, Geany умеет, Gedit умеет, FAR умеет, Notepad++ умеет. Что актуальное не умеет, кроме Notepad-а?

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

Врёт.

Ага, а «Эльбрусов» не существует. Доказывать тебе что-то бесполезно.

Наткнулся на эту фичу в 3.10.

FAR умеет, Nano умеет

Разве?

https://www.nano-editor.org/dist/latest/nano.html#Whitespace
https://www.nano-editor.org/dist/latest/nano.html#Feature-toggles
https://stackoverflow.com/questions/63814763/how-to-reset-settings-of-far-manager

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

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

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

Что не работает?

«Шлангосепт». Попробуй увеличить дозу.

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

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

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

У меня как показывал выше такое не работает. Значит нельзя полагаться на то что будет работать везде.

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

В версии 0.8 добавили динамические массивы, багофичу Delphi/FPC с константными массивами сохранили:

program da;

type
  TIntArray = array of Integer;

var
  a1: TIntArray;
  a2: TIntArray;

procedure resize12;
begin
  SetLength(a1, 500);
  SetLength(a2, 1);
  a2[0] := 100500;
end;

procedure print0(const a: TIntArray);
begin
  WriteLn(a[0]);
  resize12;
  WriteLn(a[0]);
end;

begin
  SetLength(a1, 1);
  a1[0] := 42;
  print0(a1);
end.
$ blaise --source da.pas --output da && ./da
42
100500
No ★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.