Re: Статическая типизация с режимом интерпретацией.
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.01.10 15:56
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Имхо, компиляция по большому счету нужна только для проверки целостности проекта и релиза.

D>Существует ли язык который был бы статически типизированый, но его можно было бы просто запустить на выполнение без компиляции?

Тебе нужен REPL?
Re[12]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 16:11
Оценка:
Здравствуйте, Lloyd, Вы писали:


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]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 16:11
Оценка:
Здравствуйте, 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]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 16:11
Оценка:
Здравствуйте, nikov, Вы писали:

N>Тебе нужен REPL?

Нет, мне нужно избавление от ожидания компиляции для того что бы увидить результат работы измененого кода.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[13]: Статическая типизация с режимом интерпретацией.
От: Lloyd Россия  
Дата: 02.01.10 16:14
Оценка:
Здравствуйте, 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]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 16:28
Оценка:
Здравствуйте, 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]: Статическая типизация с режимом интерпретацией.
От: Lloyd Россия  
Дата: 02.01.10 16:30
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Будет ошибка компиляции. Но я не вижу причит что бы этот же код нельзя было запустить по старинке.

D>Итого имеем статически типизированый язык без компиляции.

Нет, не будет. Будет просто строго типизированный язык.
Re[16]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 16:36
Оценка:
Здравствуйте, 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]: Статическая типизация с режимом интерпретацией.
От: Lloyd Россия  
Дата: 02.01.10 16:40
Оценка:
Здравствуйте, dotneter, Вы писали:

D>string x = "1"

D>int y = 1
D>int z = x + y
D>Почему это код нельзя запустить без компиляции, что бы он упал в рантайме как это делает старый вариант?

Можно. Но статически типизированным он не будет. "Статический" означает, что проверки производятся во время компиляции.
Re[14]: Статическая типизация с режимом интерпретацией.
От: deniok Россия  
Дата: 02.01.10 16:47
Оценка:
Здравствуйте, Lloyd, Вы писали:


D>>Я стараюсь верить людям на слово.

D>>Что интересно тогда подразумевали авторы.
D>>runghc allows you to run Haskell programs without first having to compile them.
D>>Сокращение двух комант (compile, run) до одной?

L>А фик их знает. Возможно имелось в виду, что откомпилированный код не пишется на диск, а сразу скармливается интерпретатору.


Из документации GHC:

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]: Статическая типизация с режимом интерпретацией.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.01.10 17:07
Оценка:
Здравствуйте, dotneter, Вы писали:

DM>> Реально там прога перед запуском быстро компилируется целиком в байткод и потом выполняется. Просто со стороны это похоже на интерпретацию (не надо отдельно компилять, а потом запускать), при этом есть статическая типизация.


D>Тоесть если ей подсунуть тысячу файлов, она их все будет компилировать?


Да. Для больших проектов этот режим малоприменим, его используют на мелких скриптах, например, вместо шелла.

DM>>Чистых интерпретаторов, которые не делают предварительной компиляции в байткод, сейчас почти не осталось. При этом многие интерпретируемые языки имеют динамическую типизацию и на этапе компиляции в байткод ошибки типов почти не отлавливают. Как вариант, близкий к запрашиваемому — старый Ruby (1.8.x) и утилиты статического анализа для него (типа DiamondBack Ruby).


D>Вопрос не про устройство интерпретаторов, а про отсутствие компиляции всех файлов программы.

D>Грубо говоря, имеется 1000 файлов на С# и на Ruby.
D>После изменения одного файла, для С# придется перекомпилировать всю тысячу, для руби же в этом необходимости нет.

Тогда Руби, Питон и куча других спасут российскую демократию. А когда захочется перед релизом проверить код статически, нужно будет воспользоваться анализатором кода, вроде упомянутого diamondback или pylint.
Re[18]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 17:26
Оценка:
Здравствуйте, Lloyd, Вы писали:


L>Можно. Но статически типизированным он не будет. "Статический" означает, что проверки производятся во время компиляции.


http://rsdn.ru/forum/philosophy/3658780.1.aspx
Автор: dotneter
Дата: 02.01.10
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[19]: Статическая типизация с режимом интерпретацией.
От: Lloyd Россия  
Дата: 02.01.10 17:52
Оценка:
Здравствуйте, dotneter, Вы писали:

L>>Можно. Но статически типизированным он не будет. "Статический" означает, что проверки производятся во время компиляции.


D>http://rsdn.ru/forum/philosophy/3658780.1.aspx
Автор: dotneter
Дата: 02.01.10


Я не понимаю, что ты хочешь сказать это ссылкой?
Определение статической типизации я тебе привел. То, что ты хочешь — не статическая типизация. Это все что я хотел/могу сказать.
Re[7]: Статическая типизация с режимом интерпретацией.
От: SolVolkov  
Дата: 02.01.10 18:31
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Здравствуйте, Lloyd, Вы писали:


D>Интерпретация — выполнение программы построчно. Есть там дальше компиляция или нет, сугубо личное дело интерпретатора.


Построчно -- это васик. Причём тот самый, с номерами строк.
Большенство интерпретируемых языков проводят анализ программы до её выполнения (по крайней мере, часть программы).
В твоём определении питон не является интерпретатором, поскольку:
>cat test.py
print "Hello"
def dfdfdfdfd
>python test.py
  File "test.py", line 2
    def dfdfdfdfd
                ^
SyntaxError: invalid syntax
Re[8]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 19:13
Оценка:
Здравствуйте, SolVolkov, Вы писали:

Но строчно, по файльно, не суть.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[9]: Статическая типизация с режимом интерпретацией.
От: SolVolkov  
Дата: 02.01.10 20:50
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Здравствуйте, SolVolkov, Вы писали:


D>Но строчно, по файльно, не суть.


В питоне модуль является обьектом первого класса. Это и только это позволяет анализировать программу пофайлно. К динамической\статической типизации это не имеет никакого отношения.

"import" -- это инструкция, выполняемая в рантайме, означающая условно следующее:
1 проанализировать файл
2 возможно скомпилировать файл в байткод
3 выполнить байткод, создав обьект "модуль"

Примерно то же самое можно сделать и в статически типизированном языке.
К примеру на си это будет что-то типа
1 скомпилировать файл в динамически подгружаемую библиотеку (не любой файл, конечно, а специально подготовленный; или даже группу файлов)
2 загрузить подгружаемую библиотеку (LoadLibrary в винде)
3 достать из библтотеки нужные функции

Разница между питоном и си только в том, что питон предоставляет эту возможность "из коробки".

Более того, поскольку в питоне большинство инструкций импорта обычто распологается в начале файла, то интерпретатор будет вынужден проанализировать большую часть программы до того, как она сможет сделать что-либо полезное.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.