С Новым годом! Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484

Haskell и -fno-warn-type-defaults

29.12.2014, 14:32. Показов 3582. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно начал изучать Haskell, пользуюсь связкой emacs + haskell-mode + company-ghc + shm.

В Dispersion.cabal прописаны флаги: -O2 -Wall

Возникла следующая ситуация, которая не дает мне покоя : допустим, я пишу такой простой код:
Haskell
1
2
3
4
module Main where
 
main :: IO ()
main = print $ map (^2) [1..5]
Flycheck сразу же подсвечивает warnings, ну подсвечивает и подсвечивает, загружаю код (C-c C-l). Далее вижу следующие предупреждения ==> скрин1
Как я понял здесь имеется ввиду, что Haskell будет использовать тип Integer по умолчанию или что-то типа того. Такие предупреждения немного поднадоели, как решить проблему? Нашел 2 способа:
1) Прописать явно типы ==> скрин2
2) Использовать флаг -fno-warn-type-defaults ==> скрин3

2 Вопроса:
Как правильно бороться с такими надоедливыми предупреждениями, 1-м способом или 2-м?
Куда лучше прописывать флаги, в Dispersion.cabal или все-таки в каждый модуль отдельно?
Миниатюры
Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults  

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2014, 14:32
Ответы с готовыми решениями:

Работа с type в haskell
Доброе время суток задание такого плана : За время учебы в семестре студенты должны сдать определённое количество лабораторных работ,...

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
"У нас" ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие "пришедшие" используют...

Warning: return type defaults to ‘int’ Что значит этот варнинг?
Вот программа #include <stdio.h> main() { float fahr, celsius; int lower, upper, step; lower = 0; upper = 300; ...

34
Модератор
 Аватар для Curry
5153 / 3466 / 536
Регистрация: 01.06.2013
Сообщений: 7,528
Записей в блоге: 9
29.12.2014, 16:15
Я за максимальное кол-во предупреждений. Оно окупается. Прописать явно.

Добавлено через 8 минут
Но если уж очень не хочется, для копирования учебных примеров, то лучше в .cabal заменить -Wall на -W
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
29.12.2014, 17:11  [ТС]
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
заменить -Wall на -W
Одно время был прописан флаг -W, но предупреждения такого вида, так же появлялись, вроде бы

Вообщем буду тогда пользоваться 1-м способом. Просто почему я задался таким вопросом, например в книжках или на том же codewars, смотришь на решения, а никто вроде бы и не прописывает явно типы, вот я и подумал, может это дурной тон прописывать явно типы и люди пользуются флагом -fno-warn-type-defaults, поэтому и не заморачиваются с такими вопросами. А про этот флаг случайно узнал из книги Изучаем Haskell.

А что вы скажете по 2-му вопросу? Я понимаю, что это наверное вопрос вкуса, но все же.

P.S. Хочется сразу привыкать к правильному
0
Модератор
 Аватар для Curry
5153 / 3466 / 536
Регистрация: 01.06.2013
Сообщений: 7,528
Записей в блоге: 9
29.12.2014, 17:25
В учебных примерах можно и не заморачиваться. А в настоящей программе лучше максимум предупреждеий, позволяет выловить больше ошибок во время компиляции (правило годится для любых языков).

У меня с ключом -W такие предупреждения не выдаются.
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
29.12.2014, 17:38  [ТС]
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
У меня с ключом -W такие предупреждения не выдаются.
Сейчас посмотрел, действительно, у меня тоже. Но flycheck все равно подсвечивает эти предупреждения. Видимо поэтому в прошлый раз я и подумал, что флаг -W, не то, что мне нужно. Теперь картина прояснилась.
0
Модератор
 Аватар для Curry
5153 / 3466 / 536
Регистрация: 01.06.2013
Сообщений: 7,528
Записей в блоге: 9
29.12.2014, 17:54
Я http://community.haskell.org/~ndm/hlint/ -ом пользуюсь для подсказок. Но я emacs -ом то вообще то не пользовался, поставил eclipse, а надо бы и emacs с Хаскеллом испытать.
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
29.12.2014, 18:18  [ТС]
KolodeznyDiver, как я понял, у меня flycheck автоматом hlint подхватил. Вообщем hlint тоже работает

Не по теме:

Есть еще для emacs'а вот такой плагин:
https://github.com/flycheck/flycheck-haskell
Я так понял это улучшенная поддержка flycheck для haskell, но в чем улучшения я так и не понял, да и как плагин этот ставить я тоже не понял. Там написано, что нужно src, build файлы и auto-generated файлы добавить в пути поиска, но не ясно в какие, или в emacs'е прописывать или в винде в переменную окружения PATH. И последние пункты тоже не ясны. Вообщем это пока единственный плагин, с которым я не смог разобраться.
Кароче я пока пользуюсь обычным flycheck, работает и ладно :)

Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
надо бы и emacs с Хаскеллом испытать.
Попробуйте, может понравится. Рекомендую на чистый емакс поставить Prelude (к Haskell не имеет отношения)
https://github.com/bbatsov/prelude
И потом по желанию добавлять нужный функционал: haskell-mode, company-ghc (автокомплит), shm (нормальная работа с отступами).

1
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
29.12.2014, 20:12
а я вот хлинт недолюбливаю, он порою на мой взгляд придирается. Да и не все прагмы которыми пользуюсь поддерживает
хотя зачастую да очень полезен. Особенно свежим взглядом прогнать по коду...
0
Модератор
 Аватар для Curry
5153 / 3466 / 536
Регистрация: 01.06.2013
Сообщений: 7,528
Записей в блоге: 9
29.12.2014, 21:04
Цитата Сообщение от Araneo Посмотреть сообщение
а я вот хлинт недолюбливаю, он порою на мой взгляд придирается
Пример придирки?
У него, кста, полно ключей, настраивать на что ругаться. Но я по дефолту.
0
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
29.12.2014, 21:32
Haskell
1
or [ null line, head line `notElem`"-0123456789", any (not.isDigit) $ tail line]
советует переписать как.
Haskell
1
null line || head line `notElem`"-0123456789" || any (not.isDigit) (tail line)
Хотя по факту дело вкуса ведь...

Добавлено через 2 минуты
и лямбдакэйс ему упорно не нравиться. Эх, печаль
0
Модератор
 Аватар для Curry
5153 / 3466 / 536
Регистрация: 01.06.2013
Сообщений: 7,528
Записей в блоге: 9
29.12.2014, 21:52
Цитата Сообщение от Araneo Посмотреть сообщение
советует переписать как.
Странно. HLint v1.9.7, (C) Neil Mitchell 2006-2014 всё по дефолту, на
Haskell
1
2
3
4
5
6
7
import Data.Char
 
line:: String 
line = "qwe"
 
tst:: Bool
tst = or [ null line, head line `notElem`"-0123456789", any (not.isDigit) $ tail line]
не ругается. Сейчас, правда, уже 1.9.14 есть, но cabal-ом ставить - это опять все пакеты переставлять.
0
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
29.12.2014, 22:10
у меня... HLint v1.8.53 но не суть...
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
29.12.2014, 22:17  [ТС]
У меня тоже ругается.
Миниатюры
Haskell и -fno-warn-type-defaults  
0
Модератор
 Аватар для Curry
5153 / 3466 / 536
Регистрация: 01.06.2013
Сообщений: 7,528
Записей в блоге: 9
29.12.2014, 23:22
Цитата Сообщение от smoke853 Посмотреть сообщение
У меня тоже ругается.
Прошу пардону, у меня так же ругается. Это я ему не тот файл сунул.
Видать, думает так быстрее.

Добавлено через 32 минуты
А ежели ещё подумать, то код эквивалентен
Haskell
1
null line || head line == '-' || any (not . isDigit) line
0
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
30.12.2014, 02:03
KolodeznyDiver, ну так я и пишу - дело вкуса.
0
Модератор
 Аватар для Curry
5153 / 3466 / 536
Регистрация: 01.06.2013
Сообщений: 7,528
Записей в блоге: 9
30.12.2014, 03:11
Цитата Сообщение от Araneo Посмотреть сообщение
KolodeznyDiver, ну так я и пишу - дело вкуса.
Сравните то что hlint предложил и то что я. У меня короче - hlint на такое неспособен
0
07.01.2015, 15:12

Не по теме:

Цитата Сообщение от smoke853 Посмотреть сообщение
Попробуйте, может понравится. Рекомендую на чистый емакс поставить Prelude (к Haskell не имеет отношения)
https://github.com/bbatsov/prelude
И потом по желанию добавлять нужный функционал: haskell-mode, company-ghc (автокомплит), shm (нормальная работа с отступами).
Да, сильно я вспотел разбираясь в этим emacs! Под винду прелюд предлагается скачать в .emacs.d и установить ручками, без понятия как. Файл prelude-modules.el я нашёл, поредактировал, кинул в .emacs.d\prelude - дальше непонятно.
Пакеты haskell-mode, company-ghc, shm пощёлкал в списке пакетов, вроде установились. Теперь только и эффекта что исчезли из списка пакетов. А что должно быть?
Файл с расширением .hs открывается с подсветкой. hlint прикрутил скопировав hs-lint.el в emacs\24.4\lisp\, где el-и самого емакса. В .emacs вписал
Lisp
1
2
3
4
(require 'hs-lint)
(defun my-haskell-mode-hook ()
   (local-set-key "\C-cl" 'hs-lint))
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook)
- теперь hlint вызывается.
А автокомплит-а, нет. В .emacs.d\elpa появился файл company-ghc-readme.txt в котором говорится что
Add `company-ghc' to `company-mode' back-ends list.
(add-to-list 'company-backends 'company-ghc)
- это куда? в .emacs нельзя - ругается.
Ещё и при установке shm ругалось
shm-reformat.el:21:1:Error: Cannot open load file: no such file or directory
в этой строчке написано
Lisp
1
(require 'hindent)
- файла hindent.el и впрямь, нет ни в самом emacs, ни в установленных в .emacs.d пакетах.

Мрак, жуть и пингвины! Научится пользоваться этим emacs-ом, похоже, куда сложнее чем самим Haskell-ем. :(

0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
07.01.2015, 15:47  [ТС]
Рассказываю пошагово:
1) После того, как я скачал Haskell Platform, я запускаю cmd.exe и пишу
Code
1
cabal install ghc-mod - это будет нужно для плагинов.
2) Далее ставим emacs, я брал здесь: http://sourceforge.net/projects/emacsbinw64/

3) После того, как emacs установлен, главное его не запускать, чтобы не создалась папка .emacs.d в
Code
1
C:\Users\smoke\AppData\Roaming\
4) Теперь нам нужно поставить Prelude, как это сделать.
Для начала нужно скачать git под windows. http://git-scm.com/downloads
Потом в пуске находим git bash, запускаем, вводим
Code
1
curl -L http://git.io/epre | sh
Он скачает, все что нужно, и создаст папку .emacs.d в директории пользователя, в моем случае это
Code
1
C:\Users\smoke
Далее нужно скопировать эту папку .emacs.d сюда
Code
1
C:\Users\smoke\AppData\Roaming\
Далее в .emacs.d открываем файл prelude-modules.el, оставляем то, что нужно, в моем случае:
Кликните здесь для просмотра всего текста

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
;;; Uncomment the modules you'd like to use and restart Prelude afterwards
 
;; Emacs IRC client
;; (require 'prelude-erc)
(require 'prelude-ido) ;; Super charges Emacs completion for C-x C-f and more
;; (require 'prelude-helm) ;; Interface for narrowing and search
;; (require 'prelude-helm-everywhere) ;; Enable Helm everywhere
(require 'prelude-company)
;; (require 'prelude-key-chord) ;; Binds useful features to key combinations
;; (require 'prelude-mediawiki)
;; (require 'prelude-evil)
 
;;; Programming languages support
;; (require 'prelude-c)
(require 'prelude-clojure)
;; (require 'prelude-coffee)
;; (require 'prelude-common-lisp)
;; (require 'prelude-css)
(require 'prelude-emacs-lisp)
;; (require 'prelude-erlang)
;; (require 'prelude-elixir)
;; (require 'prelude-go)
;; (require 'prelude-haskell)
;; (require 'prelude-js)
;; (require 'prelude-latex)
(require 'prelude-lisp)
;; (require 'prelude-ocaml)
(require 'prelude-org) ;; Org-mode helps you keep TODO lists, notes and more
;; (require 'prelude-perl)
;; (require 'prelude-python)
;; (require 'prelude-ruby)
;; (require 'prelude-scala)
;; (require 'prelude-scheme)
;; (require 'prelude-shell)
;; (require 'prelude-scss)
;; (require 'prelude-web) ;; Emacs mode for web templates
;; (require 'prelude-xml)
;; (require 'prelude-yaml)

Далее создаем файл custom.el здесь: C:\Users\smoke\AppData\Roaming\.emacs.d\ personal\
В нем будут наши настройки, в моем случае:
Кликните здесь для просмотра всего текста

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
(prelude-require-packages '(company-ghc
                            ghc
                            haskell-mode
                            ido-vertical-mode
                            smart-mode-line))
 
 
;;-----------------------
;; Emacs appearance setup
;;-----------------------
 
;; Set frame size
(add-to-list 'default-frame-alist '(height . 35))
(add-to-list 'default-frame-alist '(width . 100))
 
(menu-bar-mode t)
(scroll-bar-mode -1)
(global-linum-mode)
(set-default-font "Consolas-12")
(setq default-directory "M:/Users/smoke/")
 
(setq prelude-auto-save nil
      prelude-flyspell nil
      prelude-guru nil
      prelude-whitespace nil)
 
(setq auto-save-default nil
      make-backup-files nil) 
 
 
;;---------------------------
;; Functions
;;---------------------------
 
(defun prelude-haskell-mode-defaults ()
 (subword-mode +1)
 (turn-on-haskell-doc)
 (interactive-haskell-mode +1)
 (ghc-init)
 (structured-haskell-mode))
 
 
;;---------------------------
;; Plugins
;;---------------------------
 
;; cider
(setq cider-interactive-eval-result-prefix ";; => "
      cider-prompt-save-file-on-load nil
      cider-repl-result-prefix ";; => "
      cider-repl-use-clojure-font-lock t
      cider-switch-to-repl-command 'cider-switch-to-current-repl-buffer)
 
;; company
(setq company-idle-delay nil)
 
;; flycheck
(setq flycheck-display-errors-function 'flycheck-display-error-messages-unless-error-list)
 
;; haskell
(add-to-list 'company-backends '(company-ghc :with company-dabbrev-code))
(add-to-list 'load-path "C:/Users/smoke/AppData/Roaming/.emacs.d/structured-haskell-mode/elisp")
 
(require 'shm)
 
(eval-after-load 'haskell-mode
  '(progn
     (setq haskell-process-suggest-remove-import-lines t
           prelude-haskell-mode-hook 'prelude-haskell-mode-defaults)
 
     (add-hook 'haskell-mode-hook (lambda () (run-hooks 'prelude-haskell-mode-hook)))))
 
;; ido-vertical-mode
(ido-vertical-mode t)
 
;; smart-mode-line
(setq sml/no-confirm-load-theme t
      sml/theme 'respectful)
(sml/setup)
 
 
;;-----------------
;; Hotkeys
;;-----------------
 
(global-set-key (kbd "C-SPC") 'company-complete)
 
(global-set-key (kbd "C-M-j") 'delete-indentation)
(global-set-key (kbd "C-<") 'backward-paragraph)
(global-set-key (kbd "C->") 'forward-paragraph)
 
;; company
(define-key company-active-map [return] 'company-complete-common)
(define-key company-active-map [tab] 'company-complete-selection)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
 
;; haskell-mode
(define-key haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
 
;; shm
(define-key shm-map (kbd "M-^") nil)
(define-key shm-map (kbd "C-c C-^") nil)
(define-key shm-map (kbd "M-DEL") nil)
(define-key shm-map (kbd "C-w") nil)
(define-key shm-map (kbd "M-w") nil)
(define-key shm-map (kbd "C-M-k") nil)
(define-key shm-map (kbd "C-M-SPC") nil)
(define-key shm-map (kbd "M-}") nil)
(define-key shm-map (kbd "M-{") nil)
(define-key shm-map (kbd "M-s") nil)
 
(define-key shm-map (kbd "C-S-j") 'shm/simple-indent-newline-indent)
(define-key shm-map (kbd "C-M-j") 'shm/delete-indentation)
(define-key shm-map (kbd "M-j") 'shm/ret-proxy)
(define-key shm-map (kbd "C-c C-M-j") 'shm/swing-up)
(define-key shm-map (kbd "C-<") 'shm/backward-paragraph)
(define-key shm-map (kbd "C->") 'shm/forward-paragraph)
 
;; smartparens
(define-key sp-keymap (kbd "M-A") 'sp-beginning-of-sexp)
(define-key sp-keymap (kbd "M-E") 'sp-end-of-sexp)
(define-key sp-keymap (kbd "M-J") 'sp-join-sexp)
 
(define-key sp-keymap (kbd "C-M-<backspace>") 'sp-backward-kill-sexp)
(define-key sp-keymap (kbd "C-M-k") 'sp-kill-sexp)
(define-key sp-keymap (kbd "C-M-t") 'sp-transpose-sexp)
 
(sp-pair "[" "]" :wrap "M-[")
(sp-pair "{" "}" :wrap "M-{")


5) Ставим отдельно structured-haskell-mode, а не через list-packages. Как это сделать:
https://github.com/chrisdone/s... skell-mode
Вообщем:
Опять запускаем git bash
Вводим git clone https://github.com/chrisdone/s... l-mode.git
cd structured-haskell-mode
cabal install
cd elisp/
make
И вот эту папку нужно скопировать в .emacs.d
Также я еще отдельно скачивал make, unzip, wget.
http://gnuwin32.sourceforge.net/packages.html

Теперь запускаем emacs и он сам поставит все нужные пакеты.
Вроде все
1
07.01.2015, 15:49

Не по теме:

Большое спасибо заранее! Буду пытаться. Но не сейчас. Сейчас я выдохся в неравной борьбе с emacs. Буду копить силы для нового сражения.

0
07.01.2015, 15:57  [ТС]

Не по теме:


Незачто :)
Эх ... не успел я подредактировать пост до конца, чтобы читаемость получше была. Ну думаю и так понятно, что да как, на самом деле все ставится легко и просто. Но на linux'е еще проще.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.01.2015, 15:57
Помогаю со студенческими работами здесь

Log4j:WARN
Здравствуйте! Для логирования использую logback. Но при старте приложения, в консоли постоянно такой варн выводится: log4j:WARN...

радио пульт лебёдки Warn - ищу протокол обмена
приветствую всех сломался радио пульт лебёдки Варн. Посмотрел цену - от 50 до 180 баксов (в зависимости от жадности продавцов) ...

UEFI defaults have been loaded
Всем привет. Началось недавно,когда включаю компьютер утром - он выдает следующее (фото).Потом нажимаю F1,он выключается на секунду,опять...

Что значит эта строчка "rno,bno,fno=integer"
Написал программу на примере другой, но преподаватель спросил, что означает вот эта строчка в коде, особенно что означает fno? ...

IntelliJ IDEA, выдает ошибку: [main] WARN io.netty.util.internal.ThreadLocalRandom, как починить?
Всем привет! *Если создал тему в неправильном разделе, просьба перенести. Уважаемые Java-программисты, пожалуйста подскажите, в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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 Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru