Обновить
180.34

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Порог рейтинга
Уровень сложности

Полиглоты

Время на прочтение5 мин
Охват и читатели4.5K
Есть люди-полиглоты, которые отличаются тем, что знают несколько языков. А есть программы-полиглоты, исходный код которых интерпретируется или компилируется независимо от языка.

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

Сиреневая уточка

Время на прочтение1 мин
Охват и читатели962
Увидел на Хабре, что компания Asus решила провести конкурс. Ну и прошел на страницу конкурса. Из-за природной любознательности решил взглянуть на исходный код главной страницы.

image

Сообственно вопрос такой — А причем тут «Сиреневая уточка» и «Абруццо»???

Языки программирования — У кого короче код?

Время на прочтение1 мин
Охват и читатели1.5K
Кто-то скажет (тот, кто пишет на С), что код, написанный на C, короче, чем код, написанный на Java или Basic. Или действительно короче?

Вы удивитесь, но, оказывается, если взять 2 языка программирования, назовём их А и Б, то существует константа, которая составляет разницу между длинами кодов этих двух языков для всех программ.

Да ладно!?

LISP-программирование как жанр искусства

Время на прочтение1 мин
Охват и читатели5.8K
Нереальный, фееричный перфоманс с использованием LISP и OpenGL.
Поначалу ничего непонятно, но все завораживающее действо начинается с 5 минуты где-то. Может быть это и есть один из видов искусства будущего?


Уже представляю себе «выступает заслуженный LISP-ист России, лауреат международных премий Иван Лямбдин»

Io Language: Метапрограммирование

Время на прочтение4 мин
Охват и читатели2.4K

Метапрограммирование в языке io



В продолжении серии статей про чудесный язык io я таки собрался написать про метапрограммирование.
habrahabr.ru/blogs/crazydev/29375
habrahabr.ru/blogs/crazydev/28254
habrahabr.ru/blogs/crazydev/28167
habrahabr.ru/blogs/crazydev/28041

Метапрограммирование — создание программ, которые создают другие программы как результат своей работы (либо — частный случай — изменяющие или дополняющие себя во время выполнения).
© Православная википедия

Совершенно не интересен канонический смысл термина «метапрограммирование», любой тьюринг-полный язык имеющий библиотеки IO способен генерировать исходные тексты программ на произвольном языке. Намного интересней возможность самопознания программы — интроспекция, а так же генерация и модификация самой себя в процессе выполнения.

Если посмотреть на крестных отцов io, то можно увидеть Lisp, Smalltalk, Self и другие динамические языки. Но все они решают проблему метапрограммирования по своему, например Lisp генерирует код в процессе компиляции из макросов, очень мощных штук. Smalltalk содержит развитую систему «отражений» (reflection) позволяющую гулять по дереву объектов в любую сторону. Io пошел по пути smalltalk'а и строит свои динамические механизмы на базе объектной модели, а не универсальности синтаксиса (как лисп).

Читать дальше →

Brainfuck Quine

Время на прочтение5 мин
Охват и читатели7K
После праздником мозги сильно отдохнули и теперь неплохо было бы их размять.
Есть достаточно популярная головоломка: написать программу, которая выводит свой собственный исходный код на произвольном языке программирования. Это развлечение называется куайном.
Что за язык такой этот brainfuck все знают, я думаю.

Предлагаю устроить конкурс куайнов на bf. Я нагуглил 3 варианта + написал свой собственный (чем выиграл бутылку самбуки).
В качестве интерпретатора я использовал http://brainfuck.progopedia.ru.
мой вариант куайна на bf'е под катом
Читать дальше →

Three Futamura Projections и не только

Время на прочтение7 мин
Охват и читатели12K
Привет, хабрачеловек. Сегодня я расскажу тебе про некоторые фундаментальные вещи в computer science: частичные вычисления, три проекции Футамуры и суперкомпиляцию.
 
 

1. Сразу к коду


-- функция, которая возводит x в степень y (неотрицательную)
power x y =
    case y of
        0 → 1
        1 → x
        _ → x * (power x (y - 1))


Читать дальше →

Программирование на языке Piet для сусликов

Время на прочтение1 мин
Охват и читатели8.8K
Добрый день.
Кризис, мало заказов, появилось немного свободного времени? Самое время научиться писать важные и полезные программы на эзотерическом языке Piet, который использует разноцветные изображения в качестве операторов. Я написал вот такую:

программа на Piet

С ее помощью суслики(и не только) могут узнать, с какой скоростью им следует размножаться, чтобы удвоить свою численность за X лет. Работать с программой очень просто: вводишь X, получаешь %, на который стоит увеличивать свою популяцию за год.
Читать дальше →

Простой калькулятор на " боярском" диалекте MSVС++

Время на прочтение2 мин
Охват и читатели35K
Последующий код навеян этим крутым топиком с «боярскими» дефайнами кейвордов С++. Мы творчески дополнили набор, и получился следующий текст программы:
Читать дальше →

Как играть в «программирование» или путь программиста.

Время на прочтение6 мин
Охват и читатели34K
Я уже писал, что программирование – это игра, как и любая игра, она состоит из стадий или уровней. Что бы стать настоящим профессионалом, важно уметь проходить эти стадии. Порой это трудно, порой даже очень трудно, но согласитесь, от этого только интересней!
Сейчас я постараюсь выделить основные стадии и опасности, подстерегающие программиста на этом сложном, долгом и очень захватывающем пути. Попробую рассказать, как именно эти стадии проходить, что нужно делать, что бы не свернуть, и не оказаться одним из тех, кого я называю «НЕДОпрограммистами».
Читать дальше →

Метапрограммирование в C++

Время на прочтение5 мин
Охват и читатели45K
Метапрограммирование — это «программирование программ», то есть написание некой промежуточной программы, результатом которой будет некая часть другой программы. Самый простой пример метапрограммирования — это шаблоны C++. Вместо написания десяти одинаковых функций для разных типов, мы пишем шаблон, и компилятор сам соберет нам эти десять функций.
Читать дальше →

Проектирование по контракту

Время на прочтение5 мин
Охват и читатели24K
Два года назад мне посчастливилось побывать на лекции замечательного человека, одного из разработчиков языка Eiffel, Бертрана Мейера. Он читал в нашем университете (СПб ГУ ИТМО) лекцию о довольно интересной концепции проектирования ПО. Называется она «проектирование по контракту». Суть этой концепции я попытаюсь описать ниже.

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

Ближайшие события

Мона Лиза за 275 милисекунд

Время на прочтение1 мин
Охват и читатели1K
Кто сказал, что у программистов нет чувства юмора?

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

В представленном ниже сюжете вы увидите репродукцию известной картины за 275 милисекунд при помощи 1100 залпов пейнтбольными снарядами!



Выполнен «трюк» был на прошлой неделе в ходе выставки NVIDIA's NVISION 08
Читать дальше →

Полиморфизм, шмолиморфизм…

Время на прочтение6 мин
Охват и читатели15K
Я думаю всем уже окончательно заморочили голову бесконечные статьи про полиморфизм, но меня они достали тоже и я решил… написать свою.

Прежде всего основной принцип (о котором писатели всех предыдущих статей забывают напрочь): KISS. Почему-то для объяснения базовых концепций считается необходимым привлечения двух-трёх языков программирования (обычно неизвестных читателю), парочки двухстраничных примеров и т.п.

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

Базовые концепции нужно уметь объяснять без привлечения языков программирования вообще! Второй этап — показать как базове концепции используются в том или ином языке программирования. Но это — уже другая история.
Читать дальше →

HTTP сервер на bash

Время на прочтение1 мин
Охват и читатели17K
Вполне себе полноценный HTTP сервер, написаный на bash, одной строкой.

:;while [ $? -eq 0 ];do nc -vlp 8080 -c'(r=read;e=echo;$r a b c;z=$r;while [ ${#z} -gt 2 ];do $r z;done;f=`$e $b|sed 's/[^a-z0-9_.-]//gi'`;h="HTTP/1.0";o="$h 200 OK\r\n";c="Content";if [ -z $f ];then($e $o;ls|(while $r n;do if [ -f "$n" ]; then $e "`ls -gh $n`";fi;done););elif [ -f $f ];then $e "$o$c-Type: `file -ib $f`\n$c-Length: `stat -c%s $f`";$e;cat $f;else $e -e "$h 404 Not Found\n\n404\n";fi)';done

Автор сего извращения любопытного проекта — Alexey Sveshnikov.

Io Language: Система сообщений

Время на прочтение5 мин
Охват и читатели2.1K
Сегодня продолжим цикл статей, начатый достопочтенным semka. Поговорим о сообщениях.

В Ио нет вызовов функций, но есть посылка сообщений. У сообщения могут быть аргументы (почти как аргументы функции), но аргументы сообщений не выполняются перед посылкой.
Читать дальше →

www.contextfreeart.org — программирование на службе искусства

Время на прочтение2 мин
Охват и читатели1.7K
Пост тем, кто хочет немножко отвлечься от работы и поразвлекаться с умом.

Сегодня наткнулся на интересный проект: contextfree

Все помнят курс теории компиляторов с университета? contextfree — генератор изображений на основе контекстно-свободных грамматик. Терминалами выступают простые графические примитивы (CIRCLE, SQUARE, TRIANGLE и т.д.). Нетерминалы задаем мы. Правила вывода могут включать в себя так называемые преобразования (повернуть, отразить, сдвинуть, поменять цвет). На основе этой простой модели можно получать очень интересные вещи… буквально несколькими строчками кода.

Начнем с простого примера:
startshape JustASquare //Начальный символ грамматики

background { b -1 } //Здесь мы задаем фон. b -1 - означает преобразование
//По умолчанию фон белый (brightness = 1), мы изменяем brightness до 0.

rule JustASquare { // Здесь мы задаем простое правило.
SQUARE { b 1 r 45 } // Белый квадрат, повернутый на 45 градусов.
}



Дальше сложнее...

Io Language: Объектная система

Время на прочтение4 мин
Охват и читатели2.3K

Введение


Продолжая писать про io, совершенно необходимо остановиться отдельно на устройстве объектной системы этого чудесатого езычка. Главная проблема в том, что даже если вы «знаете» ООП, вполне может сложиться ситуация, что вы просто не поймете, как оно устроено в io. Сейчас под ООП почему-то подразумевается модель Java, чаще всего. C++ нельзя назвать объектно-ориентированным языком, потому что он язык поддерживающий парадигму ООП, но это не его основная парадигма. Java больше подходит под гордое звание Ъ-ООП языка, но вот беда, ООП диктуемое Java-like языками довольно извращено. Изначально принципы ООП зарождались в Smalltalk'е и там все выглядело несколько иначе, объекты общались друг с другом не посредством вызова методов, а посредством передачи друг другу сообщений, мне до сих пор странно, почему же от этой модели ушли, ведь такое построение позволяет ввести прозрачную параллельность в язык без костылей. Посмотрите на нынешние круто параллелящиеся языки, тот же Erlang например, там все сделано через сообщения. Опять же нагородили огородов из RPC, COM и прочего dbus'а. А ведь как все хорошо начиналось.
Читать дальше →

Io Language: Синтаксис

Время на прочтение4 мин
Охват и читатели3.9K

В продолжение серии статей про Io, хотелось бы отдельно остановиться на синтаксисе языка.
В двух словах синтаксис Io можно описать так: простой, но странный. Многих удивит такой подход, но, спешу заверить, как и в Lisp, синтаксис неудобен только при взгляде со стороны. С эстетической точки зрения можно отдельно выделить тот факт, что многие прогаммы на Io внешне кажутся излишне разреженными, на экране остается много «лишнего», незаполненного полезным кодом места, это ощущение меня не покидает довольно давно, я пока не придумал, как полностью избавиться от этого вывиха мозга, я просто придумал для себя некоторые правила оформления кода, при соблюдении которых эффект значительно сморщивается:
  • Длина строки не должна превышать 80 символов (Привет, text mode!)
  • Между клонированием объекта и описанием тела нового должна быть пустая строка
  • Методы и свойства группируются
  • Без лишней необходимости скобки на новую строку не переносятся


Ну что, поехали. Вынос мозга №2.
Читать дальше →

Вклад авторов