LINUX.ORG.RU

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

 , ,


1

5

Грэм Гелденхейс (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)
Ответ на: комментарий от kaldeon

Разница в том, какой образ создают оба языка:

Это твои субъективные додумки. В питоне точно так же есть строгий синтаксис.

Она неявная. Неявное всегда сложнее освоить, чем явное.

Опять субъективное суждение. Для освоения любого языка нужны пояснения. В паскале нужно объяснять одно, в питоне - другое. Только вот паскаль мертв и объективно бесполезен, а питон - живой, юзабельным, и связки питон+си достаточно для вката в более продвинутые области, в то время как помимо паскаля тебе всё равно придется учить как минимум два нормальных языка.

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

Вопрос аудитории.

Вопроса так и не увидел, поэтому просто прокомментирую. :)

Если школьник ещё не определился с профессией, то ему Паскаль (ровно как и переход на Си), очевидно, не нужен

Не нужен, верно. Ему даже школа не нужна. Школьники, за редким исключением, вообще не испытывают потребности учиться - «Дети-с!..». :))

Но «определение с профессией» и школа - это «из разных миров». Школа - «Это другое!». :)

Как и чему таких учить — вопрос банальный и чисто практический

Всё это есть в учебных программах... ;)

Преподавателю даже самому не обязательно хорошо знать программирование

100% не нужно. Да они и не знают, в массе своей. Для преподавания в школе предмета «Информатика» знание программирования не требуется. «Я так думаю!» © :))

Я, когда меня 20+ лет «тому взад» попросили «довести» информатику в трёх из четырёх «наличных» десятых классах во втором учебном полугодии, был исключением. Просто потому, что пришёл туда «от станка» - с производства, где назывался «инженер минус программист» ( это мы сами так себя «обзывали», на самом деле - «инженер-программист», конечно же... :) ). Так что я был «программирующим преподавателем информатики» просто «по случаю». И именно программированию я «детей» не учил... :))

Меня же интересует, прежде всего, исключительно заинтересованный и вовлечённый ученик.

Бывает...:)

Меня волнует проявление уважения к его интересу, а не к социалистическим программам всеобщего благосостояния

Вот тут я не понял, о чём именно речь...

Но могу сказать, что лично я на уроках информатики никакие «интересы» не учитывал, а работал в соответствии с договором, учебной программой и прочими нормативными актами. То есть, преподавал информатику в соответствии с учебной программой для 10-х классов общеобразовательных школ. ВСЁ.

А вот после уроков... ;) Я вёл три «пары» - по паре уроков в каждом классе - по субботом, а четвёртой парой сделал этакие «консультации», куда, каждый, кто «недопонял» или «недосдал», мог прийти и «доспросить» у меня, либо «досдать» мне...

Не знаю, можно ли это было назвать «уважением интересов», но в итоге все - и учащиеся, и их родители - остались довольны. :))

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

with позволяет наплодить тяжёлых ошибок … аналогия с указателями

Есть ли способ сохранить мощь with, избежав конфликтов имён?

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

Применять осмотрительно. Если требуется зарываться слишком глубоко – это симптом того, что вместо записей надо делать объекты и делать обработку через методы (как и делают в плюсах, но там это единственный способ обращения, а здесь есть выбор).

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

Явное определение псевдонима решило бы проблемы с with:

with a := GetSomeObject() do begin
    a.Method1();
    a.Method2();
    a.Method3();
end;
No ★★★
() автор топика
Ответ на: комментарий от liksys

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

Практически любая пост-алгольщина выглядит лучше сишки.

Ruby, Lua, Modula-2, Ada. Даже, прости господи, VB.NET.

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

Питон: хочешь написать программу — напиши её на английском языке. Не работает? Ну да, ведь есть строгий синтаксис, только после исправления ошибки его всё равно не видно, программа вновь стала прозой на английском языке.

Нет такого.

Ладно бы к Ruby кто-то с такой предъявой вышел. Она бы тоже была нелепа, но там я хотя бы могу предположить ход мыслей. Но в случае Питона…

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

В нормальном языке достаточно завернуть это в обычный блок.

В Blaise это можно записать как

begin
    var a := GetSomeObject();
    a.Method1();
    a.Method2();
    a.Method3();
end;

поэтому в нем и можно обойтись без with.

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

Во-первых, частный случай. Во-вторых, как раз эту часть можно и переработать.

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

Ну так. У меня лично от него ощущение, что он очень хочет быть си-подобным, но всякие уродские begin/end ему очень мешают.

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

В Lua нет ключевого слова begin.

Я думаю, на этом можно закончить «личные ощущения» и что-нибудь изучить ;)

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

Зато там do, then и прочие костыли, которые являются семантическим эквивалентом begin. Разница не принципиальна. Слишком много визуального мусора. Си с его {} и минимумом ключевых слов гораздо элегантнее.

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

А что касается сишки, то синтаксически фундаментально это был тот же самый паскаль. Если брать раннюю сишку и ранний паскаль.

Только вместо линейной записи выражений типа они зачем-то присрали запись «изнутри наружу», которая ломает мозги новичкам.

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

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

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

Не удивил. У тебя знания о синтаксисе как системе соответствуют средним знаниям о синтаксисе для типичного представителя подобных языковых холиваров.

Си с его {} и минимумом ключевых слов гораздо элегантнее.

Ага:

        }
      }
    }
  }
}

Еще элегантнее писать на перле, кстати.

задача текста, предназначенного для чтения - быть легко понятным, а не элегантным.

Именно поэтому end if из Васика оказывается лучше и паскаля, и си.

А Lua не дотянул, да.

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

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

А когда у тебя в хвосте идет endfor/endif/endfor/endfor/endif - тебе это тоже мало о чем скажет, контекст ты не удержишь.

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

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

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

У меня иной личный опыт. Вполне помогает. При том что я и на {}-языках много писал (не только на Си, на той же JS, на PHP).

Вот что я могу сказать про Си, если не трогать семантику, а чисто синтаксис:

1

Выражения типов в Сишке - срань. Идея «как используется, так и пишется» хорошая, но реализоана через жопу. Во всяких современных «убийцах си» - это первое, что исправляют.

2

int* p , i;

Сколько новичков на этом мозг себе сломали.

3

Присваивание как операция внутри выражений - сколько ошибок в результате опечатки на этом случилось.

Сама идея писать присваивание внутри выражения - хорошая, но её следовало сделать более видимой, чтобы недопечатанный == не превращался в =, или скопированное в условие присваивание не оставалось там незамеченным.

Решение могло быть чисто синтаксическое:

a = x; // обычное присваивание
if (b := foo()) { // присваивание внутри выражения
   ...
}

4

Скобки {}. Скобки блока синтаксически это тот же самый begin end. Именно по смыслу тут нет никакой разницы. Разница чисто в количестве букв. То есть {} лучше чем begin end ровно на количество букв разницы. По смыслу разницы нет.

А вот языки, в которых блок является встроенной частью составного statement - иное дело.

По этому параметру Ada - лучше, VB - лучше.

Ruby, Lua - частично лучше. Они решают проблему висящего else, но не проблему удобства чтения конца блока.

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

А чем это отличается от такого же каскада end-ов?

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

обычное присваивание
присваивание внутри выражения

Зачем разные то делать? Я пойму желание уменьшить вероятность опечаточного смешивания присваивания со сравнением (добавить двоеточие), но зачем при этом отличать присваивание само по себе от присваивания внутри выражения?

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

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

Это делает намерение программиста явным: я ТОЧНО хочу присвоить значение внутри другого выражения.

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

Выражения типов в Сишке - срань

Да.

Сколько новичков на этом мозг себе сломали.

Тоже да.

Присваивание как операция внутри выражений - сколько ошибок в результате опечатки на этом случилось.

И это - да.

Разница чисто в количестве букв. То есть {} лучше чем begin end ровно на количество букв разницы. По смыслу разницы нет.

Именно потому оно мне и нравится. Не замусоривает код %) Я по всем пунктам с тобой согласен, кроме скобок.

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

Она бы тоже была нелепа

Ну почему? Нам нужно в самом начале объяснить, что синтаксис в языках программирования строгий. Эта концепция не новая (в естественных языках синтаксис тоже строгий), но до изучения программирования мы её просто не замечаем.

Чтобы объяснить любую концепцию, нужен пример. Какой пример может дать Питон в самом начале? Напишешь квадратные скобки вместо круглых? Маловероятно. Искусственные примеры тоже плохи. Напишешь primt вместо print? Это опечатка, а не синтаксис. Выберешь одинарную кавычку вместо двойной? Это даже не ошибка.

И здесь у нас есть отличная возможность: показать, что команды должны быть разделены синтаксически. Как мы будем это делать? Для нового человека перевод строки — это типографика, но не синтаксис. И здесь Паскаль нам даёт отличный способ использовать имеющийся опыт в новой задаче: осязаемая точка с запятой, используемая по исходному назначению.

Это «нелепо» только для «крутых хакеров», которые привыкли спорить чей инструмент лучше. А для педагогических целей это очень весомое наблюдение.

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

То есть {} лучше чем begin end ровно на количество букв разницы

изначально это не эквиваленты, begin/end не создают область видимости
хз чё там в сабже

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

Забавно))

То есть со второй попытки им удалось скопировать виртовский язык без клоунады. =)

Первой попыткой был Си.

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

А что касается сишки, то синтаксически фундаментально это был тот же самый паскаль.

Это не так. Общее есть, но это не Паскаль. На Си можно писать почти как на Паскале, это правда.

У Си никогда не было никаких преимуществ перед другими алголоидами именно в качестве языка как знаковой системы.

А него было преимущество в том что на нём был написан UNIX, а позднее не только он. Поэтому в ОС гарантированно присутствовал компилятор, стандартная библиотека и довольно обширный тулчейн для этого языка.

Кроме того, на момент создания у него были и другие преимущества перед Паскалем, например развитый препроцессор, адресная арифметика и т.п.

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