Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 01.01.10 23:32
Оценка:
Имхо, компиляция по большому счету нужна только для проверки целостности проекта и релиза.
Существует ли язык который был бы статически типизированый, но его можно было бы просто запустить на выполнение без компиляции?
ЗЫ Или может я делаю что то не так и постоянная компиляция это добро?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re: Статическая типизация с режимом интерпретацией.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.01.10 05:51
Оценка:
>echo let x = 2*2 in print_int x > hi.ml
>ocaml hi.ml
4
Re: Статическая типизация с режимом интерпретацией.
От: jazzer Россия Skype: enerjazzer
Дата: 02.01.10 06:00
Оценка:
Здравствуйте, dotneter, Вы писали:

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


есть интерпретатор С++
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Статическая типизация с режимом интерпретацией.
От: мыщъх США http://nezumi-lab.org
Дата: 02.01.10 06:21
Оценка:
Здравствуйте, dotneter, Вы писали:

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

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

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

D> но его можно было бы просто запустить на выполнение без компиляции?
выше уже сказали, что существуют интерпретаторы плюсов, правда с какой скоростью они будут работать и сколько ошибок выявлять — вопрос отдельный. а так — существует очень много верификаторов кода, статически отлавливающих явные и потенциальные ошибки, которые "прозевал" компилятор.

D> ЗЫ Или может я делаю что то не так и постоянная компиляция это добро?

трудно себе представить постоянную компиляцию даже маленькой программы в несколько тысяч строк, даже с учетом разбиения ее на кучу файлов. даже если это действительно компиляция, а не линковка.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: Статическая типизация с режимом интерпретацией.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.01.10 08:23
Оценка:
Здравствуйте, dotneter, Вы писали:

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


А зачем это нужно? Так мы переносим тормоза из стадии создания программы на стадию ее выполнения. Если в процессе создания мы ее часто запускаем и смотрим результаты работы, то выигрыша по времени не будет.
Re[2]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 10:49
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>А зачем это нужно? Так мы переносим тормоза из стадии создания программы на стадию ее выполнения.

Пишут же как то люди на динамически типизированых языках, у них там всегда такое состояние.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[2]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 10:57
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>
>>echo let x = 2*2 in print_int x > hi.ml
>>ocaml hi.ml
DM>4
DM>

И насколько эта фича востребована? Насколько падает производительность?
Talk is cheap. Show me the code.
Re: Статическая типизация с режимом интерпретацией.
От: Lloyd Россия  
Дата: 02.01.10 11:00
Оценка:
Здравствуйте, dotneter, Вы писали:

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

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

"статически типизированый" — это когда проверки типизации производится при компляции. Если программу предполагается запускать без компиялции, то о статической типизации речи быть не может.
Re: Статическая типизация с режимом интерпретацией.
От: Mr.Cat  
Дата: 02.01.10 11:05
Оценка:
Здравствуйте, dotneter, Вы писали:
D>Существует ли язык который был бы статически типизированый, но его можно было бы просто запустить на выполнение без компиляции?
http://www.haskell.org/ghc/docs/6.10-latest/html/users_guide/runghc.html
Re[2]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 11:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>"статически типизированый" — это когда проверки типизации производится при компляции. Если программу предполагается запускать без компиялции, то о статической типизации речи быть не может.

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

L>>"статически типизированый" — это когда проверки типизации производится при компляции. Если программу предполагается запускать без компиялции, то о статической типизации речи быть не может.

D>Примеры которые были приведены?

А фик знает. Для меня "компиляция" — это трансляция из текста на определенном языке в машинный язык или в какой-то другой формат (байткод). Если маш. кода нет на выходе, то это уже не компиляция, а что-то другое, анализатор кода.
Re[4]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 11:39
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Если маш. кода нет на выходе, то это уже не компиляция, а что-то другое

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

L>>Если маш. кода нет на выходе, то это уже не компиляция, а что-то другое

D>Интерпретация.

Интерпретация — не антоним к компиляции. Тот же питон/перл компилируется (в байткод), но при этом программы интерпретируются, т.е. этап компиляции все равно присутствует. Думаю приведенные примеры хаскеля/окалма относятся к той же категории.
Re[6]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 12:14
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Интерпретация — не антоним к компиляции.

Я бы предпочел под компиляцией понимать стандартную вариант, когда анализируется весь код программы.
Интерпретация — выполнение программы построчно. Есть там дальше компиляция или нет, сугубо личное дело интерпретатора.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[7]: Статическая типизация с режимом интерпретацией.
От: Lloyd Россия  
Дата: 02.01.10 12:49
Оценка:
Здравствуйте, dotneter, Вы писали:

L>>Интерпретация — не антоним к компиляции.

D>Я бы предпочел под компиляцией понимать стандартную вариант, когда анализируется весь код программы.

В какой момент должны отлавливаться ошибки типизации?

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


Выполнение — последний этап, дальше него ничего быть не может.
Re[8]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 14:22
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>В какой момент должны отлавливаться ошибки типизации?

В момент интерпретации. И не отлавливаться, а падать с ошибкой.

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


L>Выполнение — последний этап, дальше него ничего быть не может.

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

L>>В какой момент должны отлавливаться ошибки типизации?

D>В момент интерпретации. И не отлавливаться, а падать с ошибкой.

Понятно. Ну так это не статическая типизация. Вот цитата из википедии:

A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.

Re[10]: Статическая типизация с режимом интерпретацией.
От: dotneter  
Дата: 02.01.10 15:02
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Понятно. Ну так это не статическая типизация. Вот цитата из википедии:

L>

L>A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.

У нас есть ровно две кнопки.
1) Скоприлировать проект со статической проверкой типа.
2) Запустить программу и упасть в рантайме в случае чего.
Было приведено три языка с такой функциональностью, и я все не пойму что мы обсуждаем.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[11]: Статическая типизация с режимом интерпретацией.
От: Lloyd Россия  
Дата: 02.01.10 15:38
Оценка:
Здравствуйте, dotneter, Вы писали:

D>У нас есть ровно две кнопки.

D>1) Скоприлировать проект со статической проверкой типа.
D>2) Запустить программу и упасть в рантайме в случае чего.
D>Было приведено три языка с такой функциональностью, и я все не пойму что мы обсуждаем.

Вы их проверили? Как минимум 2 из них не удовлетворяют вашим требования (ocaml и haskell):
test.ml:
print_int 0;
print_int "0";

Результат:

lloyd@lloyd-pc:~$ ocaml test.ml
File "test.ml", line 2, characters 10-13:
Error: This expression has type string but an expression was expected of type
int


test.hs:
main = do putStrLn "0" 
          putStrLn 0

Результат:

lloyd@lloyd-pc:~$ runghc test.hs

test.hs:2:19:
No instance for (Num String)
arising from the literal `0' at test.hs:2:19
Possible fix: add an instance declaration for (Num String)
In the first argument of `putStrLn', namely `0'
In the expression: putStrLn 0
In the expression:
do putStrLn "0"
putStrLn 0


Как видишь в этих примерах анализ всей программы перед запуском происходит, а не построчно.
Re[11]: Статическая типизация с режимом интерпретацией.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.01.10 15:54
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Было приведено три языка с такой функциональностью, и я все не пойму что мы обсуждаем.


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

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