Re[4]: Насколько актуален сегодня Tcl?
От: Изя Рнет Беларусь  
Дата: 25.11.08 12:25
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, Рысцов Денис, Вы писали:


РД>>Здравствуйте, Сергей, Вы писали:


С>>>Лично я считаю, что Tcl/Tk мёртв и практически невостребован ... Если ориентироваться только на Windows, то можно вместо скриптов выбрать C# и писать нужное на нём. .Net сегодня это одна из наиболее востребованных платформ.


РД>>Tcl только кажется мертвым, работая в мотороле и компании, занимающейся ip-телефонией, работал на tcl — в первой пришлось его изучить, так как занимался поддержкой существующего кода,


N>Кошку программировать? Да, там он незаменим. В остальном смысла в нём таки мало.


Не только кошку. Tcl — scripting language of choice много где. На вскидку — ANSYS, Ixia, Agilent. Ну и cisco, где tcl не уже ограничивается IVR-скриптами, а метастазировал в общий язык автоматизации на сетевом элементе.
Re: Насколько актуален сегодня Tcl?
От: Oboltus  
Дата: 14.03.09 18:35
Оценка:
Год назад потребовалось добавить в существующую C++ программу (мат. моделирование) скрипты. Искал скриптовый движок по следующим критериям:

— умеет встраиваться в программу (на уровне бибиотеки или исходного кода, я использую последнее);
— набор встроенных команд может расширяться процедурами, написанными на C/C++;
— кроссплатформенный (точнее, Linux + Windows);
— наличие стандартной библиотеки, в частности: статистика, работа со списками, работа с файлами.

Ничего лучшего Tcl не нашёл. Теперь в моей программе критические по времени функции написаны на C++, а разнообразная обвязка и логика эксперимента — на Tcl. Я, правда, использую минимум от возможностей Tcl, но мне пока хватает, а само наличие возможностей (например, полноценные сетевые функции) греет душу.
Re[6]: Насколько актуален сегодня Tcl?
От: dmz Россия  
Дата: 15.03.09 04:38
Оценка:
MC>Раз Вы знакомы с tcl/tk — может, ответите на мой вопрос? В чем их объективные преимущества перед python+wx,

Я вот могу сказать за WX. Дизайн WX чрезвычайно напоминает дизайн MFC, и что-либо писать на ней крайне неприятно.
Таже FLTK гораздо приятнее, рискну предположить, что на Tcl/Tk все это получится еще менее многословно и меньшим
количеством ненужных деталей.

MC>например. Или хотя бы в чем преимущество tk перед другими гуями? Перед gtk, например. Или перед wx. У меня сложилось ощущение, что Tk чем-то хорош, MC>но чем — я так и не понял.


wx — вовсе не подарок. Его главное преимущество в том, что он использует нативные контролы под каждой платформой, чего не скажешь ни о GTK ни о Qt.
Плюс лицензия LGPL. Так что иногда это просто единственный выход.
Re[6]: Насколько актуален сегодня Tcl?
От: dmz Россия  
Дата: 15.03.09 04:42
Оценка:
MC>Раз Вы знакомы с tcl/tk — может, ответите на мой вопрос? В чем их объективные преимущества перед python+wx, например.

И кстати, DSL на питоне делаются очень плохо. Почти никак не делаются. Судя по тому, что thesz писал про тикль, там это
делается лучше.

Тикля не знаю, но зато знаю, в чем слабые места питона
Re[7]: Насколько актуален сегодня Tcl?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 15.03.09 08:52
Оценка:
Здравствуйте, dmz, Вы писали:


MC>>Раз Вы знакомы с tcl/tk — может, ответите на мой вопрос? В чем их объективные преимущества перед python+wx, например.


dmz>И кстати, DSL на питоне делаются очень плохо. Почти никак не делаются.


?

http://74.125.113.132/search?q=cache:Mql1EGO1X-oJ:www.livelogix.net/logix/+logix+python&cd=1&hl=ru&ct=clnk — смотрел? (сам сайт сейчас лежит, поэтому дал ссылку на гуглокэш).

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[8]: Насколько актуален сегодня Tcl?
От: dmz Россия  
Дата: 17.03.09 04:24
Оценка:
KV>http://74.125.113.132/search?q=cache:Mql1EGO1X-oJ:www.livelogix.net/logix/+logix+python&cd=1&hl=ru&ct=clnk — смотрел? (сам сайт сейчас лежит, поэтому дал ссылку на гуглокэш).

То, что сайт лежит, это само по себе плохо. Но думаю, что DSL на самом языке, в стиле Хаскелла или Руби, на питоне не сделать, синтаксис языка много не позволит.

Одно из лучших приближений к DSL, что я видел — в проекте FacesPM. Там они задают структуру проекта в виде питоновских структур — например, так:

def task1():
   name      = "Треп в форуме"
   start     = "2009-03-17 07:00"
   duration  = "1h"

def task2():
  name = "Завтрак"
  depends = [task1]  # условно, тут не помню


и используют сам питон, что бы это разобрать и построить дерево заданий. Но это не настоящий DSL на самом языке — тут они таким образом просто съэкономили на парсере (обалдеть экономия). Т.е. они разбирают питоном этот код, совершенно бессмысленный, как программа, самим питоном, строят какое-то дерево, и потом его обсчитывают. Сам этот код не запускается и не выполняется.

В "настоящем" же "внутриязыковом" DSL — этот код бы исполнялся и приводил к построению дерева и/или еге пересчету.
Re[9]: Насколько актуален сегодня Tcl?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 22.03.09 00:51
Оценка:
Здравствуйте, dmz, Вы писали:

KV>>http://74.125.113.132/search?q=cache:Mql1EGO1X-oJ:www.livelogix.net/logix/+logix+python&cd=1&hl=ru&ct=clnk — смотрел? (сам сайт сейчас лежит, поэтому дал ссылку на гуглокэш).


dmz>То, что сайт лежит, это само по себе плохо. Но думаю, что DSL на самом языке, в стиле Хаскелла или Руби, на питоне не сделать, синтаксис языка много не позволит.


В стиле Ruby: http://code.activestate.com/recipes/534150/

dmz>В "настоящем" же "внутриязыковом" DSL — этот код бы исполнялся и приводил к построению дерева и/или еге пересчету.


Есть неплохая презенташка, описывающая возможности python по реализации встроенного DSL: http://media.brianbeck.com/files/Python_DSLs_I.pdf

Так что, по-моему, в пайтоне все не так уж и плохо

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[10]: Насколько актуален сегодня Tcl?
От: dmz Россия  
Дата: 22.03.09 04:26
Оценка:
dmz>>В "настоящем" же "внутриязыковом" DSL — этот код бы исполнялся и приводил к построению дерева и/или еге пересчету.

KV>Есть неплохая презенташка, описывающая возможности python по реализации встроенного DSL: http://media.brianbeck.com/files/Python_DSLs_I.pdf


KV>Так что, по-моему, в пайтоне все не так уж и плохо


Хороший DSL не должен быть засорен артефактами своего host-языка, потому что пользователь этого DSL не обязан знать хост-язык. Грубо говоря, на питоне есть примерно два подхода к "внутренним" DSL — на уровне классов и на уровне (перегруженных) операторов. Можно как-то объединить.
Перегруженные операции еще где-то как-то катят в конструировании SQL запросов, как это сделано в SQLAlchemy. Но для описания какой-нибудь предметной области уже как-то не очень.

Ну возьму вот из нашего тулкита описание web-форм, по моему хороший пример, демонстрирует оба подхода сразу, и я думаю, это близко к пределу того, что можно сделать на самом питоне:

# строим валидатор запроса:

    class add_trip_rq(object):
        trip_name            = not_empty()&not_space()&has_len(max=200, min=0)
        planned_start_date   = is_date() & not_empty()
        planned_start_hour   = is_int()  & not_empty() & less(24)
        planned_start_minute = is_int()  & not_empty() & less(60)
        planned_length       = time_shift() & not_empty()
        route_id             = is_int()  & not_empty()
        obj_id               = is_int() & not_empty()
        max_speed_inst       = is_float()
        min_speed_avg        = is_float()
        max_temperature      = is_float()
        min_temperature      = is_float()

# используем валидатор запроса (это что бы было понятно, зачем все это):

    @render(raw=True)
    @permission('Edit trip')
    @validate_form(add_trip_rq) # вот тут оно проверится, и отстрелит ошибку, так что можно в коде даже не заморачиваться.
    def do_add_trip(self):
        fd = Form_Data(self.request.form)
        fe =  Form_Errors(self.form_errors)
        # бла-бла-бла


Теперь разбираем пример:

class add_trip_rq(object) <- засоренность артефактами языка. Что такое вообще class, object ? WTF?

trip_name = not_empty() & not_space() & has_len(max=200, min=0) # <- довольно логично, но присутствуют артефакты - () - вызов функций.


Как надо (условно, ну допустим DSL имеет близкий к питону, двухмерный синтаксис):

request add_trip:
    field trip_name : string & not_empty & not_space & (length > 0 & length < 200)
    # ну и так далее


Конечно, тут в силу простоты предметной области, хилость питона не так уж очевидна. Но в более сложных случаях, как например, описание структуры проекта — все это вылазит в полный рост.

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

В пайтоне все плохо. Мало того, что выразительность принесена в жертву производительности, так жертвы не хватило, достаточно посмотреть на
lua + metalua что бы это понять.
Re[11]: Насколько актуален сегодня Tcl?
От: FR  
Дата: 22.03.09 16:55
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>В пайтоне все плохо. Мало того, что выразительность принесена в жертву производительности, так жертвы не хватило, достаточно посмотреть на


Есть подозрения что ты не докурил до метаклассов и модулей compile и co

dmz>lua + metalua что бы это понять.


Есть не менее достойный http://www.fiber-space.de/EasyExtend/doc/EE.html макросы в стиле немерле.
Re[12]: Насколько актуален сегодня Tcl?
От: dmz Россия  
Дата: 22.03.09 18:38
Оценка:
dmz>>В пайтоне все плохо. Мало того, что выразительность принесена в жертву производительности, так жертвы не хватило, достаточно посмотреть на

FR>Есть подозрения что ты не докурил до метаклассов и модулей compile и co


Да ну что ты. Докурил. У нас на них AOP, когда декораторов не хватает. Только метаклассы они не совсем про DSL.

Собсно, кусок из приведенного ранее валидатор-генератора:

class validator(object):
    __metaclass__ = with_error

    def is_transform(self):
        return False

    def transform(self, v):
        raise exceptions.NotImplementedError()

# и прочее

class SecTest(Common):
    __metaclass__ = Before_After_Call

    def __call_before__(self, *args, **kw):
        self.__create_env__()
        #self.obtain_session()
    def __call_after__(self, *args, **kw):
        self.__clear_env__()


# и так далее

def any_class(name):
    o = new.classobj(name, (object,), {'__init__':lambda self,**kw: self.__dict__.update(kw)})
    module = inspect.getmodule(o)
    if not getattr(module, o.__name__, None):
        setattr(module, o.__name__, o)
    return getattr(module, o.__name__)


Могу я по этому вопросу быть свободен?

Собственно, над compile я глумился чуть выше, если посмотришь. Да и собственно, что с этого всего? При живом хаскелле, окамле и lua+metalua — что толку в питоне вообще непонятно. У него единственное достоинство что простой и доходчивый. Ну и всё.

Таки я вот тут привел уже несколько примеров DSL — и своих и нет. Самое DSL-ное что видел — это FacesPM. IMHO — все они такие смешные. По сравнени с тем, что (и как) можно сделать на более других языках. Если есть что-то более прикольно сделанное, нежели Faces или SQLAlchemy-like — может, покажите? Это лучше чем намекать на загадочные большие возможности.

FR>Есть не менее достойный http://www.fiber-space.de/EasyExtend/doc/EE.html макросы в стиле немерле.


А это мейнстрим? Или нечто маргинальное?
Re[13]: Насколько актуален сегодня Tcl?
От: dmz Россия  
Дата: 22.03.09 18:43
Оценка:
FR>>Есть не менее достойный http://www.fiber-space.de/EasyExtend/doc/EE.html макросы в стиле немерле.

dmz>А это мейнстрим? Или нечто маргинальное?


Посмотрел, вопрос снят. Неважно. Поздно
Re[14]: Насколько актуален сегодня Tcl?
От: Курилка Россия http://kirya.narod.ru/
Дата: 22.03.09 18:48
Оценка:
Здравствуйте, dmz, Вы писали:


FR>>>Есть не менее достойный http://www.fiber-space.de/EasyExtend/doc/EE.html макросы в стиле немерле.


dmz>>А это мейнстрим? Или нечто маргинальное?


dmz>Посмотрел, вопрос снят. Неважно. Поздно


Для чего поздно?
Re[15]: Насколько актуален сегодня Tcl?
От: dmz Россия  
Дата: 22.03.09 18:53
Оценка:
dmz>>Посмотрел, вопрос снят. Неважно. Поздно

К>Для чего поздно?


Для кого. Для меня.
Re[5]: Насколько актуален сегодня Tcl?
От: _jw Россия mirantis.com
Дата: 23.03.09 14:19
Оценка:
Здравствуйте, DoubleSlash, Вы писали:

С>>Ну а по поводу Tcl/Tk для гуи в линуксе — это чистой воды кошмар, особенно со шрифтами.

DS>

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