Size: a a a

Compiler Development

2020 March 28

AT

Alexander Tchitchigin in Compiler Development
Vasiliy Tereshkov
Зато немало циклов отладки после запуска, и каждый из них отнимет немало, пока снова загрузится среда, модули, библиотеки.
Это уже вопрос НЕ к автору языка. Многим пользователям такой размен очень даже нравится. 🤷‍♀️
источник

VT

Vasiliy Tereshkov in Compiler Development
Alexander Tchitchigin
Так проще для реализации языка. Не нужно писать тапчекер - уже меньше работы. И да, многие пользователи предпочитают динамическую типизацию.
ВМ для динамических языков тоже проще (или не сложнее), если не заморачиваться. В какой-то степени проверять типы приходится и ВМ для компилируемых языков.
Так ведь type checker просто переедет из компилятора в ВМ, да ещё и потребует более эффективной реализации, чтобы программа не тупила.
источник

AT

Alexander Tchitchigin in Compiler Development
Vasiliy Tereshkov
Так ведь type checker просто переедет из компилятора в ВМ, да ещё и потребует более эффективной реализации, чтобы программа не тупила.
Нет. 😊
источник

Ɖ

Ɖrēw in Compiler Development
Vasiliy Tereshkov
Так ведь type checker просто переедет из компилятора в ВМ, да ещё и потребует более эффективной реализации, чтобы программа не тупила.
Ну почему же, там его просто не будет как такового
источник

Ɖ

Ɖrēw in Compiler Development
Тебе просто будет сыпать в рантайме что то вроде "метода А нет у объекта Б"
источник

AT

Alexander Tchitchigin in Compiler Development
Vasiliy Tereshkov
Так ведь type checker просто переедет из компилятора в ВМ, да ещё и потребует более эффективной реализации, чтобы программа не тупила.
Я, конечно, извиняюсь за личный вопрос, но что из тайп-чекера и ВМ Вы писали? Потому что статическая и динамическая проверка типов общего имеют только "проверка типов" в названии. 😊
источник

YS

Yaroslav Schekin in Compiler Development
Vasiliy Tereshkov
Коллеги, а почему в скриптовых языках так любят динамическую типизацию? Считается, что это проще для пользователя? Но ведь всё равно за типами приходится следить, а узнать об ошибке типов можно только запустив программу и дождавшись вызова проблемной функции. Да и виртуальная машина медленнее, если контроль типов ложится на неё.
Скажу Вам как пользователь — да, для меня это проще.
А в плане "слежения за типами" — я допускаю подобные ошибки очень редко (одну в месяц / несколько месяцев программирования, например).

> Да и виртуальная машина медленнее, если контроль типов ложится на неё.
Зато писать программы гораздо быстрее, обычно.
Потому и выбирают эти языки — из-за высокой производительности программиста. ;)
источник

AT

Alexander Tchitchigin in Compiler Development
Yaroslav Schekin
Скажу Вам как пользователь — да, для меня это проще.
А в плане "слежения за типами" — я допускаю подобные ошибки очень редко (одну в месяц / несколько месяцев программирования, например).

> Да и виртуальная машина медленнее, если контроль типов ложится на неё.
Зато писать программы гораздо быстрее, обычно.
Потому и выбирают эти языки — из-за высокой производительности программиста. ;)
> я допускаю подобные ошибки очень редко
> из-за высокой производительности программиста

А
Вы, простите, на каких типизированных языках писали? C++/Java/C#?
источник

VT

Vasiliy Tereshkov in Compiler Development
Alexander Tchitchigin
Я, конечно, извиняюсь за личный вопрос, но что из тайп-чекера и ВМ Вы писали? Потому что статическая и динамическая проверка типов общего имеют только "проверка типов" в названии. 😊
Из ВМ - пока ничего. Писал только статическую проверку типов в маленьком компиляторе в машинный код. Быть может, я и не понимаю глубины различий. Но вот, допустим, есть функция, в ней какие-то битовые операции с аргументом, а ей на вход вдруг попадает double. Если это не отловить статически, то должна будет ловить ВМ. Разве не так?
источник

AT

Alexander Tchitchigin in Compiler Development
Vasiliy Tereshkov
Из ВМ - пока ничего. Писал только статическую проверку типов в маленьком компиляторе в машинный код. Быть может, я и не понимаю глубины различий. Но вот, допустим, есть функция, в ней какие-то битовые операции с аргументом, а ей на вход вдруг попадает double. Если это не отловить статически, то должна будет ловить ВМ. Разве не так?
Возможны варианты. Во-первых, очевидно, можно интерпретировать double как тупо байты и произвести над ними битовые операции. Во-вторых, можно проверить тип и выбросить исключение.

Различие со статической проверкой: для статической проверки нужно проанализировать дерево выражений, для динамической - просто теги пришедших объектов.
источник

YS

Yaroslav Schekin in Compiler Development
Alexander Tchitchigin
> я допускаю подобные ошибки очень редко
> из-за высокой производительности программиста

А
Вы, простите, на каких типизированных языках писали? C++/Java/C#?
Да, в основном на них (на широко распространённых императивных), а что?
И да, причём тут я, если Вы хотите делать какие-то общие выводы? ;)
(Я написал просто IMHO.)
источник

VT

Vasiliy Tereshkov in Compiler Development
Yaroslav Schekin
Скажу Вам как пользователь — да, для меня это проще.
А в плане "слежения за типами" — я допускаю подобные ошибки очень редко (одну в месяц / несколько месяцев программирования, например).

> Да и виртуальная машина медленнее, если контроль типов ложится на неё.
Зато писать программы гораздо быстрее, обычно.
Потому и выбирают эти языки — из-за высокой производительности программиста. ;)
Я, увы, допускаю такие ошибки часто: когда в каком-нибудь PyTorch функция ждала тензор размера (1, 1, m, n, 1), а я ей подал (1, m, n, 1). И вот я жду, пока загрузится ROS, PyTorch, посыплется поток данных - и вот тут только я и узнаю, что ошибся, да ещё и с дурацким сообщением об ошибке (кажется, глупость сообщений об ошибках в Питоне как-то связана с динамической типизацией).
источник

AT

Alexander Tchitchigin in Compiler Development
Yaroslav Schekin
Да, в основном на них (на широко распространённых императивных), а что?
И да, причём тут я, если Вы хотите делать какие-то общие выводы? ;)
(Я написал просто IMHO.)
> Потому и выбирают эти языки — из-за высокой производительности программиста.

Вот тут Вы действительно не причём, поскольку делаете какой-то общий вывод. На данный момент участникам чата должно быть понятно на основе какого опыта Вы делаете такой вывод и какой у Вас кругозор. Надеюсь, никто уже не станет после этого с Вами спорить.
источник

VT

Vasiliy Tereshkov in Compiler Development
Alexander Tchitchigin
Возможны варианты. Во-первых, очевидно, можно интерпретировать double как тупо байты и произвести над ними битовые операции. Во-вторых, можно проверить тип и выбросить исключение.

Различие со статической проверкой: для статической проверки нужно проанализировать дерево выражений, для динамической - просто теги пришедших объектов.
Первый путь - скорее всего, катастрофический (вряд ли пользователь этого хотел). Второй - это как раз и есть возложение на ВМ проверки типов, да ещё и при каждом вызове функции - вместо того, чтобы сделать это заранее.
источник

AT

Alexander Tchitchigin in Compiler Development
Vasiliy Tereshkov
Первый путь - скорее всего, катастрофический (вряд ли пользователь этого хотел). Второй - это как раз и есть возложение на ВМ проверки типов, да ещё и при каждом вызове функции - вместо того, чтобы сделать это заранее.
Да, но делать это сильно проще, чем в статике. Попробуте написать такую простенькую ВМ - удивитесь, насколько это легко.
источник

AT

Alexander Tchitchigin in Compiler Development
Насчёт производительности - вопрос тонкий, есть много факторов и способов их нивелировать. Кроме того, до какой-то степени ВМ всё равно придётся что-то проверять, даже если язык типизирован и проверен статически.
источник

YS

Yaroslav Schekin in Compiler Development
Alexander Tchitchigin
> Потому и выбирают эти языки — из-за высокой производительности программиста.

Вот тут Вы действительно не причём, поскольку делаете какой-то общий вывод. На данный момент участникам чата должно быть понятно на основе какого опыта Вы делаете такой вывод и какой у Вас кругозор. Надеюсь, никто уже не станет после этого с Вами спорить.
> Потому и выбирают эти языки — из-за высокой производительности программиста.
Вот это моё утверждение — оно на основе хоть каких-то исследований / обзоров, например: https://softwareengineering.stackexchange.com/a/224460

> Вот тут Вы действительно не причём, поскольку делаете какой-то общий вывод.
Так что да, я тут ни при чём.

> На данный момент участникам чата должно быть понятно на основе какого опыта Вы делаете такой вывод и какой у Вас кругозор.
Это не имеет никакого отношения к истинности каких-либо утверждений. Оставьте эту демагогию себе, хорошо?

> Надеюсь, никто уже не станет после этого с Вами спорить.
Это Ваше право. Argumentum ad hominem — другое дело.
источник

VT

Vasiliy Tereshkov in Compiler Development
Alexander Tchitchigin
Насчёт производительности - вопрос тонкий, есть много факторов и способов их нивелировать. Кроме того, до какой-то степени ВМ всё равно придётся что-то проверять, даже если язык типизирован и проверен статически.
А до какой степени? Что это за ситуации?
источник

AT

Alexander Tchitchigin in Compiler Development
Vasiliy Tereshkov
А до какой степени? Что это за ситуации?
Очевидно, зависит от машины, но примерно все "production-quality" VMs производят ту или иную валидацию байт-кода для начала. Кроме того, ОО-ВМ дложны динамически проверять приведения типов и выбрасывать исключения при невалидных даункастах. Ну и прочие такие мелочи.
источник

VT

Vasiliy Tereshkov in Compiler Development
Yaroslav Schekin
> Потому и выбирают эти языки — из-за высокой производительности программиста.
Вот это моё утверждение — оно на основе хоть каких-то исследований / обзоров, например: https://softwareengineering.stackexchange.com/a/224460

> Вот тут Вы действительно не причём, поскольку делаете какой-то общий вывод.
Так что да, я тут ни при чём.

> На данный момент участникам чата должно быть понятно на основе какого опыта Вы делаете такой вывод и какой у Вас кругозор.
Это не имеет никакого отношения к истинности каких-либо утверждений. Оставьте эту демагогию себе, хорошо?

> Надеюсь, никто уже не станет после этого с Вами спорить.
Это Ваше право. Argumentum ad hominem — другое дело.
Всё-таки я не одинок в своих сомнениях:
https://www.reddit.com/r/learnprogramming/comments/6d7coh/why_are_scripting_languages_dynamically_typed/
источник