Comments 44
Статья занимательная, но есть вопрос: как автор, работая над подсветкой синтаксиса, может не заглянуть хотя бы в лексер соответствующего языка?
Да она даже свой же C++ не посчитала, хотя он для подсветки синтаксиса тоже сложный.
C и C++ у нее одинаково обрабатываются, только список ключевых слов разный
Лексеры разных языков написаны на разных языках и разными способами.
Есть описание грамматик же: https://github.com/antlr/grammars-v4
Вообще-то C# тоже разрешает рекурсивную интерполяцию строк...
А вот валидный код на Bash: export export=export
. Не очень понимаю что тут сможет подсветить один лишь лексер.
Ещё интересно посмотреть на Raku - он вообще контекстно-зависимый (как и C, кстати).
Это автор не пробовала сделать подсветку для TeX'а. Там синтаксические категории символов (\catcode
) можно менять на лету, так что без интерпретатора не обойтись. А как подсвечивать текст внутри конструкций наподобие \expandafter\csname...\endcsname
, которые раскрывают макросы, а результат интерпретируют как имя команды, вообще непонятно.
вспоминается история из плюсов.
в конце файла была строка правых слешей, типа коментарий, который разделяет функции и в конце случайно левый слеш, который не видно, если не прокрутить горизонтально.
так вот этот слеш, как описано в статье, присоединяет следующую строку, делая ее коментарием. а так как в плюсах файлы склеиваются в один, то он коментирует первую строку случайного файла. что вызывало глюки в компиляции.
а так опечататься можно на некоторых клавах. на одной клавише и левый и правый слеш. и правый делается через шифт. и когда отпускаешь обе клавишу, шифт может отпустится позже и прилетит в конце левый слеш.
и возможно, там ниже пример, из другого языка, где файл начинается с непонятного мусора аля # как раз, чтобы предыдущий файл не сломал последующий. при склейке файлов и компиляции.
Ещё одна причина, по которым файлы с кодом должны оканчиваться пустой строкой!
Главное, чтобы не две пустых строки: https://habr.com/ru/companies/odnoklassniki/articles/268413/
программисты фортрана точно не все уйдут на пенсию, вся вычислительная метеорология и климатология, значительная часть вычислительной гидро-аэродинамики, классических библиотек численных методов сделана на фортране. Никто их не будет переписывать на другие языки, по крайней мере до того момента, когда AI не смогут безошибочно переводить с одного языка на другой, а этого пока что нет даже близко. Хотя я лично не люблю его за архаичный невыразительный многословный синтаксис.
Не могут безошибочно ? Спросите любой ИИ перевести CSS в JS. Да, этот просто, но оба языки. Думаю, другие языки , и простейшие переводы , для ИИ не проблема. Выйдите из спячки
Действительно, вроде проблема трансляции одного ЯП в другой достаточно давно решена. Пусть не идеально (это про про производительность и расход памяти результатов), но решена. Кое что давно было подобным образом конвертировано: в первую очередь мне вспоминается tetex, который был как бы на простом Си хотя исходный TeX был написан на паскале; но думаю ещё подобных примеров можно наприводить. Впрочем, косяки могут, конечно, встретиться, но всё же.
Си и Паскаль – это семантически очень похожие языки, различающиеся в основном только синтаксисом. Тут гордиться особо нечем.
Что же касается алгоритмов на Фортране, то их перевод на другие языки (иначе как написанием второй проекции Футамуры, т.е. эмулятора) представляет собой большую проблему из за огромного количества подразумеваемых тонкостей семантики в Фортране, которые в других языках обычно являются неопределённым поведением.
Помнится, когда-то уже давным давно пробовал ради любопытства засунуть dll'ки от визуального васика в декомпилятор DotPeek и он декомпилировал его в обычный Си#, хотя она была написана (традиционно для Микрософта) на VB.
Да, между си и паскалем порой разницу устранить можно чуть ли не через поиск и замену. А вот трансляцию из форта или лиспа в си мне увидеть было бы забавно (ну или просто чего-то подобного). А то ведь и с декомпиляцией вместо простого ассемблера в хотя бы простой си проблемы.
Ну это просто мои мысли по поводу и ничего более.
Сравнить CSS и фортран - это сильно. На фортране пишется нетривиальная математика, если её во что-то переводить, то в какой нибудь матлаб, и то с ограничениями. Наверняка там начнутся всякие весьма трудноуловимые проблемы с немного другой точностью, провалы в производительности (а фортран выбирается там, где рассчетная математика нужна с хорошей производительностью, задачи считающиеся неделями норма), использовании особенностей реализации функций. Переводить алгоритмически сложную программу на другой язык не самая тривиальная задача, в которой верификация перевода сама по себе сложная задача.
Сталкивался с Фортраном лично, переводил пару библиотек на си. Переводил, естественно, не вручную, а утилитой. Так вот: магия фортрана сильно преувеличена, по синтаксису это продвинутый бейсик и не более того. Никто не занимается массовым переводом исходных кодов на другие языки просто потому, что это никому не надо. Нет абсолютно никакой сложности построить синтаксического дерево с одного языка (поскольку именно это и делают абсолютно все компиляторы), а затем транслировать его в другой язык, а не в машинный код, и это будет в разы проще.
Фортран нужен для производительности. Алгоритм подгоняется под реализацию языка для обеспечения производительности. Фортран удачно переводит пожелания математиков по рассчетам в оптимизированный машинный код. Так еще надо потом доказать, что вот это новое действительно то, что нужно. Если делать "безопасно" обходя подводные камни реализаций, то там производительность провалится куда-то в район скриптовых языков.
Фортран нужен для относительно быстрых вычислений, оптимизированных можно сказать. Алгоритм подгоняется под реализацию языка для обеспечения производительности. Фортран удачно переводит пожелания математиков по рассчетам в оптимизированный машинный код. Не представляю как это "легко" перевести. Так еще надо потом доказать, что вот это новое действительно то, что нужно. Если делать "безопасно" обходя подводные камни реализаций, то там производительность провалится куда-то в район скриптовых языков.
В наше время фортран нужен исключительно для людей, которые так и не смогли освоить с/c++, и который ему в плане производительности увы уступает (на современном железе и современных компиляторах). 50 лет назад конечно всё было по-другому. Но не сейчас.
Фортран развивается. И С/С++, учитывая область применения, выглядит весьма странной альтернативой. Полноценно оптимизированный код на С/С++ нужно писать программисту, человеку который глубоко разбирается в нюансах языка. Однако специализация тех, кто пишет на фортране несколько другая и я очень сильно сомневаюсь, что им прямо так хочется потратить несколько месяцев жизни на всё это, они несколько другой выбор в профессиональной области сделали.
Ну переведет и что. Такие коды десятилетиями используются в своих отраслях. Кому-то придет в голову валидировать, верифицировать, а потом носится заново аттестовывать по госорганам поделку ии?
Близко - уже есть. В полуручном режиме вообще проблем нет никаких
языки программирования: .... HTML ...
дальше можно не читать
А что, HTML не язык программирования?
не вздумай это где-нить на собеседовании ляпнуть.
пс: да, откройте вы уже для себя гугель или гпт какой-нить. промпт: "прчему html не язык программирования?"
Так вы ответите, почему HTML не язык программирования или нет?
По-моему, у него все признаки языка программирования: я на нем пишу, а компьютер что-то на основе этого делает.
посчитай мне 2+2 на html
А давно у нас языки программирования определяются возможностью делать арифметические операции? DSL у нас уже не языки?
Вот вам вики-определение: Язы́к программи́рования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит ЭВМ под её управлением.
Лексика, синтаксис и семантика есть? Есть. Определение внешнего вида программы и действий, которые выполняет компьютер есть? Есть, я могу сделать красную кнопку, при нажатии на которую отправится запрос на сервер.
DSL - не языки программирования
В статье в вики есть еще пара абзацев, их тоже полезно прочитать
Если кратко, на нём нельзя написать программу.
Недавно эту тему уже обсуждали https://habr.com/ru/articles/872108/
Определение внешнего вида программы и действий, которые выполняет компьютер есть?
Какие действия можно определить на html?
Какие действия можно определить на html?
Есть, я могу сделать красную кнопку, при нажатии на которую отправится запрос на сервер.
Действия определяются только в императивных языках программирования (и их объектно-ориентированных расширениях).
Какие действия можно определить на Прологе?
Markdown, html языки программирования, ясно
Возможно они причислены к декларативной парадигме.
- Да это языки, хоть и Тьюрингом не пахнет.
- Это попадает под программирование, так как описывается желаемый конечный результат (но не способ его достижения).
- Они меняют состояние системы.
- Связывают и апеллируют сущностями.
И существует же "Pure HTML Calculator", правда вменяемые версии с CSS.
По моему мнению, так и должно быть, потому что для конечного автомата так проще декодировать
рекурсию конечные автоматы реализовать не могут.
Для лексера придётся описать все разумные варианты.
Знаете ли вы, что однострочный комментарий в C может занимать несколько строк, если в конце строки использовать обратный слэш?
Это, кстати, работает и на макросы. Каждый раз в дрожь бросает когда вспоминаю как мне попался код, где часть функций была упихана в макросы.
использовать язык C при работе с клавиатурой, на которой не было символов #, [, \, ^, {, |, } и ~. Вы можете заменить эти символы на ??=, ??(, ??/,??), ??, ??<, ??!, ??> и ??-.
так это просто какая-то специальная кодировка символов. Если что, я не знал, что кодировка символов по другому называется лексический синтаксис. С таким названием, конечно, гораздо прикольнее.
Простите, а какой шрифт использован на скриншотах с кодом?
Самый странный лексический синтаксис, который я обнаружила, исследовав 42 языка программирования