ЯП без глобальных переменных

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

ЯП без глобальных переменных

Сообщение jangle » 01.06.2010 (Вт) 16:33

Народ, приведите пример языка программирования без глобальных переменных, и только с локальными переменными, определяемых внутри функций.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: ЯП без глобальных переменных

Сообщение ANDLL » 01.06.2010 (Вт) 17:43

Например Erlang
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ЯП без глобальных переменных

Сообщение Денис » 01.06.2010 (Вт) 17:51

Где почитать про вред от глобальных переменных? Я погуглил, забавно, но все пишут примерно так: "ну, про вред глобальных переменных все и так знают, поэтому бла-бла-бла..."

Или, объясните, кто знает?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: ЯП без глобальных переменных

Сообщение Proxy » 01.06.2010 (Вт) 18:47

Если учесть,что эрланг целиком и полностью создан для распределённых систем, то наверное там своя специфика. Например так навязывается определённый стиль программирования, когда отдельные модули (разработанные разными программистами) могут взаимодействовать только через специальный интерфейс, отслеживающий все транзакции. Хотя про эрланг я знаю только то, что это один из языков, юзабельных для распределённых вычислений.
Ну и плюс наверное чтобы избежать гонки и дэдлоки при одновременном присвоении значения глобальной переменной.
Follow the white rabbit.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ЯП без глобальных переменных

Сообщение alibek » 01.06.2010 (Вт) 21:05

SQL (или другой язык ФП). Вообще без переменных.
Lasciate ogni speranza, voi ch'entrate.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: ЯП без глобальных переменных

Сообщение Proxy » 01.06.2010 (Вт) 21:12

alibek, а разве то, что он содержит хранимые процедуры, делает его функционально-ориентированным ЯВУ? Он же вроде даже в базовой спецификации никаких процедур не имеет. Да и даже если бы и имел, то стал бы он классифицироваться как язык программирования?
Follow the white rabbit.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: ЯП без глобальных переменных

Сообщение ANDLL » 01.06.2010 (Вт) 22:05

Я пожалуй выскажу свое незрелое мнение...

SQL это не функциональный язык программирования. Вообще языки которые якобы функицональные на самом деле деляться на две большие категории. Во первых, есть языки которые на самом деле не функциональные, но имеют функциональные фичи, это C#, JS. В них есть одна фишка ФП(замыкания), но на самом деле люди которые на них пишут крайне далеки от ФП. И есть действительно функциональные языки - Erlang, Haskell. В них есть весь суповой набор ФП языков, а главное - они не приспособлены для императивного программирования. Так вот, в этом смысле SQL - вообще не функциональный. Если понятее проведу ряд - C# - ООП язык, VB6 - язык с ооп фичами, ASM - вообще не ООП язык.

Само по себе отсутствие глобальных переменных в эрланге ничего особого не дает.
В эрланге у переменных есть аж три особенности - все они локальные, в языке нет понятия передачи по ссылке(ByRef) и в языке нет понятия "повторное присвоение переменной". Собственно, в эрланге нельзя написать A = 5, A = 6. Это вызовет ошибку на втором присвоение.
Это нужно собственно для построение легко-масштабируемой системы с четко прослеживаемыми зависимостями
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: ЯП без глобальных переменных

Сообщение Proxy » 01.06.2010 (Вт) 22:35

ASM - вообще не ООП язык.

ASM вообще не ЯВУ, а значит само-собой процедурный.
Последний раз редактировалось Anonymous 01.06.2010 (Вт) 22:45, всего редактировалось 2 раз(а).
Follow the white rabbit.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: ЯП без глобальных переменных

Сообщение Proxy » 01.06.2010 (Вт) 22:44

Так вот, в этом смысле SQL - вообще не функциональный. Если понятее проведу ряд - C# - ООП язык, VB6 - язык с ооп фичами, ASM - вообще не ООП язык.

SQL вообще не язык программирования, я настаиваю :) ИМХО он для хранимых процедур такой же контейнер, как XML для любых данных, просто дополнение в виде процедур только одно и не требует явного указания на язык, на котором написаны процедуры. Если кто-нибудь выпустит СУБД с SQL, в котором процедуры будут в Java например, то это ничего радикально не изменит, стоит только интерпретатору организовать доступ к сущностям SQL как к объектам.
Follow the white rabbit.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ЯП без глобальных переменных

Сообщение alibek » 01.06.2010 (Вт) 22:53

Proxy писал(а):SQL вообще не язык программирования, я настаиваю :)

Но язык, который во многом близок к функциональным языкам.
Lasciate ogni speranza, voi ch'entrate.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: ЯП без глобальных переменных

Сообщение SLIM » 01.06.2010 (Вт) 23:00

Всетки SQL - это не язык в том смысле в котором здесь обсуждается. В широком смысле - да, язык.
Хранимые процедуры - это только контейнер, в котором хранится последовательность выполняемых запросов.
Но пусть даже это язык. В нем таки есть глобальные переменные. Например в T-SQL есть переменные, начинающиеся на @@ - глобальны для всех хранимых процедур, принимают значения локально.
Пишите жизнь на чистовик.....переписать не удастся.....

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: ЯП без глобальных переменных

Сообщение jangle » 01.06.2010 (Вт) 23:11

ANDLL писал(а):Например Erlang


Cпасибо, мне интересно как передаются данные между функциями без глобальных переменных

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ЯП без глобальных переменных

Сообщение iGrok » 01.06.2010 (Вт) 23:49

jangle писал(а):Cпасибо, мне интересно как передаются данные между функциями без глобальных переменных

Как аргументы. Разве не очевидно?
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: ЯП без глобальных переменных

Сообщение jangle » 02.06.2010 (Ср) 7:14

iGrok писал(а):Как аргументы. Разве не очевидно?


Вроде бы неудобно это. Приводит к избыточному коду.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ЯП без глобальных переменных

Сообщение alibek » 02.06.2010 (Ср) 8:57

jangle писал(а):Вроде бы неудобно это. Приводит к избыточному коду.

Зато предсказуемо и проверяемо.
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: ЯП без глобальных переменных

Сообщение jangle » 02.06.2010 (Ср) 10:02

Вот такой пример, допустим есть 4 функции и 2 параметра X и Y. Первый передается в функцию One (x) возвращается X1, второй в функцию Two(y) возвращается Y1. Потом X1, Y1 передаются в функцию Three (x1,y1), а результат Three в Four.

Funct One (x)
Funct Two (y)
Funct Three (x1,y1)
Funct Four (z)

В результате, без глобальных переменных, код будет выглядеть так: Four (Three (One (x), Two (y)))
Не очень понятно с первого взгляда, в первую очередь из за массы скобок в коде.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ЯП без глобальных переменных

Сообщение alibek » 02.06.2010 (Ср) 10:20

Если пугают скобки, используй промежуточные переменные.
Для компилятора все понятно.
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: ЯП без глобальных переменных

Сообщение jangle » 02.06.2010 (Ср) 11:15

alibek писал(а):Если пугают скобки, используй промежуточные переменные.
Для компилятора все понятно.


В таком случае, мало понятен смысл отказа от глобальных переменных в некоторых языках

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ЯП без глобальных переменных

Сообщение Денис » 02.06.2010 (Ср) 12:34

Денис писал(а):Где почитать про вред от глобальных переменных? Я погуглил, забавно, но все пишут примерно так: "ну, про вред глобальных переменных все и так знают, поэтому бла-бла-бла..."

Или, объясните, кто знает?


Чо вы меня игнорируете? Отвечайте на мой ответ!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ЯП без глобальных переменных

Сообщение iGrok » 02.06.2010 (Ср) 12:48

Денис писал(а):
Денис писал(а):Или, объясните, кто знает?

Чо вы меня игнорируете? Отвечайте на мой ответ!

Да только один - неочевидность. Если к переменной есть доступ из разных мест когда, ты никогда не знаешь наверняка, что в ней лежит.
Особенно в большом проекте, который пишут несколько человек. А если и захочешь узнать, придётся перелопатить весь проект.

jangle писал(а):
alibek писал(а):Если пугают скобки, используй промежуточные переменные.
Для компилятора все понятно.


В таком случае, мало понятен смысл отказа от глобальных переменных в некоторых языках

В смысле? Я чуть выше написал, зачем в основном это делается.
А "используй промежуточные переменные" - так это же промежуточные. Локальные, одноразовые. Не более того.
label:
cli
jmp label

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ЯП без глобальных переменных

Сообщение Денис » 02.06.2010 (Ср) 15:22

iGrok писал(а):Да только один - неочевидность. Если к переменной есть доступ из разных мест когда, ты никогда не знаешь наверняка, что в ней лежит.

А я-то думал это связано с какой-то лютой уязвимостью конечных продуктов или утечками памяти в них.

А как же флаги тогда? Булевы. Тоже нельзя? А как же настройки? Один раз при запуске прочитал ini-файл, рассовал по переменным некоего глобального класса и пользуешься. Это как решается? Впрочем, это несколько другое.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ЯП без глобальных переменных

Сообщение Хакер » 02.06.2010 (Ср) 16:06

А как же флаги тогда? Булевы. Тоже нельзя? А как же настройки? Один раз при запуске прочитал ini-файл, рассовал по переменным некоего глобального класса и пользуешься. Это как решается? Впрочем, это несколько другое.


Например так: каждой процедуре, которой это нужно, передаётся ссылка на объект-контейнер, хранящий все флаги и опции.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: ЯП без глобальных переменных

Сообщение Proxy » 02.06.2010 (Ср) 16:24

ага-ага... ссылку на объект контейнер передать можно, а глобальных переменных нет - не логично. Так бы всё на указателях и крутилось и было бы по аналогии с глобальными переменными.
Follow the white rabbit.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ЯП без глобальных переменных

Сообщение iGrok » 02.06.2010 (Ср) 16:29

Proxy писал(а):ага-ага... ссылку на объект контейнер передать можно, а глобальных переменных нет - не логично. Так бы всё на указателях и крутилось и было бы по аналогии с глобальными переменными.

Нет, всё логично. Контейнер с настройками и флагами - рид-онли. Т.е. только для считывания и использования настроек.
label:
cli
jmp label

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: ЯП без глобальных переменных

Сообщение Proxy » 02.06.2010 (Ср) 16:53

Тогда почему бы не организовать просто без заморочек глобальные переменные с овнером? Типа чтобы все не овнеры могли только получить значение, но не присвоить? Гораздо изящней было бы имхо. И после выгрузки овнера регистрация переменной снималась бы и память перераспределялась.
Follow the white rabbit.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ЯП без глобальных переменных

Сообщение iGrok » 02.06.2010 (Ср) 18:14

Proxy писал(а):Тогда почему бы не организовать просто без заморочек глобальные переменные с овнером? Типа чтобы все не овнеры могли только получить значение, но не присвоить? Гораздо изящней было бы имхо. И после выгрузки овнера регистрация переменной снималась бы и память перераспределялась.

Гораздо изящнее???? :shock: На кой икс городить каких-то там овнеров, если всё решается стандартными средствами - приватными переменными класса-контейнера??? И после его выгрузки... Ну ты понял, да?
label:
cli
jmp label


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

    TopList