
Сообщение от
mastermind
Как все сложно. Освойте уже Clash.
Что? Этот убогий псевдоязык, у которого нет даже собственного компилятора? Средств верификации? Синтаксис которого более многословен, чем у VHDL, и более уродлив, чем у Verilog?
На котором, прошу прощения, нельзя описать даже простейший RS-триггер?

Сообщение от
mastermind
Он из сложного, многословного и путаного исходника сгенерируtт write-only непонятный VHDL или Verilog, про который нельзя будет даже проверить, была ли генерация корректной.
Элементарнейший пример уродства Clash:
Код:
adc :: Byte -> Byte -> Byte -> (Byte, Byte)
adc flags a b = adcSbc A.AluADD flags a b
Вот зачем отдельно указывать сигнатуру функции и отдельно её список аргументов? Чтобы ошибок насажать на ровном месте? Сравним с нормальным языком:
Код:
function adc(flags : byte; a : byte; b : byte) return alu_result is
begin
adc <= adc_sbc(ALU_ADD, flags, a, b);
end;
Да, конкретно в случае однострочных обёрток над универсальной функцией VHDL более многословен. Но и то -- шансов накосячить из-за опечатки значительно меньше.
Кстати, код вверху взят из реального проекта, написанного на Clash: https://github.com/polygonhell/Clash6502
Это попытка реализовать знаменитый процессор nMOS 6502 на Clash. Конкретно -- реализация АЛУ: https://github.com/polygonhell/Clash.../master/Alu.hs
В нём строк кода больше, чем в АЛУ оригинального процессора имеется транзисторов. Оцените компактность и выразительность этого языка.
И заодно уровень интеллекта автора: там для каждой команды имеется своя реализация -- ну вот как для adc выше -- и выходной мультиплексор на 50+1 вход. То есть, там 50 специализированных экземпляров АЛУ.
И ссылка на ЭТО висит на официальном сайте Clash! https://clash-lang.org/documentation/ , вторая в последнем блоке.
Я полагаю, больше примеров приводить не надо, масштабы катастрофы уже ясны и так.