Re[3]: Модульные системы программирования
От: vsb Казахстан  
Дата: 13.07.20 10:24
Оценка:
Здравствуйте, T4r4sB, Вы писали:

vsb>>Но если сравнивать с Java, мне подход последней нравился больше.

TB>То есть язык без мета, но с внешним кодогенератором — оптимальный вариант?

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

Т.е. важен результат. Будет ли кодогенератор внешним это уже детали. Я немного знаком с лисповыми макросами и там по сути тоже генерируется текст. Но я не представляю, как их смотреть и отлаживать. Это всё очень запутанно. Плюс: текст в лисповых макросах генерируется и вставляется по месту вызова. Если развернуть, будет каша из моего кода и не моего кода. В Java, например, я генерирую отдельный класс в отдельном файле. А в месте вызова у меня, например, виртуальный метод, реализация которого перепрыгивает в этот файл. Идёт чёткое разделение на мой код и сгенерированный код и это удобно.
Отредактировано 13.07.2020 10:27 vsb . Предыдущая версия . Еще …
Отредактировано 13.07.2020 10:27 vsb . Предыдущая версия .
Re[4]: Модульные системы программирования
От: T4r4sB Россия  
Дата: 13.07.20 13:55
Оценка:
Здравствуйте, pagid, Вы писали:

P>И как Оберон помог бы в случае с той ошибкой приведшей к катастрофе Ариана в 1996 году?


Как вообще любой язык защищает от чисто-логических ошибок?
Re[5]: Модульные системы программирования
От: pagid Россия  
Дата: 13.07.20 14:44
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Как вообще любой язык защищает от чисто-логических ошибок?

Там была не логическая ошибка. На новой модели ракеты поставили новые датчики, с большим диапазоном выдаваемых показателей, программу СУ в части работы с датчиками не изменили и значения из недопустимого ранее диапазона она воспринимала как неисправимую ошибку и дала команду на уничтожение ракеты.
Это не логическая ошибка, а проявившийся недостаток процесса разработки.
Re: Модульные системы программирования
От: IT Россия linq2db.com
Дата: 14.07.20 14:51
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Даже удивительно, что в 2020 UI (Black Box) занимает 500K ОЗУ.


Почему никого не удивляет, что в 2020-м году можно поставить себе на рабочий комп 256 гиг памяти?

Т.е. во времена MS DOS, когда на компе было 640 кб, UI соответственно должен был занимать чуть более одного килобайта в памяти. Что-то я не припомню такого.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Модульные системы программирования
От: IT Россия linq2db.com
Дата: 14.07.20 14:55
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Классическая IDE аналогичная VS(C#) поощеряет начинающего программиста написать плохо спроектированную, нерабочую программу и потом

AA>доводить ее до ума с помощью пошагового отладчика, ставя заплатки тут и там.

Слышал такое много раз от людей не умеющих пользоваться ни IDE, ни отладчиком. Видел их удивлённые рожи типа "а шо так тоже можно" как реакцию на элементарные вещи.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Модульные системы программирования
От: Ночной Смотрящий Россия  
Дата: 15.07.20 08:13
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Просто текст генерировать не очень удобно для того, кто пишет генератор


Это чего вдруг? Я вот на практике вижу обратное. В одном известном продукте основное представление кода — AST. Однако местами там генерируется текст, потому что это проще и удобнее, хоть и требует потом запуска парсера.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: Модульные системы программирования
От: vsb Казахстан  
Дата: 15.07.20 10:09
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

vsb>>Просто текст генерировать не очень удобно для того, кто пишет генератор


НС>Это чего вдруг? Я вот на практике вижу обратное. В одном известном продукте основное представление кода — AST. Однако местами там генерируется текст, потому что это проще и удобнее, хоть и требует потом запуска парсера.


Ну мне это очевидно. Я генерировал текст и мне много раз хотелось понаписать хелперов, чтобы генерировать AST, а из него текст, еле сдерживался. Во-первых индентация. Во-вторых скобки считать, тоже не интересно. В-третьих импорты. В-четвёртых это как разница между строгой и динамической типизацией: в случае продуманного API тривиальную ошибку в генерации можно поймать просто за счёт системы типов или во время генерации. В случае текста ошибка поймается только во время компиляции.
Re[6]: Модульные системы программирования
От: Ночной Смотрящий Россия  
Дата: 15.07.20 11:45
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Ну мне это очевидно.


Да ради бога. Но в публичном форуме неплохо бы и обосновать, не?

vsb> Я генерировал текст и мне много раз хотелось понаписать хелперов, чтобы генерировать AST, а из него текст, еле сдерживался.


Ну давай сравним на примере выражения x.Foo*4 + y.Bar. Приведи псевдокод для текста и для AST.

vsb>Во-первых индентация.


В цепочке текст->парсер->текст это не проблема.

Но не суть. Хорошее решение это не текст и не AST. Хорошее решение это квазицитирование (в применении к метапрограммированию — https://en.wikipedia.org/wiki/Lisp_(programming_language)#Self-evaluating_forms_and_quoting). В шарпе ближайшее приближение это dynamic (в еще более урезанном виде — extression tree).
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Модульные системы программирования
От: vsb Казахстан  
Дата: 15.07.20 13:06
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Ну давай сравним на примере выражения x.Foo*4 + y.Bar. Приведи псевдокод для текста и для AST.


plus(mult(var("x").prop("Foo"), num(4)), var("y"))

Но обычно все компоненты в таком выражении будут переменными, а не константами. Поэтому будет что-то вроде

plus(mult(var(xVar).prop(fooProp), num(multiplier)), var(yVar).prop(barProp)) vs xVar + "." + xProp + " * " + multiplier + " + " + yVar + "." + barProp. И тут уже первый вариант точно выигрывает.

НС>Но не суть. Хорошее решение это не текст и не AST. Хорошее решение это квазицитирование (в применении к метапрограммированию — https://en.wikipedia.org/wiki/Lisp_(programming_language)#Self-evaluating_forms_and_quoting). В шарпе ближайшее приближение это dynamic (в еще более урезанном виде — extression tree).


Непонятно, при чём тут квазицитирование, когда я генерирую новый код. Например недавно я из XSD генерировал SQL-код и Java-код. Не представляю, как мне тут поможет квазицитирование.
Re[8]: Модульные системы программирования
От: Ночной Смотрящий Россия  
Дата: 15.07.20 18:12
Оценка:
Здравствуйте, vsb, Вы писали:

НС>>Ну давай сравним на примере выражения x.Foo*4 + y.Bar. Приведи псевдокод для текста и для AST.

vsb>plus(mult(var("x").prop("Foo"), num(4)), var("y"))

И это называется удобно? Я уж не говорю о том что ты забыл про указание типов, если мы для строго типизированного языка генерим.

vsb>Но обычно все компоненты в таком выражении будут переменными, а не константами. Поэтому будет что-то вроде


vsb>plus(mult(var(xVar).prop(fooProp), num(multiplier)), var(yVar).prop(barProp)) vs xVar + "." + xProp + " * " + multiplier + " + " + yVar + "." + barProp.


А зачем так сложно?
$"{xVar}.{xProp} * {multiplier} + {yVar}.{barProp}"


vsb> И тут уже первый вариант точно выигрывает.


Неа, точно проигрывает.

vsb>Непонятно, при чём тут квазицитирование, когда я генерирую новый код.


При том что ты его не случайным образом обычно генерируешь, а по шаблону.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Модульные системы программирования
От: Kolesiki  
Дата: 16.07.20 13:11
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Уолтер Брайт:


AA>Один мой коллега с богатым производственным опытом заметил,

AA>что IDE – необходимый для программирования инструмент,
AA>потому что позволяет одним щелчком мыши сгенерировать сотни строк стандартного кода.

Чушь собачья. IDE прежде всего помогает писать корректный код за счёт:
1. Подсветка синтаксиса и быстрый анализ ошибок
2. Подсказка нужных функций/типов
3. Упрощённая сборка проекта

И где-то в конце первой сотни — сниппеты "стандартного кода".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.