Веб-разработка → Динамические приложения с Ocsigen или Йоба возвращается
Что делает холодным воскресным утром нормальный человек? Любой вам ответит: холодным воскресным утром человек спит. Потому что всю неделю он работал и хочет отдохнуть.
Что делает холодным воскресным утром программист? Холодным воскресным утром программист пьёт горячий чай и пишет код. Чай он пьёт, потому что утро холодное, да и проснулся ещё не до конца, а код пишет, потому что хочется. Программисту всегда хочется писать код, только в будни он пишет код за деньги и от этого очень устаёт, а в выходные для себя, поэтому отдыхает.
Этим утром мы будем писать наше первое приложение для Ocsigen. Желающим неплохо бы сначала ознакомиться с официальным мануалом, впрочем, на многое надеяться не стоит, потому что мануал недописан, пестрит недоуменными строками а-ля "??????" и нецензурной речью на французском. Поэтому основным мануалом буду я.
Как вы возможно помните, когда-то мы писали интерпретатор языка Йоба. С тех пор интерпретатор был незначительно улучшен, выделен в отдельный класс, стал принимать строку на вход, отдавать строку на выход (вместо работы с консолью). Теперь нашей задачей станетвнедрение Йобы в качестве основного языка компании Google превращение интерпретатора Йобы в веб-приложение, да не простое — а клиентское. Хоть я и добавил в класс счётчик операций, чтобы нельзя было слишком обнаглеть, но всё равно — пусть пользователь на своём компьютере вычислительные мощности тратит, а не на сервере.
Что делает холодным воскресным утром программист? Холодным воскресным утром программист пьёт горячий чай и пишет код. Чай он пьёт, потому что утро холодное, да и проснулся ещё не до конца, а код пишет, потому что хочется. Программисту всегда хочется писать код, только в будни он пишет код за деньги и от этого очень устаёт, а в выходные для себя, поэтому отдыхает.
Этим утром мы будем писать наше первое приложение для Ocsigen. Желающим неплохо бы сначала ознакомиться с официальным мануалом, впрочем, на многое надеяться не стоит, потому что мануал недописан, пестрит недоуменными строками а-ля "??????" и нецензурной речью на французском. Поэтому основным мануалом буду я.
Как вы возможно помните, когда-то мы писали интерпретатор языка Йоба. С тех пор интерпретатор был незначительно улучшен, выделен в отдельный класс, стал принимать строку на вход, отдавать строку на выход (вместо работы с консолью). Теперь нашей задачей станет
Веб-разработка → Ocsigen 2.0 — новая версия фреймворка для OCaml
Для тех, кто не знает: строго говоря, Ocsigen — это не совсем фреймворк. Ocsigen — это набор инструментов для создания эффективных веб-приложений на языке OCaml, он включает в себя как веб-сервер, так и инструменты для работы с потоками, написания расширений к веб-серверу, генерации HTML и многого другого. Кстати, замечу, что это может показаться невероятным (а кому-то может и не очень удобным), но генерируемый HTML5 или XHTML является статически типизированным, и валидность всего, что ваш сайт может сгенерить, будет проверена ещё на этапе компиляции.

Картинка для привлечения внимания — вращающаяся земля целиком написана на OCaml, а работает целиком в браузере.
Ну а вчера вышла новая версия этого замечательного фреймворка, и вот информация из анонса Винсента Балата (Vincent Balat):

Картинка для привлечения внимания — вращающаяся земля целиком написана на OCaml, а работает целиком в браузере.
Ну а вчера вышла новая версия этого замечательного фреймворка, и вот информация из анонса Винсента Балата (Vincent Balat):
Компиляторы → Интерпретатор из подворотен
Если ваше образование окончилось после второго класса, если словарный запас ограничен, а речь невнятна, если вы попросту тупы, не знаете этих непонятных латинских букв, но всё равно хотите стать программистом, вам поможет наш быдлоязык Йоба. Йоба — язык для риальных пацанов!
Ну а если серьёзно, как-то раз у нас на работе кто-то в шутку предложил написать гоп-язык, чтобы программистом мог себя почувствовать себя любой. Начинать конструкции со слова «чо» и всё такое. Тут надо заметить, что, не встретив на своём жизненном пути образования в области computer science, я пропустил все те интересные курсы по построению компиляторов, формальным грамматикам и прочим вкусностям, которые вкушают нормальные студенты на втором-третьем курсе. Книга Вирта по построению компиляторов хотя и добавила мне знания всяких умных терминов типа БНФ, но практической пользы не принесла — ни одного компилятора я так и не написал. Поэтому задача оказалась для меня довольно интересной.
Если вы старше 18 лет, адекватно воспринимаете обсценную лексику нашего родного языка и вам интересно, с чего начать, добро пожаловать под кат.
Ну а если серьёзно, как-то раз у нас на работе кто-то в шутку предложил написать гоп-язык, чтобы программистом мог себя почувствовать себя любой. Начинать конструкции со слова «чо» и всё такое. Тут надо заметить, что, не встретив на своём жизненном пути образования в области computer science, я пропустил все те интересные курсы по построению компиляторов, формальным грамматикам и прочим вкусностям, которые вкушают нормальные студенты на втором-третьем курсе. Книга Вирта по построению компиляторов хотя и добавила мне знания всяких умных терминов типа БНФ, но практической пользы не принесла — ни одного компилятора я так и не написал. Поэтому задача оказалась для меня довольно интересной.
Если вы старше 18 лет, адекватно воспринимаете обсценную лексику нашего родного языка и вам интересно, с чего начать, добро пожаловать под кат.
Программирование → Введение в OCaml: Типы данных и сопоставление [3]
[прим. пер.: продолжение перевода. первая часть, вторая часть]
В OCaml, так же как в Perl, есть встроенная на уровне языка поддержка списков. Все элементы списка должны быть одного типа. Для определения типа используется выражение:
Обратите внимание: точка с запятой, а не запятая.
У списка есть голова (первый элемент) и хвост (остальные элементы, кроме головы). Голова — элемент. Хвост — список. В вышеприведённом примере голова — целое число 1, а хвост — список
Альтернативной формой записи является использование оператора конструирования (cons) в форме
Зачем мы упомянули оператор конструирования? Он полезен когда мы начинаем сопоставление с образцом для списков, мы обсудим это чуть позже.
Тип данных для связного списка целых будет
Связные списки
В OCaml, так же как в Perl, есть встроенная на уровне языка поддержка списков. Все элементы списка должны быть одного типа. Для определения типа используется выражение:
[1; 2; 3]
Обратите внимание: точка с запятой, а не запятая.
[] означает пустой список.У списка есть голова (первый элемент) и хвост (остальные элементы, кроме головы). Голова — элемент. Хвост — список. В вышеприведённом примере голова — целое число 1, а хвост — список
[2; 3].Альтернативной формой записи является использование оператора конструирования (cons) в форме
head :: tail. Нижеприведённые строки полностью эквивалентны друг другу.[1; 2; 3] 1 :: [2; 3] 1 :: 2 :: [3] 1 :: 2 :: 3 :: []
Зачем мы упомянули оператор конструирования? Он полезен когда мы начинаем сопоставление с образцом для списков, мы обсудим это чуть позже.
Тип данных для связного списка
Тип данных для связного списка целых будет
int list; общий тип для связного списка объектов типа foo будет foo list. Программирование → Введение в OCaml: Структура программ на OCaml [2]
[прим. пер.: продолжение перевода, первая статья тут]

Теперь мы потратим немного времени на высокоуровневый анализ некоторых настоящих программ на OCaml'е. Я хотел бы показать вам локальные и глобальные определения, разницу в использовании , модули, вложенные функции, ссылки. Из-за этого мы столкнёмся с множеством концепций OCaml'а, которые пока что не имеют смысла для начинающего изучать OCaml, так как мы не встречали их ранее. Не фокусируйтесь на них, сконцентрируйтесь вместо этого на общем представлении о формате программ и особенностях языка, на которые я буду указывать.
Возьмём нашу функцию
Теперь посмотрим на это для OCaml:
Стандартное выражение

Структура программ на OCaml
Теперь мы потратим немного времени на высокоуровневый анализ некоторых настоящих программ на OCaml'е. Я хотел бы показать вам локальные и глобальные определения, разницу в использовании
;; и ;Локальные «переменные» (на самом деле локальные выражения)
Возьмём нашу функцию
average на Си и добавим в неё локальные переменные (сравните её с примером в прошлой главе).
double average (double a, double b)
{
double sum = a + b;
return sum / 2;
}
Теперь посмотрим на это для OCaml:
let average a b = let sum = a +. b in sum /. 2.0;;
Стандартное выражение
let name = expression in используется для определения локального именованного выражения и name может быть использовано в дальнейшем вместо expression вплоть до ;;, который означает окончание локального блока кода. Обратите внимание, мы даже не использовали отступ после объявления in. Просто воспринимайте let ... in так, как будто это один оператор.Программирование → Введение в OCaml: The Basics [1]
(предисловие от переводчика: сел учить окамл, обнаружил, что отсутствует перевод на русский язык руководства для начинающих. Восполняю этот пробел).
Комментарии в OCaml обозначаются символами (* и *), примерно так:
Другими словами, комментарии в OCaml очень похожи на комментарии в Си (
В настоящий момент нет однострочных комментариев (как
Комментарии в OCaml вложенные, это позволяет очень просто комментировать куски кода с комментариями:
Допустим, вы написали функцию, назовём её repeated, которая берёт исходную строку s, число n и возвращает новую строку, состоящую из n раз повторённой строки s.
В большинстве С-подобных языков вызов функции будет выглядеть так:
Это означает «вызвать функцию repeated с двумя аргументами, первый аргумент — строка hello, второй аргумент — число 3».
Подобно остальным функциональным языкам программирования, в OCaml, запись вызовов функций и использование скобок существенно отличается, что приводит к множеству ошибок. Вот пример того же самого вызова, записанного на OCaml:
Обратите внимание — нет скобок, нет запятых между аргументами.
Основы
Комментарии
Комментарии в OCaml обозначаются символами (* и *), примерно так:
(* Это однострочный комментарий *)(* Это комментарий на несколько строк. *)
Другими словами, комментарии в OCaml очень похожи на комментарии в Си (
/* ... */).В настоящий момент нет однострочных комментариев (как
#... в Перле или // ... в C99/C++/Java). Когда-то обсуждалась возможность использовать ## ..., и я весьма рекомендую окамловским товарищам в будущем добавить эту возможность (однако, хорошие редакторы открывают возможность использования однострочных комментариев даже сейчас).Комментарии в OCaml вложенные, это позволяет очень просто комментировать куски кода с комментариями:
(* This code is broken ...
(* Primality test. *)
let is_prime n =
(* note to self: ask about this on the mailing lists *) XXX;;
*)
Вызов функций
Допустим, вы написали функцию, назовём её repeated, которая берёт исходную строку s, число n и возвращает новую строку, состоящую из n раз повторённой строки s.
В большинстве С-подобных языков вызов функции будет выглядеть так:
repeated ("hello", 3) /* this is C code */Это означает «вызвать функцию repeated с двумя аргументами, первый аргумент — строка hello, второй аргумент — число 3».
Подобно остальным функциональным языкам программирования, в OCaml, запись вызовов функций и использование скобок существенно отличается, что приводит к множеству ошибок. Вот пример того же самого вызова, записанного на OCaml:
repeated "hello" 3 (* this is OCaml code *).Обратите внимание — нет скобок, нет запятых между аргументами.
Персональные блоги → PG'OCAML = PostgreSQL + OCaml
Cегодня понадобилось обратиться к базе данных PostgreSQL из Objective Caml, наиболее удобным и продвинутым фремворком для работы с PostgreSQL оказался — PG'OCAML. В этом посте хотелось бы показать пару примеров связки Objective Caml и PostgreSQL и насколько это просто.
Персональные блоги → Списки и другие структуры данных в Ocaml
Введение
Кроме базовых типов данных в Objective Caml к предопределенным типам относятся кортеж, список, запись.
Персональные блоги → Ocaml. Типы данных
Введение
В этом посте перейдем непосредственно к ознакомлению с языком Objective Caml. В этом посте будет рассказано об базовых типах данных Objective Caml.
Для начала вам необходимо скачать и установить Objective Caml, на этом этапе достаточно будет одного интерпретатора. Запуск интерпретатора производится с помощью: команды ocaml, если дело происходит в *nix, либо запуска ocaml.exe если дело происходит в Windows.
После запуска интерпретатора мы увидим следующее: версию Ocaml, у меня это Objective Caml version 3.00, и ожидание ввода команд:#.
Каждая логическая единица кода — фраза, заканчивается в Objective Caml — ;; Выход из интерпретатора, осуществляется либо по нажатию Сtrl+D, либо после вызова функции exit типа int -> int:
exit 0;;