[image]

Разговоры о компьютерах

 
1 27 28 29 30 31 133

Mishka

модератор
★★★
KDvr> Есть файл на АЛГОЛе60 или 68.
Алгол 60 помню очень слабо, изучал только для интереса. На Алголе 68 писал много — был членом команды по созданию нового компилятора с Алгола 68. :) Пиши, чем смогу — помогу.

А ты не знаешь, там чистый Алгол 68 или уже с nest/egg/module в редакциях 1974 и 1978 года?

Может быть и Algol W. :)
   3.6.73.6.7
+
-
edit
 

Mishka

модератор
★★★
Balancer> Гы. Когда Алгол создавался, в ходу были только компиляторы :)

Не, не только. :) Я не знаю, если Lin довёл свою идею до интепретатора Алгола 68. Надо будет его спросить, он сейчас в Северной Каролине сидит
   3.6.73.6.7
US Mishka #29.07.2010 06:06  @Владимир Малюх#28.07.2010 12:10
+
-
edit
 

Mishka

модератор
★★★
Jerard>> Кстати, а фортран?
В.М.> Фортран еще старше алгола, он вообще первый язык и, соответсвенно, первый компилятор :) FORmulaTRANslator.

И FORTAN-ов много. :) Я изучал IV, немного 77.
   3.6.73.6.7
С удивлением узнал, что на новых защитах ЛЭП (ДФЗ) для компенсации задержки сигнала используется GPS синхронизация. Как то раньше когда связь между комплектами была по ВЧ связи умудрялись обходиться без этого, а теперь, когда связь по оптике, понадобилось. Неужели нельзя на оптике обеспечить малое и гарантированное время прохождения информации?
   
RU Dem_anywhere #29.07.2010 11:56  @GOGI#29.07.2010 10:47
+
-
edit
 

Dem_anywhere

аксакал

GOGI> Неужели нельзя на оптике обеспечить малое и гарантированное время прохождения информации?
Скорей - цена такого обеспечения больше, чем вариант с ГПС
   3.5.113.5.11

KDvr

старожил

Balancer>> Гы. Когда Алгол создавался, в ходу были только компиляторы :)
Mishka> Не, не только. :) Я не знаю, если Lin довёл свою идею до интепретатора Алгола 68. Надо будет его спросить, он сейчас в Северной Каролине сидит

Интерпретатор Алгола существует. Это точно.
За предложение помочь, спасибо. Только я еще не совсем понимаю в чем. Как только соображу для чего мне конкретно по Алголу помощь требуется, так и буду спрашивать. :) Короче, мысль оформится, тогда.
Вообще, поглядел, выглядит довольно стройно и логично (не то что С ;) ). Разобраться можно, но надо время, а его нет. :(
Хотел как попроще, но, видимо, не получится. А перелопачивать эту прогу никакого желания нет. По-моему, заново написать проще. К тому же не уверен, что в математике программы ошибки нет. Так штааааа. Будем посмотреть, как дальше быть.
   6.06.0
+
+1
-
edit
 

Balancer

администратор
★★★★★
KDvr> Интерпретатор Алгола существует. Это точно.

«Интерпретатор Алгола существует» и «Алгол - интерпретируемый язык» - это два совершенно разных утверждения :)
   

KDvr

старожил

KDvr>> Интерпретатор Алгола существует. Это точно.
Balancer> «Интерпретатор Алгола существует» и «Алгол - интерпретируемый язык» - это два совершенно разных утверждения :)

А может кто-нибудь дать ссылку на нормальный компилятор АЛГОЛА?
Тот, что я нашел на просторах Интернета, какой-то странный (а68g-1.18.0.exe).
И заодно, если уж об этом зашла речь, интерпретатор.
   6.06.0

KDvr

старожил

KDvr> Тот, что я нашел на просторах Интернета, какой-то странный (а68g-1.18.0.exe).

Я балдею...
Это эта версия Алгола такая или он вообще такой и есть?

IF
THEN
ELSE
FI;

FOR FROM TO
DO
...
OD;

причем

FOR FROM TO
DO
FOR FROM TO
DO
...
OD
OD;

Мама, роди меня обратно!
   6.06.0

Balancer

администратор
★★★★★
KDvr> Мама, роди меня обратно!

bash, что ли, не видел? :)

code bash
  1. if [ -e VIDEO_TS ]; then
  2.     FLAGS="$FLAGS -dvd-device $(pwd)"
  3.     WIDTH="768"
  4. else
  5.     WIDTH=$(mplayer "$1" -vo null -ao null -frames 0|grep VIDEO:|cut -d' ' -f5|cut -d'x' -f1)
  6.     echo WIDTH=${WIDTH}
  7.  
  8.     if [ "${WIDTH}." == "." ]; then echo "Can't get width"; exit; fi
  9. fi
  10.  
  11. case "${AUDIO_CH}" in
  12.     6) FLAGS="${FLAGS} -channels 6 -ao alsa:device=surround51";;
  13.     Stereo) FLAGS="${FLAGS} -channels 2 -ao alsa:device=stereo20";;
  14.     Mono) FLAGS="${FLAGS} -channels 2 -ao alsa:device=main_10";;
  15.     *) FLAGS="${FLAGS} -channels 2 -ao alsa:device=stereo20";;
  16. esac


Меня именно esac всегда особо прикалывает :D
   3.6.83.6.8
LT Bredonosec #31.07.2010 00:46  @Balancer#30.07.2010 12:45
+
-
edit
 
ща, вернувшись с озера, за 5 минут удаленно сотворил то, чего блин весь день ждал, и из-за чего с нач посрался.
Внимание вопрос - а нафига вообще было на работе сидеть? )))) Можно ж было весь день на озере! )))
   3.0.83.0.8

Mishka

модератор
★★★
KDvr>> Тот, что я нашел на просторах Интернета, какой-то странный (а68g-1.18.0.exe).
KDvr> Я балдею...
KDvr> Это эта версия Алгола такая или он вообще такой и есть?
KDvr> IF
KDvr> THEN
KDvr> ELSE
KDvr> FI;
KDvr> FOR FROM TO
KDvr> DO
KDvr> ...
KDvr> OD;
KDvr> причем
KDvr> FOR FROM TO
KDvr> DO
KDvr> FOR FROM TO
KDvr> DO
KDvr> ...
KDvr> OD
KDvr> OD;
KDvr> Мама, роди меня обратно!

Похоже на 68, но сказать точно трудно.

Алгол 68 очень сильно расширяемый и блочный язык. Каждой открывающей скобке есть своя закрывающая. Ну и основной блок языка называется "основой". Если это конструктв выдаёт нужное значение, то в нём самом можно написать программу. При этом if, for — это вложенные блоки.
code text
  1. if
  2.   int a := 1;
  3.   a := a +50;
  4.   a < 100
  5. then
  6.  a := 200;
  7. else
  8.   int b := a * 15;
  9.   foo( b );
  10. fi;


Как видно из примера, if — это начало блока, в нём самом есть два подблока — от then до else и от else до fi. Поэтому, переменные объявленные в if доступны в then и else блоках, так как if-fi объемлющий блок.

Корокая запись else if — elif.

ОБщая форма цикла
code text
  1. for
  2.  
  3. while
  4.  
  5. do
  6.  
  7. od


это тоже много вложенных блоков.

Алгол 68 допускает лисповский стиль в виду этих блоков и основ.

Но в чём он хорошо — это в перегрузке операторов и функций. + можно перегружать бесконечно, можно и в унарном, и в бинарном, и в n-арном смысле.
   3.6.83.6.8
+
-
edit
 

Mishka

модератор
★★★
KDvr>> Интерпретатор Алгола существует. Это точно.
Balancer> «Интерпретатор Алгола существует» и «Алгол - интерпретируемый язык» - это два совершенно разных утверждения :)

Ром, Алгол 68 статический язык. Значит, возложили на компилятор много. Но это и интепретируемый язык (это определение шире), просто много проверять не надо, т.к. на фазе компиляции должно быть проверено. Где трудности, так это в том, что можно объявлять операции с ф-ями и процедурами до того, как объявили (или завершили) объявленя видов (в Алголе специальная терминология — это типы).
   3.6.83.6.8
+
-
edit
 

Balancer

администратор
★★★★★
Mishka> Ром, Алгол 68 статический язык. Значит, возложили на компилятор много. Но это и интепретируемый язык

Блин. Про язык не говорят обычно, компилируемый он или интерпретируемый. Это от реализации зависит.

Первые трансляторы Алгола были компиляторами или интерпретаторами? Исполняли код с листа, строка за строкой или компилировали в машинный код и исполняли разом? Или компилировали во внутреннее представление (P-code) и исполняли уже его?
   3.6.83.6.8
+
-
edit
 

Mishka

модератор
★★★
Balancer> Блин. Про язык не говорят обычно, компилируемый он или интерпретируемый. Это от реализации зависит.
Не, говорят. :) Просто есть языки, где компиляторы не в состоянии что-то вразумительное сделать на момент компиляции. :)

Balancer> Первые трансляторы Алгола были компиляторами или интерпретаторами? Исполняли код с листа, строка за строкой или компилировали в машинный код и исполняли разом? Или компилировали во внутреннее представление (P-code) и исполняли уже его?

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

Ну, тут сложно сказать. Собственно компиляторов с Алгола 68 кот наплакал. Цейтин, а потом и Терехов, практически, топали впереди планеты всей. И самая первая версия была компилятором. А вот вторая многопроходная с возможностью подключения оптимизатора в многих местах — тут уже Лёха и выдвинул идею, как вместо оптимизаторов и прочих вещей сделать интерпретатор с откатом шагов и прочее. Вот такая архитектура получилась. :) Собственно, первый работал только на ЕС, а вот второй уже мы тащили на все архитектуры. На ЕС, на РС, на ПС-1001, на DEC и под RT, и под RSX. Была идея и доработать ПЯ, чтобы и Ада в это дело ложилась (у Терехова была и группа Адиков), и Модула 2 (Bokr, сейчас в Майкрософте), и Паскаль. Даже начали что-то делать, но потом надо было выживать.
   3.6.83.6.8
+
-
edit
 

Balancer

администратор
★★★★★
Mishka> Исполнение кода строка за строкой вовсе не признак компилятора.

Правильно. Потому что это - признак интерпретатора :)

Mishka> Там за сценой много чего скрывается. Поэтому текст может быть проанализирован немного дальше.

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

Mishka> Ну, тут сложно сказать. Собственно компиляторов с Алгола 68 кот наплакал.

Тем не менее - в 1968-м Алгол транслировался по мере выполнения программы или перед выполнением? В первое верится мало. Это было бы чудовищно для тех времён :)

Mishka> самая первая версия была компилятором.

ок.

Mishka> А вот вторая многопроходная с возможностью подключения оптимизатора в многих местах

Ну, какой ещё оптимизатор у интерпретатора? :)
   3.6.83.6.8
+
-
edit
 

marata

Вахтер форумный
★☆
Люди добрые!
Не дайте помереть.
У провайдера отвалился DNS-сервер. Может кто пособит IP-адресом какого-нибудь анонимайзера.
Заранее благодарен :p
   3.6.83.6.8
LT Bredonosec #31.07.2010 20:03  @marata#31.07.2010 19:50
+
-
edit
 
marata> Может кто пособит IP-адресом какого-нибудь анонимайзера.
marata> Заранее благодарен :p

Трассировка маршрута к anonymizer.ru [83.69.224.215]
Трассировка маршрута к bind2.com [67.159.5.99]
Трассировка маршрута к anonymouse.org [193.200.150.125]

хватит?
   3.0.83.0.8
+
-
edit
 

Mishka

модератор
★★★
Balancer> Правильно. Потому что это - признак интерпретатора :)
Ну, это описка.

Balancer> Вообще, чисто формальный признак один. Транслятор является компилятором, если он сперва производит преобразование во внутренний формат выполнимого блока целиком и только затем исполняет. Интерпретатор - это транслятор, который выполняет преобразование по мере исполнения, токен за токеном.

Нет такого формального признака. Компилятор отличается тем, что он делает некоторые вещи, которые в генерируемом коде не отображены. Например, проверка типов. Или некоторые преобразовавния. Или применение той или иной операции. Интерпретатору приходиться эти вещи проверять на лету. Ну и оптимизация, конечно, была признаком компилятора. Сейчас всякие Just In Time идут на помощь интерпретаторам.

Balancer> Тем не менее - в 1968-м Алгол транслировался по мере выполнения программы или перед выполнением? В первое верится мало. Это было бы чудовищно для тех времён :)

Не было в 1968 году компиляторов с Алгола 68 в природе. И не было их ещё лет 10. Тем более, что в 1974 вышли дополнения, которые похерели многие начатые работы. А потом вышли дополнения по nest/egg и module/attach. Но к последнему моменту компиляторы уже были.

У Алгола 68 интерпретируящая часть очень большая. Форматный ввод-вывод, как и везде — интерпретатор. Работа с массивами (и вырезками из них — slice) это офигенная такая поддержка времени исполнения. Все массивы с паспортами и кучей инфы о массиве, поэтому вырезки могут создать новый паспорт с новыми шагами по измерениям и указвать в ту же память. Перегрузка операций часто, как виртуальные методы. Инстанциация модуля — почти классы, только в виде Modula-2 или Oberon расширенного.

Balancer> Ну, какой ещё оптимизатор у интерпретатора? :)
Ты не понял, вот вместь оптимизатора и был интерпретатор. Точнее там и кодогенератор, и ещё один оптмизатор, который железячно зависимый был, все отключались.
   3.6.83.6.8
RU marata #31.07.2010 21:45  @Bredonosec#31.07.2010 20:03
+
-
edit
 

marata

Вахтер форумный
★☆
Bredonosec> хватит?

Спасибо!
   3.6.83.6.8
+
-
edit
 

Balancer

администратор
★★★★★
Mishka> Нет такого формального признака.

Есть :) Хорошо, дай более универсальный и точный признак.

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

Это - не признак :D

Mishka> Например, проверка типов.

Многие интерпретаторы имеют жёсткую проверку типов. Эта особенность никак не связана с данным делением.

Mishka> Или некоторые преобразовавния.

Вот. Преобразование перед исполнением. А не во время исполнения :)

Mishka> Интерпретатору приходиться эти вещи проверять на лету.

У классического Си++ много проверок бывает в рантайме. Но это не делает популярные реализации интерпретируемыми :D

Mishka> Ну и оптимизация, конечно, была признаком компилятора.

Ну да, само собой. Раз делается полная предварительная трансляция, грех что-нибудь не соптимизировать.

Mishka> Сейчас всякие Just In Time идут на помощь интерпретаторам.

Это уже мешанина сущностей. JIT касается виртуальной машины, а не языка.

Mishka> У Алгола 68 интерпретируящая часть очень большая. Форматный ввод-вывод, как и везде — интерпретатор.

Ну, поехали... Уже отдельные библиотеки начнём по этому признаку делить? printf у Си++ - интерпретатор? :D

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

Уже наличие кодогенератора говорит о компиляторной сути трансляции. И оптимизатор туда же. Ты только что выше говорил, что оптимизация - это отличие компилятора от интерпретатора :D
   3.6.83.6.8
+
-
edit
 

Mishka

модератор
★★★
Balancer> Это - не признак :D

Это, как раз, основной признак. Вырос из спора статические языки vs динамические ещё до появления интерпретаторов. А вот интерпретаторы пошли позже, когда придумали язычки с сильно ослабленным контролем типов и необязательностью описания (ага, тут Фортран сыграл злую шутку с выведением типа по первой букве имени). Поскольку читать строку за строкой было легче всего, то таких интерпретаторов появилось море. Но были и другие. Которые требовали описания переменных.

Но и с текущими интерпретаторами есть проблемки. Скажем, переход по метке. Интепретатор читает текст без исполнения — ищет метку (если её ещё не было). Аналогичные проблемы возникают при вызове ф-ции или метода, которые будут объявлены позже.

Именно из-за таких ситуаций не работает определение построчного чтения и исполнения.

Balancer> Многие интерпретаторы имеют жёсткую проверку типов. Эта особенность никак не связана с данным делением.

Это связано с динамикой. И с тем, что делать надо её один раз, а не каждый раз. Если интересно, то можешь попытаться поискать споры комадны Терехова (и Цейтина) с Эльбрусниками. А новосибирцы были посередине. :) Я, правда, не знаю, есть ли что-то в инете по этому поводу. Хотя, вроде, на Базе приводили ссылочку на воспоминания Берка.

Balancer> Вот. Преобразование перед исполнением. А не во время исполнения :)
Ещё хуже, компилятор часто знает что надо делать и может уже сделать это. И ты ни как не увидишь этого на этапе исполнения. И проверка типов и отсутствие её в момент исполнения это из того же разряда.

Balancer> У классического Си++ много проверок бывает в рантайме. Но это не делает популярные реализации интерпретируемыми :D

У классического С++ — не так много. :) Только по дереву наследований и спускании вниз по дереву наследований. Сообственно, для работы с этим разработан специальный механизм RTTI и typeid. А вот всякие присваивания типов — только на этапе компиляции и следов не остаётся.

Balancer> Ну да, само собой. Раз делается полная предварительная трансляция, грех что-нибудь не соптимизировать.

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

Balancer> Это уже мешанина сущностей. JIT касается виртуальной машины, а не языка.

Не, это у тебя такое восприятие. А идея намного шире. Нормальные интерпретары тоже ведут статистику и могут на ходу кое-чего менять. Иногда и код сгенерить могут на лету и его использовать (один шаг от evaluate expression). Интерпретатор, кстати, тоже работает в рамках виртуальной машины. Всякие там таблицы переменных и прочего в рамках архитекутуры проца нет.

Balancer> Ну, поехали... Уже отдельные библиотеки начнём по этому признаку делить?

У Алгола 68 (в отличии от С и С++) не библиотеки, а часть языка. Просто язык такой. Впрочем, у Паскаля тоже не библиотека.

Balancer> printf у Си++ - интерпретатор? :D
А ты думаешь нет? Ещё какой. Потому и работает медленно. Он каждый строку формата интерпретирует в полном смысле слова. И от этого никуда не уйти, поскольку формат не известен в момент компиляции в общем случае.

Не даром этот спор — чистый компилятор и/или интерпретатор уже много лет как никто не рассматривает. Все говорят про смещанный тип.

Balancer> Уже наличие кодогенератора говорит о компиляторной сути трансляции. И оптимизатор туда же. Ты только что выше говорил, что оптимизация - это отличие компилятора от интерпретатора :D

Ну, в общем случае, говорило. Сейчас, думаю, что и нет. Интерпретаторы больно умные стали. :)
   3.6.83.6.8
RU Dem_anywhere #01.08.2010 04:57  @Mishka#01.08.2010 04:14
+
-
edit
 

Dem_anywhere

аксакал

Mishka> А ты думаешь нет? Ещё какой. Потому и работает медленно. Он каждый строку формата интерпретирует в полном смысле слова. И от этого никуда не уйти, поскольку формат не известен в момент компиляции в общем случае.
Ну, майкрософт в дотнете ушёл - он компилирует строку формата во время исполнения. (для регекспов, например)
   3.5.113.5.11

Mishka

модератор
★★★
Dem_anywhere> Ну, майкрософт в дотнете ушёл - он компилирует строку формата во время исполнения. (для регекспов, например)

Не ушёл. Там можно и строку дать, которая динамически сформирована. А строку регэкспов компилируют в более удобное представление, а не в нативный код. И компилировали её задолго до .Net-а.
   3.6.83.6.8
+
-
edit
 

Balancer

администратор
★★★★★
Dem_anywhere> Ну, майкрософт в дотнете ушёл - он компилирует строку формата во время исполнения.

У Мишки какая-то мешанина в этом вопросе. Настолько страшная, что даже спорить неинтересно :)
   3.6.83.6.8
1 27 28 29 30 31 133

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru