Автор Тема: Lua  (Прочитано 115169 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #165 : Ноябрь 13, 2012, 10:34:24 am »
На уровне сортировок - можно. Особенно современный C++ (с++11).
У меня же там даже своих шаблонов нет :-) Там вообще ничего сложного не используется. Обычная функция sort (которая мгновенно нагугливается) и обычные лямбды, которые ровно те же (для этой задачи) что и в js например.

Сдаюсь. Лямбды, шаблоны, JS - куда уж проще....  :)

ps У меня вот JS курить терпения не хватило. Lua на порядок проще.
Где ты тут шаблоны нашел? :-) В моем коде их нет. Есть только лямбды.
А лямбды и замыкания есть и в Lua. Тут отличий Lua от js пожалуй и нет никаких.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #166 : Ноябрь 13, 2012, 10:41:10 am »
 :o
А это че?
vector<string> s = {"З","Д","А","В","Б","Е","Ё","Г","Ж"};
Я cpp не знаю... Но в wiki сказано:
vector — это шаблон из стандартной библиотеки C++

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #167 : Ноябрь 13, 2012, 10:43:52 am »
:o
А это че?
vector<string> s = {"З","Д","А","В","Б","Е","Ё","Г","Ж"};
Я cpp не знаю... Но в wiki сказано:
vector — это шаблон из стандартной библиотеки C++

std::vector - это шаблонный класс. А вот vector<string> это уже никакой не шаблон, а конкретный тип ;-) Для того чтобы использовать vector не нужно что-либо знать про шаблоны.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #168 : Ноябрь 13, 2012, 10:49:32 am »
Ничего не понял. Так шаблон или нет? Понятно что в данном месте это конкретный тип. Но без шаблонов это работать ведь не будет. Или как?

Если там нет ничего специфичного для Cpp&STL, значит можно переписать практически 1:1 на CP. Так?  :)

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Lua
« Ответ #169 : Ноябрь 13, 2012, 11:12:18 am »
Шаблонный класс использует шаблоны, именно так.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #170 : Ноябрь 13, 2012, 11:20:30 am »
Если там нет ничего специфичного для Cpp&STL, значит можно переписать практически 1:1 на CP. Так?  :)
В CP нет лямбд (ака функциональные/процедурные литералы), так что увы, 1 в 1 мой код не получится переписать. Также там нет литералов для массивов.

Ну а в конкретном месте vector<string> вполне можно заменить на какой-нибудь VectorForString record. Ну или там вообще на ARRAY OF STRING.

Замечу, что по факту массивы в CP и Обероне по своей сути те же самые шаблонные типы что и какой-нибудь vector в stl. Только вот в CP и Обероне программист не может создавать свои собственные шаблонные типы, он ограничен использованием только предопределенных шаблонных типов (тот же ARRAY).

Если мы изучение C++ ограничиваем уровнем Lua/Oberon, то std::vector для изучающего будет тем же, чем ARRAY OF something в Обероне - некой магической хренью которая специализируется конкретным типом, и с помощью этого превращается в полноценный тип.

Отличий vector<int> от ARRAY OF INTEGER нет никакой с точки зрения такого программиста (ну, разве что второе писать дольше). Сложности добавочной в C++ нет (на этом уровне, и на уровне тех моих исходников).
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #171 : Ноябрь 13, 2012, 11:25:34 am »
Чет ты мне прям мои шаблоны о шаблонах ломаешь  ;D

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #172 : Ноябрь 13, 2012, 11:33:21 am »
Визуально vector не отличается от обычного массива... да...
Но я всегда считал что фишка шаблонов в том и есть, что они так невинно выглядят :D
Вот как "sort()" без шаблонов будет работать?

В CP можно извратиться да... но это будет не 1:1. Нужно будет либо кучу sort_int, sort_string и т.д. наплодить. Либо делать вариантные записи и дальше IF'ы... :)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #173 : Ноябрь 13, 2012, 11:42:25 am »
С. Липпман - C++ для начинающих
http://cpp.com.ru/lippman/c10.html

Неее нах... я лучше 10 Lua изучу  ;D  ;D  ;D

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #174 : Ноябрь 13, 2012, 11:43:47 am »
Визуально vector не отличается от обычного массива... да...
Но я всегда считал что фишка шаблонов в том и есть, что они так невинно выглядят :D
Вот как "sort()" без шаблонов будет работать?
Без шаблонов в каком именно месте? Массив обычный оно тоже отсортировать сможет.

int main() {
    int arr[] = {5,3,1,9};
    sort(begin(arr), end(arr));
    for (auto i : arr)
        cout << i << endl;
    return 0;
}
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #175 : Ноябрь 13, 2012, 11:46:55 am »
Ага, только шаблон как был так и остался:
при вызове вышеописанной функции sort необязательно указывать параметр шаблона (если он совпадает с типом элементов аргумента-массива):

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #176 : Ноябрь 13, 2012, 11:48:50 am »
С. Липпман - C++ для начинающих
http://cpp.com.ru/lippman/c10.html

Неее нах... я лучше 10 Lua изучу  ;D  ;D  ;D
Еще раз - зачем ты читаешь про шаблоны? Ты что, сам их писать собираешься? ;-) Чтение вот док по этим шаблонам (то есть по тому как устроена sort, vector и так далее) эквивалентно чтению исходников и документации по интерпретатору Lua и по компилятору Оберона. Во всех смыслах эквивалентно - и по сложности (хотя шаблоны конечно проще) и по востребованности для озвученного ранее типа программистов.

Просто там, где в Lua и Обероне придется изменять компилятор или интерпретатор (менять язык), там в плюсах обойдется написанием своего шаблона.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #177 : Ноябрь 13, 2012, 11:50:25 am »
Ага, только шаблон как был так и остался:
при вызове вышеописанной функции sort необязательно указывать параметр шаблона (если он совпадает с типом элементов аргумента-массива):
И-и? Тебя слово пугает? Или возможность написать самостоятельно такое же?
Еще раз, сложности тут ровно столько же, сколько скажем у шаблонной функции NEW в Обероне.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #178 : Ноябрь 13, 2012, 11:56:17 am »
Да не  :)
Я просто не могу пользоваться тем, чего не понимаю. ХЗ, может я один такой  :)

Моё ИМХО - Lua в 1000 раз проще CPP  ;D  ;D  ;D

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #179 : Ноябрь 13, 2012, 12:05:46 pm »
Да не  :)
Я просто не могу пользоваться тем, чего не понимаю. ХЗ, может я один такой  :)

Моё ИМХО - Lua в 1000 раз проще CPP  ;D  ;D  ;D
Тогда объясни как именно в Lua работает функция Table.sort :-)
Вот точно и детально. Где там и какая магия, ведь оно работает с разными типами.

Дело в том, что заковыриваться в детали реализации можно почти бесконечно много. Вначале до уровня либы, затем до уровня компилятора, затем до уровня машкода, затем идем на уровень процессора и так далее. Плюсы хороши тем, что не покидая язык ты можешь зарыться достаточно далеко и сделать многое. Если тебе нужно. Если не нужно, можно оставаться на том же уровне что и Lua/Oberon, не заклядывая внутрь. Считай что std::sort - это функция вшитая в язык (аля NEW в Обероне), а std::vector - это тоже конструкт языка с помощью которого делаются конкретные типы. И нет никакой библиотеки, нет никаких шаблонов. Весь stl вшит в язык. (кстати, стандарт на C++ явно указывает, что так оно и может быть, то есть файлов-хедеров iostream, vector, algorithm и так далее может просто не быть).
Y = λf.(λx.f (x x)) (λx.f (x x))