Ответы пользователя по тегу Программирование
  • Как создать язык программирования?

    @koperagen
    Ну, туториалы по созданию уже упомянали. Добавлю Компиляторы: принципы, технологии и инструменты
    Есть пример создания языков для LLVM https://llvm.org/docs/tutorial/ (реализацию можно найти и на других языках, как минимум видел на хаскеле и котлине)
    Ответ написан
  • В чем суть процедурного программирования?

    @koperagen
    Следование принципам ООП помогает локализовать изменения в реализации, к примеру смена протокола передачи данных не повлияет на код, которому нужно "просто" отправить сообщения. Этого можно добиться введением интерфейса - отправителя сообщений и внедрением зависимости, к примеру через конструктор. Т.е. требуется дополнительное действие (создание и передача в конструктор) + нужно продумать интерфейс + немного увеличивается кодовая база.
    Но не всегда же требуется иметь возможность сменить протокол передачи данных. В структурном программировании код, отправляющий сообщение, просто вызывал бы вполне конкретную процедуру отправки массива байт по TCP. Такой код быстрее написать, но смена протокола потребует вносить изменения везде, где он используется

    p.s. не уверен, что правильно понял вопрос. Оказывается, есть отличие между процедурным и структурным программированием. Структурное все же намного ближе к нашему времени и современным языкам, наверно речь в вопросе именно о нем?
    Ответ написан
  • Почему столько восторгов вокруг типизации? По-моему без нее намного проще, не?

    @koperagen
    Зная тип переменной среда разработки может подсказать:
    1. можно ли присвоить ей результат функции
    2. можно ли её передать как аргумент функции
    3. к каким методам и свойствам можно обратиться

    В некоторых языках, например Kotlin, система типов позволяет отслеживать null значения и обрабатывать их в коде.
    Более того, в большинстве статически типизированных языков есть возможность вывода типа исходя из выражения. Т.е. можно писать тип только там, где это действительно необходимо. Отличие от JS в том, что типы все равно отслеживаются на этапе компиляции и нельзя присвоить переменной значение другого типа.
    Запись вида
    val a = 2 + 3
    Эквивалентна записи
    val a : Int = 2 + 3
    Это приведет к ошибке:
    val a = 2 + 3
    a = "Hello"

    Все это помогает переместить целые категории ошибок из времени исполнения в этап компиляции (Для IDE и вовсе этап написания кода)
    Ответ написан