Программный код
Исхо́дный код (также исхо́дный текст) — текст компьютерной программы на каком-либо языке программирования. В обобщённом смысле — любые входные данные для транслятора.
Исходный код либо транслируется в исполняемый код при помощи компилятора, либо исполняется непосредственно по тексту при помощи интерпретатора.
Назначение
Исходный код либо используется для получения объектного кода, либо выполняется интерпретатором. Изменения никогда не выполняются над объектным кодом, только над исходным, с последующим повторным преобразованием в объектный.
Другое важное назначение исходного кода — в качестве описания программы. По тексту программы можно восстановить логику её поведения. Для облегчения понимания исходного кода используются комментарии. Существуют также инструментальные средства, позволяющие автоматически получать документацию по исходному коду — т. н. генераторы документации.
Кроме того, исходный код имеет много других применений. Он может использоваться как инструмент обучения; начинающим программистам бывает полезно исследовать существующий исходный код для изучения техники и методологии программирования. Он также используется как инструмент общения между опытными программистами, благодаря своей (идеально) лаконичной и недвусмысленной природе. Совместное использование кода разработчиками часто упоминается как фактор, способствующий улучшению опыта программистов.
Программисты часто переносят исходный код из одного проекта в другой, что носит название повторного использования кода (Software reusability).
Исходный код — важнейший компонент для процесса портирования программного обеспечения на другие платформы. Без исходного кода какой-либо части ПО, портирование либо слишком сложно, либо вообще невозможно.
Организация
Исходный код некоторой части ПО (модуля, компонента) может состоять из одного или нескольких файлов. Код программы не обязательно пишется только на одном языке программирования. Например, часто программы, написанные на языке Си, с целью оптимизации, содержат вставки кода на языке ассемблера. Также возможны ситуации, когда некоторые компоненты или части программы пишутся на различных языках, с последующей сборкой в единый исполняемый модуль при помощи технологии известной как компоновка библиотек (library linking).
Сложное программное обеспечение при сборке требует использования десятков, или даже сотен файлов с исходным кодом. В таких случаях для упрощения сборки обычно используются файлы проектов, содержащие описание зависимостей между файлами с исходным кодом, и описывающие процесс сборки. Эти файлы так же могут содержать и другие параметры компилятора и среды проектирования. Для разных сред проектирования могут применяться разные файлы проекта, причем в некоторых средах эти файлы могут быть в текстовом формате, пригодном для непосредственного редактирования программистом с помощью универсальных текстовых редакторов, в других средах поддерживаются специальные форматы, а создание и изменения файлов производится с помощью специальных инструментальных программ. Файлы проектов обычно включают в понятие «исходный код». В подавляющем большинстве современных языковых сред обязательно используются файлы проектов вне зависимости от сложности прочего исходного кода, входящего в данный проект. Часто под исходным кодом подразумевают и файлы ресурсов, содержащие различные данные, например, графические изображения, нужные для сборки программы.
Для облегчения работы с исходным кодом, для совместной работы над кодом командой программистов, используются системы управления версиями.
Качество
В отличие от человека, для компьютера нет «хорошо написанного» или «плохо написанного» кода. Но то, как написан код, может сильно влиять на процесс сопровождения ПО. О качестве исходного кода можно судить по следующим параметрам:
- читаемость кода (в том числе наличие или отсутствие комментариев к коду;
- лёгкость в поддержке, тестировании, отладке и устранении ошибок, модификации и портировании;
- низкая сложность;
- низкое использование ресурсов — памяти, процессора, дискового пространства;
- отсутствие замечаний, выводимых компилятором;
- отсутствие «мусора» — неиспользуемых переменных, недостижимых блоков кода, ненужных устаревших комментариев и т. д.
Неисполняемый исходный код
Копилефтные лицензии для свободного ПО требуют распространения исходного кода. Эти лицензии часто используются также для работ, не являющихся программами — например, документации, изображений, файлов данных для компьютерных игр.
В таких случаях исходным кодом считается форма данной работы, предпочтительная для её редактирования. В лицензиях, предназначенных не только для ПО, она также может называться версией в «прозрачном формате». Это может быть, например:
- для файла, сжатого с потерей данных — версия без потерь;
- для рендеравекторного изображения или трёхмерной модели — соответственно, векторная версия и модель;
- для изображения текста — такой же текст в текстовом формате;
- для музыки — файл во внутреннем формате музыкального редактора;
- и наконец, сам файл, если он удовлетворяет указанным условиям, либо если более удобной версии просто не существовало.
См. также
- Рефакторинг
- Стандарт оформления кода
- Свободное программное обеспечение
- Эзотерические языки программирования
- Пример: Программа Hello world
Ссылки
Wikimedia Foundation . 2010 .
Написание кода — Жизнь программиста
Не волнуйтесь, если что-то не работает. Если бы всё работало, вас бы уволили.
- Факты о программировании
- Из чего состоят языки
- Лексика
- Синтаксис
- Семантика
Насколько важным является процесс кодирования в программировании? Ответ на этот вопрос не так очевиден, как может показаться на первый взгляд. Некоторые считают, что это и есть программирование, но на самом деле это не так.
Факты о программировании
Вот некоторые неочевидные факты о программировании:
- Только 10-20% времени тратится на кодирование
- Большая часть времени тратится на размышления
- Существенная часть времени тратится на отладку
- В день пишутся лишь десятки строк кода, которые пойдут в конечный продукт
Действительно, профессиональные разработчики тратят лишь 10-20% времени непосредственно на написание кода. Сравним, как выглядит работа программиста в реальной жизни с тем, как она обычно представляется в кино. В фильмах программисты постоянно набирают что-то на клавиатуре, но в обычной жизни вы скорее увидите человека, который чешет голову и задумчиво смотрит в экран, записи или вообще в пустоту. Зачастую тот код, который пишет программист, не является конечным. Он может постоянно его дорабатывать, переписывать, и в конечном итоге в день будет написаны несколько десятков строк готового кода, которые пойдут в конечный продукт.
Рассмотрим график, который показывает распределение рабочего времени в зависимости от уровня программиста: от начинающего до профессионального.
Ось Х отражает уровень программиста, а ось Y — его рабочий день. Видно, что есть очень сильная корелляция между уровнем разработчика и тем, на что уходит его рабочее время. Когда человек только начинает учиться программированию, то большую часть времени занимает именно процесс кодинга и отладки. Причем на отладку будет уходить даже больше времени, нежели указано на графике — не менее 90%. Отладка — это процесс поиска ошибок в коде. Именно количество времени, которое уходит на отладку, является одним из показателей уровня программиста. Помимо отладки новичок много занимается и кодингом, потому что ему нужно набивать руку. Кодинг можно сравнить с любым ремеслом, даже боевым искусством. Это такой процесс, который в конечном итоге, когда вы становитесь профессионалом достаточно серьёзного уровня, автоматизируется и становится просто способом реализации того, что вы придумали. И для ремесленника, и для художника, и для программиста первоочередная и самая сложная задача — это создать идею, продумать, что она в себя будет включать и как её воплотить в жизнь. А сам процесс воплощения обычно протекает гораздо проще.
Из чего состоят языки
Процесс кодинга — это непосредственная работа с языком. Пришло время разобраться, что из себя представляет язык. Любой язык программирования, равно как и язык естественный, состоит из 3 элементов.
Лексика
Первый элемент — это лексика. Лексика включает в себя словарь языка — набор слов, который в нём используется. В языках программирования такой набор слов гораздо более ограничен: в нём могут использоваться несколько десятков слов и спецсимволов против десятков тысяч слов в естественном языке. С другой стороны, выучить лексику языков программирования, а значит и усвоить его основы, гораздо проще. Ключевые слова учатся в процессе обучения и очень похожи во многих языках.
Синтаксис
Второй элемент языка — синтаксис, то есть те слова и конструкции, которые в нём присутствуют. Они записываются в виде программ, которые должны быть синтаксически корректными — это означает, что слова должны стоять в определенном порядке и подчиняться определенным правилам. Нарушение синтаксиса — это ошибка, и, в отличие от естественных языков, синтаксис в языках программирования — штука очень строгая, его нарушение сразу приводит к ошибке. Именно с этими ошибками в первую очередь сталкиваются программисты, которые пишут свои первые программы. Синтаксические ошибки просто отслеживать — нужно лишь немного набить руку. Знание синтаксиса — это основа, с которой начинается программирование.
Семантика
Третьим элементом языка является семантика. Одно дело — просто написать синтаксически верную конструкцию, но совершенно другое — чтобы она еще и правильно работала. Семантика подразумевает, что должно происходить под синтаксисом, и как это будет работать. Знание семантики — это уже более глубокий уровень и требует хорошего понимания того, что происходит в том или ином коде, начиная от уровня конкретных конструкций и заканчивая программами в целом. Она сопровождает разработчиков всегда и везде, поэтому важно понимать, зачем выполняется какое-то действие и почему оно так работает.
Чем на самом деле является язык программирования
Языки программирования существуют в 2 формах:
- Стандарт языка
- Реализация стандарта
Первая форма языка — это его стандарт, определяющий синтаксис и семантику. Не у всех языков есть стандарты, и они не всегда появляются до появления самого языка. Обычно появляется какой-то язык, и если он становится популярен, создается его стандарт и спецификация. Большинство современных языков имеют такие стандарты в том или ином виде.
Вторая форма языка — это реализация стандарта. Их может быть несколько, они все могут быть разработаны разными производителями, иметь свои особенности, но все без исключения должны подчиняться спецификации (стандарту). Подчинение спецификации даёт возможность исполнять код в разных средах.
Разобраться в разнице между стандартом языка и его реализацией можно на примере популярнейшего языка программирования JavaScript, который используется абсолютно везде и часто идёт вторым языком почти в каждом проекте, особенно в веб-разработке. Есть стандарт ECMA-262 или ECMAScript, а есть язык JavaScript, который является его реализацией. Существует несколько реализаций ECMAScript, среди которых TypeScript и JScript, которые написаны Microsoft, ActionScript от Macromedia (Adobe) и другие. При этом сам язык JavaScript остаётся такой же реализацией, которая имеет несколько сред исполнения.
Одной из таких сред является браузер. Есть несколько разных браузеров, у каждого из которых своя реализация JavaScript. Существует еще серверная, бэкенд-реализация — она называется NodeJS — которая позволяет исполнять тот же самый JavaScript. Некоторые теряются и не понимают разницы между JavaScript и NodeJS, выбирая, что же из этого им нужно учить. На самом деле, выбор здесь прост: в первую очередь надо осваивать JavaSсript, как самую популярную реализацию стандарта ECMAScript, и только после этого погружаться в специфики сред исполнения. Примерно такая же ситуация с другими языками.
Для любого языка истина в последней инстанции — это его спецификация. Зачастую её очень непросто читать, и есть более человечные способы знакомства с синтаксисом и семантикой языка, но помните о первоисточнике — к нему всегда можно обратиться и найти ответ на вопрос, как работает тот или иной элемент языка.
Заблуждение
Знание синтаксиса языка программирования и семантики и есть программирование?
Есть одно очень важное заблуждение, которое касается практически всех начинающих программистов. Его распространению способствует огромное количество курсов на просторах сети, разговоров на форумах, чатах, где бы то ни было. У молодых разработчиков возникает ощущение, что знание синтаксиса языка и его семантики — это и есть программирование, но на самом деле это не так. Да, это знание очень сильно приближает к освоению программирования, и без него нельзя стать разработчиком, но оно не является определяющим. Точно так же, как покупка фотоаппарата и изучение его документации не делает из человека фотографа, знание синтаксиса и семантики языка программирования не делает из человека программиста.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Программный код
Программный код — это текст, написанный на языке программирования. Обычно его пишут программисты, и этот процесс называется «кодинг». С помощью кода создают программы: отдают компьютеру команды, которые он выполняет.
«IT-специалист с нуля» наш лучший курс для старта в IT
Когда человек пишет код, про него говорят, что он кодит. Чаще всего этот термин применяют по отношению к программистам, которых еще называют кодерами.
Код программы изначально воспринимается компьютером как простой текст. Чтобы он заработал, нужно передать его специальному инструменту — компилятору или интерпретатору нужного языка. Тот преобразует код в вид, понятный машине. После этого его можно будет запустить.
Профессия / 8 месяцев
IT-специалист с нуляПопробуйте 9 профессий за 2 месяца и выберите подходящую вам
Для чего нужен программный код
Компьютер не понимает человеческие языки. Но и программный код на современных языках программирования ему непонятен: его нужно компилировать или интерпретировать, чтобы он заработал. Возникает вопрос: почему тогда не писать программы на человеческом языке. Но так не получится — код все-таки нужен. Попробуем объяснить простыми словами, почему.
Человеческие языки сложные. Практически невозможно создать компилятор, который переводил бы человеческие естественные языки в понятный компьютеру вид. В программировании есть область их распознавания, которая называется NLP, но она очень сложная и не способна распознать все. Поэтому человеческий язык в качестве языка программирования просто не подойдет.
Код помогает быстрее и лаконичнее отдавать команды. Представьте, что вам нужно отсортировать большое количество данных. Описать задачу обычным текстом будет сложнее, чем написать одну или две строчки кода.
Код понятен и структурирован. Современные языки программирования — высокоуровневые. Это значит, что их уровень абстракции выше, ближе к человеческому пониманию, чем к машинному. Поэтому код на них нужно компилировать или интерпретировать. Исходный «язык машины» — длинные машинные коды из нулей и единиц, и писать на них программы человеку практически невозможно. Будет совершенно непонятно. А по программному коду видно, что он делает — его синтаксис приближен к человеческому пониманию.
Языки программирования служат своеобразным компромиссом между сложными для человека машинными кодами и непонятным для компьютера человеческим языком.
Станьте Fullstack-разработчик на Python и найдите стабильную работу
на удаленкеКак выглядит программный код
Это набор строчек на языке программирования. Языки обычно приближены к английскому: слова из него заимствуются для обозначения команд. По структуре код состоит из команд, связей между ними, различных операторов и знаков препинания, а также переменных и значений. Большие группы команд, которые выполняют конкретное действие, собираются в блоки — функции.
В конце каждой строчки в большинстве языков ставится точка с запятой. Она помогает компилятору или интерпретатору понять, что команда закончилась. Но это не всегда так: например, в Python вместо точки с запятой используется перенос строки.
На картинках с кодом, которые вы наверняка видели в сети, он разноцветный. Это происходит, потому что специальные средства для программирования подсвечивают разные элементы его синтаксиса для наглядности.
Разбираемся с терминами: каким бывает код
Это не классификация — просто список терминов, которые часто можно услышать в контексте написания кода. Они могут быть похожи, но означают разное.
Исходный код, или сурс, source code — Это версия программного обеспечения в его первоначальной форме, как оно было написано разработчиком (то есть введено в компьютер), представленная в виде обычного текста (то есть последовательности буквенно-цифровых символов, которые человек может прочитать). Понятие исходного текста также может иметь более широкое значение, охватывая машинный код и символы на графических языках, но ни один из этих случаев по своей сути не является текстом.
Исходный код может быть открытым или закрытым. Открытый исходный код может просмотреть кто угодно. Закрытый или спрятан от пользователей, или вообще отсутствует в готовом программном продукте — вместо него используются исполняемые коды.
Исполняемый код — код, который может исполнить программа. Иногда противопоставляется исходному. Чаще всего так называют код, который получился в результате компиляции. Компилятор переводит исходный код в машинный, который сможет исполнить операционная система, — на выходе получается исполняемый код.
Чистый код — это понятие другого порядка, которое, скорее, относится к правилам хорошего тона для разработчиков. Чистым называют код, который хорошо написан, не слишком многословен, понятен и лаконичен. Такой код легко прочитать другим разработчикам, а не только автору.
Станьте Frontend-разработчиком
и создавайте интерфейсы сервисов, которыми пользуются всеВ чем пишут код
Языки программирования устроены так, что код можно написать в любом редакторе, даже в «Блокноте». Компьютер в таком случае воспримет его как текст, а для запуска нужно выполнить дополнительные действия: сохранить файл в нужном формате, отправить его компилятору или интерпретатору. Если это код на JavaScript, проще всего запустить его в браузере. А если код на внутренних языках операционной системы — в консоли.
Чаще всего программисты пишут код в специальных программах: средах разработки, они же IDE, и редакторах кода. Среда — более мощный инструмент со множеством дополнительных функций. Код можно запустить прямо из нее одной кнопкой. Редактор проще, в нем легче разобраться, и он менее ресурсоемкий.
Специальные средства для написания кода умеют больше, чем текстовые редакторы. Они подсвечивают синтаксис и делают код разноцветным, чтобы разработчику было понятнее. Они помогают находить неудачные места, отлаживать программы, выводить данные и делать много других вещей. Это удобные и наглядные инструменты.
Новичкам мы рекомендуем начать с редакторов кода или IDE. Так удобнее писать и сложнее запутаться.
Из чего состоит код
Набор правил, по которым пишется код, называется синтаксисом. Синтаксис поясняет, какие команды можно использовать, какой должна быть структура кода, как правильно расставлять связи, передавать аргументы и использовать разные операторы. Его можно сравнить с правилами русского языка.
Синтаксис языка программирования ничего не говорит о смысле программы. Он отвечает только за правильность написания.
Код состоит из команд, связей между ними и других элементов синтаксиса. Вот какими они бывают.
Сначала договоримся об общих понятиях.
- Командами мы будем называть непосредственные указания для компьютера, что сделать. Например, напечатать слово: print(“слово”).
- Связями будем называть разные элементы, связывающие команды друг с другом. Чаще всего это знаки пунктуации и различные операторы.
А теперь рассмотрим компоненты более подробно.
Переменные. Когда пользователь оперирует какими-то значениями по нескольку раз, ему бывает нужно куда-то их записать. Для этого в языках программирования существуют переменные. У переменной есть имя, тип и значение.
- Имя показывает, как обращаться к переменной. Например, если мы объявили a = 5, то переменная называется a.
- Значение – это данные, которые лежат в переменной. Для названной выше переменной a это число 5.
- Тип данных показывает, какой вид информации находится в переменной: число, буква, строка или что-то более сложное. Есть простые и составные типы данных. В первых хранятся примитивные значения вроде чисел и строк, во вторых – сложные конструкции из нескольких примитивов или даже функций.
Работа с типами данных в разных языках программирования – тема для отдельной статьи. Они могут сильно различаться: где-то тип надо указывать явно, где-то нет. В некоторых языках можно сравнивать или складывать данные разных типов, в других нельзя. Вариаций много, поэтому стоит сразу смотреть, как устроены типы в выбранном вами языке.
Константы. Так называют переменные, значение которых нельзя изменить. Оно задается раз и навсегда. В некоторых языках программирования, например в функциональных, все переменные по сути являются константами.
Ключевые слова. Ключевые слова — это особые зарезервированные слова, которые используются для технических целей. Например, значения True и False, «истинно» или «ложно». Зачастую эти слова — не команды: они рассказывают компьютеру о каком-то значении или формате. Зарезервированными словами нельзя что-то назвать. Например, в программе не может быть переменной, имя которой True.
Станьте веб-разработчиком и найдите стабильную работу на удаленке
Идентификаторы. Так в информатике называются имена, которые программисты дают сущностям в коде. Например, имя переменной — это ее идентификатор. А если пользователь захочет создать какую-то функцию, то он даст ей имя. Оно тоже будет идентификатором.
Значения и литералы. Литералы еще называют безымянными константами. Это значения какого-то типа, которые используются в коде, но не привязаны к переменной. Они не меняются, ведь их никуда не записывают — это не переменные. Изменить литерал можно только одним способом: переписать исходный код.
Например, когда мы пишем print(“слово”), строка «слово» — это литерал. Нам не нужно записывать ее в переменную, но и обойтись без нее не получится. Она остается в коде как безымянная константа.
Знаки пунктуации и символы. Символы чаще всего бывают связями. Иногда — операторами. Это «знаки препинания» для языка программирования: точка, двоеточие, запятая, точка с запятой и так далее. Они помогают структурировать программу. Например, скобки () после функции обрамляют данные, которые нужно передать ей при запуске. А сами данные перечисляются через запятую, чтобы отделить одно от другого.
Правила пунктуации опять же различаются в зависимости от языка. Но чаще всего в языках программирования можно встретить круглые, квадратные и фигурные скобки, запятые и точки с запятой, а также точки и кавычки. Среди других распространенных символов — двоеточие, значок ^, вопросительный знак, вертикальная или косая черта, процент и многое другое.
Операции, операторы и операнды. Не пугайтесь. Операции — это определенные действия с данными: сложение, вычитание, сравнение и так далее. Причем речь не всегда идет о действиях в математическом смысле — это просто хороший наглядный пример.
Операции состоят из операндов и операторов.
- Операнд – это переменная или литерал, что-то, с чем мы будем работать.
- Оператор – это символ или слово для обозначения действия.
Например, в операции a + 2 переменная a и литерал 2 будут операндами, а знак + оператором.
Функции. Иногда набор команд бывает нужно объединить в один блок, чтобы потом вызывать его как одну большую команду. Это возможно. Такие блоки в программировании называются функциями.
У функции чаще всего есть имя (исключения встречаются, но редко) и список аргументов — данных, которые передаются ей при вызове. Когда программист вызывает функцию, она выполняет заложенные в ней действия.
Встроенные команды языков программирования — обычно тоже функции. Просто они изначально заложены в язык. Но программист может написать и свои. Более того: разбивать код по функциям — хорошая практика, потому что это улучшает читаемость и гибкость программы.
Дополнительные наборы функций для каких-то задач называются библиотеками. Они тоже бывают встроенными, уже существующими в языке, и пользовательскими. Чтобы использовать функции из библиотеки, ее нужно подключить к программе, а если библиотеки нет на компьютере, сначала скачать.
Комментарии. В большинстве языков есть возможность писать комментарии — текстовые блоки, которые ничего не делают и нужны для удобства разработчика. Они выделяются специальными символами. Компилятор или интерпретатор игнорирует комментарии и ничего с ними не делает.
Основных назначений у комментариев два:
- документировать и объяснять. Например, разработчик может оставить комментарий около сложной функции и пояснить в нем, что она делает;
- временно скрывать участки кода. К примеру, человек превращает какую-то строку кода в комментарий, чтобы временно исключить ее из выполнения программы.
Если вы хотите профессионально заниматься программированием, записывайтесь на наши курсы. Мы будем рады помочь вам получить новую профессию.
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.
Примеры кода, синтаксически валидного и одинаково работающего в нескольких языках
Пользователь Reddit поделился кодом, одинаково работающим при компиляции как в формате .php , так и в формате .java .
/*> //\u000A\u002F\u002A PhpJava::main(); //\u000A\u002A\u002F
Разумеется, в комментариях нашлись умельцы, желающие похвастаться такого же рода программами. Приводим ниже некоторые из них.
Этот код работает одинаково на Java и C#:
public class JavaCSharp < public static void //\u000Amain //\u000A\u002F\u002A Main//\u002A\u002F (String[] args) < //\u000ASystem.out.printf("%s", //\u000A\u002F\u002A Console.WriteLine(//\u002A\u002F //\u000Anew Object[]< "Hello World!" //\u000A>\u000A ); >>
Код, одинаково работающий на C, Shell, Perl, Brainfuck, Befunge, Whitespace:
# define x u /* v # . >>>>>>>$$$a"muroftih"#[>:#,_@] eval 'echo "hitforum";exit';sub echo < print "@_\n">__END__>++++++++++>++++++++++[>+++++++++++>++++++++++ +------.+.>++++++.<---.+++++++++.>--.+++ .
А этот код работает аж на 16 языках:
# /* [ /* \ #` #\ %q~ set =dummy 0; puts [list "I'm" "a" "tcl" "script."]; exit all: ; @echo "I'm a Makefile." \ #*/ /*: */ enum ; \ \ static int c99(void) < #ifndef __cplusplus /* bah */ unused1: if ((enum )0) \ (void)0; #endif unused2: return a; \ > \ static int trigraphs(void) < \ \ return sizeof ". " == 2; \ >\ char X; \ \ int main(void) < \ \ struct X < \ \ char a[2]; \ >;\ if (sizeof(X) != 1) < \ \ printf("I'm a C++ program (trigraphs %sabled).\n", \ \ trigraphs() ? "en" : "dis");\ \ >else if (1//**/2 )unused3 : < ; \ printf("I'm a C program (C%s, trigraphs %sabled).\n", \ c99() ? "89 with // comments" : "99", \ trigraphs() ? "en" : "dis"); \ >else < \ printf("I'm a C program (C89, trigraphs %sabled).\n", \ trigraphs() ? "en" : "dis"); \ >\ return 0; \ > /* # \ \begin
import Prelude hiding ((:)); import Data.List (intercalate); import Language.Haskell.TH; import Data.String; default (S, String, Integer, Double); data S = S; instance Eq S where < _ == _ = False >; instance IsString S where < fromString = const S >; ifThenElse c t e = case c of True -> t; False -> e cPP = False; main :: IO () main = putStr ("I'm a Literate Haskell program" ++ bonus ++ ".\n") where _ = (); bonus | null details = "" | otherwise = " (" ++ details ++ ")" details = intercalate ", " [ name | (True, name) ) where _ >> _ = [] :: [()] magicHash = foo# () where foo = ['.']; "." # _ = False; foo# _ = True overloadedStrings = "" /= "" noMonomorphismRestriction = show foo == "0" where foo = 0 bar = foo :: Double unicodeSyntax = let (★) = True in (*) where (*) = False negativeLiterals = -1 == NNa binaryLiterals = let b1 = 1 in 0b1 == 1 numDecimals = show 0e0 == "0" scopedTypeVariables = stv (0 :: Double) == "0.0" data NN = NNa | NNb deriving Eq; instance Num NN where < fromInteger _ = NNa; negate _ = NNb; _ + _ = NNa; _ * _ = NNa; abs _ = NNa; signum _ = NNa >instance (Num a) => Num (e -> a) where < fromInteger = const . fromInteger; negate = (.) negate; abs = (.) abs; signum = (.) signum; x + y = \e ->x e + y e; x * y = \e -> x e * y e > class THC a where < thc :: a ->Bool >; instance THC () where < thc _ = True >; instance THC (Q a) where < thc _ = False >; class (Show a, Num a) => STV a where stv :: a -> String stv = const $ show (f 0) where f = id :: a -> a instance STV Double -- : \ \end
# \ ]>++++++++[<+++++++++>-]>++++[<++++++++++>-]++++++++++ \ [<+++++++++++>-]>++++[<++++++++>-]>++++++++++[ <++++++++++>\ -]<- - -.+.->>++++++++++[<+++++++++++>-]<++++.>>++++++++++[ \ <++++++++++>-]<+++++.<<<<+.->>>>- - -.<+++.- - -<++.- ->>>>>+++++ \ +++++[<+++++++++++>-]>>.>>>+. <.<.<\ ++++++++++++++.[-]++++++++++""" else 0 # \ from platform import * # \ print("I'm a Python program (%s %s)." % # [-][ \ (python_implementation(), python_version())); """-->
I'm a HTML page I'm a page
> # \ say "I'm a Perl6 program."; # """ # */ #define FOO ]-->~Можете также ознакомиться с нашей статьёй про куайны.
Делитесь в комментариях своими примерами такого кода ?