Re[8]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 08:31
Оценка: -1
Здравствуйте, D. Mon, Вы писали:

MZ>>Зачем он в лиспе-то ?


DM>Чтобы пример из первого поста (уже доступен, кстати) работал не 30 секунд, а 3, и при этом не надо было раздувать код аннотациями типов. Вот зачем.


Ну так вывод типов в Лиспе делается тривиально. А вот наоборот, отрубить его от OCaml уже нельзя. Из Лиспа можно сделать OCaml, или OCaml нельзя сделать эффективно Лисп. Следовательно, Лисп фундаментальнее.
Re[9]: Как написать виртуальную машину на LISP
От: thesz Россия http://thesz.livejournal.com
Дата: 12.08.09 09:27
Оценка:
Здравствуйте, Аноним, Вы писали:

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


MZ>>>Зачем он в лиспе-то ?

DM>>Чтобы пример из первого поста (уже доступен, кстати) работал не 30 секунд, а 3, и при этом не надо было раздувать код аннотациями типов. Вот зачем.
А> Ну так вывод типов в Лиспе делается тривиально. А вот наоборот, отрубить его от OCaml уже нельзя. Из Лиспа можно сделать OCaml, или OCaml нельзя сделать эффективно Лисп.

Я бы предложил сравнение.

Есть у меня подозрение, что примитивный Лисп на ОКамле будет написан где-то между ужином и отходом ко сну.

Тогда как примитивный ОКамл на Лиспе потребует гораздо больше работы.

К тому же зачем сравнивать уже устаревший ОКамл с мощным Лиспом.

Давайте сравним современный Хаскель.

Вот и реализация Схемы есть: http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html

Надо упомянуть, что ML был написан на Лиспе (и это на нём сказалось, см. The Zinc experiment) и на Лиспе же был написан один из первых компиляторов Хаскеля: Yake.

А> Следовательно, Лисп фундаментальнее.


По-моему, это поспешный вывод.

И ещё. "Фундаментальней" не значит "удобней".
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[10]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 09:36
Оценка:
Здравствуйте, thesz, Вы писали:

T>Есть у меня подозрение, что примитивный Лисп на ОКамле будет написан где-то между ужином и отходом ко сну.


Не надо "примитивный". Надо "эффективный". Интерпретатор то минимального Лиспа любой дурак за час напишет.

T>Тогда как примитивный ОКамл на Лиспе потребует гораздо больше работы.


Не гораздо. Два-три часа максимум. Конкретнее — чуть больше тысячи строк кода с комментариями выходит.

T>К тому же зачем сравнивать уже устаревший ОКамл с мощным Лиспом.


Лисп как бы малость куда более "устаревший" и древний.

T>Давайте сравним современный Хаскель.


Он слишком жирным стал в последнее время.

T>Вот и реализация Схемы есть: http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html


Интерпретатор. Не интересно. Хотя, на Template Haskell теоретически и компилятор можно было бы сделать.

T>Надо упомянуть, что ML был написан на Лиспе (и это на нём сказалось, см. The Zinc experiment) и на Лиспе же был написан один из первых компиляторов Хаскеля: Yake.


Да и YHC на Схеме написан. И что?

А>> Следовательно, Лисп фундаментальнее.


T>По-моему, это поспешный вывод.


Ну почему же? Фундаментальность — понятие строгое.

T>И ещё. "Фундаментальней" не значит "удобней".


Поскольку Лисп легко включает в себя весь ML, плюс много чего ещё, а в ML есть только ML — то да, удобнее. Но я не говорю "безопаснее", кстати.
Re[9]: Как написать виртуальную машину на LISP
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 12.08.09 10:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Ну так вывод типов в Лиспе делается тривиально.


А можно чуть подробнее идею? Т.е. вот задумал человек решить задачку на ICFPC, и вместо простой реализации ВМ, которая будет написана быстро, но работать медленно, ты предлагаешь ему самостоятельно реализовывать вывод типов? Там и без этого четыре лиспера набрали в два с половиной раза меньше очков, чем один окамлер.

А> А вот наоборот, отрубить его от OCaml уже нельзя.


1. Зачем здравомыслящему человеку его вдруг отрубать? 2. Динамическая типизация делается на окамле элементарно, для работы с sexp'ами библиотек тоже предостаточно.

A> Из Лиспа можно сделать OCaml, или OCaml нельзя сделать эффективно Лисп. Следовательно, Лисп фундаментальнее.


А Си еще фундаментальнее, не говоря о макроассемблере. Толку то.
Re[11]: Как написать виртуальную машину на LISP
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 12.08.09 10:10
Оценка:
Здравствуйте, Аноним, Вы писали:

T>>Тогда как примитивный ОКамл на Лиспе потребует гораздо больше работы.


А> Не гораздо. Два-три часа максимум. Конкретнее — чуть больше тысячи строк кода с комментариями выходит.


Мне, как и многим присутствующим, было бы очень интересно об этом почитать поподробнее. Можно ссылку или описание какое-нибудь?
Re[10]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 10:56
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM> Т.е. вот задумал человек решить задачку на ICFPC, и вместо простой реализации ВМ, которая будет написана быстро, но работать медленно, ты предлагаешь ему самостоятельно реализовывать вывод типов?


У любого прожженого лиспера таких реализаций готовеньких уже пара-тройка валяется в загашнике.

DM> Там и без этого четыре лиспера набрали в два с половиной раза меньше очков, чем один окамлер.


Там вообще лисперов мало было.

А>> А вот наоборот, отрубить его от OCaml уже нельзя.


DM>1. Зачем здравомыслящему человеку его вдруг отрубать?


Затем, что далеко не всегда и не везде нужна именно такая система типов. Затем, что для реализации DSLей нужно разнообразие возможностей, а не bondage and discipline.

DM> 2. Динамическая типизация делается на окамле элементарно, для работы с sexp'ами библиотек тоже предостаточно.


Я говорю про совсем отрубить, а не про частности.

A>> Из Лиспа можно сделать OCaml, или OCaml нельзя сделать эффективно Лисп. Следовательно, Лисп фундаментальнее.


DM>А Си еще фундаментальнее, не говоря о макроассемблере. Толку то.


Толку то, что Лисп — это метаязык, который тривиально превращается в любой другой язык. Чего не скажешь ни о Си, ни об OCaml-е.
Re[12]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 11:06
Оценка: 6 (1)
Здравствуйте, D. Mon, Вы писали:

А>> Не гораздо. Два-три часа максимум. Конкретнее — чуть больше тысячи строк кода с комментариями выходит.


DM>Мне, как и многим присутствующим, было бы очень интересно об этом почитать поподробнее. Можно ссылку или описание какое-нибудь?


Ну вот, например — аляповатый но примитивный компилятор ML на Лиспе:

http://www.meta-alternative.net/MBaseML.zip

Были где-то и ещё короче варианты.
Re[9]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 12.08.09 11:35
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Ну так вывод типов в Лиспе делается тривиально. А вот наоборот, отрубить его от OCaml уже нельзя. Из Лиспа можно сделать OCaml, или OCaml нельзя сделать эффективно Лисп. Следовательно, Лисп фундаментальнее.

Чтобы из лиспа сделать окамл, нужно реализовать компилятор окамла на лиспе.
Чтобы из окамла сделать лисп, нужно реализовать компилятор лиспа на окамле.

И в ту, и в другую сторону получается хороший объем работы.
Так что я не разделяю твоих взглядов на то, что из чего делается и кто фундаментальнее.
Это как если мы начнем выяснять, что фундаментальнее: типизированное лямбда-исчисление или нетипизированное.
Re[11]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 12.08.09 11:46
Оценка:
Здравствуйте, Аноним, Вы писали:
А> Толку то, что Лисп — это метаязык, который тривиально превращается в любой другой язык. Чего не скажешь ни о Си, ни об OCaml-е.
Не соглашусь. Что есть у макров лиспа:
1. Движок и язык преобразований дерева
2. Целевой язык с несложным форматом ast
Итого — просто набор уже готовых инструментов.
Если исходный язык прост или недалек от целевого — да, этот начальный набор инструментов сильно помогает.

В противном случае на любом другом языке можно реализовать пп. 1-2 и точно так же компилировать в лисп или другой подобный язык.
Или воспользоваться другим подобным набором инструментов. Вон, в antlr тоже вроде есть что-то готовое по работе с деревьями, в т.ч. язык для написания обходчиков/преобразователей дерева (могу ошибаться — давно я antlr-ом интересовался).
Будут те же яйца, вид в профиль.
Re[10]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 11:49
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Чтобы из лиспа сделать окамл, нужно реализовать компилятор окамла на лиспе.


Причём, компилятор из OCaml в Lisp. Остальное уже имеющийся в наличии компилятор Лиспа сам доделает.

MC>Чтобы из окамла сделать лисп, нужно реализовать компилятор лиспа на окамле.


А вот в этом случае придётся писать компилятор целиком. Работы больше на порядок.

MC>И в ту, и в другую сторону получается хороший объем работы.


Ты не видишь разницу между метаязыком и обычным, однопроходным языком?

MC>Так что я не разделяю твоих взглядов на то, что из чего делается и кто фундаментальнее.


Да не взгляды это. Всё тупо — то, что проще, из чего легче минимальный базис составить, то и фундаментальнее. Тут субъективным оценкам не место.

MC>Это как если мы начнем выяснять, что фундаментальнее: типизированное лямбда-исчисление или нетипизированное.


Term rewriting фундаментальнее. Любое лямбда-исчисление, алгоритмы Маркова, машины Тьюринга, и тому подобное — это всего лишь частные случаи.
Re[10]: Как написать виртуальную машину на LISP
От: Mr.Cat  
Дата: 12.08.09 11:54
Оценка:
Здравствуйте, thesz, Вы писали:
T>Давайте сравним современный Хаскель.
T>Вот и реализация Схемы есть: http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html
Ну прям уж совсем порно. Хоть бы call/cc сделали. И макросы какие-нибудь простенькие:

On a more serious note, I do want to hold this up as an example
of how extremely simple and natural it is to implement
syntactic-closures compared to alternatives such as syntax-case.
The whole macro implementation is about 25 lines of low-level C
code
(modulo the extra lines I'll have to add later for bug
fixes), as opposed to say the 4000 or so lines of Scheme for
psyntax.

На хаскеле вообще тогда должно в одну строку писаться.
Re[12]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 11:57
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Не соглашусь. Что есть у макров лиспа:

MC>1. Движок и язык преобразований дерева
MC>2. Целевой язык с несложным форматом ast

Самое важное:
3. Инкрементальный компилятор целевого языка.

Что позволяет любую сгенерённую во время компиляции конструкцию использовать тут же для определения следующих конструкций. В результате появляется возможность инкрементально расширять язык. Никакой ML, при всех его крутых фичах для работы с деревьями, таким образом расширять нелья (если это не MetaOCaml или ещё какой его родственник).

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


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

MC>В противном случае на любом другом языке можно реализовать пп. 1-2 и точно так же компилировать в лисп или другой подобный язык.


И тогда у нас будет два разных языка. Никак не взаимодействующих.

MC>Или воспользоваться другим подобным набором инструментов. Вон, в antlr тоже вроде есть что-то готовое по работе с деревьями, в т.ч. язык для написания обходчиков/преобразователей дерева (могу ошибаться — давно я antlr-ом интересовался).


Ну и как, можно сам Antlr расширить средствами Antlr? Нельзя.

MC>Будут те же яйца, вид в профиль.


Совсем не те же. Любой метаязык заведомо превосходит любой не-метаязык. Даже если первый — это Форт, а второй — Haskell (без TH).
Re[13]: Как написать виртуальную машину на LISP
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 12.08.09 12:03
Оценка:
Здравствуйте, Аноним, Вы писали:

Что-то я немного запутался.
Сначала ТС поделился своей реализацией ВМ из ICFPC на Лиспе. Я посетовал на ее медлительность и заметил, что причина может быть в том, что Лисп там не вывел типы, поэтому использовалась динамическая типизация, поэтому получилось медленно.

DM>Чтобы пример из первого поста (уже доступен, кстати) работал не 30 секунд, а 3, и при этом не надо было раздувать код аннотациями типов. Вот зачем.


Потом уважаемый Аноним стал говорить:

A>Ну так вывод типов в Лиспе делается тривиально. Из Лиспа можно сделать OCaml, или OCaml нельзя сделать эффективно Лисп. Следовательно, Лисп фундаментальнее.

A> Толку то, что Лисп — это метаязык, который тривиально превращается в любой другой язык. Чего не скажешь ни о Си, ни об OCaml-е.
А> Ну вот, например — аляповатый но примитивный компилятор ML на Лиспе:
А> http://www.meta-alternative.net/MBaseML.zip

Чем меня запутал. В архиве некий компилятор, который, используя готовый фреймворк, обычным образом парсит программу на МЛ и переводит ее в некое промежуточное представление, которое потом большая готовая библиотека вероятно компилит в MSIL. Т.е. сам лисп ни во что не превращается, то же самое так же делается и на любом другом языке. Вопросы:

1. Как из того, что на Лиспе можно воспользоваться генератором парсеров (входит в MBase), получается, что из Лиспа можно сделать Окамл? На нем можно сделать, но это совсем другое. Лисп в этом примере не превращается в другой язык, а просто парсит и компилирует, что можно и на Си делать. Где фундаментальность? Этим способом на окамле можно сделать какой угодно лисп.

2. Как то, что на Лиспе можно сделать вывод типов для некоего внешнего языка, поможет в ускорении ВМ, написанной на самом Лиспе, если тормозит именно он?

PS. Похожие компиляторы мини-МЛ на окамле (см. Programming Language Zoo и MinCaml) выглядят лаконичнее и читабельнее, причем не используют больших фреймворков, скрывающих еще бабиллионы строк кода.

В общем, пока мне свет истины про лисп не открылся.
Re[14]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 12:15
Оценка: 6 (1)
Здравствуйте, D. Mon, Вы писали:

DM>Сначала ТС поделился своей реализацией ВМ из ICFPC на Лиспе. Я посетовал на ее медлительность и заметил, что причина может быть в том, что Лисп там не вывел типы, поэтому использовалась динамическая типизация, поэтому получилось медленно.


В том конкретном случае их и выводить не надо, кстати.

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


ровно тот же самый Лисп. Любой Лисп таким фреймворком работать может.

DM> обычным образом парсит программу на МЛ и переводит ее в некое промежуточное представление,


В Лисп же и переводит.

DM> которое потом большая готовая библиотека вероятно компилит в MSIL.


В MSIL компилируется уже сам Лисп. Точно так же, если бы это было на SBCL, то "большой готовой библиотекой", которая компилирует это промежуточное представление, был бы сам SBCL. Потому как весь "компилятор" завёрнут в макру, которая разворачивает ML в Лисп и подставляет в месте вызова макры.

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


Как то же самое сделать на любом другом языке?

DM>1. Как из того, что на Лиспе можно воспользоваться генератором парсеров (входит в MBase), получается, что из Лиспа можно сделать Окамл?


А можно не пользоваться генератором парсеров. Можно использовать тот же самый алгоритм вывода типов для подмножества Лиспа. А это подмножество Лиспа генерить уже из макры (например, той, которая компилирует код VM).

DM> На нем можно сделать, но это совсем другое. Лисп в этом примере не превращается в другой язык, а просто парсит и компилирует, что можно и на Си делать.


Как это Лисп не превращается в другой язык? Можно написать так:

(lisp lisp lisp
(ml "let mlfunction args = something-mlish")
(lisp lisp call-ml-function lisp lisp ...))

DM> Где фундаментальность? Этим способом на окамле можно сделать какой угодно лисп.


Ну и как же? Где в OCaml есть macro, как я могу воспользоваться самим готовым компилятором OCaml? Да ещё и так, чтобы в том же модуле потом сослаться на результат компиляции?

DM>2. Как то, что на Лиспе можно сделать вывод типов для некоего внешнего языка, поможет в ускорении ВМ, написанной на самом Лиспе, если тормозит именно он?


Лисп позволяет вводить аннотации типов. А макронадстройка над Лиспом, выводящая типы автоматически, позволяет эти аннотации опускать.

DM>PS. Похожие компиляторы мини-МЛ на окамле (см. Programming Language Zoo и MinCaml) выглядят лаконичнее и читабельнее, причем не используют больших фреймворков, скрывающих еще бабиллионы строк кода.


Каких таких фреймворков? Там только лисповские макры. И я бы посмотрел на более лаконичную реализацию Хиндли-Милнера, чем компиляция в Пролог.

DM>В общем, пока мне свет истины про лисп не открылся.


Это нормально. Понять, что такое macro, многим удаётся далеко не сразу.
Re[14]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 12:27
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>2. Как то, что на Лиспе можно сделать вывод типов для некоего внешнего языка, поможет в ускорении ВМ, написанной на самом Лиспе, если тормозит именно он?



Уф, нашел таки наконец тот пример, который искал:

http://www.cliki.net/TypeL
Re[15]: Как написать виртуальную машину на LISP
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 12.08.09 13:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Лисп позволяет вводить аннотации типов. А макронадстройка над Лиспом, выводящая типы автоматически, позволяет эти аннотации опускать.


Ок, я услышал, что Лисп — такой чудесный мега- т.е. мета-язык с чудо-компиляторами, на котором можно делать суперумные метапрограммы (наверняка именно на нем была написана программа, вычислившая ответ на жизнь, вселенную и вообще всего за 7,5 миллионов лет). И этот язык должен позволить решить исходную задачу (ВМ из ICFPC) очень легко и быстро, причем должно получиться лаконично и эффективно. И я даже понимаю умствования т.е. теорию, почему это так. Но без практики это лишь слова. Я готов уверовать в его силу, если увижу на нем реализацию вышеупомянутой ВМ, работающую не более чем в 2 раза медленнее варианта на Си и ее исходник будет не сильно длиннее окамловского. Спецификация ВМ очень проста, см. первый пост. Ссылка на вариант на Си тут была в теме про Окамл вс. С++.
Re: Как написать виртуальную машину на LISP
От: Turtle.BAZON.Group  
Дата: 12.08.09 13:03
Оценка:
Здравствуйте, Turtle.BAZON.Group, Вы писали:

TBG>HOWTO по написанию виртуальной машины на Common Lisp по спецификации из ICFPC-2009


Теперь и на lisper.ru. С расцветкой кода и ссылками на гиперспеку.
Re[11]: Как написать виртуальную машину на LISP
От: VoidEx  
Дата: 12.08.09 13:05
Оценка: +1 :))
Здравствуйте, Аноним, Вы писали:

А> Term rewriting фундаментальнее. Любое лямбда-исчисление, алгоритмы Маркова, машины Тьюринга, и тому подобное — это всего лишь частные случаи.


Я вот чо тока не понял, "фундаментальнее" — это ругательство или это круто типа? А то читаю и так и не пойму, у кого ж длиннее.
Re[11]: Как написать виртуальную машину на LISP
От: thesz Россия http://thesz.livejournal.com
Дата: 12.08.09 13:24
Оценка:
Здравствуйте, Аноним, Вы писали:

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


T>>Есть у меня подозрение, что примитивный Лисп на ОКамле будет написан где-то между ужином и отходом ко сну.

А> Не надо "примитивный". Надо "эффективный". Интерпретатор то минимального Лиспа любой дурак за час напишет.

Ну уж анализ-то кода на камле со сравнениями с образцом писать проще, чем на лиспе с CARами да CDRами.

А если подтянуть GADT из Хаскеля...

T>>Тогда как примитивный ОКамл на Лиспе потребует гораздо больше работы.

А> Не гораздо. Два-три часа максимум. Конкретнее — чуть больше тысячи строк кода с комментариями выходит.

А это будет "примитивный" или "эффективный" вариант?

Где бы на это посмотреть?

T>>К тому же зачем сравнивать уже устаревший ОКамл с мощным Лиспом.

А> Лисп как бы малость куда более "устаревший" и древний.
T>>Давайте сравним современный Хаскель.
А> Он слишком жирным стал в последнее время.

Потому, что в нём много удобных вещей.

T>>Вот и реализация Схемы есть: http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html

А> Интерпретатор. Не интересно. Хотя, на Template Haskell теоретически и компилятор можно было бы сделать.

А нельзя ли показать, как это можно сделать с помощью TH? У меня это в голове не укладывается.

Вот пакеты кодогенерации:
http://hackage.haskell.org/packages/archive/pkg-list.html#cat:code%20generation

С их помощью я понимаю, как сделать. Как сделать с помощью TH, мне непонятно.

T>>Надо упомянуть, что ML был написан на Лиспе (и это на нём сказалось, см. The Zinc experiment) и на Лиспе же был написан один из первых компиляторов Хаскеля: Yake.

А> Да и YHC на Схеме написан. И что?

Так отошли от него.

Мой любимый аргумент: как много новых языков пишут на каком-либо ФЯ в последнее время?

На Хаскеле всё больше, на Лиспе с окамлом всё меньше.

А>>> Следовательно, Лисп фундаментальнее.

T>>По-моему, это поспешный вывод.
А> Ну почему же? Фундаментальность — понятие строгое.

А нельзя ли его привести?

T>>И ещё. "Фундаментальней" не значит "удобней".

А> Поскольку Лисп легко включает в себя весь ML, плюс много чего ещё, а в ML есть только ML — то да, удобнее. Но я не говорю "безопаснее", кстати.

Вот-вот.

Техника безопасности при работе с компьютером отличается по объёму от техники безопасности ведения боевых действий.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[16]: Как написать виртуальную машину на LISP
От: Аноним  
Дата: 12.08.09 13:29
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM> Но без практики это лишь слова.


Ок, давай практику. Сделай на OCaml аналог макры ast:visit из MBase. То есть, рекурсивный обход ADT без явной рекурсии. Средствами OCaml. И чтоб работало так же эффективно, как вручную написанный код.

DM> Я готов уверовать в его силу, если увижу на нем реализацию вышеупомянутой ВМ,


Вышеупомянутая VM не имеет практической ценности.

DM> работающую не более чем в 2 раза медленнее варианта на Си и ее исходник будет не сильно длиннее окамловского. Спецификация ВМ очень проста, см. первый пост. Ссылка на вариант на Си тут была в теме про Окамл вс. С++.


Разве что если будет свободное время.

Интереснее было бы на более практичном примере сравнить. Только всё равно не спортивно — компилятор с интерпретатором пытаться сравнивать.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.