Поработал на Perl
Mar. 15th, 2005 08:16 pmВ текущем проекте в качестве основного языка реализации серверной части был выбран Perl. Пописав для этого проекта, я понял, что любимые мои команды в perl это map и grep. Ну еще File::Find::find. В общем, сплошная функциональщина. Спроектировать что-ли следующий проект на Ocaml...
no subject
Date: 2005-03-15 09:27 am (UTC)no subject
Date: 2005-03-15 09:55 am (UTC)no subject
Date: 2005-03-15 11:22 am (UTC)no subject
Date: 2005-03-15 04:17 pm (UTC)no subject
Date: 2005-03-15 11:25 am (UTC)На самом деле в O'Caml есть еще пара кайфов, с которыми у перла плохо - pattern matching и егойные именованыее unionы. Но пользу этого объяснить "абстрактно" трудно - поскольку без этого вроде бы и легко обходится, но в реальности оно очень облегчает жизнь.
no subject
Date: 2005-03-16 01:00 am (UTC)no subject
Date: 2005-03-16 06:38 am (UTC)Между прочим - это, а не качество софта, самая серезная причина не подвязываться в серьезных вещах на MS.
no subject
Date: 2005-03-16 01:12 pm (UTC)Поэтому про этот менеджерский лозунг при наличии открытых исходников с нормальной лицензией можно и забыть.
На мой взгляд, более критичным является вопрос "а где мы возьмем ещё программистов на этом". Впрочем, практика показывает, что найти программиста проблема, независимо от языка, а если ты его всё-таки найдешь, то он любой нужный язык за неделю выучит.
no subject
Date: 2005-03-16 01:29 pm (UTC)То есть если серьезно - для большого проекта сейчас есть два более или менее надежных языка - C/C++ и Java. Причем для Java существенно то, что за ней стоит не только Sun, но и IBM. На только Sun я бы полагаться не стал.
Но у Perl его userbase все-таки более или менее гарантирует, что проект в случае чего подхватят. А вот с O'Caml я в этом не уверен. Сократят в Inria лабораторию - и запросто сдохнет.
no subject
Date: 2005-03-16 04:14 am (UTC)Меня капитально начинает раздражать все новое, что появилось в ocaml'e за последние 3 года, и началось все это с добавления label'ов. Чем дальше тем хуже. Ой, перепешу я свой единственный caml проект на Caml light или даже окончательно откажусь от статически типизированных языков.
no subject
Date: 2005-03-16 06:34 am (UTC)label'ы, кстати, хоть и наворот, но вещь удобная, если пользоваться правильно. А больше там ничего особенно и не появлялось.
no subject
Date: 2005-03-16 08:24 am (UTC)type expr = Plus of expr * expr (* means a + b *) | Minus of expr * expr (* means a - b *) | Times of expr * expr (* means a * b *) | Divide of expr * expr (* means a / b *) | Value of string (* "x", "y", "n", etc. *) ;; let rec to_string e = match e with Plus (left, right) -> "(" ^ (to_string left) ^ " + " ^ (to_string right) ^ ")" | Minus (left, right) -> "(" ^ (to_string left) ^ " - " ^ (to_string right) ^ ")" | Times (left, right) -> "(" ^ (to_string left) ^ " * " ^ (to_string right) ^ ")" | Divide (left, right) -> "(" ^ (to_string left) ^ " / " ^ (to_string right) ^ ")" | Value v -> v ;; let print_expr e = print_endline (to_string e);;Теперь все то же самое для Smalltalk, правда, там понятие файла с сорсами отсутсвует, поэтому исходника в чистом виде не будет, а будет описание того что я делал. Моноширинным текстом выделена
ПИСАНИНА:создал класс
Expr, создал подклассBinaryExprc полямиleftиright, создал подклассыPlus,Minus,Times,Divideопределил методы в
Expr:определил методы в подклассах:
toString ^ '(', self left toString, ' + ', self right toString, ')' toString ^ '(', self left toString, ' - ', self right toString, ')' toString ^ '(', self left toString, ' * ', self right toString, ')' toString ^ '(', self left toString, ' / ', self right toString, ')'создал класс
UnaryExprc полемv, подклассValueи его метод:Вот и все! Считать по байтам я не стану, но разница в количестве писанины тут явно не 5 раз. И что самое главное -- нет ни одного switch/if. Причем это тупое решение в лоб, без рефакторинга. По уму 4 метода
toStringв подклассах заменяются на один в базовом классеBinaryExpr:toString ^ '(', self left toString, ' ', self opString, ' ', self right toString, ')'и добавляется четыре метода в подклассах:
что явно меняет объем писанины не в пользу OCaml
no subject
Date: 2005-03-16 08:27 am (UTC)no subject
Date: 2005-03-16 01:16 pm (UTC)1) конструкторы (увы - Plus (Value "1", Value "2")
писать хочется
2) Всякие вещи вроде:
match e with
| Plus (Value a, Value b) -> Value(string_of_int (int_of_string a, int_of_string b))
| Plus (Value "0", a)
| Plus (a, Value "0")
| Minus (a, Value "0")
| Times (a, Value "1")
| Divide (a, Value "1") -> a
| Times (a, Value "1")
| Divide (a, Value "1") -> a
...
3) Банальности наподобие
let f a b c = ...; (x, y)
let (x, y) = f 1 2 3