Обновить
134.39

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

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

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

Ностальгия: «Ящеры» на батнике

Время на прочтение3 мин
Количество просмотров6.5K
Все мы помним свой первый компьютер, а если вы программист, то и первую программу. Первым компьютером у меня был ZX-Spectrum, а первой написанной под него программой была игрушка «Ящеры» на Бейсике. Ну, если быть честным, то я ее просто переписал из одной книги1, попутно разбираясь в коде и исправляя допущенные автором ошибки :)

2.jpg - Picamatic - upload your images

Решил я дать вторую жизнь вышеуказанной игрушке. Но переписать ее на любом из известных мне языков было бы слишком просто. А так как я люблю писать батники, то переписал я ее на последних :)

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

Крестики-нолики по-русски!

Время на прочтение1 мин
Количество просмотров5.9K
Здравствуйте, после прочтения топика «Боярское программирование»
захотелось написать что то такое :) Сил хватило на крестики-нолики, но я хочу написать что-то тридешное, на истинном Боярском!
Читать дальше →

«OOC для C, — это как Scala для Java»

Время на прочтение7 мин
Количество просмотров2.3K
Сегодня на Hacker News наткнулся на пост о (похоже очень) новом языке "ooc". Бросил на день все дела, занялся ковырятельством — уж больно интересно выглядит.

Итак, "ooc — это современный, объектно-ориентированный, функционально(ватый), высокоуровневый, низкоуровневый, секси язык программирования". (Именно секси его и представляют разработчики, ну а я бы добавил что еще и "компилируемый")

По сути — ooc — транслятор языка высокого уровня в C со сборщиком мусора.

Как выразился один из посетителей сайта: "ooc для C, — это как Scala для Java" (jimbokun@HN).

Обязательный «Hello, World» на ooc:

hello.ooc:
"Hi, softer world =)" println()

на выходе hello.c и hello.exe.

ooc-компилятор транслирует это в c-код и использует доступный c компилятор (gcc, mingw, icc, tinycc) чтобы сделать из этого hello.exe (или ./hello). Поддержка tinycc заявлена, но в реальности ждем поддержки C99 в самом tinycc (автор обещал сделать обходные пути, но пока не работает), поэтому наслждаемся пока что довольно неслабого размера .exe'шниками (gcc от mingw других не делает).

Итак, что у нас уже есть в языке: классы, объекты, строгая типизация, угадывание типов (n := "Beer" length()), chaining (.dothis().dothat()), совместимость с c-библиотеками, абстрактные классы, шаблоны из C++, списки, разреженные(sparse) списки, хеши (ArrayList, SparseList, HashMap), for (i in list) { ... }, обертки для c-шных функций и классов, перегрузка операторов, полиморфизм, сборщик мусора (отключаемый), import file/name (не нужны .h, но .h можно использовать как extern), closures, eiffel's contracts, исключения, reflections, pattern matching, ranges, ternary operator, bindings, generics, coroutines, GTK, SDL, OpenGL, GLU, GLUT bindings…

Как сказал товарищ varjag@HN: «Я думаю это розыгрыш, сделанный пользователями Ruby, но нигде этого в тексте не вижу.» Нет, этот язык существует на самом деле. Примеры, линки, установка, подводные коряги — под катом…
Читать дальше →

Ненормальное программирование. Разработка IF игр

Время на прочтение6 мин
Количество просмотров20K

Разработка игр



Кто не мечтал попробывать разработать собственную игру. Мы будем создавать игру в стиле interactive fiction Сюжет я взял на сайте одной из систем программирования RTADS. Система локализована на русский язык и содержит полный набор средств и руководств для программирования. Но… Программировать мы будем в другой системе Inform7 Она мне больше нравится, т.к. я люблю английский. Итак сюжет.

Сюжет


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

Примеры использования языкоориентированного программирования

Время на прочтение5 мин
Количество просмотров2K
Идея language oriented programming (LOP), состоит в том, что во время разработки программы, постоянно создаются миниязыки. Они могут как расширять основной язык разработки, так и быть отдельными языками. Лучшим языком для LOP является Common Lisp с его макросами, но здесь речь пойдёт не о нём. Примеры использования LOP с Common Lisp советую посмотреть в замечательной книге Peter Seibel Practical Common Lisp. Я считаю, что LOP один из самых простых и эффективных способов программирования. Мы описываем задачу и предметную область на самом подходящем для этого языке, а потом стараемся его реализовать.

Я разрабатываю браузерные игры на Ruby, поэтому часто использую LOP, как для расширения языка и встроенных DSL (Ruby позволяет делать это очень хорошо), так и для создания миниязыков связанных со сложной игровой механикой. В этой статье я рассмотрю простое расширение основного языка, встроенный мини-DSL и два не встроенных языка. Буду приводить примеры в близкой мне тематике, надеюсь они будут вполне понятны.

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

Katahdin: метапрограммирование на грани фантастики

Время на прочтение2 мин
Количество просмотров2.4K
Katahdin — это интерпретируемый язык программирования, в котором синтаксис и семантика могут изменяться во время исполнения. Чтобы идея стала ясна, сразу приведу пример с официального сайта. В примере определяется операция получения остатка от деления ("%" в C, «mod» в Pascal).
class ModExpression : Expression {
  pattern {
    option leftRecursive;
    a:Expression "%" b:Expression
  }
 
  method Get() {
    a = this.a.Get...();
    b = this.a.Get...();
    return a - (b * (a / b));
  }
}

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

В продолжение темы 3D на осциллографе

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

Встречайте, Vector Damage. Полноценный (ну, почти) 3D шутер на осциллографе.


Далее

Альтернативные токены и триграфы в С++

Время на прочтение1 мин
Количество просмотров3.7K
Да-да-да, я понимаю, что для того, чтобы знать об альтернативных токенах надо всего лишь заглянуть в пункт 2.5 стандарта. В этом смысле, статья никому не нужна. Еще помню об этом рассказывал тов. Касперски.
Однако, смею предположить, что не совсем все знают, что писать hello world на cpp можно и так:
предаться изврату

Что меня спрашивали на собеседовании

Время на прочтение2 мин
Количество просмотров9.8K
sobesedovanie.jpg - image uploaded to PicamaticНе буду называть имён компаний. К её чести надо сказать, что это действительно лидер в своём деле, достигший нешуточных успехов. Стоит отметить прекрасный уютный офис, совершенно вменяемый HR (что было очень приятно), множество бонусов (страховки, тренажёры, обучение...) для сотрудников.

Всё было очень мило. И всем действительно большое спасибо.

Но мне хотелось бы сказать о том, что меня действительно поразило!

Вопросы!

Осторожно! Регекспы!

Время на прочтение4 мин
Количество просмотров8.9K
8341.jpg - image uploaded to PicamaticЧасто ли вы используете регулярные выражения? Задумываетесь ли вы о том, на сколько оправдано их использование? Каковы альтернативы, каковы возможности и ограничения? Какова цена применения регекспа?

Я уже давно и часто замечаю, что люди (особенно из мира Perl) склонны мистифицировать регулярные выражения, наделяя их (в своём сознании) универсальными сверх-способностями.

Настоящей статьёй, я призываю одуматься задуматься.

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

Автоматическое дифференцирование

Время на прочтение3 мин
Количество просмотров13K
imageВ программировании один из заветов — не дублировать функциональность. Иначе мы получаем код, в котором одни участки нетривиально зависят от других. При реализации части задач этому принципу легко следовать, но в других возникают проблемы: рассмотрим софт, который использует не очень хитрые математические алгоритмы, требующие работы с функциями и их производными.
Читать дальше →

Взаимодействие между несколькими .bat, мультиплеер на .bat

Время на прочтение7 мин
Количество просмотров13K

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

Полиглоты

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

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

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

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

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

image

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

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

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

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

Да ладно!?

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

Время на прочтение1 мин
Количество просмотров5.7K
Нереальный, фееричный перфоманс с использованием 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 мин
Количество просмотров6.9K
После праздником мозги сильно отдохнули и теперь неплохо было бы их размять.
Есть достаточно популярная головоломка: написать программу, которая выводит свой собственный исходный код на произвольном языке программирования. Это развлечение называется куайном.
Что за язык такой этот brainfuck все знают, я думаю.

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

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

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

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


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


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

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