LINUX.ORG.RU

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

 , , gutknecht,


3

5

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

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

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

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



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

А уж ansistring какой урезанный и неудобный...

И точно:

В строках первый символ имеет индекс 1 (массивы начинаются с 0 для первого элемента).

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

Почему не достаточно? Текст набирать можно? Отображать можно? «сетевую карту» прикрутить можно?

Потому что считать надо не минимальному требованию, а по максимальному. В современном мире обмен тестовыми сообщениями подразумевает, что там будут ссылки на картинки, аудио, видео, а не просто текст в 8-битной кодировке. Без этого ты не будешь полноценным участником коммуникации.

Картинки и аудио - уровень примерно Pentium 2, видео в приемлимом качестве (чтобы хоть что-то разглядеть) - Pentium 3 ~ 1ГГЦ и соответствующая оперативка.

Это да. Но теперь элементная база совсем не та, что была раньше. Теперь самому собрать компьютер — выходные. Купи атмегу8 (50 руб) припаяй к ней ps/2 разъем под клавиатуру, vga-разъем для монитора, uart-ethernet (400 руб), ну можно, для совсем шика, припаять еще пару метров оперативки и 64 метра флеша — все.

У меня сейчас самописное ядро для IA-32, которое умеет лишь самый минимум железа середины 90-х (FDD, IDE, PS/2 мышь и клавиатура, VESA-режим), вытесняющую многозадачность, зачатки управления страничной памятью (без подкачки), дисковый кэш, простую оконную систему, занимает 550 килобайт в файле.

При запуске в текстовом режиме экрана потребление памяти составляет 5 мегабайт. (ядро + оболочка) Там память сейчас крайне небрежно расходуется, думаю, можно уменьшить до 3-х. А вот объем кода никак не уменьшить без потери функций.

А за месяцок-другой можно для него компилятор Си написать и текстовый редактор и вот она — свобода.

И прилинковывать текстовый редактор прямо к o-файлам, умеющим клавиатуру, экран и диск. Уровень 70-х годов - это не свобода, это добровольно загнать себя в резервацию для неполноценных и жить там.

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

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

В строках первый символ имеет индекс 1 (массивы начинаются с 0 для первого элемента).

Массивы начинаются с любого целого числа для первого элемента, хоть с отрицательного. Всегда с нуля начинаются лишь массивы неопределённой длины. Кстати, в вашем «удобном» Си какая-то лажа костыльная с массивами неопределённой длины.

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

между тогдашним C++ и Object Pascal разницы не было

Как минимум сdecl, pascal, свой борландовский способ с использванием регистров, исключения с++, что там еще специфичного для этих языков. Плюс vcl был написан на delphi и дергался из сибилдера. И в коде получаем кашу из всего этого. Дельфовый код был чище. Возможно под конец там что-то и сделали по-нормальному после нескольких перепродаж франшизы, но это прошло мимо меня.

Какую-то кашу пишешь.

Каша - это хорошо, отличный гарнир.

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

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

А строка - это не массив неопределённой длины? Вот чему учат студентов, понятно...

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

Почему не достаточно? Текст набирать можно? Отображать можно? «сетевую карту» прикрутить можно?

Потому что считать надо не минимальному требованию, а по максимальному. В современном мире обмен тестовыми сообщениями подразумевает, что там будут ссылки на картинки, аудио, видео, а не просто текст в 8-битной кодировке. Без этого ты не будешь полноценным участником коммуникации.

Да в жопу их хипстерские правила с картинками и аудио. Мы с тобой тут отлично общаемся без картинок и аудио. Меня вполне устраивает.

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

У меня сейчас самописное ядро для IA-32, которое умеет лишь самый минимум железа середины 90-х (FDD, IDE, PS/2 мышь и клавиатура, VESA-режим), вытесняющую многозадачность, зачатки управления страничной памятью (без подкачки), дисковый кэш, простую оконную систему, занимает 550 килобайт в файле.

При запуске в текстовом режиме экрана потребление памяти составляет 5 мегабайт. (ядро + оболочка) Там память сейчас крайне небрежно расходуется, думаю, можно уменьшить до 3-х. А вот объем кода никак не уменьшить без потери функций.

это очень круто. С какой целью пишешь? Сколько времени? Один?

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

зачем он нужен вобще? лучше if .. else if .. else if .. else

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

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

И прилинковывать текстовый редактор прямо к o-файлам, умеющим клавиатуру, экран и диск. Уровень 70-х годов - это не свобода, это добровольно загнать себя в резервацию для неполноценных и жить там.

За все в этой жизни нужно платить. За свободу ПО и хардвари — тоже. Сообща бы написали за год все что нужно.

Это я к чему, к тому что свободное железо мы сейчас можем себе позволить, но никто добровольно в 70-е не пойдет. Почти никто.

Вот то о чем ты говоришь: текстового общения не достаточно, подавай с картинками и видео, иначе — нет.

За упаковку продались. Ну я и не горюю.

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

А строка - это не массив неопределённой длины? Вот чему учат студентов, понятно...

Вообще-то строки бывают разных типов. То о чём ты думаешь, это строки в которые можно писать максимум 255 байтов (там в нулевом элементе хранилась длина строки), а в ансистринги лезет куча мегабайтов, притом что элементы строки однобайтовые. Ну и как при таких размерах нулевой элемент такого «массива» может быть однобайтовым;) А если нулевой и последующие элементы в массиве разных типов, то это уже как бы и не массив, а что-то другое, а как оно реализовано, мы сейчас не с этим разбираемся.

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

То о чём ты думаешь, это строки в которые можно писать максимум 255 байтов (там в нулевом элементе хранилась длина строки), а в ансистринги лезет куча мегабайтов, притом что элементы строки однобайтовые. Ну и как при таких размерах нулевой элемент такого «массива» может быть однобайтовым;) А если нулевой и последующие элементы в массиве разных типов, то это уже как бы и не массив, а что-то другое, а как оно реализовано, мы сейчас не с этим разбираемся.

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

Разделение интерфейса и реализации в курс паскаля не входило?

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

а думаю я именно о массивах переменной длины как таковых, а не о деталях реализации.

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

Разделение интерфейса и реализации в курс паскаля не входило?

Во первых, без понятия, данный ЯП изучал самостоятельно. А во вторых, если рассматривать только интерфейсы, то строки точно не массивы неопределённой длины:)))))))))))))

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

Вот то о чем ты говоришь: текстового общения не достаточно, подавай с картинками и видео, иначе — нет. За упаковку продались. Ну я и не горюю.

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

это очень круто. С какой целью пишешь? Сколько времени? Один?

На самом деле там код за копирайтом J. Andrew McLaughlin. Лет 10 назад я посмотрел сорцы visopsys и что-то загорелся. Довольно богатое API. Многие подсистемы ядра уже написаны. Хоть и не доделаны, но дописывать функциональность проще, чем писать с нуля. Всё выглядело очень богато, при том что работало с дискеты. Падает в кернел паник, ну так мы сейчас исправим баги, и будет огонь... Я еще не знал, куда я попаду. :D

А код оказался не то что плохим. Он состоял из race condition-ов ВЕСЬ. В общем, фаза «так мы сейчас исправим баги» сильно затянулась. Потом я как-то остыл к этому делу, но перед этим успел основательно перепилить систему сборки, взаимодействие потоков, обработку прерываний, ввод-вывод... что-то там еще, не помню деталей. Помню, сделал нормальный wait для потоков, ожидающих событий от прерываний, вместо тупого while (данных нет) {yield_processor();}, добавил boost потокам, просыпающимся по сообщению от потоков более высокого приоритета, и задрал частоту вытеснения потоков до 100 Гц - система сразу стала отзывчивой в виртуальной машине.

Сейчас вот снова ковыряю сорцы потихоньку.

Сейчас основной источник race condition — оконная подсистема, которая многопоточная, но при этом написана так, будто однопоточная. Насколько я могу вспомнить, глядя в код, я пытался исправить ситуацию fine tuning-ом, делая выборочный захват мьютексов только в тех местах, где это необходимо. Но это я не доделал. Сейчас думаю, проще всего воткнуть один общий мьютекс на входе в любую оконную функцию, чем разбираться в деталях. Но это превратит всю оконную систему в де факто однопоточную, прямо как во времена Windows 95 (аутентичность, чо). Так что я в шаге от того, чтобы выкинуть всё это нафиг и портировать туда какую-нибудь минималистичную реализацию X11. Засада, в общем.

Вообще проблема таких систем как visopsys и kolibri - казаться, а не быть. В kolibri это еще более выражено. Там прямо 100500 приложений, довольно активное сообщество, 10 лет они уже пилят форк менуэта, отрефакторили практически всё ядро, и вроде всё хорошо у проекта. А пробуешь это потестить, и понимаешь, что вместо приложений там заглушки, имитирующие работу. А вместо ядра по прежнему страх божий с API уровня 16-битных сервисов BIOS образца 1990-го года. Когда читаешь перлы а ля «часть функций для работы с процессами принимает PID, а часть - номер слота в таблице», хочется просто распечатать эти сорцы и сжечь.

Сообща бы написали за год все что нужно.

Если ты возьмешься это делать, то с вероятностью, практически неотличимой от 100%, у тебя получится еще одна Kolibri. Пусть она будет минималистичная, текстовая и без свистоперделок в GUI, но по структуре - такая же каша. Или если ты гений один на миллиард, то у тебя получится что-то типа luajit — код, который работает идеально, но никто, кроме автора и еще пары человек в мире, не понимает, как.

Основные затраты в разработке - это создание и поддержание абстракций. А байты перекладывать из входа на выход — это можно за пару месяцев накидать, да. Но дальше этот код никуда без правильных абстракций расширяться не сможет.

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

А во вторых, если рассматривать только интерфейсы, то строки точно не массивы неопределённой длины:)))))))))))))

Так это проблема паскаля.

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

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

Ютуб полезный, спору нет. Но и это решаемо. Завести какой-нибудь проски сервис. Ну да «спектрумом» тут, конечно, не справишься.

Если ты возьмешься это делать, то с вероятностью, практически неотличимой от 100%, у тебя получится еще одна Kolibri.

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

и, да, думаю уровня колибри мне не осилить вовек. ) так, уровня спектрума. Текстовый редактор и компилятор ассемблера — да. Если хватит запала — мечтаю о компиляторе Си. Но о большем трезвый человек и мечтать не смеет.

Цена того что я задумал (хардвари) стремиться к каким-то там 200-300 рублям. Это проц, оператива, ПЗУ + разъемы под клаву и монитор. Разведу плату, первые выЛУТчу сам, потом, коль жив буду, можно будет нормальные PCB в китае заказать.

Будет кому интересно — можно будет отправить почтой. Да я уверен что такоего уже 10 раз наворотили.

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

Нет, я не в курсе. Я тебе страшное скажу: и ты не в курсе.

О, ховайтесь, телепаты в треде.

Ни ты не я не видели чертежей 73 и 2017 года.

Зачем чертежи если есть соотвествующая литература?
Да ты хотя бы по движкам почитай информацию.
У тебя под рукой весь интернет и куча поисковиков.
Но нет, ты тут из себя хренпоймичто корчишь.
«Я знаю что я не знаю, поэтому ты тоже не знаешь.» Г - лоГгика.

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

я действительно не понимаю для чего пользоваться ограниченной конструкцией если есть более общая. пусть даже в паскале можно что то типа case 'a'..'z' чем оно лучше if (x >= 'a' && x <= 'z') к которому можно дописать любое условие в процессе модификации программы. единственное применение это goto-like конструкция в которой case просто label и исполнение начинается с него и проходит через последущие case пока не встретит break. использование ограниченных конструкций с урезанным функционалов удел паскалистов, их мышление извращено этим говном и они получают удовольствие когда их ограничивают.

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

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

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

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

Так это проблема паскаля.

Абстракция стала проблемой?

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

я действительно не понимаю для чего пользоваться ограниченной конструкцией

Это потому что ты воинствующий невежда. case быстрее нескольких вложенных if, проверяет пересечение диапазонов и более удобочитаем, чем много if-ов (в отличие от switсh-а)

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

Ого, кому-то интересны наколенные операционки. Я вот тоже делаю свою. Правда тоже не совсем с нуля, а на базе BlackBox, и соответственно, написано оно на Компонетном Паскале (что вполне себе онтопик).

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

Ну так похвастайся по подробнее!

Давно ли пишешь? Один ли? Что умеет? С какой целью? Код, виртуалка, инструкции? Архитектура? Скриншоты.

Не стесняйся, любопытно же

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

Так это проблема паскаля.

Это не проблема а достижение. Для кучи забрутфорсенного мусора залитого морем указателей есть другой ЯП, сями зовут.

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

я действительно не понимаю для чего пользоваться ограниченной конструкцией если есть более общая. пусть даже в паскале можно что то типа case 'a'..'z' чем оно лучше if (x >= 'a' && x <= 'z') к которому можно дописать любое условие в процессе модификации программы.

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

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

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

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

Неумение в абстракции? Отличное достижение.

Неумение это в сях а не в паскале - собака это кошка, экскаватор, самолёт, унитаз в которые тыкнули указателем.

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

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

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

индексирую символы строки с единицы

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

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

Когда ты пьёшь вторую бутылку пива, сколько бутылок ты уже выпил? Подумай хорошенько, да не ошибись - корпорации не дремлют.

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

Пишу где-то с марта этого года с большими перерывами для обычных 486+ пк. Один. Just for fun. Полноценной ос, конечно, это пока не назвать - драйверов мало, софта нет (нужно пилить подсистему Host и vesa, пока только текстовый режим для тестовых программ).

https://succubus.deadsoftware.ru/files/note/1/20180821/2018-08-18_22-20-32-sc...

Для промотра исходников нужен BlackBox или odcread из соседнего репозитория. Инструкция по сборке в README. https://succubus.deadsoftware.ru/gitweb?p=bmbb.git;a=summary

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

Когда ты пьёшь вторую бутылку пива, сколько бутылок ты уже выпил?

Ни одной! Как на уроке математики говорил Буратино, «я ни за что не отдам ему яблоко», а Напильник вообще не станет пить бутылку с мочой пивного козла, ни первую, ни вторую.

Подумай хорошенько, да не ошибись - корпорации не дремлют.

Пивное производство, по традиции в основном принадлежит «заканавникам», посему, если пьёшь вино и пиво, ты пособник Тель-авива:)))

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

Ну а я пью в основном квас, на том и порешили. А как известно, кто не курит и не пьёт,тот здоровеньким помрёт. Вот и с ЯП то же самое.

Deleted
()

ну чё? кто ходил? видиво будет?

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

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

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

не понимаю о чём ты. if ... else можно делать сколько угодно много в программе, таким образом ничто не мешает организовать переключатели в коробки в виде отделённых друг от друга if ... else. кроме того эти if ... else (коробки) могут размещаться в различных местах программы а не только в одном месте (подъезде).

перетыкивать проводочки в ручную это как раз про паскальный говносинтакс. перед тем как нажать тормоз напиши простыню словесного поноса между begin ... end, укажи типы торможения, напиши для каждого процедуру и не надейся завершить её когда всё готово, тебе ещё потребуется поперетыкать проводочки что бы она завершилась наконец уже т.к. return там вроде как нет. и пофиг что ты уже въехал в столб.

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

не понимаю о чём ты. if ... else можно делать сколько угодно много в программе, таким образом ничто не мешает организовать переключатели в коробки в виде отделённых друг от друга if ... else. кроме того эти if ... else (коробки) могут размещаться в различных местах программы а не только в одном месте (подъезде).

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

перетыкивать проводочки в ручную это как раз про паскальный говносинтакс.

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

перед тем как нажать тормоз напиши простыню словесного поноса между begin ... end, укажи типы торможения, напиши для каждого процедуру и не надейся завершить её когда всё готово, тебе ещё потребуется поперетыкать проводочки что бы она завершилась наконец уже т.к. return там вроде как нет. и пофиг что ты уже въехал в столб.

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

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

какой оптимизации? switch в C как раз то что может быть ещё можно оптимизировать на какие то копейки. паскальный switch компилятор переделает в if ... else скорее всего. и если хочешь это оспорить жду с ассемблерным листингом, пустой трёп и нездоровые ассоциации с щитком в подъезде надоели.

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

какой оптимизации?

Логической. Когда нужно описывать логику, паскаль рулит а си в _опе.

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

Мне некогда лазить по отладчикам когда код на паскале просто работает, а скорости его выполнения просто хватает. Если же у тебя постоянно сегфолтится и приходится всё править через ассемблер, то так и должно быть у суровых сишников;)

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

какой ты занятой, наверное очень важный и нуждный проект пишешь

	.file	"if_else.c"
	.text
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"Usage: %s <digit>\n"
.LC1:
	.string	"zero"
.LC2:
	.string	"one"
.LC3:
	.string	"two"
.LC4:
	.string	"other"
	.section	.text.startup,"ax",@progbits
	.p2align 4,,15
	.globl	main
	.type	main, @function
main:
.LFB38:
	.cfi_startproc
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	cmpl	$2, %edi
	jne	.L9
	movq	8(%rsi), %rax
	movzbl	(%rax), %eax
	cmpb	$48, %al
	je	.L10
	cmpb	$49, %al
	je	.L11
	cmpb	$50, %al
	je	.L12
	leaq	.LC4(%rip), %rdi
	call	puts@PLT
.L4:
	xorl	%edi, %edi
	call	exit@PLT
.L9:
	movq	(%rsi), %rcx
	movq	stderr(%rip), %rdi
	leaq	.LC0(%rip), %rdx
	movl	$1, %esi
	xorl	%eax, %eax
	call	__fprintf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L10:
	leaq	.LC1(%rip), %rdi
	call	puts@PLT
	jmp	.L4
.L12:
	leaq	.LC3(%rip), %rdi
	call	puts@PLT
	jmp	.L4
.L11:
	leaq	.LC2(%rip), %rdi
	call	puts@PLT
	jmp	.L4
	.cfi_endproc
.LFE38:
	.size	main, .-main
	.ident	"GCC: (Gentoo 7.3.0-r3 p1.4) 7.3.0"
	.section	.note.GNU-stack,"",@progbits
	.file	"switch.c"
	.text
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"Usage: %s <digit>\n"
.LC1:
	.string	"zero"
.LC2:
	.string	"one"
.LC3:
	.string	"two"
.LC4:
	.string	"other"
	.section	.text.startup,"ax",@progbits
	.p2align 4,,15
	.globl	main
	.type	main, @function
main:
.LFB38:
	.cfi_startproc
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	cmpl	$2, %edi
	jne	.L11
	movq	8(%rsi), %rax
	movsbl	(%rax), %eax
	subl	$48, %eax
	cmpl	$1, %eax
	je	.L4
	cmpl	$2, %eax
	je	.L5
	testl	%eax, %eax
	je	.L12
	leaq	.LC4(%rip), %rdi
	call	puts@PLT
.L7:
	xorl	%edi, %edi
	call	exit@PLT
.L11:
	movq	(%rsi), %rcx
	movq	stderr(%rip), %rdi
	leaq	.LC0(%rip), %rdx
	movl	$1, %esi
	xorl	%eax, %eax
	call	__fprintf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L4:
	leaq	.LC2(%rip), %rdi
	call	puts@PLT
	jmp	.L7
.L12:
	leaq	.LC1(%rip), %rdi
	call	puts@PLT
	jmp	.L7
.L5:
	leaq	.LC3(%rip), %rdi
	call	puts@PLT
	jmp	.L7
	.cfi_endproc
.LFE38:
	.size	main, .-main
	.ident	"GCC: (Gentoo 7.3.0-r3 p1.4) 7.3.0"
	.section	.note.GNU-stack,"",@progbits

где обещанная оптимизация?

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

ты вобще даже не зарегистрировался

Я зарегистрировался, но скажу то же самое.

Deleted
()
Ответ на: комментарий от iluha16
$ cat 1.c

const char * f(int x)
{
	if (x == 0) {
		return "foo";
	} else if (x == 1) {
		return "bar";
	} else if (x == 1) {
		return "baz";
	} else {
		return "qux";
	}
}

$ cat 2.c

const char * f(int x)
{
	switch (x) {
		case 0: return "foo";
		case 1: return "bar";
		case 1: return "baz";
		default: return "qux";
	}
}

$ gcc -c 1.c
$ gcc -c 2.c
2.c: В функции «f»:
2.c:7:3: ошибка: повтор case-значения,
   case 1: return "baz";
   ^~~~
2.c:6:3: замечание: которое ранее использовано здесь
   case 1: return "bar";
   ^~~~
Status: 1
$ 
Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.