Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
 Что обсуждали люди в 2024 году? Самое время вспомнить — через виммельбух Пикабу «Спрятано в 2024»! Печенька облегчит поиск предметов.

Спрятано в 2024

Поиск предметов, Казуальные

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Компилятор + Программирование

С этим тегом используют

IT IT юмор Картинка с текстом Юмор Программист Разработка Python Все
26 постов сначала свежее
885
f3681
4 года назад

Ответ на пост «А когда то и 32 Кбайта считалось роскошью)»⁠⁠1

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


***


Как-то раз в бородатом детстве в 1993-ом кажется году мы решили писать компьютерную игрушку и для этого решили сравнить производительность трёх языков, на которых умели писать. Borland C++ 4.0, Turbo Pascal 7.0 и Fortran 77. Тестировались две нужные нам задачи — Умножение вектора на матрицу и отрисовывание треугольника стандартными инструментами в режиме EGA.


Довольно быстро выяснилось, что рисование у C и Pascal шло с одинаковой скоростью, потому как использовало одну и ту же библиотеку egavga.bgi, Расчёты на С были примерно вдвое быстрее, за счёт разнообразных проверок на переполнение, которые в Паскале по умолчанию были включены, а в C по умолчанию выключены. Но это можно было исправить директивами компилятора. А вот с фортраном началось самое интересное:


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


Тогда вместо того чтобы внутри цикла делать просто умножения и сложения мы заставили его ещё и суммировать переменную цикла. Когда фортран показал результаты в 10000 раз быстрее, мы сразу полезли в дизасемблер и к величайшему нашему удивлению обнаружили, что фортран суммирование переменной цикла в цикле успешно заменил на формулу подсчёта арифметической прогрессии. Сказать, что мы были в шоке — ничего не сказать.


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


Когда мы заставили фортран нарисовать закрашенный треугольник 256 цветами, и он показал результаты ровно в 16 раз лучше egavga.bgi мы уже даже не удивились. В EGA было всего 16 цветов. Рисование цветом 17 было то же самое, что рисование цветом 1. Уж не знаю как Fortran77 дозрел до этой идеи, но он треугольник перерисовал только 16 раз разными цветами, и на этом покинул цикл. Пришлось каждый следующий треугольник рисовать сдвигая одну из вершин на 1 пиксель. Результаты оказались примерно такие же как у конкурентов.


В общем по результатам всей этой истории у меня осталось два выводы:

1) Нет большой разницы на каком из нормальных компиляторов писать, если не лениться.

2) Оптимизатор в фортране написан сошедшими на землю богами.


***


Источник: комментарий на Хабрахабре от 2015 года (https://m.habr.com/en/post/261201/comments/#comment_8480183). История, конечно, — «не баян, а классика», но на Пикабу такого поста не было, я проверил :)

Показать полностью
Программирование История Память Операционная система Компилятор Ответ на пост Текст
64
2930
O..O
O..O
4 года назад

А когда то и 32 Кбайта считалось роскошью)⁠⁠1

А когда то и 32 Кбайта считалось роскошью) Программирование, История, Память, Операционная система, Компилятор

А также загрузка ОС в течении нескольких часов)

Программирование История Память Операционная система Компилятор
237
3156
mitrosiy
mitrosiy
4 года назад
IT-юмор

Компилятор⁠⁠

Компилятор IT, Компилятор, Программирование

Безумие — это точное повторение одного и того же действия. Раз за разом, в надежде на изменение.

Показать полностью 1
IT Компилятор Программирование
141
598
asmodeirus
asmodeirus
4 года назад

Жизнь программиста⁠⁠

Жизнь программиста Картинка с текстом, Программирование, Кусь, Кот, Компилятор, IDE
Показать полностью 1
Картинка с текстом Программирование Кусь Кот Компилятор IDE
46
126
aquah
4 года назад
IT-юмор

Ответ на пост «Когда кодил весь день,но не запускал приложение»⁠⁠1

Когда ты senior или тимлид и команда кранчит(херачит на результат в ограниченных сроках)

IT Программирование Программист Боль Компилятор Видео Ответ на пост
4
2148
asmodeirus
asmodeirus
4 года назад
IT-юмор

Когда кодил весь день,но не запускал приложение⁠⁠1

IT Программирование Видео Программист Боль Компилятор Том и Джерри
107
1
tbutton
tbutton
6 лет назад

Превращаем язык программирования в язык любви⁠⁠

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

Зачем это надо и почему такой странный заголовок? Тут всё просто, в связи с последними событиями, происходящими в Рунете, компьютерная грамотность населения начала стремительно расти. Если когда-то достаточно было уметь переустановить винду, чтобы девушка решила, что ты хакер и была в восторге, то сейчас этого, увы, недостаточно. Сейчас даже умение поднять VPN вполне обыденный навык. В связи с этим, перед нами стоит сложная, почти не выполнимая задача: сделать приятно любимому человеку, находясь в суровых реалиях действительности.

Соглашусь, что приятно, конечно, можно сделать по-разному...

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

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

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

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Чтобы довести этот проект до нужного нам результата необходимо понять несколько идей. Первая - ОДдоадфыди, тебя же не смущает этот набор букв, думаю, не особо, а вот если бы я написал расширенная форма Бэкуса — Наура, то вероятность того, что будут произнесены заветные три буквы (WTF?) возрастает в разы. Это значит, что если дальше будет встречаться конструкция, которая потенциально может понизить твою самооценку

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

относится к ней нужно совершенно утилитарно - есть некая штука, которая что-то делает и у неё есть практическая реализация в виде набора строк - исходного кода. Достаточно понять связь между названием и назначением данной конструкции, а если захочется всегда можно копнуть в глубь с помощью поисковика.Вторая идея - писать сразу мега программу это безумие (безумству храбрых поём мы песню (с)), поэтому надо написать что-то простое, но рабочее, а потом уже его постепенно усовершенствовать. Так и поступим.Писать мы будем на Python. Что? Не знаешь его?! Ну, и не очень-то и нужно (см. первую идею). Код на нём по своему виду близок к естественному языку, что облегчает понимание, а я его подробно прокомментирую. Скачиваем Python отсюда https://www.python.org/downloads/ и устанавливаем, постоянно жамкая кнопку далее. Теперь нам где-то нужно писать код на нём, немного комфорта не помешает, поэтому используем вот эту среду разработки https://www.jetbrains.com/pycharm/ Бесплатной версии для наших задач хватит с запасом. Устанавливаем её по такому же принципу, что и Python.
Стартуем PyCharm, выбираем New Project - Pure Python, затем указываем папку, где будем хранить наш проект. Естественно, что желательно придумать для него красивое и романтичное название, тут уже дело вкуса, я в качестве названия выбрал имя девушки - Мира.

Проект создан, перед нами среда разработки во всей красе, но где писать код? Нажимаем на имя проекта правой кнопкой и выбираем пункт New - Python file

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Вводим имя файла, в нашем случае это lex, сейчас расскажу почему.

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

У нас будет свой язык, он состоит из конструкций вида:

print(5 + 5 - 4);

Нам надо описать логику работу языка. Чтобы это сделать, необходимо использовать расширенную Бэкус – Наурову форму (РБНФ; англ. Extended Backus–Naur Form). Это формальная система определения синтаксиса языка. Воплощается она при помощи метаязыка, определяющего всевозможные грамматические конструкции. Например, для сложения эта форма будет выглядеть так:

expression = number, "+", number, ";";number = digit+;digit = [0-9];

То есть, фактически, мы аккуратно описываем, что представляет из себя каждый элемент комбинации print(5 + 5 - 4);

Итак, что значит утверждение "мы сделали свой язык программирования", это значит что у нас есть что-то, что превращает текст, написанный на языке, правила которого мы задаём сами, в исполняемый файл: текст -> что-то -> исполняемый файл. Сейчас мы делаем "что-то", которое все крутые программисты ласково называют - компилятор. Компилятор состоит из:
1. Лексический анализатор (лексер, англ. lexer)2. Синтаксический анализатор (парсер, англ. parser)3. Генератор кодаЛексический анализатор распознаёт конструкции языка, синтаксический анализатор определяет логику работы распознанных конструкций, а генератор кода, на основе этой логики, создаёт исполняемый файл.Начнём с лексического анализатора, поэтому мы и назвали файл "lex".Для более эффективного лексического анализа возьмём себе в помощь библиотеку RPLY. Нажимаем File - Settings:

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Сейчас установим библиотеку. Выбираем Project Interpreter и нажимаем на "+" справа вверху

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Находим библиотеку, выбираем и жмём Install Package

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Библиотека установится успешно, о чём радостно нам сообщит

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Теперь мы можем писать наш код:

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Сначала мы импортируем установленную библиотеку, затем описываем класс, который содержит механизм разбора _add_tokens, способ своего вызова __init__ и метод, который задействует механизм разбора get_lexer.

Теперь надо всё протестировать, для этого создадим ещё один файл и назовём его "base". В этом файле мы будем писать код на нашем новом языке. Протестируем его на конструкции print(5 + 5 - 4);

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Теперь запустим его. Для этого нажмём правой кнопкой по файлу base и выберем пункт Run 'base'. Внизу окна высветится результат

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Это успех друзья! Мы написали уже треть компилятора!

Самое приятное, что это наш собственный язык и мы свободны выбирать названия функций как нам нравится. Например, можно заменить функцию print на I_love_you (в моём случае I_love_you_Mira) и всё будет успешно работать как и прежде.

lex.py

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

base.py

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Результат

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Таким образом, у нас уже есть солидный задел на будущее и осталось всего ничего до создания своего собственного языка программирования. Если было интересно можно поддержать пост и оставить свой комментарий. Любите своих близких, дарите им подарки, посвящайте им стихи, музыку, картины, языки программирования, я знаю что ещё и будьте счастливы. До встречи в новом посте!

Показать полностью 15
[моё] Программирование Компилятор Создание Любовь Инструкция Длиннопост
12
Партнёрский материал Реклама
specials
specials

Только каждый третий пикабушник доходит до конца⁠⁠

А сможете ли вы уложить теплый пол, как супермонтажник?

Проверить

Ремонт Теплый пол Текст
xfox111
xfox111
6 лет назад
IT-юмор

Когда день не задался⁠⁠

Когда день не задался
[моё] Программирование Компилятор Несправедливость Как? Ошибка
33
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии