LINUX.ORG.RU

Лекция Юрга Гуткнехта «Проект Оберон: 30 лет» в Москве

 , , gutknecht,


3

5

24 октября в Университете Дмитрия Пожарского пройдёт лекция швейцарского профессора Юрга Гуткнехта, соавтора языков Pascal и Oberon, коллеги легендарного Никлауса Вирта.

В программе — совместная лекция и дискуссия «Проект Оберон: 30 лет» Лекторы: Президент Швейцарского общества информатики, профессор ETH Zurich, д-р Юрг Гуткнехт и Ведущий научный сотрудник отдела теоретической физики ИЯИ РАН, координатор проекта «Информатика-21», д.ф.-м.н. Фёдор Васильевич Ткачёв.

17:30, ЦЭМИ РАН (Нахимовский проспект, 47), аудитория 520. Регистрация и пропуск не требуется.

>>> Подробности



Проверено: Shaman007 ()
Последнее исправление: Shaman007 (всего исправлений: 1)

Попытка переписать сишные примеры на паскаль провалена?

Она ниже.
1.

for (some_type_t * item = first_item; item; item = item->next)
{
}
item:=first_item;
while item<>nil do begin
  //...
  item:=item^.next;
end;
или
item:=first_item;
while item<>nil do with item^ do begin
  //...
  item:=next;
end;
или
for item in items do {...};
2.
for (char * s = str; *s; s++)
{
}
s:=str;
while s^<>#0 do begin
  //...
  Inc(s);
end;
или
for s in str do begin
  //...
end;
или
for i:=1 to Length(str) do {...};
3.
for (size_t i = 0; initialization_list[i].somedata; i++)
{
}
i:=0;
while initialization_list[i].somedata<>0 do begin
  //...
  Inc(i);
end;
На что обратить внимание?

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от Deleted

Ты сам-то чего не пробуешь?

Интрига пропадет. Там же все довольно просто (но, возможно, неочевидно)...

bormant ★★★★★
()
Ответ на: комментарий от iluha16

ты заблуждаешься, нет никакого бесконечного цикла.

Быстро поднятое не считается упавшим :-) Я исправился:

i не достигло значения 0xffff, последним значением было 0xfffe.
Попытка провалена.
Попробуете еще разок?

bormant ★★★★★
()
Ответ на: комментарий от bormant

На что обратить внимание?

Во-первых, на то, насколько это выглядит неповоротливее и запутаннее оригинала, и в особенности, совсем не очевидно, что здесь происходит итерация элементов списка/коллекции/строки/etc.

Во-вторых, на то, что примеры на самом не эквивалентные. В оригинале и на паскале оператор continue будет приводить к разным результатам.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от bormant

и что, ты решил кого то подловить возможным переполнением переменной i на шестнадцатибитной машине. только мне помнится в паскале int (или integer что ли?) так же не бесконечный. тебе надо в python или ruby тогда уж.

iluha16
()
Ответ на: комментарий от iluha16

в паскале int (или integer что ли?) так же не бесконечный

При чём тут бесконечное целое? ТЗ вполне конретно — прогнать 16-битную переменную через диапазон 0..0xffff включительно. На паскале ровно это для 16-битной переменной i выглядит ровно так:

for i:=0 to $ffff do {нечто};
На Си это выглядит несколько иначе. Как?

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от Deleted

Во-вторых, на то, что примеры на самом не эквивалентные. В оригинале и на паскале оператор continue будет приводить к разным результат.

они такими операторами не пользуются а городят if, или устанавливают отдельные переменные для завершения внешних циклов. а всё потому что вирт сказал что break и continue это плохо, так что насрать на то что будет неповоротливее и запутаннее.

iluha16
()
Ответ на: комментарий от iluha16

они

В этом вопросе мы вам не доверяем ввиду отсутствия компетенции и кругозора ;) Может когда-нибудь потом.

bormant ★★★★★
()
Ответ на: комментарий от bormant

Модула это язык... модуль это про другое.

anonymous
()
Ответ на: комментарий от Napilnik

ты заявлял что на C/C++ так и не удалось написать хорошего ПО которое так ждут пользователи. у тебя спросили - какое ПО на паскале ты используешь вместо так и ненаписанного на C/C++. в ответ 2 helloworldа. я правильно понимаю что больше никакого ПО у тебя в компе нет и ты сюда пишешь путём редактирования TCP и HTTP заголовков в написанном на паскале redaktore или программа для выключения компьютера имеет ф-цию отправления сообщения на лор перед выключением?

iluha16
()
Ответ на: комментарий от iluha16

Вторая тривиальная задачка — написать на Си аналог:

// a и b -- беззнаковые параметры, b>a
for i:=b downto a do {нечто};

bormant ★★★★★
()
Ответ на: комментарий от Deleted

А если в теле цикла дернуть итератор?

В оригинале и на паскале оператор continue будет приводить к разным результатам.

Да, но оператор континуе сам по себе зло...

anonymous
()
Ответ на: комментарий от bormant

На Си это выглядит несколько иначе. Как?

uint16_t i = 0;
do {

} while (i++ != UINT16_MAX);

На что обратить внимание?

Deleted
()
Ответ на: комментарий от bormant

ты дурак? тебе предложили джва варианта - использовать правильный тип данных (т.е. в случае твоего 16-битного мамонта unsigned int) либо использовать i <= 0xfffe.

iluha16
()
Ответ на: комментарий от Deleted

На что обратить внимание?

На то, что это вполне тривиально, не правда ли? Однако в подобной ситуации практически всегда пытаются использовать негодный для этого for(;;).
Думаете редкая ситуация? На первый взгляд вроде бы не очень похоже:
Лекция Юрга Гуткнехта «Проект Оберон: 30 лет» в Москве (комментарий)
Используем for(;;)?

bormant ★★★★★
()
Ответ на: комментарий от Deleted

а на паскале for i:=0 to 5 проходит по 0,1,2,3,4 или по 0,1,2,3,4,5? в C сразу очевидно всё какой оператор стоит < или <= а в вашем паскале надо все эти мелочи запоминать.

iluha16
()
Ответ на: комментарий от Deleted

а последнее максимальное значение?

Проверь.

#include <stdint.h>
#include <stdio.h>

int main(void)
{
	uint16_t i = 0;
	do {
		printf("%04x ", i);
	} while (i++ != UINT16_MAX);
	return 0;
}
Deleted
()
Ответ на: комментарий от iluha16

В Си надо запоминать намного больше «мелочей»... а здесь просто надо знать синтаксис оператора for, также как и в Си, кстати.

anonymous
()
Ответ на: комментарий от bormant

Однако в подобной ситуации практически всегда пытаются использовать негодный для этого for(;;).

В какой «такой»? Это не типовая ситуация. Вернее, типовая для учебника, но не для рабочего кода.

Думаете редкая ситуация?

Уверен в этом.

for i:=b downto a do {нечто};

Еще один пример из учебника.

Deleted
()
Ответ на: комментарий от iluha16

for i:=0 to 5 do ; проходит [0; 5], границы включительно.

запоминать

Это самое малое, что нужно запоминать.
Паскаль пройден. Пройден мимо и не приходя в сознание.
Еще тривиальный пример (назовем его примером номер три) про другой оператор for:

n:=5;
for i:=0 to n do begin
  //...
  Dec(n);
end;

Как бы это могло выглядеть в Си?

bormant ★★★★★
()
Ответ на: комментарий от Deleted

Еще один пример из учебника.

Так ничего не стоит написать эквивалент, раз из учебника?
(Пытаюсь сохранить интригу до конца ;-) )

bormant ★★★★★
()
Ответ на: комментарий от Deleted

вот тут как раз все не однозначно, в паскале проще для человека, который толком не знает/забыл все тонкости языков

Deleted
()
Ответ на: комментарий от bormant

Как бы это могло выглядеть в Си?

это могло бы выглядеть в C вот так: n -= 5;

Паскаль пройден. Пройден мимо и не приходя в сознание.

чему я несказанно рад

iluha16
()
Ответ на: комментарий от iluha16

тебе предложили джва варианта

Talk is cheap, show the code.

- использовать правильный тип данных (т.е. в случае твоего 16-битного мамонта unsigned int)

ради одного бита покрутить на 16-битном мамонте пару регистров вместо одного? Это точно умное решение?

либо использовать i <= 0xfffe

и как это позволит переменной стать равной 0xffff, стесняюсь спросить?

Давайте глянем на более простую похожую задачку: Лекция Юрга Гуткнехта «Проект Оберон: 30 лет» в Москве (комментарий)
Эту-то ерунду сможете написать?

bormant ★★★★★
()
Ответ на: комментарий от iluha16

это могло бы выглядеть в C вот так: n -= 5;

Вопрос про тело цикла, которое хотя и не приведено, но обозначено как «//...». Точнее про сам цикл с телом.
Когнитивные способности к концу дня никудышные, беда-беда, приходится 2+2 рассказывать по слогам...

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от Deleted

вот тут как раз все не однозначно, в паскале проще для человека, который толком не знает/забыл все тонкости языков

Паскаль сделан для математиков. Код на Си выглядит странно, потому что сама задача странная. Итерация по числам «от x включительно до y включительно» встречается в программировании ИСКЛЮЧИТЕЛЬНО редко.

Deleted
()
Ответ на: комментарий от bormant

каких пару регистров? unsigned int займёт так же 2 байта. или unsigned в паскале нет вот ты и бесишься?

ну да я забыл что в паскале этот говноцикл использует <= вместо <. так что записывай: for (uint16_t i = 0; ; i++) { if (i == 0xffff) break; }

iluha16
()
Ответ на: комментарий от Deleted

haskell сделан для математиков. паскаль сделан для идиотов.

iluha16
()
Ответ на: комментарий от Deleted

Итерация по числам «от x включительно до y включительно» встречается в программировании ИСКЛЮЧИТЕЛЬНО редко.

Да ладно...

anonymous
()
Ответ на: комментарий от Deleted

Еще один пример из учебника.

примеры из учебника это всё что паскалисты могут. реальный используемый софт на паскале практически не существует, одни только «программы для выключения компьютера» (путём вызова написанной на C утилиты shutdown).

iluha16
()
Ответ на: комментарий от iluha16

или unsigned в паскале нет

Есть (в виде другого идентификатора). Вы очень плохо информированы об этом языке. Итак, с горем пополам техзадание 1 сгрызли:

for (uint16_t i = 0; ; i++) { 
  //...
  if (i == 0xffff) break;
}
То есть после весьма долгих раздумий позиция 2 в заголовке for не пригодилась. Как часто вы пишете цикл for(;;) именно в приведенном виде? Полагаю никогда.

Если теперь напишете эквивалент задачке 2, возможно немного больше узнаете о любимом Си.

bormant ★★★★★
()
Ответ на: комментарий от bormant

Однако в подобной ситуации практически всегда пытаются использовать негодный для этого for(;;).

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

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Если вы используете цикл для итерации по массиву в оперативной памяти, то почему бы for-у быть негодным?

Повторюсь: задачка 2, напишИте без раздумий сходу, без анализа на подвох, рутина же. Как напишете?

bormant ★★★★★
()
Ответ на: комментарий от iluha16

ты заявлял что на C/C++ так и не удалось написать хорошего ПО которое так ждут пользователи. у тебя спросили - какое ПО на паскале ты используешь вместо так и ненаписанного на C/C++. в ответ 2 helloworldа.

Ты сначала напиши с нуля такое ПО на плюсах а не просто морду к системной утилите, и только тогда получишь какое-то право называть код в почти тысячу строк хелловордом. Ты за годы своего обучения вообще ничего такого не написал, потому херню и несёшь на форуме. С тобой тут типа спорят только потому что больше поговорить не о чем - всё интересное в толксах режут, а обсуждать по кругу разрешённые к обсуждению мимишные мобилки с розовыми бантиками и очередной высер вероятного жидорептилоида Илона надоело. А так хоть веселуха какая-то.

я правильно понимаю что больше никакого ПО у тебя в компе

А больше тебе не покажу, ты и с этим не справился.

и ты сюда пишешь путём редактирования TCP и HTTP заголовков в написанном на паскале redaktore или программа для выключения компьютера имеет ф-цию отправления сообщения на лор перед выключением?

А это вообще не аргумент. Вэб скатился в говно, в которое вэбмакаки регулярно вываливают свежие ушаты кала чтобы всё тормозило и требовало такого же кала в браузерах - один человек в браузер столько не высрет, нужен большой коллектив серунов чтобы как-то уравновесить чаши с калом на весах. У мну сегодня несколько раз браузер на тытрубе зависал на несколько минут, даже кеды при этом временами почти не отзывались. А когда вэб был нормальный, браузер писался несколькими кликами в дельфях.

Napilnik ★★★★★
()
Ответ на: комментарий от anonymous

если уж говорить о переполнении то ни какой паскаль в общем случае не поможет. что если надо пройтись на 16 битной машине не до 0xffff включительно а до 0xfffff. используйте python, haskell, ruby или C++ класс с operator overloading может быть использован как непереполняемое хранилище для сколь угодно больших чисел.

iluha16
()
Ответ на: комментарий от iluha16

Как объяснили сами авторы, главной целью проекта Oberon было «спроектировать и реализовать всю систему с нуля, и структурировать её таким образом, чтобы её можно было описать, объяснить и понять целиком». Это был исследовательский проект, и авторы не ставили цель конкурировать с DOS или MacOS, к примеру. Изначально она даже работала только на компьютерах Ceres, разработанных командой Вирта специально для неё. Сама же система состоит из набора скомпилированных модулей, как и «прикладные программы», и эти же модули одновременно являются единицей трансляции языка Oberon. Программ же, как таковых, в этой системе нет - пользователь имеет возможность вызвать любую доступную извне процедуру как из командного интерфейса, так из своей «программы».

Собственно, компактность и обозримость и есть главные преимущества системы: ключевые компоненты системы и компилятор были по размеру не больше, чем DOS, но система была 32-х разрядной (если не ошибаюсь), и предоставляла программисту намного больше, чем сама DOS. Система Oberon послужила основой для других исследовательских проектов, один из самых интересных: «Динамическая кодогенерация как путь к созданию переносимого программного обеспечения» Микаэля Франца - по сути, прямой конкурент технологии виртуальной машины Java.

dmfff
()
Ответ на: комментарий от iluha16

одни только «программы для выключения компьютера» (путём вызова написанной на C утилиты shutdown)

Отличный, эталонный пример альтернативно одарённого паскалененавистника! Рассказывает сказки о коде, как бы сам ничего не умея его написал. С нетерпением ждём твоего вступления в команду Гнома, нам (пользователям кед) там такие специалисты нужны и побольше.

Napilnik ★★★★★
()
Ответ на: комментарий от iluha16

в ответ 2 helloworldа

Эх, помнится, я на втором курсе написал «Комплекс Физических Программ» ( https://sohabr.net/habr/post/261021/ ). Мне за него дали второе место в каком-то там конкурсе на факультете и фручили, если не изменяет память, флешку. Но потом я немного поумнел, стал писать на нормальных языках и тогда мне начали платить деньги.

MetalBeaver
()
Ответ на: комментарий от bormant

Повторюсь: задачка 2

Точно преподаватель. Я уже немного стар для ВУЗа, если что.

напишИте без раздумий сходу, без анализа на подвох, рутина же. Как напишете?

Если без анализа, то я просто скастую в знаковое, потому что объектов длиной в половину ОЗУ не бывает на практике, и проитерирую for-ом по условию i >= a.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.