LINUX.ORG.RU

Избранные сообщения cab

[Common Lisp] Инкрементальная разработка и VCS

Форум — Development

Несомненно инкрементальная разработка и возможность поправить что-то на работающем образе относятся к большим достоинствам Common Lisp. Но вот предположим я там чего-то наинкрементировал на живой системе через REPL, в нескольких разных местах. Подскажите Ъ-способ синхронизировать изменения обратно в дерево исходников, для дальнейшей синхронизации в VCS, например Subversion. Или, для любителей DVCS - Git/Mercurial/Monotone etc.

 

Ignatik
()

LISP и DSL

Форум — Development

Очень часто можно услышать заявления, что разработка удобных DSL'ей (а вернее EDSL'ей, так как сказки о ридере ими зачастую и остаются) и лисп созданы друг для друга.

И тут возникает WTF: а с хрена бы? Чем набор лисповских символов отличается от такого же набора в питоне, например? Какие преимущества пользователю DSL'я дает лисп?

Вопрос собственно разработки оставляем в стороне, макросы-шмакросы, все дела — это хорошо и понятно.

baverman
()

Главная Проблема Лиспа

Форум — Development

Надо признать, я солидарен с вот этим постингом в том, какая проблема у лиспа(и у Common Lisp в частности) на текущий момент является ключевой, и какая отталкивает от него разработчиков.

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

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

Взять вот такую простенькую, даже тупую, программку - GUI-морда к БД. На C# написать ее не составило совершенно никакого труда, и заняло это пару часов от силы. Но если попытаться сделать то же самое на лиспе, окажется что сделать это не так уж и просто - будет очень не хватать WPF, очень не хватать Entity Framework, да и даже банального интерфейса к ОС(для того чтобы сделать программу синглтоном). И это не говоря уже про Visual Studio и прочие инструменты типа Expression Blend, которые очень сильно упрощают разработку GUI и подобного.

Так к чему этот постинг вообще? Пишите библиотеки для лиспа, вот к чему! Я вот твердо уверен, будь у CL столько же библиотек, как у .NET, или, тем более, Java, то последними бы никто почти не пользовался.

http://love5an.livejournal.com/366931.html

Ignatik
()

[история узбека] Лисп крошит экономику

Форум — Development

Поставили партнёрам первую железку, стоит в датацентре NASDAQ.

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

Самую сложную часть написали на лиспообразном самописанном компиляторе, реализующем часть Коммон Лиспа (CLOS нет, но макросы остались :) и транслирующем в vhdl. Верификацию делали лиспом же, визуализация графа по тактам отлично через graphviz идёт (вывод в dot интегрирован в компилятор). Ошибок логических почти не было, а всяких vhdl-специфичных проблем вообще не было. Ошибками динамической типизации только хаскеллисты пугают, в реальной жизни они практически никогда не встречаются.

Компилятор и обвязку писало два занятых и другими вещами человека, времени потратили достаточно мало. Лиспообразный язык получился простой, даже лох типа меня может чего-нибудь наклепать :) Декларативная часть для генерации интерфейса ещё какой-то тайный смысл в себе несёт, а сама логика - ну чистый Коммон Лисп.

Я считаю, это реальный успех кластеров метапарадигм!

 

mv
()

[мифы и легенды] Java и «низкий уровень вхождения».

Форум — Development

Последнее время на ЛОРе только и слышишь, что-де «Java завоевала популярность исключительно благодаря маркетингу и низкому уровню вхождения». Давайте же, сознательно оставив за рамками дискуссии маркетинговые вопросы, разберемся природе распространенного мифа, каковым является вторая часть этого безапелляционного утверждения.

Сперва давайте полистаем спецификацию языка Java, третье издание. В книжке 684 страницы. Шестьсот восемьдесят четыре. (Если в этот момент у вас при словах «низкий уровень вхождения» начинается истерический хохот - не пугайтесь, это как раз свидетельствует о вашей нормальности; остальным же рекомендуется продолжить чтение.) Разумеется, многие могут парировать, что, мол, совершенно не обязательно читать всю книгу для того, чтобы начать программировать. Чтобы начать быдлокодить - возможно. Но чтобы начать эффективно решать задачи, используя для этого всю мощь языка - книжечку придется все-таки как следует полистать.

Ну, что же, спецификацию языка мы изучили. Что мы можем написать на Java? Да ровным счетом ничего, потому что мы еще не освоили работу со стандартной библиотекой или (иными словами, Java API). Стандартная библиотека Java версии 1.6 состоит чуть более чем из семи тысяч классов и интерфейсов и десятков тысяч методов. Предвосхищая повторное «и зачем надо въезжать во все 7000 сразу?» - отвечу, что таки да, пишущему десктопное приложение может не понадобиться какая-нибудь CORBA, а разработчику сетевых сервисов - Swing и так далее. Но если решаемая задача все же сложнее «Hello, World!», то ее предметной области будет соответствовать некое довольно объемное подмножество Java API, которое придется освоить в полной мере.

Вот мы и научились создавать desktop-приложения, несложные сетевые службы и middleware, работать с файлами и обрабатывать XML. Что же дальше? Давайте обратим наш взор на встраиваемые приложения, где Java давно прописалась, и с большим комфортом. Мобильные телефоны, PDA, set-top boxes, автомобильные компьютеры, диски Blu-ray - это все так называемая Java Microedition. Поскольку спектр устройств (и их возможностей) невообразимо широк, настолько же широк и спектр спецификаций («профайлов») JavaME, покрывающий их: CDC (Connected Device Configuration), CLDC (Connected Limited Device Configuration), MIDP (Mobile Information Device Profile), FP (Foundation Profile), PBP (Personal Basis Profile), PP (Personal Profile). Пусть каждый из «профайлов» и является подмножеством «старшего брата» (JavaSE), но каким именно подмножеством - потребуется изучить.

Наконец предположим, мы позволили себе замахнуться на Вильяма нашего Шекспира Корпоративную Информационную Систему. Что нас ждет в этом случае? А ждет нас изучение Java Enterprise Edition. В этом дивном новом мире нас ждут сервлеты и фильтры, JSP и JSF, Tomcat и GlassFish, JDBC и JPA, JCDI и JNDI, EJB, JTA, JMS, JAAS, JCE, JSSE, и много всяких прочих интересностей. Пытливый ум задаст вопрос: «А нафига мне весь этот блоат, если я хочу автоматизацию бизнеса? SQL в руки, и вперед!» - на что я отвечу ему следующее. Построение эффективной, производительной, масштабируемой, надежной и безопасной системы потребует задействования определенных, вполне известных техник. Техника «SQL в руки, и вперед» к ним не относится. Но вам повезло: большинство подобных техник уже реализовано для платформы Java, реализации имеют высокое качество и публикуются под свободными лицензиями. Большинство вышеприведенных аббревиатур имеют к ним прямое отношение. Это и реализации ORM/Persistence (Hibernate, EclipseLink), и контейнеры для трехзвенных приложений (GlassFish, JBoss), и веб-контейнеры (Tomcat), и кластерные коммуникации, и JMS message broker'ы, и так далее, и тому подобное. Поэтому для трезвомыслящего разработчика, который заботится о качестве продукта и о своем времени, путь один: изучать технологии, чтобы потом экономить время и повышать качество продукта. И да, это требует интеллектуальных и временнЫх вложений.

Резюмируя, скажу, что уровень вхождения, необходимый для написания хелловорлда, примерно одинаков для всех языков - от примитивного Visual Basic до зубодробительного Haskell. Для решения реальных задач потребуется поработать мозгами в любом случае. Для эффективного и продуктивного решения задач - придется поработать мозгами очень конкретно. В этом смысле Java дает некоторую поблажку разработчикам (по отношению к другим языкам), за счет огромного количества технологий, решающих подчас очень сложные инфраструктурные задачи (кластеризация, persistence, remoting и т.п.). Но это не отменяет необходимости их глубокого изучения (что, как правило, воздается сторицей).

Таким образом, утверждение о том, что «Java имеет низкий порог вхождения», выдает в заявляющем представителя одной из следующих категорий:

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

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

Kuka
()

[Java] Вопрос по генерикам образовался

Форум — Development

В Java есть подстановочные типы (wildcard type) и обобщенные классы (generic class). Первые выглядят примерно так <? [extends| super someClass]>, а вторые так <T [extends someClass]>.
По ходу у меня возникло несколько вопросов:
1) Насколько я понял из книжки Хорстмана они вообщем дублируют друг друга, позволяя писать независимый от типа код. Но не ясно какие у них отличия и в каких случаях лучше использовать подстановочные типы, а в каких обобщенные классы.
2) Зачем в случае подстановочных типов введены ограничения на супертипы <? super someClass> и подтипы <? extends someClass>, почему не реализовано аналогично «восходящему преобразованию» в обобщенных классах <T [extends someClass]> (т.е. почему нельзя читать и писать одной конструкцией)?
3) В разных изданиях Хорстманн описывает разное поведение подстановочных типов с ограничением на супертипы

For example, Pair<? super Manager> has methods

void setFirst(? super Manager)
? super Manager getFirst()
The compiler doesn’t know the exact type of the setFirst method but can call it with any object of type Manager, Employee, or Object, but not a subtype such as Executive.

Это противоречит его более раннему изданию, где в setFirst можно передавать Manager и Executive, но не их супертипы.
Одновременно у Эккеля аналогичная цитата:

the argument is now a List<? super T>, so the List holds a specific type that is derived from T; thus it is safe to pass a T or anything derived from T as an argument to List methods.

Кому, собственно верить?
4) Какая практическая польза от неограниченных подстановочных типов <?>? Я пока не вижу никакой, кроме проверки на null: с ними нельзя выполнять никаких других операций.

 

cab
()

[java] Генрики. Что я делаю не так?

Форум — Development

В продолжение этого. Написал пример, чтобы понять разницу между обобщенными типами (generics, <T>) и подстановочными выражениями (wildcards, <?>) Вопрос №1: почему List<Child> pl6 = makeList1(new Grandson()); ругается на несовместимые типы? Ведь в сигнатуре makeList1 уже прописан Child. Или такая конструкция хотя и задает ограничения на тип, но позволяет пихать в параметризированный контейнер только одинаковые типы List<Child> - только Child, в List<Grandson> только Grandson, но не позволяет создавать List<Parent>?
Вопрос №2: конструкция List<Child> pl2 = makeList(new Grandson(), new Child()); работает, хотя, насколько я знаю, не должна. может дело в сигнануре makeList()?
Вопрос №3: какие ереси и идеологически неверные косяки я допустил в примере?
Собственно сам пример:

import java.util.*;

class Parent{}
class Child extends Parent{}
class Grandson extends Child{}

class GenericsVsWildcards{
  static <T> List<T> makeList(T ... args){
    List<T> result = new ArrayList<T>(Arrays.<T>asList(args));
    return result;
  }
  static <T extends Child> List<T> makeList1(T arg){
    List<T> result = new ArrayList<T>();
    result.add(arg);
    return result;
  }
  public static void main(String[] args){
    /********* Wildcard tests ********/
    //Только указанный тип и наследники
    List<? extends Child> pl = new ArrayList<Child>(Arrays.<Child>asList(
                                                         //new Parent(), //Низзя
                                                         new Child(),
                                                         new Grandson()
                                                         ));
    //Получается, допустимы указанный тип и наследники
    List<? super Child> pl1 = new ArrayList<Child>(Arrays.<Child>asList(
                                                         //new Parent() //Тоже низзя, Эккель был прав 
                                                         new Child(),
                                                         new Grandson()
                                                         ));
    /********* Ceneric tests ********/
    //Так работает, хотя, в теории, не должно. Может быть из-за объявления Т не массивом?
    List<Child> pl2 = makeList(new Grandson(), new Child());
    //A так - нет
    //List<Child> pl3 = makeList(new Grandson());
    //List<Child> pl4 = makeList( new Child(), new Grandson(), new Parent());

    List<Child> pl5 = makeList1(new Child()); //Работает, как и ожидалось
    //List<Child> pl6 = makeList1(new Grandson()); //А так нет, хотя ожидалось
  }
}

 

cab
()

По Scheme учебников посоветуйте мне

Форум — Development

Собственно, сабж. Кидайте сюда названия книг по Scheme, которые вам понравились. Можно и на английском.

netcat
()

Несколько вопросов про Racket

Форум — Development

Пишу кое-что на Racket, возникло несколько вопросов. Первые 2 вопроса элементарные, но принципиальные. Я знаю множество способов для 1) и 2), но интересует самый верный и стандартный.
1. Как добавить элемент в конец списка? Да, не в начало, а в конец.
2. Как удалить i-ый элемент из списка?
3. Хочу, чтобы область видимости структуры распространялась только на 2 функции внутри модуля. Как это сделать?
4.

> (filter (lambda (x crap) (> x 2)) '(1 2 3 4 5))
filter: expected argument of type <procedure (arity 1)>; given #<procedure>
Стоит ли использовать типизацию таким образом в своем коде?
Пока все, вроде..
Спасибо.

kermzyxer
()

[bash] выбрать диапазон дат

Форум — Development

Есть файл вида:

09/13/11 23:59:51 251
09/13/11 23:59:52 193
09/13/11 23:59:53 210
09/13/11 23:59:59 187
Какой наиболее кошерный способ выбрать строки, попадающие в диапазон дат с учетом времени: писать скрипт или можно и штатными средствами?

 

cab
()

[java] снова memory leaks

Форум — Development

Здравствуйте!
Снова вопросы по memory leaks в java.
1. Смотрю графики в профилировщике YourKit - на что все-таки смотреть - на Old Gen, Survivor Space или Eden Space?

2. В приложении (запущен сервлет) используются static'и.
А точнее - static collections.

private static Map<String, MyClass> myclassMap;
Map заполняется при инициализации (порядка 1000 объектов класса MyClass). Плюс обновляется при очистке кеша. Я так понимаю, что раз map является static, то она делает static'ами все объекты, которые хранит?
Достаточно ли при обновлении будет сделать myclassMap = null ? Или делать myclassMap.clear()? Или пробегать по всей коллекции и каждый объект делать null?

Уточнение: Сейчас обновление статической hashmap делается так:
- myclassMap = null;
- создаем новую (не статическую) HashMap<String, MyClass> newMyClassMap = new HashMap<String, MyClass>();
- заполняем ее
- делаем myclassMap = newMyClassMap;
- newMyClassMap = null;

Как корректно очищать такие статические коллекции?

 

kovrik
()

Книгопечать - как?

Форум — Talks

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

Может есть какой сервис недорогой по книгопечатанию? Нагугливаются только профессиональные типографии с ценами от $50 за экземпляр.

Или можно это как-то в домашних условиях сделать? Формат А5, правильный порядок страниц, и какой-то переплет для этого дела. Есть старый ламповый HP Laserjet 1018, который, правда, двухстороннюю печать не поддерживает.

BobiKK
()

Почему yahoo store переписали с LISP на C++?

Форум — Talks

ну в общем это и есть мой вопрос. Пол Грехэм типа гордиться, как он мощно сделал этот самый магазин на лиспе, так что все конкуренты нервно курили в стороне. Но в 99 (или 98?) он ушел из яхи (которая сначала купила его разработку, а потом он пару лет там работал), а через несколько лет Яха полностью переписала с листа yahoo store на C++.

Что произошло? Кто в курсе?. Завел это в talks так как ожидаю некоторого флейма. Но надеюсь за интересной беседой все же понять в чем дело. Тем более у меня стоит конкретная задача о написании некоторого важного кода (некоторый простой и узко специальный code generator в язык C и FORTRAN) и рассматриваются кандидатуры языков сейчас активно. Среди них первые Питон и Лисп (именно в таком порядке) и я могу сильно повлиять на окончательный выбор - так как буду, видимо, серьезно определять куда двигаться в этом деле.

Предлагают альтернативу типа C++ и Java и если C++ я готов еще принять, то яву - нет (даже не из-за моих любимых templates, а просто я ее не знаю совсем). Так что, лисп, получается, не катит?

2Производитель вдов (WidowMaker): OCaml не предлагать, так как его я точно не могу ни пролоббировать ни навязать. У ключевых фигур в этой игре к ML стойкая неприязнь. :)

ЗЫ Модераторы, пожалуйста, будьте терпимее.

atoku
()

Стэнфорд расширяет список своих курсов в Интернете

Новости — Интернет
Группа Интернет

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

Началось всё весной, когда стало известно о готовящемся курсе Artificial intelligence (http://ai-class.org). Но уже осенью список курсов пополнился ещё двумя - Databases (http://db-class.org) и Machine Learning (http://ml-class.org).

Всё это нашло большой отклик как среди студентов (over 100k в AI классе, по 80+k в ML и DB), так и среди многих сетевых СМИ. Причём количество студентов на AI классе было настолько больше ожидаемого, что в последний день приёма нескольких первых домашних заданий сервера постоянно падали, что вызывало продление сроков сдачи, на радость студентам.

Отдельно стоит заметить, что студенты этих курсов несколько отличаются от среднестатистических студентов в нашей стране. Так, большинство записавшихся - старше 22, что ожидаемо. Но много и тех, кто старше 50, и даже 70 лет!

Но Стэнфорд решил не останавливаться на достигнутом, и сегодня объявил о расширении списка классов, которые будут доступны в Январе 2012 года. Так, новые классы включают в себя:

Это прекрасная возможность улучшить свою подготовку в самых разных востребованных сегодня CS областях, и получить знания от людей, многие из которых являются признанными экспертами в своей области.

>>> Подробности

 

roy
()

[Java] отчетеги

Форум — Development

Надо генерить отчеты. Требования следующие:
1) В большинстве случаев результат подойдет в виде PDF. Но есть особые случаи, когда отчет надо править руками. Их мало, но они важны. В этом случае надо выгружать в текстовый процессор или электронную таблицу и там править.
2) Чтоб нетривиальную логику отчета можно было вынести в java (или jython, как вариант) и уже оттуда формировать весь или часть отчета.

Что посоветуете? Я обдумывал odftollkit или POI, но первый не подойдет т.к. файл с отчетом может уходить за пределы предприятия и несть ненулевая вероятность, что его не откроют, а надеяться на сознательность конечных юзеров не хочу. С POI тоже, кажется, есть проблемы: насколько я помню, ОпенОфис имел проблемы с корректным открытием сгенерированных ним документов. А у нас ОО много.

 

cab
()

Посоветуйте мурзилку по вебдеву

Форум — Development

Python, небольшое веб-приложение, уровень знаний исполнителя близок к 0, слова вроде Ajax, CSS и XHTML знакомы только на уровне расшифровки аббревиатур. Больше всего интересует вопрос, как собрать стенд для отладки всего приложения - JS в браузере и Python на стороне сервера.

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

tailgunner
()

Emacs. Автоотступы и 80 символ.

Форум — Development

Друзья, вы можете меня материть как угодно, но гугл не хочет помогать.

В общем emacs я использовал года 2 назад и помню что там у меня были нормальные автоотступы( при нажатии на Enter после открывающей скобки курсор переходил наследующую строку и перемещался на 1 уровень табуляции правее текущего). Сейчас я бьюсь над этой проблемой второй день и не могу найти как сделать такие автоотступы, какие были. При нажатии Enter курсор перемещается в самое начало следующей строки и приходится после каждого Enter жать Tab, что не радует.

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

Собственно хотелось бы узнать как сделать вменяемый автоотступ и выделить 80-символьную границу. Что-то не верится что для включения одной базовой функции любого современного программерского редактора, в Emacs придется исписать полсотни строк кода, а вторую вообще включить не удастся.

Если что Emacs 24.0.92.

Dikar
()

Lisp Книга

Форум — Development

Здравствуйте, я имел опыт общения с Хаскелем, функциональное программирование понравилось. Много наслышан о Лиспе, хочу его попробовать. Посоветуйте, пожалуйста, книгу по Лиспу на русском.

Aswed
()

ScalaQL, ассиметричный ответ на LINQ

Новости — Java
Группа Java

Даниэл Спевак и Тьян Жао представили библиотеку ScalaQL для языка Scala, предоставляющую возможность заменять ORM на SQL-подобные конструкции языка запросов, подобного LINQ.

>>> Подробности

 , , ,

Karapuz
()

Spring Framework 2.5

Новости — Java
Группа Java

Компания SpringSource, которая недавно сменила название с Interface21, выпустила новую версию своего OpenSource-фреймворка "Spring". Это один из самых мощных легковесных каркасов для разработки на Java/J2EE.

Основные особенности:

  • поддержка Java 6.0 и J2EE v.5;
  • поддержка аннотаций (начиная от Dependency Injection, заканчивая контроллерами в MVC Spring);
  • заметное улучшение производительности.

Spring лицензируется под Apache Software License, Version 2.0

>>> Подробности

iZEN
()