avva: (moose)
[personal profile] avva
Lua: Good, bad, and ugly parts (есть также обсуждение на HN)

Отличный обзор языка Lua, с подробными списками хорошего/плохого в нем, с которыми я согласен процентов на 80. Рекомендуется всем, кто хоть немного знает этот язык хотя бы на уровне простейших программ; те, кто не знают совсем, тоже, конечно, могут прочитать, но все-таки адекватное впечатление о языке из этих списков не составить.

Я люблю Lua за его элегантность, концептуальную простоту, синтаксис, который легко запомнить и, как бы это сказать, easy on the eyes. Lua примерно соответствует по возможностям и устройству языка Джаваскрипту, и при этом лучше его почти во всем. Гипотетический мир, в котором языком веба вместо JS является Lua, очень хорош; увы, это нереальные мечты.

В последнее время я пробовал писать небольшие скрипты для всяких мелких нужд, или очень простые прототипы, на Lua (вместо Питона). Не всегда это хорошо получается. Три главных вещи, которых мне не хватало в таких случаях в Lua, были: 1) поддержка Юникода; 2) удобная поддержка регулярных выражений; 3) list comprehension.

Эти проблемы решаются при желании, но я не углублялся в Lua (или Metalua) настолько далеко, чтобы их решать. Кроме того, я не могу рекомендовать Lua для больших проектов, скажем, больше 5000 строк (может, он и хорошо подходит для них; не знаю, сомневаюсь, и в любом случае нет своего опыта такого рода). Но ознакомиться с ним в любом случае дело полезное, по-моему.

Date: 2013-03-11 08:13 am (UTC)
From: [identity profile] potan.livejournal.com
pm@pm:~$ lua
Lua 5.2.1  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> function f(n) n+1 end
stdin:1: syntax error near '+'

Date: 2013-03-11 08:17 am (UTC)
From: [identity profile] vesch9.livejournal.com
function f(n) local a = n+1 end

И где?

Date: 2013-03-11 08:22 am (UTC)
From: [identity profile] potan.livejournal.com
> function f(n) a = n+1  end
> print(f(4))

>

Re: И где?

Date: 2013-03-11 08:32 am (UTC)
From: [identity profile] vesch9.livejournal.com
Где - что? По-моему, мы друг друга не понимаем.
Вы первым комментарием имели в виду, что вам не нравится вообще наличие оператора return или необходимость каждый раз заканчивать им функцию?

Re: И где?

Date: 2013-03-11 08:39 am (UTC)
From: [identity profile] potan.livejournal.com
В нормальных языках функция возвращает значение последнего выражения. В языках, в которых функция может состоять из нескольких выражений можно понять наличие return как выход из функции посредине. Но зачем его писать перед последним выражением я понять не могу.

Re: И где?

Date: 2013-03-11 08:54 am (UTC)
From: [identity profile] vesch9.livejournal.com
А мне удобней с return'ом. Так явно обозначается выход из функции, его проще увидеть и легко искать.
К тому же, в вашем случае непонятно, нужно ли выходить из функции, если последним выражением в блоке был вызов другой функции (а не присваивание):
function f(n)
if n > 0 then
g(n) -- return?
end
f(n-1)
end

Re: И где?

Date: 2013-03-11 09:22 am (UTC)
From: [identity profile] potan.livejournal.com
Так там if в функции не последнее выражение.

Я как-то редко пишу функции, которые на один экран не помещаются. И отступами вложенность блоков помечаю. Тогда сразу видно, какое выражение последнее.

Re: И где?

Date: 2013-03-11 07:25 pm (UTC)
From: [identity profile] migmit.livejournal.com
Это в каких? В Лиспе, что ли?

Re: И где?

Date: 2013-03-12 03:24 am (UTC)
From: [identity profile] potan.livejournal.com
Кроме лиспов - Perl, Ruby, Scala, R, функциональные языки (Erlang, ML, Haskell...), Rust.
По моему достаточно, что бы на извращенные языки не было необходимости смотреть.
Edited Date: 2013-03-12 03:25 am (UTC)

Re: И где?

Date: 2013-03-12 04:22 am (UTC)
From: [identity profile] migmit.livejournal.com
Ну, Haskell тут явно не в тему. То есть, по формальным признакам подходит, но, поскольку там выражение в функции всего одно, это мало что говорит.

Re: И где?

Date: 2013-03-12 06:24 am (UTC)
From: [identity profile] potan.livejournal.com
Там есть do-нотация, которыя выглядтн как будто выражение не одно.
Был бы я совсем формалистом - еще бы Prolog и APL вспомнил.

Re: И где?

Date: 2013-03-12 06:36 am (UTC)
From: [identity profile] migmit.livejournal.com
> Там есть do-нотация, которыя выглядтн как будто выражение не одно.

И в которой в 80% случаев нужен return.

Re: И где?

Date: 2013-03-12 06:42 am (UTC)
From: [identity profile] potan.livejournal.com
Мне он в 90% случаев не требовался.
К тому же это функция и вызов return в середине do блока ни к каким особым эффектам не приведет

Re: И где?

Date: 2013-03-12 06:51 am (UTC)
From: [identity profile] migmit.livejournal.com
Ну и что, что функция? Выглядит как обычный return. В конце концов, do-нотация тоже только выглядит последовательностью выражений.

Я как-то заметил, что в тех случаях, когда return не нужен, do-нотация тоже почти всегда не нужна. Скажем, проще и быстрее написать doSomething1 >> doSomething2 вместо do {doSomething1; doSomething2}.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 02:57 pm
Powered by Dreamwidth Studios