Автор Гілка: Fedora 12  (Прочитано 9308 раз)

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
Re: Fedora 12
« Відповідей #30 : 2009-11-21 02:20:06 »
Там є змінні, тільки їх змінювати не можна.

Тобто, нічого спільного зі змінними із С, Python чи ще якоїсь Java вони не мають,
Використовуйте const чи final і буде вам щастя:
const int main(const int argc, const char * const * const argv) {
  printf("Вітаю, світе!\n");
}

Це не зовсім те, тому що у Хаскелі обчислення ліниві (як Future в Яві), але зрозуміти буде легше. До речі, змінні які не змінюються після ініціалізації є не тільки в Хаскелі:
Цитата
[vlisivka@apollo makefile]$ make
echo "foo"
foo

[vlisivka@apollo makefile]$ make TEST=bar
echo "bar"
bar
[vlisivka@apollo makefile]$ cat makefile

TEST=foo

all:
      echo "$(TEST)"

тож краще їх змінними не називати.
І як же ж треба називати змінну частину функції?


Щоправда, можна зробити IORef отримавши майже змінну (в традиційному розумінні), але до цього ще ж треба пережити культурний шок "а де ж змінні"?
Який такий шок? Ви математику ще не проходили? :-)
[Fedora Linux]

Відсутній coirius

  • Кореспондент
  • ***
  • дописів: 175
  • Карма: +0/-0
  • ArchLinux
Re: Fedora 12
« Відповідей #31 : 2009-11-21 11:00:45 »
Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3640
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Re: Fedora 12
« Відповідей #32 : 2009-11-21 11:26:48 »
Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?
Абсолютно. Вони навіть за тиждень до випуску зробили так, щоб KDE 4 та GIMP на картках NVidia було неможливо користуватися.  ;)
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній coirius

  • Кореспондент
  • ***
  • дописів: 175
  • Карма: +0/-0
  • ArchLinux
Re: Fedora 12
« Відповідей #33 : 2009-11-21 11:31:22 »
Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?
Абсолютно. Вони навіть за тиждень до випуску зробили так, щоб KDE 4 та GIMP на картках NVidia було неможливо користуватися.  ;)
От блін, у мене картка від Nvidia  >:(

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3640
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Re: Fedora 12
« Відповідей #34 : 2009-11-21 11:33:38 »
Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?
Абсолютно. Вони навіть за тиждень до випуску зробили так, щоб KDE 4 та GIMP на картках NVidia було неможливо користуватися.  ;)
От блін, у мене картка від Nvidia  >:(
Втіштеся, це було зроблено, щоб можна було користуватися qemu на картках Intel і ATi.
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Жорж

  • Гість
Re: Fedora 12
« Відповідей #35 : 2009-11-21 12:25:20 »
Використовуйте const чи final і буде вам щастя:
const int main(const int argc, const char * const * const argv) {
  printf("Вітаю, світе!\n");
}

Воно, звісно, добре, що Ви вмієте додати до опису аргумента функції const, але чи десь я казав, шо у Ц++ чи Джаві не можна зі сталою зробити те, що можна в Хаскелі?
Здається, я натякав на зворотнє, тож Вам варто було вигадати щось подібне до:

x = 3
foo = x
bar = x := 5 -- уявімо, що в нас є оператор присвоєння :=, а х - змінна

main = do
  print foo
  bar
  print foo

і запустивши цей витвір отримати

3
5

Цитата
Це не зовсім те, тому що у Хаскелі обчислення ліниві (як Future в Яві), але зрозуміти буде легше. До речі, змінні які не змінюються після ініціалізації є не тільки в Хаскелі:

Future -  то не ліниві обчислення; навіть якщо воно не знадобиться, Future буде обчислене повністю.
І, власне, лінивість жодного стосунку не має до функціональної чистоти  мови. Хаскель міг би бути так само нелінивим (власне, можна скрізь ліпити $! чи seq примушуючи обчислення), але бути чистим як нелінивий Камл.

Цитата
тож краще їх змінними не називати.
І як же ж треба називати змінну частину функції?

Ви про аргумент, чи Ви математику ще не проходили?

Цитата
Який такий шок?

Шок від того, що звичний досвід програмування при застосуванні до чистої лінивої мови може призводити до хибних висновків щодо швидкодії та потреб ресурсів причому у обидва боки - як до перебільшення, так і до применшення.

Скажімо, чи багато з тих, хто тут обговорював необхідність чи недоречність м'якого знака, одразу здогадаються, що такий дивний спосіб пошуку значення найменшого елемента списку, як сортування злиттям з подальшим вибором першого елемента матиме кількість операцій O(N), а не O(NlogN) як у алгоритму сортування, що буде використаний?

Та вже один виправлений приклад (той що вгорі)

x = 3
foo = x
bar = x := 5 -- уявімо, що в нас є оператор присвоєння :=, а х - змінна

main = do
  print foo
  return bar -- тепер скомпілюється
  print foo

викличе певне здивування у людини, що досі писала return виключно в javascript чи PHP.

Відсутній Re.

  • Загальний модератор
  • Літератор
  • *****
  • дописів: 1898
  • Карма: +1/-0
Re: Fedora 12
« Відповідей #36 : 2009-11-21 12:36:04 »
Там є змінні, тільки їх змінювати не можна.
Це лише  один я у цьому реченні не бачу логіки?

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
Re: Fedora 12
« Відповідей #37 : 2009-11-21 17:13:41 »
Там є змінні, тільки їх змінювати не можна.
Це лише  один я у цьому реченні не бачу логіки?

Якщо змінна в режимі тільки для читання для вашого процесу, то це не означає що вона не може змінюватися іншим процесом. Напр. системний лічильник часу весь час змінюється, але ви не можете змінити його (з під користувача). Так зрозуміліше?
[Fedora Linux]

Відсутній Re.

  • Загальний модератор
  • Літератор
  • *****
  • дописів: 1898
  • Карма: +1/-0
Re: Fedora 12
« Відповідей #38 : 2009-11-21 18:37:27 »
Так зрозуміліше?
Так, але в цій мові програмування тоді це не змінна: вона ніколи не міняється, тоді й немає логіки її так називати, але це я так, думки в голос.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
Re: Fedora 12
« Відповідей #39 : 2009-11-21 18:56:14 »
Здається, я натякав на зворотнє, тож Вам варто було вигадати щось подібне до:

x = 3
foo = x
bar = x := 5 — уявімо, що в нас є оператор присвоєння :=, а х — змінна

main = do
  print foo
  bar
  print foo

і запустивши цей витвір отримати

3
5
[vlisivka@apollo gjs-ліниві обчислення]$ cat test.js
#!/usr/bin/gjs --include-path=.

Const print=imports.log.g_log;

var x=function() 3;
const foo=function() x();
const bar=function() { x=function() 5; };

print(foo());
bar();
print(foo());

[vlisivka@apollo gjs-ліниві обчислення]$ ./test.js
3
5
Так краще? :-)

Цитата
Це не зовсім те, тому що у Хаскелі обчислення ліниві (як Future в Яві), але зрозуміти буде легше. До речі, змінні які не змінюються після ініціалізації є не тільки в Хаскелі:

Future —  то не ліниві обчислення; навіть якщо воно не знадобиться, Future буде обчислене повністю.
Future — це інтерфейс, а ви говорите про реалізацію — FutureTask. Суть моєї ідеї в тому, що при виклику функції замість обчислення значення і повернення результату негайно, можна повертати Future, яке обчислюється потім, коли (якщо) викличуть Future.get(). Можна використовувати і Callable, але Future має перевагу в тому, що, при необхідності, можна задіяти FutureTask і рахувати в декілька потоків, якщо на сервері декілька процесорів, що значно зменшує час відклику системи без зміни логіки програми. Якби санки зробили Future розширенням Callable (або хоча б однаково назвали методи), було б значно простіше.


Цитата
тож краще їх змінними не називати.
І як же ж треба називати змінну частину функції?

Ви про аргумент, чи ви математику ще не проходили?
Так, про них. ( тільки s/частина/величина/). Їх, здається, Декарт ввів (і функції і змінні величини).

АРГУМЕНТ, -у, ч. 1. Книжн. Підстава, доказ, які наводяться для обґрунтування, підтвердження чого-небудь. 2. Мат. Незалежна змінна величина.

Цитата
Який такий шок?

Шок від того, що звичний досвід програмування при застосуванні до чистої лінивої мови може призводити до хибних висновків щодо швидкодії та потреб ресурсів причому у обидва боки — як до перебільшення, так і до применшення.

Ну я знайомий з make вже років 15-ть і ніякого шоку в мене воно не виникає. Навпаки, я такий стиль люблю. Хоча він створює проблеми з відлагодженням, так як напр. виняткова ситуація може виникнути і буде оброблена в зовсім іншій підсистемі, порушуючи ізоляцію підсистем. Гібернейт з лінивими обʼєктами, які кидали помилки аж у шаблонах при надсиланні відповіді клієнту, попсув мені багато крові. :-)

Скажімо, чи багато з тих, хто тут обговорював необхідність чи недоречність мʼякого знака, одразу здогадаються, що такий дивний спосіб пошуку значення найменшого елемента списку, як сортування злиттям з подальшим вибором першого елемента матиме кількість операцій O(N), а не O(NlogN) як у алгоритму сортування, що буде використаний?
У Хаскелі, це буде не сортування. Ви ж йому ставите ціль відібрати найменший елемент з двох, а не посортувати їх за рангом. Так само як "make foo.o" не компілює всю програму, хоча і знає як.
[Fedora Linux]

Жорж

  • Гість
Re: Fedora 12
« Відповідей #40 : 2009-11-21 19:56:02 »
[vlisivka@apollo gjs-ліниві обчислення]$ ./test.js
3
5
Так краще? :-)

Ви хотіли показати, що у джаваскрипті можливі ліниві обчислення? Але ж я, здається, ніде не писав, що це неможливо і не просив спростувати?
Цікаво, навіщо мені вдруге показувати які фокуси можна робити зі змінними НЕ у Хаскелі, коли я кажу що У Хаскелі зробити щось певне не вдастся.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
Re: Fedora 12
« Відповідей #41 : 2009-11-21 20:28:37 »
[vlisivka@apollo gjs-ліниві обчислення]$ ./test.js
3
5
Так краще? :-)

Ви хотіли показати, що у джаваскрипті можливі ліниві обчислення? Але ж я, здається, ніде не писав, що це неможливо і не просив спростувати?
Цитата
Здається, я натякав на зворотнє, тож Вам варто було вигадати щось подібне до:

Цікаво, навіщо мені вдруге показувати які фокуси можна робити зі змінними НЕ у Хаскелі, коли я кажу що У Хаскелі зробити щось певне не вдастся.
Ой, ви тут один? Тоді перепрошую. :-)
[Fedora Linux]

Відсутній coirius

  • Кореспондент
  • ***
  • дописів: 175
  • Карма: +0/-0
  • ArchLinux
Re: Fedora 12
« Відповідей #42 : 2009-11-21 20:46:27 »
Раніше розробники заявляли про цільову аудиторію проекту Федори. Цей реліз відповідає тим заявам?
Абсолютно. Вони навіть за тиждень до випуску зробили так, щоб KDE 4 та GIMP на картках NVidia було неможливо користуватися.  ;)
От блін, у мене картка від Nvidia  >:(
Втіштеся, це було зроблено, щоб можна було користуватися qemu на картках Intel і ATi.

Думаю, що комп'ютерів із картками Nvidia більше ніж з Intel і ATi.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
Re: Fedora 12
« Відповідей #43 : 2009-11-21 20:52:19 »
Так зрозуміліше?
Так, але в цій мові програмування тоді це не змінна: вона ніколи не міняється, тоді й немає логіки її так називати, але це я так, думки в голос.

Величина, яка ніколи не міняється, називається константа. В математиці нема такого поняття як «міняння змінної величини», тому ніякої проблеми в тому, що змінні (в математичному сенсі) в Хаскелі не можна міняти, я не бачу. Це «змінні» в їхньому оригінальному сенсі:

f(x)=x-1, де x=(a+b+c)2, де a=2, b=3, і c=5. Підставляємо фактичні значення змінних, проводимо обчислення, маємо результат. Запитайте вашого вчителя з математики: «як змінити значення змінної x», «де тут оператор присвоєння», і «скільки біт у арифметиці»?
[Fedora Linux]

Відсутній Re.

  • Загальний модератор
  • Літератор
  • *****
  • дописів: 1898
  • Карма: +1/-0
Re: Fedora 12
« Відповідей #44 : 2009-11-21 21:24:15 »
Величина, яка ніколи не міняється, називається константа.
А як це все разом називається? Правильно, величина. Отже, не доцільніше вжити узагальнений термін? ;)