Здравствуйте, CrazyPit, Вы писали:
CP>Это как так не обратишься? Весь коммон лисп доступен внутри определения макроса.
Можно пример того как обратиться именно к подсистеме семантического анализа из макроса? Ну, хотя бы как узнать фактический тип парамерта?
CP>Проверить тип соответсвующей функцией.
CP>
И где здесь проверка типа? Причем тут атом не атом? Это операция над АСТ. А я говорю об операции над АСТ аннотированном типами. Наример, твоей атом может быть числом. Или х может быть функцией возвращающей целое. Как это проверить? Я думаю, что это не возможно хотя бы потому, что язык не обязывает указывать типы и функция до применения вообще не знает что ей прийдет в качестве параметра. Тут мог бы помочь вывод типов. Например, если параметр функции испльзуют как функцию и результат складывают с целым, то можно сделать предположение о том, что х — это функция "() -> int". Но ты сам сказал, что вывод типов не поддерживается.
В Немерле же ты вообще можешь влесь в любую фазу компиляции и получить любую информацию. О типе параметра, о типе выражения. О возможных приведениях типов... Короче о всем о чем в этом месте может знать компилятор.
Как я понимаю Лиспу это в принципе не грозит. Его макросы — это преобразование S-выражений. Для него программа — это данные, т.е. AST без аннотации типов.
VD>>Как видишь, особых проблем нет. Более того получается в сто раз понятнее. Причем без специальной дрисеровки пользователя.
CP>Мне понятнее в лиспе
Рад за тебя. Вернее за вас... за всех... пятерых.
CP>Дело привычки. Расширить язык это одно. Но более важная задача макросов — эффективные высокие абстракции. А вот здесь манипуляция с кодом может быть намного сложнее.
На фиг такие привычки. Наа фиг!
Я не хочу привыкать бриться топором даже если очень универсально. И не хочу привыкать спать в холодной комнате даже если это сэкономит мне 50 баксов в месяц. Я предпочитаю вычислять выражения так как это делал в школе, а не в польской натации. Я не хочу видать море скобок. Я не хочу представлять себе структуры данных в голове. Я хочу видеть эти стркутуры описанными и иметь у них осязаемые поля. В общем, я не хочу убогсти. Я хочу удобства. А Лисп это убогость приносящая удобство в жертву универсальности.
VD>>Что означает "анофорических"?
CP>Типа местоимение. Мы обозначаем it как местоимение (задавая ему некое значание из выражения например) и можем использовать его в теле. В других языках это вообще нет.
Хм. Ты уверен, что нет? И уверен, что если нет, то оно нужно?
Например Рбивские и Смолтоковские декларации параметров для анонимных блоков — это не одно и то же? Например:
list.each { x | x * c }
И какая разница тут с разными def-ами или let-ами?
CP> Но это только пример.
А зачем оно?
CP>>>
CP>>>(awhen (compr x y)
CP>>> (blah it))
CP>>>
CP>>>раскрывается в
CP>>>
CP>>>(let (it (compr x y))
CP>>> (when it
CP>>> (blah it))
CP>>>
VD>>Не въехал, а что тут необычного?
CP>На немерле такого не сделаешь. Гигиеничность макр не позволяет.
Ты не суди о том что не изучил. Ты обясни суть, и вместе разберемся можно ли, нельзя ли. И если нельзя, то чего мы лешаемся. Я пока что вижу гордость хнен знает чем.
Что это дает? Какие задачи позволяет решать?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, CrazyPit, Вы писали:
CP>Смысл ООЧЕНЬ большой — REPL тестирование. Без него уже часто процесс разработки становиться мукой.
Ты меня конечно извени, но ты IDE порядошную видел? Нахрена мне мне вообще интерпретатор если я могу прямо во время выполнения программы править ее код? Или во время разработки протестировать функцию.
В общем, ты привык к "псевдо Юникс-лайк" стилю. Он возник от убогости. И то что в его рамках кажется очень важным и необходимым, на самом деле, при некоторых условиях, на фиг не унжно.
Погляди для разнообразия как можно работать в VS 2005 или в IDEA. Думаю, что когда въедешь во все возможности, то поймешь о чем я говорю.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали: VD>А, ну, да. Нам среда не нужна мы и так крутые. В таком случае и говорим перед рекламой, что так вот и так. Я фанат консоли и всего приметивного.
Опять передергиваешь.
Внимательно читая сообщения, мог бы заметить, что человек начинавший пограммировать с "интегрированных сред", 12 лет программировавший только в интегрированных средах (и из них лет 6 в MS VS) не может быть фанатом консоли.
А если уж склоняется к уходу в эту сторону, то видать имеет для этого весьма основательные причины.
( Отчасти ты напоминаешь мне меня самого, лет десять назад... )
VD>Смешно. Пересометрия в чистом виде. Иди сравни это БД-сервер с поставляемым в составе студии MS SQL Server 2005. Боюсь без полного отрешения от жизни серьезным такое сравнение назвать будет сложно.
Гм... сейчас как раз перевожу под мнезию один проект, который в первой версии был под MS SQL Server 2000.
Продукт пока в работе, но поскольку данные конвертнули из старой базы (то есть база заполнена) о поведении мнезии уже можно судить.
Во-первых, число таблиц сократилось примерно в 3 раза. За счет более гибких типов данных мнезии. Соответсвенно упростились многие алгоритмы.
Во-вторых, быстродействие увеличилось в среднем в 1,5 раза. И это при том, что мнезия сейчас работает не над BerkleyDB backend (это у нас резерв быстродействия на всякий случай).
Во-третьих, быстродействие наиболее критичных алгоритмов повысилось примерно в 2,5 раза. Правда, для этого они были переведены с языка запросов QLC на прямые вызовы мнезии, так что для сравнения СУБД их рассматривать не стоит.
В целом могу сказать, что я достаточно хорошо отношусь к MS SQL. Даже к 2000 (Могу поверить, что 2005 еще круче).
Кстати, доступ из erlang-а к MS SQL существует и достаточно удобен. Однако использование его не рассмаривается по коммерческим причинам (требуется выйти на низкую стоимость тиражной лицензии).
EXO>>- хорошо интегрирующийся с сервером приложений мощный web-сервер. С поддержкой полного комплекта средств для создания web-сервисов.
VD>Видимо у остальных языков интеграция плохая.
У .Net языков хорошая интеграция с IIS. Они тоже части одной платформы.
А вот у не-дотнетовских perl и python интеграция с IIS уже куда хуже. Уже одно то, что IIS не может связывать подгруженные интерпретаторы этих языков с логическим сеансом пользователя резко снижает качество интеграции.
Так что эта самая "интеграция" далего не одинакова для разных сочетаний язык Х веб-сервер.
Так вот, у ерланга и идущего с ним веб-сервера она на том же уровне, что и у .Net языков с IIS.
VD> В общем, песня старая. Жаль не доказанная и опровергаемая кучей реальных решений.
Микорософт умеет хорошо рекламировать свои средства разработки. Это умение за ними безусловно следует признать.
А потому проектов на .Net естественно больше. Но вот по моим наблюдениям, процент качественных среди них — заметно ниже.
VD>Да уж. Куда там таким вещам как метапрограммирование в Скале и Немерле,
Просто метапрограммирование — вне рассмотрения, оно и в базовом ерланге есть.
Интересна именно мощность средств лексера и парсера. А так же их "интллектуальность" (то есть на сколько они готовы брать стандартный BNF, без "доработки напильником").
VD> или построителям парсеров вроде АНТЛР или КокаР.
За "наводку" — спасибо. На досуге посмотрю подробнее.
EXO>>Так что мы имеем дело именно что с прикладной платформой, а вовсе не просто с "языком общего назначения". VD>Я бы сказал больше. С платформой заточеной под конкретные задачи.
Можно сказать и так. Только круг задачь похоже даже шире, чем изначально задумывался Эриксончиками.
Что в него входит, а что нет — надо смотреть.
VD>Хм. Дотнет по мне так сильно универсальнее.
Это пока несколько спорный вопрос, поскольку круг задачь эланг-платформы быстро расширяется.
Скорее всего, эти круги будут накладываться лишь частично.
Возможно даже у .Net-а поширше будет. Ну и что? Хорошо, что есть из чего выбирать.
VD> Это именно что платформа.
Разумеется. Одна из. Пусть даже весьма распространенная.
EXO>>Предположим я здесь с тобой даже и согласился бы... ну и что? EXO>>Собственно а что остается, если мы не будем обращать внимания на тесты? Толко реальные продукты. VD>Да думать нужно своей головой. А тесты можно и самому сделать.
Именно.
А самый лучший тест — реальные продукты.
EXO>>Так что тогда мы возвращаемся к сообщениям gandalfgrey о разработанной им системе, которая пришла на смену C++ версии. И заказчикам, которые (на сколько мне известно) успешно покупают обновления. VD>Он явно применял С++ там где не следовало.
На сколько я понял из его слов — C++ применял не он.
А что бы ты ему предложил? Перевести проект с C++ на .Net? На сколько я слышал, там часть узлов это микроPC на I486 с 64 Мб оператива, а часть моторолловские микрокомпы. Каково там будет .Net-у? Или ты предложил бы ему писать 2 (3) разных варианта одного и того же приложения?
Кстати — вот тебе сразу несовпадение нишь...
То, что я выше писал про коммерческую неприемлимость использования MS SQL — другое несовпадение...
Так что не стоит говорить, будто .Net такая уж универсальная, что закывает все пространство задачь.
VD>Для этого достаточно пред тем как рассказывать убрать сопли и постораться быть непредвзятым. Но видимо такова уж природа человека, если он чем-то сейчас увлечен, то смотреть без предвзятости он уже не может.
И что тебя все так тянет переходить на личности? Привык общаться с неуравновешенными субьектами?
Мог бы уже заметить, что я просто использую твою агрессивность, как повод, чтобы рассказать людям про erlang...
Впрочем, если хочешь, можешь продолжать в том же духе.
VladD2 wrote: > Если я все правильно понял, то на Нэмерле можно все тоже самое и намного > болше. А главное роще, предсказуемее и удобнее.
В больше — позвольте не поверить, если пользоваться макросами в полную
мощность, то, вероятно столько же — макрос может делать любое вычислимое
преобразование. Предсказуемость зависит при этом от того, насколько в
этот момент ближе один язык, чем другой. Про удобнее поверю легко.
VladD2 wrote: > Здравствуйте, CrazyPit, Вы писали: > > CP>Смысл ООЧЕНЬ большой — REPL тестирование. Без него уже часто процесс > разработки становиться мукой. > > Ты меня конечно извени, но ты IDE порядошную видел? Нахрена мне мне > вообще интерпретатор если я могу прямо во время выполнения программы > править ее код? Или во время разработки протестировать функцию. >
Тогда IDE можно использовать как интерпретатор. Для тех языков, для
которых это поддерживается. И как REPL. > В общем, ты привык к "псевдо Юникс-лайк" стилю. Он возник от убогости. И > то что в его рамках кажется очень важным и необходимым, на самом деле, > при некоторых условиях, на фиг не унжно. > > Погляди для разнообразия как можно работать в VS 2005 или в IDEA. Думаю, > что когда въедешь во все возможности, то поймешь о чем я говорю.
Так, как Вы говорите — это просто другой интерфейс для того же в
сущности действия — запустить три функции отдельно от программы.
Ну а кроме того, меня часто интересует одноразовая функция — когда
результат будет оставлен, а код заведомо выкинут.
VladD2 wrote: > Здравствуйте, raskin, Вы писали: > > R>Вопросы: Немерле отделим от дотнета? > > Приципиально — конечно. Язык есть язык. Лисп тоже под дотнетом чувствует > себя отлично. > Рельно — нет. Он под него создавался.
Жаль. Вот будет отделим... А то ставить dotGNU или Mono совсем неохота.
Хотя должен работать под Mono, можно посмотреть. > > R> Имеет интерепретатор? > > Да — http://nemerle.org/Nemerlish. Но не вижу в этом смысла.
"Пусть это сделают другие" — то, что я не собираюсь сохранять, пусть
компилируется без моих активных действий (кроме ввода этого). > > R> Позволяет > R>использовать весь язык без ограничений в описаниях макросов? > > Они на нем и пишутся.
Без ограничений? Это радует, хотя и естественно. > > R>Хотелось бы нет-да-да. И поставить на наладонник вместо схемы.. > > Почему бы и нет. Незнаю нафиг прада нужны средства разработки на КПК
А зачем он нужен, если на нём даже посчитать ничего нельзя? IDE мне не
нужна, интерпретатор хоть какой-нибудь. Без этой возможности
неинтересно. Но тогда ему CompactFramework нужен, если его (CFw) вообще
хватит. Интересно, не захочет ли он установленную консоль.. Судя по
сайту, если я этим займусь — все шишки мои. > > R> И бросить писать свою обёртку над Си с целью иметь синтаксис Паскаль, > R>компилятор от Си и макросы от Лисп. > > Незнаю нафиг нужен синтаксис от Паскаля, но можешь попробывать.
В Паскаль все односимвольные опечатки не в именах переменных, которые я
когда-либо делал, мешают компиляции. В Си одну такую я искал очень
долго. Больше я на этом (надеюсь) так не попадусь, но осадок... Ну и
выглядит Паскаль на мой вкус лучше.
Здравствуйте, VladD2, Вы писали: VD>Ты не суди о том что не изучил. Ты обясни суть, и вместе разберемся можно ли, нельзя ли. И если нельзя, то чего мы лешаемся. Я пока что вижу гордость хнен знает чем.
VD>Что это дает? Какие задачи позволяет решать?
Код
myif(long_experssion)
{
do_something1(it);
do_something2(it);
}
преобразуется во что-то вроде
{
int it=long_expression;
if(it!=0)
{
do_something1(it);
do_something2(it);
}
}
long_expression,do_somthing1,do_somthing2 - произвольные выражения.
Переменная it фиксирована.
Это можно кратко сформулировать — если что-то не 0 то сделай с ним (it)то-то и то-то....
Такое можно сделать?
Здравствуйте, VladD2, Вы писали:
VD>И где здесь проверка типа? Причем тут атом не атом? Это операция над АСТ.
Атом это пример, можно проверить любой тип входного выражения.
VD>А я говорю об операции над АСТ аннотированном типами. Наример, твоей атом может быть числом.
(defmacro a (x)
(if (typep x 'fixnum)
...)
Или ещё лучше:
(defmacro a (x)
(check-type x fixnum)
`(....))
VD> Или х может быть функцией возвращающей целое.
Ну да по без расширений никак.
VD>В Немерле же ты вообще можешь влесь в любую фазу компиляции и получить любую информацию. О типе параметра, о типе выражения. О возможных приведениях типов... Короче о всем о чем в этом месте может знать компилятор.
Дык в лиспе тоже, только в компиляторе лиспа нету понятия тип функции.
VD>Как я понимаю Лиспу это в принципе не грозит. Его макросы — это преобразование S-выражений. Для него программа — это данные, т.е. AST без аннотации типов. Но он может проверить структуру этого T и типы отдельных вершин этого Т,
CP>>Дело привычки. Расширить язык это одно. Но более важная задача макросов — эффективные высокие абстракции. А вот здесь манипуляция с кодом может быть намного сложнее.
VD>На фиг такие привычки. Наа фиг! :) VD>Я не хочу привыкать бриться топором даже если очень универсально. И не хочу привыкать спать в холодной комнате даже если это сэкономит мне 50 баксов в месяц. Я предпочитаю вычислять выражения так как это делал в школе, а не в польской натации. Я не хочу видать море скобок. Я не хочу представлять себе структуры данных в голове. Я хочу видеть эти стркутуры описанными и иметь у них осязаемые поля. В общем, я не хочу убогсти. Я хочу удобства. А Лисп это убогость приносящая удобство в жертву универсальности.
Как раз удобство очень большое. Оно в возможности создания произвольных абстракций. Не обязательнонужно привязывать себя к каким-то "низкоуровневым" понятиям типа "класс", "объект". Можно бытро создать свой язык для конкретной задачи и выражатьсы уже на нём. Вот пару примеров:
Пользуясь языком без такой системы макропрограммирования, пришлось бы писать описание например на XML, а потом писать обработчик. Здесь же этот код во время компиляции преобразуеться в функции функции лексического анализа.
VD>>>Что означает "анофорических"?
CP>>Типа местоимение. Мы обозначаем it как местоимение (задавая ему некое значание из выражения например) и можем использовать его в теле. В других языках это вообще нет.
VD>Хм. Ты уверен, что нет? И уверен, что если нет, то оно нужно? VD>Например Рбивские и Смолтоковские декларации параметров для анонимных блоков — это не одно и то же? Например: VD>
товарищ raskin хорошо написал об этом.
VD>Ты не суди о том что не изучил. Ты обясни суть, и вместе разберемся можно ли, нельзя ли. И если нельзя, то чего мы лешаемся. Я пока что вижу гордость хнен знает чем.
Там гигиенические макры, я почитал. Так что нельзя как угодно код преобразовать. Т.е. например чтобы символ введёный в теле макра, не может быть внутри кода переданного в макр.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, CrazyPit, Вы писали:
CP>>Смысл ООЧЕНЬ большой — REPL тестирование. Без него уже часто процесс разработки становиться мукой.
VD>Ты меня конечно извени, но ты IDE порядошную видел? Нахрена мне мне вообще интерпретатор если я могу прямо во время выполнения программы править ее код? Или во время разработки протестировать функцию.
Да, извеняюсь, имелося ввиду не интерпретатор, а способ вызвать функции отдельно во время разработки, конечно это можно сделать и без интепретатора, но удобнее имхо через некое приглашение командной строки (типа интерпретор), хотя это может быть и компилятор с таким интерфейсом, как это сделано в SBCL.
VD> во время выполнения программы править ее код
в CL так разработка ведёться всегда.
VD>В общем, ты привык к "псевдо Юникс-лайк" стилю. Он возник от убогости. И то что в его рамках кажется очень важным и необходимым, на самом деле, при некоторых условиях, на фиг не унжно.
Ты прав я привык к юникс стилю разработки и нахожу его весьма удобным.
VD>Погляди для разнообразия как можно работать в VS 2005 или в IDEA. Думаю, что когда въедешь во все возможности, то поймешь о чем я говорю.
VS05 и IDEA не видел. Возможно они чем-то радикально отличаються от других подобных IDE, но другие меня как-то не впечатлили.
Здравствуйте, VladD2, Вы писали:
VD>Ага. Средняя температура по больнице всегда 36.6.
Именно так. Незачем ориентироваться на тормозов или гениев.
VD>Дык вот и хотелось бы увидить обоснование того, что реальная система на Шарпе (к примеру) не может быть усойчивой и надежной.
Запросто ! Пример хоть одной системы повышенной надежности, с временем простоя порядка единиц секунд в год
VD>А в чем выражается выразительность? Не уж то в минимализации количества закорючек на экране?
И в этом тоже. Производительност программера выражается в количестве строк в день, и слабо зависит от языка, на котором он ваяет продукт. Сие медицинский факт, подтвержденный многочисленной статистикой. Поэтому — чем выразительнее язык, тем более компактный код он позволяет создавать, и тем больше смысловых единиц ( не LOC ) получается в единицу времени
Здравствуйте, CrazyPit, Вы писали:
CP>Здравствуйте, VladD2, Вы писали:
VD>>И где здесь проверка типа? Причем тут атом не атом? Это операция над АСТ.
CP>Атом это пример, можно проверить любой тип входного выражения.
Нет речь о том чтобы проверять тип аргумента макроса. Не куска кода ( это конечно же будет список или символ )a какому типу этот кусок кода будет соответствовать в лексическом окружение в котором вызван макрос.
Другими словами как по объекту &environment и коду — определить тип
Здравствуйте, VladD2, Вы писали:
VD>Кто такой Тикль?
это TCL, скриптовый такой язык, лишенный даже намека на синтаксис
VD>Полезной? Не сказал бы. Но мы говорим о скорости. Общая производительность в конце концов завист от той что ты называшь "сырой".
Очень слабо зависит. Есть гораздо более весомые факторы
VD>Я подхожу к вопросу сопоставления уровня языка и производительности кода так. Если язык с более высоким уровнем позволяет решить задачу которую уже затруднитеьно решать на более нискоуровневом языке и при этом производительности достаточно, то все ОК. Но если я имею язык сравнимый по уровню с тем первым, и при этом обеспечивающий производительность сравнимую с тем вторым. И передо мной стоят задачи кторые или вообще не пригодны для решения с производительностью первого или просто желательно чтобы результат был быстр, то и думать не чего.
А где это такой язык ? Пальцем, пожалуйста, покажите ! То, что это не Сшарп и не Ява, понятно...
VD>"Нежалуюсь" это не предсказание. Это просто твои задачи не стольк требовательны к процессору. Или пакетные и тебе пофигу сколько они выполняются.
Вообще-то мягкий реалтайм в большинстве случаев
VD>И int, и обработку объектов, и вообще все. Но для этого пришлось бы всерьез задуматься над тем о чем я говорю — о декларации типов и о выводе типов. И самое смешное, что такие языки есть. Кроме скорости они еще обеспечивают большую однозначсть, что дает выигрышь и в других местах.
У них другого не хватает, к сожалению
Здравствуйте, CrazyPit, Вы писали:
CP>Мне тут посоветовали в качестве самообучения написать движок MUD-a на erlange. Кстати может ещё тут кто что посоветует написать на эрланге в 3-4 KLOC для самообучения?
Хорошей идеей было бы написать компилятор маленького скриптового языка. Или биндинг к какому-нибудь симпатичному гую. Для GTK+, wxwindows и TCL уже есть...
VD>Из чего можно сделать вывод, что VC похож тоже избавляется от концевой рекурсии. Ну, и что скорость дотнетного кода очень близка к скорость порождаемой C++-ными компиляторами.
VC может еще лучше оптимизировать, достаточно добавить строчку #pragma inline_recursion(on) и у меня вместо 0.703000 становится 0.343000
Здравствуйте, gandalfgrey, Вы писали:
G>Здравствуйте, CrazyPit, Вы писали:
CP>>Мне тут посоветовали в качестве самообучения написать движок MUD-a на erlange. Кстати может ещё тут кто что посоветует написать на эрланге в 3-4 KLOC для самообучения? G>Хорошей идеей было бы написать компилятор маленького скриптового языка. Или биндинг к какому-нибудь симпатичному гую. Для GTK+, wxwindows и TCL уже есть...
В этих задачах сложно раскрыть главное приемущество эрланга. Хотелось бы написать какую-нибудь распределённую систему.
Здравствуйте, CrazyPit, Вы писали:
CP>В этих задачах сложно раскрыть главное приемущество эрланга. Хотелось бы написать какую-нибудь распределённую систему.
Тогда действительно — распределенную игрищу. Можно даже шашки на 8-угольной доске.
Можно и рисовалку сетевую. Но это очень уж просто, конечно.