С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753

Обсуждаем, на чем лучше делать GUI для программ, написанных на Лисп, из предложенных вариантов

14.04.2020, 13:14. Показов 2632. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если среди этого есть варианты, не предназначенные на самом деле для создания GUI для программ на Лисп, то прошу подсказать, для чего тогда они?

https://common-lisp.net/project/mcclim/

http://www.peter-herth.de/ltk/

https://common-lisp.net/project/cl-gtk2/

https://common-lisp.net/project/cl-opengl/

https://sourceforge.net/projects/wxglade/
Как пытался установить wxGlade GUI Creator (в Windows XP не получилось, надо более позднюю операционную систему).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2020, 13:14
Ответы с готовыми решениями:

Нужен совет на чем лучше делать GUI для frontend'a
Добрый день. Встала задача реализовать GUI для Web-приложения (frontend), серверная часть готова (Tomcat, Spring, Hibernate). Требования...

Какой компилятор лучше использовать для компилирования программ, написанных на С++?
Иногда, в инете попадаются исходные коды, каких нибудь программ. Но как правило, хотя и понятно что они написанны на C++, но непонятно...

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

19
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
14.04.2020, 13:34
Люди в наше время пользуются qtools:
https://github.com/Shinmera/qtools
По-моему, остальные графические библиотеки мёртвые. McCLIM представляет ностальгический интерес, но вряд ли его допилят до юзабельного состояния.

Ещё можно делать браузерный интерфейс.

А вообще, как говорится, емакс и есть GUI.
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
14.04.2020, 13:52
А есть ли необходимость делать GUI на Лиспе? У меня нет такого впечатления. Лисп не для этого придуман. Хотя возможно, конечно.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
14.04.2020, 14:17
Цитата Сообщение от Catstail Посмотреть сообщение
А есть ли необходимость делать GUI на Лиспе?
А как бы иначе оконный интерфейс лисп-машин работал? Он, говорят, опередил своё время.

Кроме прочего, у лиспа (неудивительно) есть своя точка зрения на GUI - CLIM. К сожалению (а может быть, к счастью), работающего CLIMа нет.

Добавлено через 16 минут
Цитата Сообщение от Catstail Посмотреть сообщение
А есть ли необходимость делать GUI на Лиспе?
Вообще, лично я нахожу естественным, что если человек любит лисп, он хочет писать именно на нём. Я, например, пишу на лиспе даже такую ерунду, для которой хватило бы баша. Тогда логично, что если человеку надо GUI, он думает - как его на лиспе сделать.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
14.04.2020, 14:19
Вот, к примеру, простой калькулятор на HomeLisp, который может работать не только с целыми и вещественными, но и с рациональными и комплексными. Код - под спойлером:

Кликните здесь для просмотра всего текста

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//
//  Программа отображения диалога _Dlg_
//
 
(prog nil
 
      (try (dlgDestroy '_Dlg_) except Nil)
 
 
      (dlgCreate '_Dlg_ 509 222 "Формульный калькулятор:" &H8000000F)
 
      (dlgAddControl '_Dlg_ '_LBL_1 _LABEL 17 10 218 24 '("Tahoma" 14,25 1 0 0) "Вводите выражение:" 0 &H80000012 &H8000000F)
 
      (dlgAddControl '_Dlg_ '_TXT_1 _TEXT 17 50 467 28 '("Tahoma" 14 1 0 0) "" 0 &H80000008 &H80000005)
 
      (dlgAddControl '_Dlg_ '_LBL_2 _LABEL 16 91 219 29 '("Tahoma" 14,25 1 0 0) "Результат:" 0 &H80000012 &H8000000F)
 
      (dlgAddControl '_Dlg_ '_LBL_4 _LABEL 16 130 469 32 '("Tahoma" 14,25 1 0 0) "" 0 &HFF0000 &H8000000F)
 
      (dlgAddControl '_Dlg_ '_BUT_1 _BUTTON 275 5 100 36 '("Tahoma" 8,25 1 0 0) "Вычислить")
 
      (dlgAddControl '_Dlg_ '_BUT_2 _BUTTON 382 6 100 35 '("Tahoma" 8,25 1 0 0) "Закрыть")
 
      //
      // Пролог загрузки диалога _Dlg_
      //
 
      (Prog () 
 
      )
 
      //
      // Обработчик события CLICK для кнопки _BUT_2
      //
 
      (defun _BUT_2_Click  Nil 
        (dlgHide '_DLG_)
        (dlgDestroy '_DLG_)
      )
 
      //
      //   Назначение процедуры-события _BUT_2_Click  контролу _BUT_2
      //
 
      (dlgSetEvent '_BUT_2 '_BUT_2_Click )
 
      //
      // Обработчик события CLICK для кнопки _BUT_1
      //
 
      (defun _BUT_1_Click  Nil 
 
        (let* ((formula (dlgGetText '_TXT_1))
               (express (inf2pref (parse formula)))
               (res     (eval express)))
           (dlgPutText '_LBL_4 (output (eval express))))    
      )
 
      //
      //   Назначение процедуры-события _BUT_1_Click  контролу _BUT_1
      //
 
      (dlgSetEvent '_BUT_1 '_BUT_1_Click )
 
      //
      //   Отображение диалога _Dlg_
      //
 
      (dlgShow '_Dlg_)
)


Написал за 20 мин.
Миниатюры
Обсуждаем, на чем лучше делать GUI для программ, написанных на Лисп, из предложенных вариантов   Обсуждаем, на чем лучше делать GUI для программ, написанных на Лисп, из предложенных вариантов  
1
331 / 199 / 9
Регистрация: 12.05.2015
Сообщений: 334
14.04.2020, 16:28
Цитата Сообщение от supmener Посмотреть сообщение
Если среди этого есть варианты, не предназначенные на самом деле для создания GUI для программ на Лисп, то прошу подсказать, для чего тогда они?
Так они в первую очередь заброшены кроме Ltk. И не заморачивались поддержкой винды особенно старых версий.
cl-gtk2 может быть но все же автор от него (и возможно от лиспа) отказался.

И здесь хорошо бы определить для себя что понимать под GUI (есть варианты). И насколько winxp - вечный вариант.

Добавлено через 2 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
А есть ли необходимость делать GUI на Лиспе? У меня нет такого впечатления. Лисп не для этого придуман. Хотя возможно, конечно.
Если задача построена вокруг декларативного описания на лиспе, то есть смысл на сем-то другом. А вызов API создающий виджит примерно одинаков на всех языках.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
14.04.2020, 17:20
В Ltk вроде бы тоже не наблюдается особого движения. Или там уже нечего улучшать? Вообще, для незамысловатого GUI она, наверно, лучше всего.
0
331 / 199 / 9
Регистрация: 12.05.2015
Сообщений: 334
14.04.2020, 17:52
Цитата Сообщение от helter Посмотреть сообщение
В Ltk вроде бы тоже не наблюдается особого движения. Или там уже нечего улучшать?
там нечего ломать
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
14.04.2020, 20:04
Цитата Сообщение от Catstail Посмотреть сообщение
А есть ли необходимость делать GUI на Лиспе? У меня нет такого впечатления. Лисп не для этого придуман.
Почему нет? Чем лисп хуже других языков в этом вопросе? Ничем.

В Genera OS весь GUI на лиспе. Как и всё остальное, впрочем.
1
Заблокирован
14.04.2020, 22:29
Цитата Сообщение от korvin_ Посмотреть сообщение
В Genera OS весь GUI на лиспе. Как и всё остальное, впрочем.
А есть еще Mezzano OS котарая вся на Lisp написана)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
15.04.2020, 07:09
korvin_, sodda, думаю, что любой Тьюринг-полный язык, в котором реализованы графические примитивы, пригоден для написания GUI.
0
Заблокирован
15.04.2020, 12:02
Catstail, это да) все конечно зависит от реализации. думаю на brainfuck писать GUI не очень, хотя он и тьюринг-полный)))
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
17.08.2020, 18:00  [ТС]
https://lispcookbook.github.io... k/gui.html

Ниже по ссылкам похоже то же самое

https://lisp-journey.gitlab.io... 1-of-5-tk/

https://lisp-journey.gitlab.io... t4-qtools/

https://lisp-journey.gitlab.io... of-5-gtk3/

Остальные две части не искал.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
17.08.2020, 20:18
С удовольствием сделал на днях одну фигульку на LTK. До меня дошло, что вовсе необязательно запускать графический код внутри with-ltk. Этот макрос, даже с пустым телом, можно запустить в другом потоке, а в слаймовом потоке достаточно присвоить переменной `*wish*` значение этой переменной из того первого. Тогда можно запускать прямо в репле код навроде (pack (make-instance 'button)), и кнопка появится в прямом эфире. Это мне нравится.

С другой стороны, постоянно есть ощущение недоделанности этой библиотеки. Например, виджеты обычно создаются через make-instance, хотя символы типа make-frame экспортированы. Чтобы сбросить (flush) сообщения wish-у, не нашёл ничего лучшего, чем with-atomic. Чтобы создать стиль кнопок, пришлось отправлять tcl-код через send-wish (благо она экспортирована). Но это всё мелочи. Надо бы почаще пользоваться этой библиотекой, чтобы освоиться.
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
17.08.2020, 20:48
helter, здорово! И примеры кода приведите, когда освоитесь!
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
20.08.2020, 14:38  [ТС]
И видео урок по созданию GUI.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
21.08.2020, 02:07
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Ну, простое приложение сделать сравнительно несложно. Надо иметь в виду, что LTK организует RPC с тиклем, поэтому бояться тикля не нужно: приходится прибегать не только к его документации, но, бывает, и код вставлять. Это не расширение языка с графикой, а отдельная программа, которая умеет рисовать графику, и которой мы можем диктовать, что нарисовать. А она оповещает нас о происходящих событиях. Организовать такое общение - уже нетривиальная задача, поэтому если автор чего-то там недообернул - не стоит пенять, лучше дообернуть самому.

Лучшая документация LTK - исходный код.

Вот простой пример из туториала: https://tkdocs.com/tutorial/firstexample.html
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
wm title . "Feet to Meters"
grid [ttk::frame .c -padding "3 3 12 12"] -column 0 -row 0 -sticky nwes
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1
 
grid [ttk::entry .c.feet -width 7 -textvariable feet] -column 2 -row 1 -sticky we
grid [ttk::label .c.meters -textvariable meters] -column 2 -row 2 -sticky we
grid [ttk::button .c.calc -text "Calculate" -command calculate] -column 3 -row 3 -sticky w
 
grid [ttk::label .c.flbl -text "feet"] -column 3 -row 1 -sticky w
grid [ttk::label .c.islbl -text "is equivalent to"] -column 1 -row 2 -sticky e
grid [ttk::label .c.mlbl -text "meters"] -column 3 -row 2 -sticky w
 
foreach w [winfo children .c] {grid configure $w -padx 5 -pady 5}
focus .c.feet
bind . <Return> {calculate}
 
proc calculate {} {  
   if {[catch {
       set ::meters [expr {round($::feet*0.3048*10000.0)/10000.0}]
   }]!=0} {
       set ::meters ""
   }
}
Там есть на других языках, но этот код нам нужен, потому что наш лисп работает с тиклем, а не с другими языками.

У меня получилось нижеследующим образом.

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(defpackage #:feet-to-meters
  (:use #:cl #:ltk)
  (:import-from #:bordeaux-threads
                #:make-thread)
  (:import-from #:safe-queue
                #:mailbox-receive-message 
                #:mailbox-send-message 
                #:make-mailbox))
 
(in-package #:feet-to-meters)
 
(defun run-ltk (&optional thunk)
  (let ((box (make-mailbox)))
    (make-thread (lambda ()
                   (with-ltk ()
                     (mailbox-send-message box (list *wish* *tk*))
                     (when thunk
                       (funcall thunk))))
                   :name "LTK")
    (mailbox-receive-message box)))
 
(defstruct app feet meters)
 
(defun calculate (app)
  (lambda ()
    (setf (text (app-meters app)) (handler-case
                                    (format nil "~,4F" (* 0.3048 (parse-integer (text (app-feet app)))))
                                    (parse-error () "")))))
 
(defun show-app ()
  (let* ((app (make-app))
         (calculate (calculate app)))
    (wm-title *tk* "Метры в футы")
    (let ((c (make-instance 'frame :padding "\"3 3 12 12\"")))
      (grid c 0 0 :sticky :nwes)
      (grid-columnconfigure *tk* 0 :weight 1 )
      (grid-rowconfigure *tk* 0 :weight 1)
      (grid (setf (app-feet app) (make-instance 'entry :master c)) 1 2 :sticky :we)
      (grid (setf (app-meters app) (make-instance 'label :master c)) 2 2 :sticky :we)
      (grid (make-instance 'button :master c :text "Конвертировать" :command calculate) 3 3 :sticky :w)
      (grid (make-instance 'label :master c :text "футов") 1 3 :sticky :w)
      (grid (make-instance 'label :master c :text "это то же самое, что") 2 1 :sticky :e)
      (grid (make-instance 'label :master c :text "метров") 2 3 :sticky :w)
      (format-wish "foreach w [winfo children ~A] {grid configure $w -padx 5 -pady 5}" (widget-path c))
      (focus (app-feet app))
      (bind *tk* "<Return>" (lambda (e)
                              (declare (ignore e))
                              (funcall calculate))))))
Запуск:
Lisp
1
FEET-TO-METERS> (run-ltk 'show-app)
Чтобы коллбэк calculate не использовал глобальные переменные, я сохранил состояние в структуре app (класс было лень делать) и засунул её в замыкание.

С winfo children (дети виджета) прокол: если её можно сделать в LTK, то я не нашёл, как. Зато вместо неё можно отправить строку на тикле! send-wish и format-wish экспортированы.

Что в качестве :padding нужно указать именно "\"3 3 12 12\"", я выяснил экспериментальным путём, сравнивая с образцом текст, отправленный вишу. (Если присвоить *debug-tk* истину, общение будет логироваться в стандартный вывод.)

Почему-то специальных конструкторов у классов нет. Может, автор наступил на какие-то грабли?

run-ltk - моё ноу-хау, но в данном случае она фактически не пригодилась. А вообще, как я выше говорил, можно в прямом эфире общаться с tcl. Например, я пробовал сделать игрушечный текстовый редактор, в котором лисп был бы движком, и было удобно на ходу переопределять обработчики событий в репле без необходимости перезапускать окно.

Это менее удобно, чем могло бы быть, так как, по-видимому, у нас нет доступа из лиспа ко всем текущим виджетам. Насколько понимаю, в тикле достаточно winfo children, чтобы обойти дерево виджетов. В лиспе, после того, как мы посадили виджет, мы не можем до него добраться, если никуда не сохранили - например, в глобальную переменную. Может, это сложно, организовать так как в тикле виджеты могут появляться/исчезать, и нужно следить, какие из лисповых объектов "протухли". А может, не очень и сложно.
Цитата Сообщение от supmener Посмотреть сообщение
И видео урок по созданию GUI.
Вряд ли этого от меня реально дождаться. Хотя если бы удалось организовать динамическую интерактивную разработку, могло бы быть забавно.

Добавлено через 6 минут
К перечню недоделок:
- текстовый виджет - нельзя работать, например, со строками, а можно только сетфить весь текст целиком;
- стили ttk - вообще не поддерживаются.
Но это можно на худой конец исправить через send-wish. А серьёзный косяк - передача лиспу событий клавиатуры. В процессе используется ридер, и атрибут char превращается в символ - причём, как положено, в верхнем регистре. То есть по дороге к лиспу теряется информация о регистре, и мы не узнаем, нажал ли пользователь "a" или "A". Исправить несложно, но без патча не обойтись, и это обратно несовместимое изменение, поломающее тонны написанного на LTK софта.

Добавлено через 13 минут
Цитата Сообщение от Catstail Посмотреть сообщение
И примеры кода приведите, когда освоитесь!
По-хорошему, надо представлять и как это сделано в tk, и хорошо разобраться в библиотеке, чтобы понимать, где сознательное решение по дизайну, а где - недоделка. Да что там, иногда просто не можешь обнаружить имеющуюся функциональность, потому что LTK не копирует tk. Например, в tk в обработчиках событий можно использовать команду "break", которая предотвратит вызов других обработчиков. В лиспе это реализовано с помощью опционального аргумента :exclusive, о котором документация ничего не поясняет.

Но фундамент - хороший. По-моему, общение процессов реализовано добротно, полная интерактивность потенциально имеется. Остальное можно наращивать. Конечно, не питоновский tkinter, но тоже по-своему неплохо.

Сравнить, например, с cl-cffi-gtk. Это, как по названию видно, FFI. Сишная. Ошибки в FFI не прощаются. Ошибся в каком-нибудь обработчике - получай нулевой указатель, библиотека отвалилась. При загрузке библиотека инициализируется, и повторно инициализировать её, наверно нельзя. Хотите продолжить - перегружайте лисп. В худшем случае сам лисп падает. Как если бы при разработке графического приложения падал бы графический сервер без возможности перезапуска или вся ОС целиком. Безумие.

Но даже если бы FFI работал идеально, вряд ли можно было бы открыть пустое окно и налепить на него что угодно, а потом стереть и налепить другое. Это ж си.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,753
21.08.2020, 02:11  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
организовать динамическую интерактивную разработку
https://www.debugmode.com/wink/ (можно переключить на русский язык).
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
22.08.2020, 01:29
Не, главная проблема - я не очень представляю воркфлоу. Например, в репле можно выполнять по порядку следующие команды:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
span class="sy0"> * (setf (values *wish* *tk*) (values-list (run-ltk)))
* (wm-title *tk* "проба пера")
* (defvar *frame*)
* (setf *frame* (make-instance 'frame :height 200 :width 200))
* (pack *frame*)
* (defvar *button*)
* (setf *button* (make-instance 'button :master *frame* :text "к" :command (lambda () (print "привет" #.*standard-output*))))
* (grid *button* 0 0)
* (defvar *button2*)
* (setf *button2* (make-instance 'button :master *frame* :text "к2" :command (lambda () (print "пока" #.*standard-output*))))
* (grid *button2* 0 1)
* (grid *button* 0 1)
* (grid *button2* 0 0)
При этом мы можем наблюдать как появилось окошко, изменило заголовок, на нём появилась кнопка, потом вторая, потом они поменялись местами. Это вполне интерактивно. Но доступ к кнопкам я имею только потому, что явно сохранил их в переменных. Либо мне нужен какой-то ветвистый класс, в листьях которого я буду сохранять объекты. Но на программу-то это не похоже. В программе я бы написал что-то
Lisp
1
(grid (make-instance 'button ... ) 0 0)
вообще никак не обозначая объект; объект frame ввёл бы let-ом и потерял бы с ним связь после выхода из let-а. Я не представляю, как получить доступ к этим объектам после выхода из let-а. По-моему, LTK нигде их не хранит. То есть окошко-то вот оно, на нём кнопочки налеплены, а переставить я их не могу, потому что лисповые объекты неизвестно где. Может быть, они даже в мусор ушли. Что называется / видит око, да зуб неймёт. Я не понимаю, почему так устроено. По-моему, можно было бы в *tk* хранить всех его потомков, а в каждом потомке хранить *tk*, тогда худо-бедно всё было бы доступно. По крайней мере, у каждого виджета есть путь, по которому можно было бы найти лисповый объект. (Да, если уничтожать объекты напрямую отправляя в tk команду destroy, то некоторые лисповые объекты будут протухать. А потому что так нормальные люди не делают, надо пользоваться лисповой функцией destroy.)

С другой стороны, я не знаю, важно ли на самом деле так переставлять кнопки в рантайме. Потом-то всё равно надо будет одним махом всё нарисовать - удобно ли этот код собирать из кусков? Пока непонятно. Что действительно полезно в рантайме - изменять обработчики событий. Для этого необязательно иметь доступ к виджетам. Если бы команды кнопок в моём примере были бы именованными функциями (или сводились бы к таковым), было бы достаточно переопределить эти функции.
2
Заблокирован
22.08.2020, 11:56
Пример. Создает окно с меню и подменю. В принципе ничего сложного.

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#lang racket/gui
 
(define frame (new frame%
                   [label "Example"]
                   [width 300]
                   [height 300]))
 
(define uplevel_menu (new menu-bar% [parent frame]))
 
(define menu_file (new menu% [parent uplevel_menu]
                             [label "File"]
                             [help-string #f]))
 
(define create_file (new menu-item% [parent menu_file]
                                    [label "Create file"]
                                    [help-string #f]
                                    [callback (λ (x y) (void))]))
 
(define menu_view (new menu% [parent uplevel_menu]
                             [label "View"]
                             [help-string #f]))     
 
(define veiw_hello (new menu-item%  [parent menu_view]
                                    [label "hello"]
                                    [help-string #f]
                                    [callback (λ (x y) (void))]))
 
(define veiw_privet (new menu-item% [parent menu_view]
                                    [label "privet"]
                                    [help-string #f]
                                    [callback (λ (x y) (void))]))
 
     
(send frame show #t)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.08.2020, 11:56
Помогаю со студенческими работами здесь

Какая видеокарта лучше для процессора i7 пишим обсуждаем
Привет:Скажите пожалуста какую видеокарту лучше всего купить для процессора i7 2600 (Sandy Bridge) сумма от3000до5000

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

На чём лучше всего писать GUI?
Лучше - в смысле удобней, где есть большая функциональность. Я познакомился с MFC в С++, честно говоря, не очень. Есть что-то лучше?...

Какая комплектация лучше и производительнее для игр из трех предложенных ?
1-Вариант Процессор: AMD FX-4300 4 ядра по 4 Ггц на каждом! Большой башенный кулер на тепловых трубках Видеокарта Radeon 7850 2gb...

Выбрать ноутбук из предложенных вариантов
Здравствуйте. Скажу сразу, что в железе я полный ноль. Поэтому прошу совета. Какой из ниже предоставленных ноутбуков с бОльшою...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru