Здравствуйте, dotneter, Вы писали:
D>Имхо, компиляция по большому счету нужна только для проверки целостности проекта и релиза. D>Существует ли язык который был бы статически типизированый, но его можно было бы просто запустить на выполнение без компиляции?
L>Вы их проверили? Как минимум 2 из них не удовлетворяют вашим требования (ocaml и haskell):
Я стараюсь верить людям на слово.
Что интересно тогда подразумевали авторы.
runghc allows you to run Haskell programs without first having to compile them.
Сокращение двух комант (compile, run) до одной?
L>Как видишь в этих примерах анализ всей программы перед запуском происходит, а не построчно.
Тогда вопрос открыт.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[12]: Статическая типизация с режимом интерпретацией.
Здравствуйте, D. Mon, Вы писали:
DM>Здравствуйте, dotneter, Вы писали:
D>>Было приведено три языка с такой функциональностью, и я все не пойму что мы обсуждаем.
DM>Ответы приводились еще до уточнения вопроса. Реально там прога перед запуском быстро компилируется целиком в байткод и потом выполняется. Просто со стороны это похоже на интерпретацию (не надо отдельно компилять, а потом запускать), при этом есть статическая типизация.
Тоесть если ей подсунуть тысячу файлов, она их все будет компилировать?
DM>Чистых интерпретаторов, которые не делают предварительной компиляции в байткод, сейчас почти не осталось. При этом многие интерпретируемые языки имеют динамическую типизацию и на этапе компиляции в байткод ошибки типов почти не отлавливают. Как вариант, близкий к запрашиваемому — старый Ruby (1.8.x) и утилиты статического анализа для него (типа DiamondBack Ruby).
Вопрос не про устройство интерпретаторов, а про отсутствие компиляции всех файлов программы.
Грубо говоря, имеется 1000 файлов на С# и на Ruby.
После изменения одного файла, для С# придется перекомпилировать всю тысячу, для руби же в этом необходимости нет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[2]: Статическая типизация с режимом интерпретацией.
Здравствуйте, nikov, Вы писали:
N>Тебе нужен REPL?
Нет, мне нужно избавление от ожидания компиляции для того что бы увидить результат работы измененого кода.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[13]: Статическая типизация с режимом интерпретацией.
Здравствуйте, dotneter, Вы писали:
L>>Вы их проверили? Как минимум 2 из них не удовлетворяют вашим требования (ocaml и haskell):
D>Я стараюсь верить людям на слово. D>Что интересно тогда подразумевали авторы. D>runghc allows you to run Haskell programs without first having to compile them. D>Сокращение двух комант (compile, run) до одной?
А фик их знает. Возможно имелось в виду, что откомпилированный код не пишется на диск, а сразу скармливается интерпретатору.
L>>Как видишь в этих примерах анализ всей программы перед запуском происходит, а не построчно. D>Тогда вопрос открыт.
Вопрос некорректен. Статическая типизация подразумевает наличие компиляции.
Re[14]: Статическая типизация с режимом интерпретацией.
Здравствуйте, Lloyd, Вы писали:
L>Вопрос некорректен. Статическая типизация подразумевает наличие компиляции.
Допустим у нас есть код на python'e
x = "1"
y = 1
z = x + y
Будет ошибка рантайма.
Представи что в языке появилась статическая типизация и компиляция.
string x = "1"
int y = 1
int z = x + y
Будет ошибка компиляции. Но я не вижу причит что бы этот же код нельзя было запустить по старинке.
Итого имеем статически типизированый язык без компиляции.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[15]: Статическая типизация с режимом интерпретацией.
Здравствуйте, dotneter, Вы писали:
D>Будет ошибка компиляции. Но я не вижу причит что бы этот же код нельзя было запустить по старинке. D>Итого имеем статически типизированый язык без компиляции.
Нет, не будет. Будет просто строго типизированный язык.
Re[16]: Статическая типизация с режимом интерпретацией.
Здравствуйте, Lloyd, Вы писали:
L>Нет, не будет. Будет просто строго типизированный язык.
string x = "1"
int y = 1
int z = x + y
Почему это код нельзя запустить без компиляции, что бы он упал в рантайме как это делает старый вариант?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[17]: Статическая типизация с режимом интерпретацией.
Здравствуйте, dotneter, Вы писали:
D>string x = "1" D>int y = 1 D>int z = x + y D>Почему это код нельзя запустить без компиляции, что бы он упал в рантайме как это делает старый вариант?
Можно. Но статически типизированным он не будет. "Статический" означает, что проверки производятся во время компиляции.
Re[14]: Статическая типизация с режимом интерпретацией.
D>>Я стараюсь верить людям на слово. D>>Что интересно тогда подразумевали авторы. D>>runghc allows you to run Haskell programs without first having to compile them. D>>Сокращение двух комант (compile, run) до одной?
L>А фик их знает. Возможно имелось в виду, что откомпилированный код не пишется на диск, а сразу скармливается интерпретатору.
When you load a Haskell source module into GHCi, it is normally converted to byte-code and run using the interpreter. However, interpreted code can also run alongside compiled code in GHCi; indeed, normally when GHCi starts, it loads up a compiled copy of the base package, which contains the Prelude.
То есть в случае GHCi интерпретируется байт-код, хотя можно использовать и скомпилированные пакеты.
Re[13]: Статическая типизация с режимом интерпретацией.
Здравствуйте, dotneter, Вы писали:
DM>> Реально там прога перед запуском быстро компилируется целиком в байткод и потом выполняется. Просто со стороны это похоже на интерпретацию (не надо отдельно компилять, а потом запускать), при этом есть статическая типизация.
D>Тоесть если ей подсунуть тысячу файлов, она их все будет компилировать?
Да. Для больших проектов этот режим малоприменим, его используют на мелких скриптах, например, вместо шелла.
DM>>Чистых интерпретаторов, которые не делают предварительной компиляции в байткод, сейчас почти не осталось. При этом многие интерпретируемые языки имеют динамическую типизацию и на этапе компиляции в байткод ошибки типов почти не отлавливают. Как вариант, близкий к запрашиваемому — старый Ruby (1.8.x) и утилиты статического анализа для него (типа DiamondBack Ruby).
D>Вопрос не про устройство интерпретаторов, а про отсутствие компиляции всех файлов программы. D>Грубо говоря, имеется 1000 файлов на С# и на Ruby. D>После изменения одного файла, для С# придется перекомпилировать всю тысячу, для руби же в этом необходимости нет.
Тогда Руби, Питон и куча других спасут российскую демократию. А когда захочется перед релизом проверить код статически, нужно будет воспользоваться анализатором кода, вроде упомянутого diamondback или pylint.
Re[18]: Статическая типизация с режимом интерпретацией.
Здравствуйте, dotneter, Вы писали:
L>>Можно. Но статически типизированным он не будет. "Статический" означает, что проверки производятся во время компиляции.
D>http://rsdn.ru/forum/philosophy/3658780.1.aspx
Я не понимаю, что ты хочешь сказать это ссылкой?
Определение статической типизации я тебе привел. То, что ты хочешь — не статическая типизация. Это все что я хотел/могу сказать.
Re[7]: Статическая типизация с режимом интерпретацией.
Здравствуйте, dotneter, Вы писали:
D>Здравствуйте, Lloyd, Вы писали:
D>Интерпретация — выполнение программы построчно. Есть там дальше компиляция или нет, сугубо личное дело интерпретатора.
Построчно -- это васик. Причём тот самый, с номерами строк.
Большенство интерпретируемых языков проводят анализ программы до её выполнения (по крайней мере, часть программы).
В твоём определении питон не является интерпретатором, поскольку:
Здравствуйте, dotneter, Вы писали:
D>Здравствуйте, SolVolkov, Вы писали:
D>Но строчно, по файльно, не суть.
В питоне модуль является обьектом первого класса. Это и только это позволяет анализировать программу пофайлно. К динамической\статической типизации это не имеет никакого отношения.
"import" -- это инструкция, выполняемая в рантайме, означающая условно следующее:
1 проанализировать файл
2 возможно скомпилировать файл в байткод
3 выполнить байткод, создав обьект "модуль"
Примерно то же самое можно сделать и в статически типизированном языке.
К примеру на си это будет что-то типа
1 скомпилировать файл в динамически подгружаемую библиотеку (не любой файл, конечно, а специально подготовленный; или даже группу файлов)
2 загрузить подгружаемую библиотеку (LoadLibrary в винде)
3 достать из библтотеки нужные функции
Разница между питоном и си только в том, что питон предоставляет эту возможность "из коробки".
Более того, поскольку в питоне большинство инструкций импорта обычто распологается в начале файла, то интерпретатор будет вынужден проанализировать большую часть программы до того, как она сможет сделать что-либо полезное.