LINUX.ORG.RU

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

 , , gutknecht,


3

5

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

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

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

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



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

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

Да часто она встречается, сказки ты какие-то рассказываешь. Чтобы автоматизировать данные без ООП, надо использовать массивы или строки, а в массивах есть начальный и конечный элементы, перебирай их с любой целью, начиная с любого элемента и ты получишь итерацию по числам.

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

В общем, ничего нужного для индустрии создано не было.

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

массивы или строки, а в массивах есть начальный и конечный элементы

В массивах есть начальный элемент и длина. Если у тебя длина не помещается в целое число, то пора перестать столько пить кефира, или чего там. А если помещается, что итерация по [a, b] преобразуется в итерацию по [a, b + 1) без переполнения.

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

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

Это уже анализ! :)

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

Это уже анализ! :)

Если это анализ, то позову кошку. Вот код от существа без анализа:

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

Зачем так издеваться над линейным поиском? Никакой break здесь не нужен.

#define STR_LEN 10000 char long_str[STR_LEN] = «bla-bla-bla ...»; // и так 10000 байт

int32_t find_first_percent_char(void) { uint32_t i; i = 0; while ((i < STR_LEN) && (long_str != '%')) { i++; } return i; }

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

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

Используйте 64 битные компиляторы и вам не придётся пить кефир! максимум 32 битный индекс у for, это в 32 битах, а чтобы выжрать 64 бита, придётся покупать специальную плату и втыкать в неё много-много оперативки. А чтобы выжрать 1000 бит, не хватит еврошекелей на апгрейд.

А если помещается, что итерация по [a, b] преобразуется в итерацию по [a, b + 1) без переполнения.

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

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

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

procedure вскипятить_пустой_чайник(ч: чайник);
begin
    налить_воду(ч);
    поставить_на_огонь(ч);
    while not кипит(ч) do
    begin
        ждать(2м);
    end;
    снять_с_огня(ч);
end;

procedure вскипятить_полный_чайник(ч: чайник);
begin
    вылить_воду(ч);
    вскипятить_пустой_чайник(ч);
end;
Deleted
()
Ответ на: комментарий от Deleted

Кажется, кто-то много умничал и написал в код детскую бяку, «рекомендованную» учебниками для школьников. Где паузы в потенциально бесконечном цикле while? Оно же всё ядро выжрет.

А вот это может содержать в себе цикл фор

налить_воду(ч);

procedure налить_воду_ч;
var
Pollitruh: longint;
begin
Pollitruh:=4-Estj_pollitruh_v_cainike;
For 1 to Pollitruh do Pljuh_pollitruhu_v_cainik;
end;

Что до этого

procedure вскипятить_полный_чайник(ч: чайник);
begin
    вылить_воду(ч);
    вскипятить_пустой_чайник(ч);
end;
то кто-то здесь вредитель, собрался испортить технику. Моя твоя не понимай.

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

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

во первых ты выражайся нормально. что за беззнаковые? unsigned что ли?

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

в третьих переменная может быть переполнена и об этом необходимо всегда помнить, это касается не только for но и любых арифметических действий с ней. что в паскале у тебя не может переполнится x если ты сделаешь x := x + 1?

давай напиши как надо правильно писать x := x + 1, для проивзольного x полученного к примеру в качестве аргумента ф-ции.

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

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

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

тебе был задан простой вопрос почему на таком распрекрасном паскале ничего не написано за исключением программы вызывающей C-шный shutdown. в итоге ты всё свёл к тому что я говно и ничего не понимаю. твоё мнение о своей личности мне если честно не очень интересно. ответа на свой вопрос я так и не получил. ты продолжаешь сидя в программном окружении на 99% написанном на C/C++ поносить C/C++. это детский сад какой то. признайся честно ты в каком классе учишься?

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

Так и запишем: цикл от b до a с шагом -1 на Си написать не удалось.

выражайся нормально

критерий нормальности в студию.

откуда взяты эти параметры?

снаружи. Например,

void f(unsigned int a, unsigned int b);

в третьих переменная может быть переполнена

банальность.

в реальной программе необходимо использовать тип данных достаточного размера

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

покажи ассемблерный листинг паскального цикла

 — Нет у них туалетной бумаги, уже и унитаз приносил, и жопу показывал... (q) бородатый анекдот
Техзадания в виде «беззнаковый 32-битный счетчик цикла принимает значения от b до a включительно с шагом -1» недостаточно?

сам не знаю как его получить

ключик помощи, документацию (доступна онлайн) никто не отменял, там точно есть про
fpc -s ...
Можно прямо в онлайне смотреть на дизасм: https://godbolt.org/

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

писать переменные по русски фуу как непрофессионально

Ну и иди на англосаксонский форум нюхать носки обамы.

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

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

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

тебе был задан простой вопрос почему на таком распрекрасном паскале ничего не написано за исключением программы вызывающей C-шный shutdown.

Твой вопрос некорректен в нескольких местах. Разуй глаза и найди там shutdown. По ходу ты пьян и в таком виде ходишь на лекции. Не удивительно что мало там усвоил.

. в итоге ты всё свёл к тому что я говно и ничего не понимаю. твоё мнение о своей личности мне если честно не очень интересно.

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

ты продолжаешь сидя в программном окружении на 99% написанном на C/C++ поносить C/C++.

Гы, гы. Пакетный менеджер на письтоне, установщик на письтоне, в кедах куча какой-то скриптоты, а в том что иногда даже не глючит на C/C++ нет никакой твоей заслуги и заслуги этих ЯП, просто корпорациям захотелось в них вложиться. Не нашли бы этих, нашли бы тех, да хоть на алголе, визуалбейсике или коболе ведро с окружением написали. В чём принципиальная разница? Что манагеры укажут, то «свободное сообщество» и пишет получая за это право копипастить корпоративные стандарты и называя это свободой.

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

ахаха иди тогда выпей за путлера и спой боже царя храни

Так и добавим к твоей приписочке «либераст однобитный». А носки обамы всё же понюхай, вдруг другие либерасты до тебя вынюхают и не будет о чём вспомнить в гарлеме уютными зимними вечерами растапливая заледеневший камин книжками по С++

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

это не ответ потому что сразу же возникает другой вопрос: почему корпорации вложились в проект на C/C++ а не на паскале? Да кстати Python на C++ так что выкидывай пакетный менеджер.

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

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

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

это не ответ потому что сразу же возникает другой вопрос: почему корпорации вложились в проект на C/C++ а не на паскале?

Ответ очевиден: чем больше гна, тем лучше. Мистер Твистер сам на плюсах кодить не будет, ему надо финансами ворочать, а гном пусть холопы ворочают. Такое разделение труда.

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

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

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

ты прст не замечаешь принятых высоколобыми инженерами(Ритчи там, Томсон, Ахо, Комни вроде - всего человек 11 вроде) компромиссов - при дизайне юникса и его разбиения что сунуть в нуть вызовов оси что оставить на уровне шелл-языков-одностроков - а что погрузить в язык имплементации (ака С)

например в awk ( и предшественниках) очень быстро появился словарь(ака ассоциативный массив) в С же - ну надо - слепишь.

в Си например в начале была надежда на совместимость с фортранновским мозговывертом ака множественные точки входа в функцию (ибо реентерабельность не была по началу «бесплатной») - но потом эволюционно это отвалилось как атавизм.

в Си за года его пестования в лаборатории - так и не решились на функции как граждан первого класса - хотя и Ритчи и ко умели в это .

так что Golang - это C сегодня - с очевидными инженерными компроммисами которые приведут к его замещению когда например квантовые компы заместят многоголовых.

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

на это в 80ых-90ых была шутка что в Европе информатика в Америке компьютерная наука. зы. а как ты(?) знаешь наука не содержит в своём названии слова «наука»

Паскаль это европейское - а С/С++ своё домоткано-амерское(с точки рэднека)

скажи спасибо что корпорации не предпочли Basic от мелкомягких.

и таки Юникс от мамыБелл.

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

Менеджеры прст хорошо чуствуют настроения публики. - Плюсы во многом взлетели ибо ООвакханалия графических интерфейсов - т.е. в момент перехода от tui к gui окошки оказалось рисовать проще когда за поясом у кодера есть «вторичный продукт жизнидеятельности предшественика» а тогда было модно считать что наследование эт-самое обеспечивает.

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

ты бы всё таки Elements of Programming Style - Brian Kernighan если уж с Плоджером не почитал так ща на тытрубе посмотри Elements of Programming Style - Brian Kernighan https://www.youtube.com/watch?v=8SUkrR7ZfTA

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

просим. просим. напиши как сделать в С +1 для произвольного х

например

 x= 12408701248701284509812765987163489751945134978691348797813459187597819581495861278512038471290384-132894-128-87120395876129087561972865912957861297856192876497812648971643897612948751269512591654912548165497128891264987126498726948719481264512651724351747467532879873248923682534674656243636217839298654654684629464787489484266816116686846987768854343435496874918987761912727274242823686486438689389363179184684654346564236545426544284566874678486956504956544853675426654345683241668754972363544663241567982694112346941

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

может дело не в паскале - а кто-то беременен не?

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

у тя (видимо школьной системой обусловленное) тотализированное мышление.

многие вещи - буквально «обгоняют своё время»

ибо граф возможностей крупнее ( в смысле мощностей множеств - али там 5 вершиный не компланарный минимальный пример графа) стрелы времени.

многие вещи которые не взлетели в 60ых ща уже как лет 15 взлетели - теже замыкания .

а тождественный тебе чел в 90ых годах кричал бы что замыкания это велосипеды.

зы. и да скажи от чего в С нет (и не будет) замыканий?

ззы.

   будущее уже здесь - только оно не равномерно.

   прошлое ещё здесь - но уже не повсеместно.

   настоящие не везде.

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

пруф можа где Никалашка прям вот про бряки и контины не?

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

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

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

https://minnie.tuhs.org//cgi-bin/utree.pl?file=V2/lib/printf.c

см

	case 'd': /* decimal */

и ниже.вполне не учебниковый код - но блин заморочились (зачем -то :) ) обработкой отдельного случая.

iluha16 - ой гляди в года когда в Паскале уже был break&continue(как и вложенность реализаций функций) в «твоём» си было только goto

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

там была несколько более запутанная хронология.

с С++ частично случилось похожая история на то что ща случается с Golang

язык(в лице его контрибьютеров) дрейфует в след за прилипшими к языку массами.

ведь плюсы по началу были языком моделирования атс (почти эрланг :)) и прочих пакет-свичеров.

как и голанг - первоначально типо «новый системный»

а по факту - на с++ актуальное тогда окностроение ( и шобы быстро и игрушки)

на голанг актуальное ща веб-заднийконец( и шобы быстро и социалки)

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

см https://minnie.tuhs.org//cgi-bin/utree.pl?file=V2/lib/printf.c

Смотрю:

Сорцы из 1971-го года.

еще в старом допотопном синтаксисе

printf еще без va за неимением такового

куча goto

реализация проверки if (x == INT_MIN) через задницу

рекурсивная функция печати числа

присваивание внутри проверки условия

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

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

Отлично, это один из возможных. Теперь ровно с тем же интерфейсом напишем на Си ту же тривиальную задачу — обработать (напечатать) числа от a до b (беззнаковые), порядок следования не задан:
f(3,5); // 3 4 5 5 4 3
f(5,3); // 5 4 3 3 4 5
Может тут найдется место мощному for(;;)?

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

Так и запишем: цикл от b до a с шагом -1 на Си написать не удалось.

Хорош тупить. Код ничем не отличается от кода в обратную сторону.

do {

} while (i-- != a);
Deleted
()
Ответ на: комментарий от bormant

Может тут найдется место мощному for(;;)?

Когда же найдётся место мощному for в паскале для итерирования произвольных коллекций?

Такое ощущение, что вы там всё еще на Алголе пишете в 2018-м году. Признавайтесь: пишете?

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

Хорош тупить.

Так и я о ровно том же. Вроде простой вопрос, проход пишется механически на инстинкте, а какого выше исследования потребовал, аж до «дайте ассемблерных листингов» ;)

Продолжим двигаться от банального к тривиальному.

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

Продолжим двигаться от банального к тривиальному.

Продолжим. Как сможете написать на паскале итерирование односвязного списка при помощи for, дайте знать.

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

Когда же найдётся место мощному for в паскале для итерирования произвольных коллекций?

Не то чтобы совсем-совсем произвольных, но

  for e in c do some(e);
  for i:=0 to c.Count-1 do some(c[i]);
Или я вопроса не понял?

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

Даю знать — паскалевский for — цикл с известным числом повторений. Зачем выполнять задачи заведомо неподходящими средствами?

for e in list do some(e);

Ну или ожидаемый while do, впрочем повторяемся.

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

1. це намёк(в первую очередь iluha16) что си как и паскаль сильно эволюционировали на протяжение своего существования в общем доступе. поэтому имитировать https://www.lysator.liu.se/c/bwk-on-pascal.html полезней для дискуссии на равновременных реализациях сравниваемых сущьностей иначе очевидный строумэн.

2. а как актуально сравнивают вместо как вы выразились устаревшего " x=-x;if x<0 " - а константу minint выставлять на целевой машине кто и когда будет если разработка идёт на хосте, и компилирует на разные платформы с одного сырца в зависимости каким компилятором(т.е его профилем состояний)? т.е где и ка мы храним таблицу констант(ой в си же небыло констант до ... года - да и макросы не врождённые)

3.покажите pls не рекурсивный вариант с (если вам так жалко память и время на стековые вызовы) с иным трейдофом память-процинструкции - а уж если и по памяти и числом операций будет меньше то неплохо бы и так же по очевидности шоб было не хуже.

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

чё вы так к for привязались вполне измышляемо, что первые реализации Си были не топдаунпарсерами

и некоторые варианты реализации for были ваще функциями/макросами

да и по истории сырцов видно что while_do и do_while - как прямые кальки с асма предшествовали появлению в языке Си такой нагруженной конструкции как for(init;test;post_state)body

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

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

for e in c

Незаметно заменим for-to на for-in, никто не заметит подвоха. А где же под все остальные кейсы другие for?

Или я вопроса не понял?

Всё верно поняли. Я привел выше примеры на 3 характерных итерации, которые постоянно встречаются в коде:

  • Пока указатель на следующий элемент не 0. (Итерирование списка.)
  • Пока значение в массиве не 0. (Итерирование до терминирующего символа.)
  • Пока значение поля структуры в массиве не 0. (Типичное итерирование по статическому списку инициализации.)

Ни один из этих примеров на паскалевский for-to не переводится.

Зато итерация «от x до y включительно» замечательно пишется на паскале, и в реальном коде нужна лишь чуть чаще, чем никогда. (А в тех случах, когда нужна, 90% покрываются вариантом, когда можно гарантировано итерировать в сишном for по i < b+1 без переполнения.)

Я не зря упомянул про алгол. В нём диапазоны значений индекса для массива объявлялись как [a:b], т.е. в математической нотации в буквальном смысле. (Я, к сожалению, не помню, как это делается в фортране, а в более ранних языках - не знаю вообще.) И были соответствующие операции ⌊ и ⌈ для получения границ массива. Т.е. цикл по массиву записывался в очень понятной нотации: for p from ⌊a to ⌈a do.

Всё это добро так и переехало в Паскаль с упрощениями, но без изменения сути. Об этом прямо сказано, это не какое-то тайное знание. Вирт смоделировал паскаль на базе алгола. Паскаль - это упрощенный алгол для студентов.

Поэтому я и спрашиваю: вы всё еще пишете на алголе?

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

Даю знать — паскалевский for — цикл с известным числом повторений. Зачем выполнять задачи заведомо неподходящими средствами?

Хороший вопрос. А вы зачем пытаетесь иcпользовать for(;;) в неподходящей ситуации и удивляться, что он не подходит?

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

что то типо (если размеры integer logint comp не подходят то чутка поморочится с рекордом нужного размера как и указатель на элемент списка(т.е. размер адресса сей мафынки)

var
  i:integer;
  p:^something; absolute i;
begin
   for i:=integer(p) downto 1 do begin
    тельце работы со списком.

    i:=intger(p^.next)+1;// переход на следующее   
end;

очевидно что машино_и_реализацио_зависимо и адекватней через while_do - но уж если задаться целью траверсить список for_only то см Рис.1

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

3.покажите pls не рекурсивный вариант с (если вам так жалко память и время на стековые вызовы) с иным трейдофом память-процинструкции - а уж если и по памяти и числом операций будет меньше то неплохо бы и так же по очевидности шоб было не хуже.

Хороший вопрос. Если время вечером найду, скину код из своей велосипедной libc. Вот и посмотрим, кто больший говнокодер.

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

вот свежий видосик

https://www.youtube.com/watch?v=ixJCo0cyAuA

в части как шёл дрейф от языков для численного анализа к языкам обработки символов.

и ваши примеры ужо в лиспе были легче реализуемы чем в FORtranе

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.