LINUX.ORG.RU

Ответ на: комментарий от xargs

> то есть осталось приделать к Лиспу нормальные регвыражения и станет приличным языком :) прогресс однака

уже давно приделали:)

http://weitz.de/cl-ppcre/

причём

CL-PPCRE is faster than Perl in 1511 of 1545 cases - in 1045 cases it's more than twice as fast.

И совместимость с перловыми очень хорошая

CrazyPit ★★★
()
Ответ на: комментарий от CrazyPit

>Т.е. одной строчкой (через какой-нибудь генератор классов) создать класс сразу с набором методов и задать (без всякого наследования).

а в рубби тут Struct разве не базовый класс? в перле есть модуль struct который похоже себя ведет. только в одну строку не вместится, потому что use будет второй строкой.

>Но в перле чё плохо что стандартные типы не объекты т.е. Почему когда мне нужно узнать длинну массива я должен извращаться типа scalar @{$blah->list} вместо $blah->list->lenght ?

ну это во многих языках так. в том же C++ int тоже не объект.

а в твоем примере ты уж имеешь ссылку на объект. вот и определи в нем метод length :)

xargs ★★★
()
Ответ на: комментарий от xargs

>куда уж мощнее?

А вместо классов исключений (типа Exception->StandardError->ArithmeticError->ZeroDivisionError) использовать сообщения, которые потом распарсивать? Нет уж, спасибо.

>да, в практически любой либе с cpan :)

Видел только в двух библиотеках - одна для распарсивания конфигурационных файлов, вторая - интерфейс к MySQL (причем там оно по дефолту отключено). А вот писать после каждого действия (типа открытие файла и т. д.) or die ну совсем не в кайф.

true
()
Ответ на: комментарий от svu

> Нет пролога.

Пролог упомянут на предыдущей странице

> Почему вдруг SQL стал декларативным?

Фигасе. А с каких пор он _не_ декларативный? В роли языка запросов, естественно.

tailgunner ★★★★★
()
Ответ на: комментарий от CrazyPit

>уже давно приделали:)

у в таком виде оно и в С есть.

только нафиг оно надо если надо сплясать с бубном чтобы их заюзать?

xargs ★★★
()
Ответ на: комментарий от xargs

Ага я имею ссылку на массив ref($x) = ARRAY, но он к сожалению unblessed... т.е. метод я ему не могу задать. как и например числу.

А про sturct там не то делаеться. Там генерируеться Класс а не объект, вот как в перле сгенерировать класс так?

CrazyPit ★★★
()
Ответ на: комментарий от xargs

> только нафиг оно надо если надо сплясать с бубном чтобы их заюзать?

Ну дык напишем небольшой макрос и они будут такие же как в перле почти 1 в один.

Кстати в руби такие же регэкспы как в перле.:)

CrazyPit ★★★
()
Ответ на: комментарий от tailgunner

> А с каких пор он _не_ декларативный? В роли языка запросов, естественно.

Именно с тех пор, когда в нем появились другие слова, кроме слова SELECT. А это случилось не вчера.

svu ★★★★★
()
Ответ на: комментарий от xargs

>$a=12+34;

Ну а какой тогда нафиг ООП? А (234.567/89).round сделать можно?

true
()
Ответ на: комментарий от svu

> Именно с тех пор, когда в нем появились другие слова, кроме слова SELECT

Тогда практически используемых декларативных языков не существует. И Пролог - тоже не декларативный.

Разве что IDL остается.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Всякие языки разметки, наверное, тоже могут считаться декларативными. Пролог был бы наверняка декларативным, если бы на side effects нельзя было играть.

svu ★★★★★
()
Ответ на: комментарий от CrazyPit

> ага а в лиспе (defmethod kill ((p person)) ....) и тоже самое. Только не понятно почему это плохо?

в лиспе это в top level а в руби это где попало может быть, как я понял.

bugmaker ★★★★☆
()
Ответ на: комментарий от xargs

> один фиг ООП мощнее чем в перле нет нигде

А мультиметоды там давно ли ._.

bugmaker ★★★★☆
()
Ответ на: комментарий от xargs

> то есть осталось приделать к Лиспу нормальные регвыражения и станет приличным языком :) прогресс однака

А зачем приделывать? Чем например PCRE нехорош? Чё регехпам внутри языка вообще делать?

bugmaker ★★★★☆
()

Слева - понятно, что хотел сказать программист. Справа - фигня какая-то.

anonymous
()
Ответ на: комментарий от bugmaker

> в лиспе это в top level а в руби это где попало может быть, как я понял.

Ну я же могу в своём пакедже объявить метод для левого класса. Этоже тоже самое что и в руби.

CrazyPit ★★★
()
Ответ на: комментарий от tailgunner

> Ну, при желании - конечно. Но у людей нет такого желания. Не считают его таким языком, и баста :)

Тем не менее макросы вполне могут предоставить средства декларативного программирования, довольно тривиальным способом. То, что макросы генерят код, дающий ответ, а не непосредственно ответ как в декларативных - дело вобщем-то десятое. Вспомни ту же реализациб пролога на лиспе, скоко она там занимает?

bugmaker ★★★★☆
()
Ответ на: комментарий от xargs

А какой вид щитается без плясок с бубном? Когда всё возможное в сам йазыг напихато, как в бейсикопасцале?

bugmaker ★★★★☆
()
Ответ на: комментарий от anonymous

> Слева - понятно, что хотел сказать программист.

Нечто многоэтажное?

bugmaker ★★★★☆
()
Ответ на: комментарий от anonymous

> Слева - понятно, что хотел сказать программист.

Слева - понятно, что программисту платят построчно. :)

Teak ★★★★★
()
Ответ на: комментарий от bugmaker

> А в теле функции можно, чтобы по мере исполнения всё менялось малопредсказуемым образом?

всё можно через eval, как и в лиспе, кстати.

CrazyPit ★★★
()
Ответ на: комментарий от tailgunner

Принципиальные - отсутствие у питона средств программирования, а только скриптования. Он по сути своей скриптовый йазыг.

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

> Принципиальные - отсутствие у питона средств программирования, а только скриптования.

А чем скриптование отличается от программирования?

tailgunner ★★★★★
()
Ответ на: комментарий от CrazyPit

> Да не в руби тоже можно всё зделать труъ:

А труъ это совсем не ООП, а то, что удобнее для конкретной задачи. Какие есть в руби способы вычислить булево значение выражений наподобие (a < b <= c == d) по принятым в арифметике правилам?

bugmaker ★★★★☆
()
Ответ на: комментарий от tailgunner

Скриптование - это выполнение сценария, просто поочерёдное выполнение операторов одного за другим. Программирование - это постановка задачи в терминах языка программирования (в первую очередь!) и последующее её решение в этих же терминах. Очевидно, что всякую задачу можно свести к выполнению некоего сценария, и также совершенно очевидно что для большинства задач это самый нелепый и неэффективный способ их решения. Скриптовые наречия, такие как башскрипт, классический бейсик или питон дают возможность выполнения сценария, но их способность к неимперативным конструкциям или мала или вообще отсосутствует. Из других парадигм в них подразумевается как максимум ООП в минимальном варианте, как форма записи императивного алгоритма. Применение любых других парадигм или составление своих затруднено либо вообще невозможно. Вся хоть сколько-нибудь сложная функциональность выносится во внешний мир, в библиотеки как в питоне или исполняемое как в башскрипте. Средства автоматической генерации кода отсосутствуют напрочь, логика более сложная чем оператор switch тоже, и что самое главное, средства для создания этого тоже отсутствует.

bugmaker ★★★★☆
()
Ответ на: комментарий от Teak

выглядит жутковато, согласись? В "фразе о лиспе" глянь как это просто и изящно можно сделать на коленке с нуля и полученый результат вполне вписывается в остальную прогу.

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

Практически ни с чем не согласен, но твою точку зрения понял.

Вопрос для самомпроверки: являются ли Бейсик, Паскаль и Си скриптовыми языками? Под вышеприведенное описание они тоже подпадают.

tailgunner ★★★★★
()
Ответ на: комментарий от bugmaker

Не читал признаться, слишком длинно. Но если что-то типа (multicmp a < b <= c), то различия чисто синтаксические. Сам же говоришь, что спорить о том, где } а где end не имеет смысла.

Вообще, было бы прикольно добавить в руби возможность доопределять любые операторы, как в хаскелле. :) Хотя так ли это надо - вопрос.

Teak ★★★★★
()
Ответ на: комментарий от anonymous

>Слева - понятно, что хотел сказать программист. Справа - фигня какая-то.

Справа - то же самое, коротко записанное японскими иероглифами

anonymous
()
Ответ на: комментарий от tailgunner

> Практически ни с чем не согласен, но твою точку зрения понял.

А с чем именно?

> являются ли Бейсик, Паскаль и Си скриптовыми языками? Под вышеприведенное описание они тоже подпадают.

Си непопадает, средств у него довольно дофуа. А их некоторая недостаточность связана низкоуровневостью, жоскими требованиями быстродействия и возможности "оптимизации вручную", и вообще, ты бы в этой компании ещё асм бы вспомнил, вот где скриптование процветает :D. В предыдущем я имел в виду только достаточно высокоуровневое, если ты не понял. Классический пасцаль - это недойазыг (недоси), в хорошем смысле этого слова. Он не предполагался для практического использования, а только для обучения. То, что на ём пытались делать продакшн проекты, говорит о том, что нужно учиться пользоваться микроскопом для рассмотрения мекробов, а не пытаться делать это при помощи молотка сперва. Иначе "привыкнеш, и твоя жысь не будет стоить ломаного цента" (С) самизнаетечёй. Современные породы пасцаля - это недойазыги в худшем смысле этого слова. Они недостаточно высокоуровневы для прикладного программирования и недостаточно низкоуровневы для системного. Бейсик - он и предназначен был для "создания простых программ непрофессиональными программистами", выражаясь по-теперешному, скриптования.

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

ОК, Паскаль не попадает из-за низкого уровня, понятно.

> ты бы в этой компании ещё асм бы вспомнил, вот где скриптование процветает :D

Если следовать твоему определению, то да.

А вот здесь:

> Си непопадает, средств у него довольно дофуа.

какие такие средства у Си?

tailgunner ★★★★★
()
Ответ на: комментарий от Teak

> Не читал признаться, слишком длинно. 

Зря, там много забавных мест, хоть и мусора тоже. 

> Но если что-то типа (multicmp a < b <= c), то различия
> чисто синтаксические.

Вот, я вытащил оттудова. Интересно было бы глянуть 
 на аналогичную функцию в варианте руби.

----------------------------------------
(defun cmp (x)
  (if (= 1 (length x))
     t
     (and 
        (eval (list (second x) (first x) (third x)))
        (cmp (rest (rest x))))))

пример юсажа:

[2]> (cmp '(2 = 2 <= 4 = 4 < 5 < 6))

T

[3]> (cmp '(2 = 2 <= 4 = 4 < 5 < 3))

NIL 
----------------------------------------

> Сам же говоришь, что спорить о том, где } а где end не имеет смысла.

Да, но тут уже речь идёт не о разных вариантах написания, } или end,
 а о наличии бесполезых, не несущих необходимой смысловой неагрузки,
 и : и их отсутствии. 

> Вообще, было бы прикольно добавить в руби возможность
> доопределять любые операторы, как в хаскелле. :)

Речь не совсем об операторах в математическом смысле, 
 их добавлении к имеющимя или убирании лишних,
 а о возможности более гибко адаптировать программу
 к области задачи. Здесь например, легко и непринуждённо
 используются в общем несвойственные лиспу инфиксные.
 Я могу скормить аналогичное выражение любой длины этой функции,
 и оно легко будет записано и легко будет читаться. А представь
 череду из десятка a, :<, ... в руби-варианте?

> Хотя так ли это надо - вопрос.

Если как в с++, ИМХО луче не надо.

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

Это всё понятно, в этом месте руби действительно не очень расширяем, но на практике очень часто можно обойтись и тем, что у него уже есть. Там метапрограммирование тоже имеется, хотя и несколько неполноценное, но для рельсов хватило например. :)

Teak ★★★★★
()
Ответ на: комментарий от tailgunner

> ОК, Паскаль не попадает из-за низкого уровня, понятно.

В классическом виде он по духу всётаки ближе к бейсику чем к сям.

> Если следовать твоему определению, то да.

Я просто забыл указать что каждый из операторов в скриптовом языке несёт довольно сильно адаптированную к человечемкому восприятию смысловую нагрузку. В случае с бейсиком это арифметические выражения или например функции рисования точек/линий, в случае с башем - потоки и файлы етц.

>> Си непопадает, средств у него довольно дофуа.

> какие такие средства у Си?

Макросы например, получше чем в питоне :P. Возможность динамического кода при помощи указателей на функции. Скудные возможности ООП, благодаря им же.

bugmaker ★★★★☆
()
Ответ на: комментарий от Teak

Кстати, нафига у тебя там (cmp '(...))? Ещё несколько строчек, и делаем из этого макрос, как я и написал (cmp ...). Мы не сторонники полумер. :) Причём аргументы этого макроса даже и вычислять не будем, если одно из сравнений левее уже обломилось - всё как в лучших домах лондона и парижа. :)

Да, на руби такого не сделаешь. Ну и пёс с ним.

Teak ★★★★★
()
Ответ на: комментарий от Teak

> Это всё понятно, в этом месте руби действительно не очень расширяем, но на практике очень часто можно обойтись и тем, что у него уже есть. Там метапрограммирование тоже имеется, хотя и несколько неполноценное, но для рельсов хватило например. :)

Всё правильно, на практике часто можно обойтись башскриптом, или bc/gnuplot/другим специализированным, или десятком строк на бейсике. Зависит от задачи. Питоном можно обойтись, если для этого случая уже библиотеку к нему понаписали, соединить вместе несколько кусков готового кода, с этим он в принципе справится, хотя и плохо но для большинства случаев "пойдёт и так". Джангой можно обойтись, если времени и клавиатуры не жалко, или даже виндовсем с дотнетиненадой, кто-то ведь обходится. Помниш про дельфибыдлокодера, перемещающего льва в клетку? "Спрашивает форумах, где скачать компоненты 'лев' и 'клетка', если никто не отвечает - говорит что задача не решаема". Если на практике очень часто можно обойтись готовыми, а неготовые никто вобщем-то неспрашивает, ну и ладно. Всё так, да. Не так давно мне один доказывал что дотнетиненадо - это необычайно круто "патамушта я работаю ф крутой фирме и мне доверили мышом таскать контролы на формы. Получается приложение и его продают закащщику за бешеное бабло!". Доказывать ему что есть задачи, которые не решатся даже если все контролы, существующие в этой маленькой жалкой грязной вселенной на свою формочку стащит, они не решатся? Дык он не поверит, не сумеет поверить. А если поверит, то только расстроится и больше никакого результата не будет. Оно нам надо? Хм, тога уж луче возможность переопределять операторы в хаскель добавить. Это тоже бесполезно, но хотябы забавно.

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

Вся эта эскапада ничего не меняет в моих словах. :) У каждого языка - своя область применения, и писать на лиспе find . -ls |sort -nr +6.0 |head -30 я не стану, например. :) И руби - неплохой компромисс. Им могут пользоваться люди довольно простые, но вместе с тем он достаточно мощный и расширяемый для широкого класса задач. В общем спорим уже ни о чём...

Teak ★★★★★
()
Ответ на: комментарий от Teak

> Кстати, нафига у тебя там (cmp '(...))?

Это передаётся в функцию cmp список из элементов, составленный по определённым правилам. Элементы списка - последовательность значений, разделённая функциями сравнения. Кстати, как дополнительный бонус, даваемый динамической типизацией, есть возможность скормить этой функции произвольные типы и функции сравнения, например (cmp '("a" string= "b"))

> Ещё несколько строчек, и делаем из этого макрос, как я и написал (cmp ...)

Можно и так. Но макрос не всегда хшё ибо чтобы он развернулся параметры должны быть вычислены на этапе компиляции, а в моём случае сприсок '(a = b < c ...) может быть скормлено функции, будучи например вычислен по ходу работы проги или скачано работающей прогой откуда-нибудь с инета, а в коде представлено как (cmp (download-list "http://linux.org.ru/users-count.ucw";)). Во вторых, несомненно есть кучя способов сделать такое же, и многие наверняка лучше, но я понаписал эту функцию исключительно спинным моском исключительно для разовой цели и не счёл полезным уделять время для её обдумывания и оптимизации.

bugmaker ★★★★☆
()
Ответ на: комментарий от Teak

> У каждого языка - своя область применения, и писать на лиспе find . -ls |sort -nr +6.0 |head -30 я не стану, например

Дык я и не возражаю, я же сказал - всё правильно.

> И руби - неплохой компромисс. Им могут пользоваться люди довольно простые, но вместе с тем он достаточно мощный и расширяемый для широкого класса задач.

Конечно. Пока можно палкой выковырять фкусные корешки, найденные в лесу по запаху, зачем браться за соху?

> В общем спорим уже ни о чём...

Хм, а на ЛОР когда-то было по-другому? я недавно в топике про моск участвовал, дык вообще гика убеждал что его, гика, несомненно не бывает. Убедил, изчез гик :|

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

Так вот кто виноват в его исчезновении! Говорили женился и жена к компьютеру не подпускает, а оказывается вон как. :)

Teak ★★★★★
()
Ответ на: комментарий от Teak

Хм, на редкость странная идея. Зачем бы ему давать жене такое распоряжение, чтобы она не пущала его к компу, если он сам хотел к нему подойти? А если не хотел, зачем подходил, так что жене пришлось его отгонять?

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

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

Teak ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.