Oberon space
General Category => Общий раздел => Тема начата: ilovb от Ноябрь 06, 2012, 05:38:31 pm
-
Все больше присматриваюсь к этому чуду, и все больше понимаю что это тот инструмент, который мне нужен. Дико жалею, что для плотного знакомства пока не хватает времени.
Сделал тут очередное исследовательское гугление:
Lua distributions (Lua + libraries for certain platforms) (http://lua-users.org/wiki/LuaDistributions)
Lua libraries or libraries with a Lua binding (http://lua-users.org/wiki/LibrariesAndBindings)
Utilities for use with Lua: source processors, builders, debuggers, profilers, etc (http://lua-users.org/wiki/LuaTools)
and more... (http://lua-users.org/wiki/LuaAddons)
wiki: Lua Directory (top level directory of all Lua content at this wiki) (http://lua-users.org/wiki/LuaDirectory)
Ленивым мастайщикам сюда... :P (http://code.google.com/p/luaforwindows/)
Редактор/дежучер LuaEdit (http://luaforge.net/projects/luaedit/)
LÖVE - движок для разработки 2D игр на Lua (http://love2d.ru/)
Самое известное поделие на нем Mari0 (http://habrahabr.ru/post/139376/)
ps Lua сегодня стал тем, чем мог бы стать Oberon. Легкий мощный прикладной язык, с хорошим окружением и документацией.
-
ps Lua сегодня стал тем, чем мог бы стать Oberon. Легкий мощный прикладной язык, с хорошим окружением и документацией.
Прототипное ООП (как в жабаскрипте) очень настораживает. Настолько сильно настораживает, что хочется закопать не открывая :)
-
Да ладно, я вон в одынэсах вообще без ООП ;D
-
Прототипное ООП (как в жабаскрипте) очень настораживает. Настолько сильно настораживает, что хочется закопать не открывая :)
Вы многого хотите от скриптового ЯП ( я еще могу понять дули в сторону екма скрипта - там есть фундаментальная необходимость доступа к сложным обьектам браузера )... здесь же OOP скорее левая фича... а для скриптования (с точки зрения пользователя) он гораздо более удобен чем тот же тикл. хотелось бы конечно иметь строгую типизацию (пусть даже выводимую)...
-
да ... мне очень понравилось то, что массивы там индексируются с единицы
-
Вы многого хотите от скриптового ЯП ( я еще могу понять дули в сторону екма скрипта - там есть фундаментальная необходимость доступа к сложным обьектам браузера )
что бы быть точнее - развитие технологий потребовало исполнения от екма скрипта того, на что он первоначально не был предназначен... (например гуй браузерный приложений... который без ооп сделать эффективно затруднительно -30 % экономии в обьеме кода штука весомая)
-
Да ладно, я вон в одынэсах вообще без ООП ;D
а нахрен по большому счету он сдался... если нужно получить доступ к внешним обьектам ... это делается через шарпейное апи...
-
да ... мне очень понравилось то, что массивы там индексируются с единицы
Да, мы знаем, что у тебя пунктик на идексацию массивов ;)
P.S. Тогда еще один минус, за нечеловеческую индексацию массивов. Точно закопать :)
-
ps Lua сегодня стал тем, чем мог бы стать Oberon. Легкий мощный прикладной язык, с хорошим окружением и документацией.
Прототипное ООП (как в жабаскрипте) очень настораживает. Настолько сильно настораживает, что хочется закопать не открывая :)
Нет там прототипного ООП, и вообще ООП нет. Там, я бы сказал, ТОП (таблично ориентированное программирование). Идеалогия проста как тапок - все есть таблица (кроме примитивных типов).
Желающие могут конечно изобразить на Луа подобие того подобия ООП что есть в С++/Java/Delphi/Oberon/С#. Но я в этом смысла не вижу.
-
Вы многого хотите от скриптового ЯП ( я еще могу понять дули в сторону екма скрипта - там есть фундаментальная необходимость доступа к сложным обьектам браузера )... здесь же OOP скорее левая фича... а для скриптования (с точки зрения пользователя) он гораздо более удобен чем тот же тикл. хотелось бы конечно иметь строгую типизацию (пусть даже выводимую)...
Для доступа к объектам ООП как раз не надо. Глубинного понимания от автора ЯП основ ООП не требуется (хотя вот в перле, например, даже такая простая вещь выглядит ужасно).
А вот когда самому надо создавать объекты... много объектов... тогда прототипы идут лесом.
P.S. Я уже говорил - в питоне сделали человеческое ООП (при всей скриптовости и динамичности ЯП).
-
Нет там прототипного ООП, и вообще ООП нет. Там, я бы сказал, ТОП (таблично ориентированное программирование). Идеалогия проста как тапок - все есть таблица (кроме примитивных типов).
Желающие могут конечно изобразить на Луа подобие того подобия ООП что есть в С++/Java/Delphi/Oberon/С#. Но я в этом смысла не вижу.
1.Угу.. и это создает определенные неудобства при отображении в него внешних обьектов... но у меня первокурсник справился с этим самостоятельно...
2. Ну нет... говенисто же будет
-
Вы многого хотите от скриптового ЯП ( я еще могу понять дули в сторону екма скрипта - там есть фундаментальная необходимость доступа к сложным обьектам браузера )... здесь же OOP скорее левая фича... а для скриптования (с точки зрения пользователя) он гораздо более удобен чем тот же тикл. хотелось бы конечно иметь строгую типизацию (пусть даже выводимую)...
Для доступа к объектам ООП как раз не надо. Глубинного понимания от автора ЯП основ ООП не требуется (хотя вот в перле, например, даже такая простая вещь выглядит ужасно).
А вот когда самому надо создавать объекты... много объектов... тогда прототипы идут лесом.
P.S. Я уже говорил - в питоне сделали человеческое ООП (при всей скриптовости и динамичности ЯП).
ну, ну -- я же уточнил позицию в сообщении ниже..
-
да ... мне очень понравилось то, что массивы там индексируются с единицы
Да, мы знаем, что у тебя пунктик на идексацию массивов ;)
P.S. Тогда еще один минус, за нечеловеческую индексацию массивов. Точно закопать :)
НДА , Губанов на вас не хватает ...ФОШИСТВУЮЩИЙ вы СИшлепок ;D
-
http://avchernov.livejournal.com/312.html (http://avchernov.livejournal.com/312.html)
-
Все больше присматриваюсь к этому чуду, и все больше понимаю что это тот инструмент, который мне нужен. Дико жалею, что для плотного знакомства пока не хватает времени.
...
ps Lua сегодня стал тем, чем мог бы стать Oberon. Легкий мощный прикладной язык, с хорошим окружением и документацией.
Я, и особенно моя сестра, сие чудо весьма неплохо изучили. Если говорить о грамматике, то несмотря на краткость записи в РБНФ (оно по метрикам того же Свердлова, в плане минималистичности, рвет Оберон как тузик грелку) язык достаточно заковыристый. Одни строковые многострочные литералы чего стоят (попробуйте ка написать лексер).
В плане же конечного программиста, Луа, не подходит для масштабных проектов в силу двух причин:
1) динамическая типизация (рефакторинг == Ад).
2) ограниченные выразительные возможности языка (все есть таблица - ничем не лучше, чем все есть Объект в классическом ООП), следовательно код получается либо многословным, либо не понятным, причем ошибки неверного использования абстракций которые наворочали через таблица, из за пункта (1) не выявляются до тех пор пока программу не запустишь.
Скажем у питона мерзкий пункт (1) остается, зато вот пункта (2) уже практически нет. А у Оберона наоборот - пункта (1) нет, а пункт (2) во всей красе.
Луа отлично подходит для написания мелких и очень мелких программок льдьми которым некогда тратить время на "серьезные" ЯП. Теми же геймдизайнерами например. Порог вхождения низок, и язык ориентирован на обработку табличных данных, которые типичны для игр (внимание, таблицы не подразумевают SQL где-то рядом! равно как и реляционку тоже не подразумевают).
-
"Си-шный рептилоид-технофошист" - что бы не соврать...
-
.... язык достаточно заковыристый. Одни строковые многострочные литералы чего стоят (попробуйте ка написать лексер).
ну да ... только лексеры на нем и писать... ;) нашли "типичную" задачу, для себя и сестры...
-
.... язык достаточно заковыристый. Одни строковые многострочные литералы чего стоят (попробуйте ка написать лексер).
ну да ... только лексеры на нем и писать... ;) нашли "типичную" задачу, для себя и сестры...
Не НА нем, а ДЛЯ него.
-
Не НА нем, а ДЛЯ него.
и что за блажь ..? из серии не признаю ЯП для которого не написал свой лексер, или еще круче.. не считаю, что человек разбирается в ЯП если он не написал для него свой лексер... - на фиг он сдался -обосрался тому кто решает на нем предусмотренные для него задачи?
-
Не НА нем, а ДЛЯ него.
и что за блажь ..? из серии не признаю ЯП для которого не написал свой лексер, или еще круче.. не считаю, что человек разбирается в ЯП если он не написал для него свой лексер... - на фиг он сдался -обосрался тому кто решает на нем предусмотренные для него задачи?
Научная работа по стохастическим грамматикам. Луа был одним из предметов исследования (точнее исходники на луа писанные). Парсер/лексер - это часть инструментария для сбора данных. Стандартные парсеры/лексеры не подходят по ряду причин.
-
Не НА нем, а ДЛЯ него.
и что за блажь ..? из серии не признаю ЯП для которого не написал свой лексер, или еще круче.. не считаю, что человек разбирается в ЯП если он не написал для него свой лексер... - на фиг он сдался -обосрался тому кто решает на нем предусмотренные для него задачи?
Научная работа по стохастическим грамматикам. Луа был одним из предметов исследования (точнее исходники на луа писанные). Парсер/лексер - это часть инструментария для сбора данных. Стандартные парсеры/лексеры не подходят по ряду причин.
это не ответ на вопрос... почему вы ilovb (который примеряется к Луне как пользователь) предложили написать лексер.
-
2 valexey
А я и не говорю что Lua это мана небесная. Мне собсна оберон больше/дальше/выше ;)
Но! На Lua можно взять и решить свою локальную задачу при минимальных трудозатратах, а на обероне хрен. И работать оно будет везде.
Я б начхал вообще на все эти ruby, python, lua, js и т.д., если бы был человечий фреймворк на CP + интерфейсы + делегаты + 32/64 + работает везде + дебагер/профайлер + библиотеки + бинды к кошерным либам + многопоточность... но это фантастика при текущем положении дел.
Каждый раз я берусь исследовать очередной язык... и понимаю что Oberon как язык (с некоторыми оговорками) много лучше чем весь этот современный stuff. Лучше хотя бы в том смысле, что я реально понимаю Вирта, когда читаю "Прожект". Понимаю почему делалось так, а не иначе, вижу шевеление его извилин :)
Когда я смотрю на Lua и вижу такое в документации:
x, y = y, x
меня начинает подташнивать... Ну вот нахрена? Решение локальной проблемы... Фича ради фичи...
И я не вижу там вообще каких то идей/стиля/философии. Это салат из фич (хоть и достаточно простой салат)
Стильный язык - это Оберон. Там ничего не сделано просто так. Каждая часть языка имеет свое место в философии разработки по Вирту. Хорошая это философия или плохая не важно. Важно что Оберон как язык - это целостная/непротиворечивая концепция, рожденная в башке инженера.
Все эти модные язычки, хоть убейте, не производят такого впечатления.
Но у Оберона есть один фатальный недостаток - он мертв. А тот же Lua живее всех живых и в принципе терпим как язык.
-
Важно что Оберон как язык - это целостная/непротиворечивая концепция, рожденная в башке инженера.
Все эти модные язычки, хоть убейте, не производят такого впечатления.
ну не одними инженерами умножаются программисты.. (лично я до недавнего времени считал , что им одна дорога- в дракоманы - если верить тезисам дракологов) а насчет концепций.. - все обьект (Руби) - разве не стильно ;)
-
Вот кстати недавно задумался о том, что BB идеально подходит для написания компонент для 1С (да да там компонентная архитектура). Но вот ведь незадача... оно должно работать и на linux и под 64...
А вот Lua бери и стреляй себе по задачам как из пулемета.
-
Вот кстати недавно задумался о том, что BB идеально подходит для написания компонент для 1С (да да там компонентная архитектура). Но вот ведь незадача... оно должно работать и на linux и под 64...
А вот Lua бери и стреляй себе по задачам как из пулемета.
Луа... для написания компонент "как из пулемета"?.... нда.. стильно. ;) как гуйный фреймворк.. в екма скрипте
-
... а насчет концепций.. - все обьект (Руби) - разве не стильно ;)
Может быть... не знаю. Не достаточно с ним знаком чтобы судить.
Но его вроде сам автор позиционирует как набор свистоперделок на все случаи жизни.
Имхо там даже перебор. Посмотреть хотя бы на список методов у массивов. Этож пипец.
На мой взляд массив должен иметь удобный конструктор, обходиться форычем, сам сортироваться и быстро искаться... точка. Большинство остальных фич пишутся самостоятельно за пять минут, на свой вкус, раз и навсегда. Вот в 1С прикрутили бы конструктор и сортировку... и меня бы это полностью устраивало.
Из реально стильных языков известных мне могу упомнить только Lisp.
Возможно Python еще... но там тоже не без странностей.
-
Луа... для написания компонент "как из пулемета"?.... нда.. стильно. ;) как гуйный фреймворк.. в екма скрипте
Ну а чо? :D
Есть куча задач, которые нереально решить в 1С. А тут вон чуваки забадяжили компоненту для взаимодействия 1с и lua-скриптов. И пожалста весь инструментарий lua доступен.
Хочешь парсить? Бери LPeg и юзай.
Хочешь труляля? Бери Lтруляля и юзай на здоровье... ;D
Хочешь чтоб это под 64 linux сервером работало... Пожалста.
Чем не пулемет? :)
-
Lua для игр и не только (http://itcs.3dn.ru/publ/programmirovanie/lua_dlja_igr_i_ne_tolko_chast_1/8-1-0-63)
-
Ну а чо? :D
То , что обычно скриптовые языки предназначены для "склейки" компонент и реализации нетребовательной к производительности мелкой одноразово используемой доп. функциональности. Ну а если вы хотите "мутить" компоненты.. для 1с то вам в общем случае (для удобства использования) придется делать отображать навороченные структуры (входящие в эти компоненты) в структуры 1с и наоборот - это возможно, процесс описан в руководстве.. но мне он не понравился. Да.. ссылка ниже.. для детсадовцев.
-
На мой взляд массив должен иметь удобный конструктор, обходиться форычем, сам сортироваться и быстро искаться... точка.
Так это же MUMPS! Конструктора удобного правда нет, но и неудобного тоже, вообще нет никакого - не нужен :)
-
Когда я смотрю на Lua и вижу такое в документации:
x, y = y, x
меня начинает подташнивать... Ну вот нахрена? Решение локальной проблемы... Фича ради фичи...
Эта фича необходима в языках с развитыми средствами паттерн-матчинга, типа хаскеля. Там это трактуется как конструирование/деконструирование значений...
-
На мой взляд массив должен иметь удобный конструктор, обходиться форычем, сам сортироваться и быстро искаться... точка.
Так это же MUMPS! Конструктора удобного правда нет, но и неудобного тоже, вообще нет никакого - не нужен :)
А как же там массивы создаются?
-
А как же там массивы создаются?
Путем помещения в массив данных :)
MUMPS - безтиповый язык.
Set language("MUMPS")="The best"
Вот и появился массив language c единственной пока записью (индекс="MUMPS", данные="The best")
-
Так это же MUMPS! Конструктора удобного правда нет, но и неудобного тоже, вообще нет никакого - не нужен :)
не... синтаксис эпохи ограниченных возможностей железа... Создатели 1с же клепали свой скрипт язык для того , что бы им могли пользоваться "типичные одынэсники".. , пупсом из ожидаемой категории пользователей просто никто не будет пользоваться. :D
-
.. , пупсом из ожидаемой категории пользователей просто никто не будет пользоваться. :D
MUMPS на вторых ролях из гордости и сам не станет :)
-
.. , пупсом из ожидаемой категории пользователей просто никто не будет пользоваться. :D
MUMPS на вторых ролях из гордости и сам не станет :)
как и все пупсы... :D
-
как и все пупсы... :D
Не-а, я сравниваю MUMPS c хорошим выдержанным коньяком. Все в один голос говорят - он клопами пахнет :)
-
Есть куча задач, которые нереально решить в 1С.
"Огласите, пжалуйста, весь список."
Впрочем, я, кажется, догадался...
Искусственный интеллект?
-
как и все пупсы... :D
Не-а, я сравниваю MUMPS c хорошим выдержанным коньяком. Все в один голос говорят - он клопами пахнет :)
не только.. дешевый три бочки советской эпохи тоже вонял :D -
-
Есть куча задач, которые нереально решить в 1С.
"Огласите, пжалуйста, весь список."
Впрочем, я, кажется, догадался...
Искусственный интеллект?
Да взять хоть работу с сетью, с мультимедиа, с двоичными данными и т.д. Сегодня все это решается внешними средствами, ибо встроенных в платформе нет.
-
Никак не могу сделать в Sublime Text 2 вывод Lua в консоль. :(
В SciTE все замечательно работает по F5, но этот редактор мне не нравится.
-
Эта фича необходима в языках с развитыми средствами паттерн-матчинга, типа хаскеля. Там это трактуется как конструирование/деконструирование значений...
Поясните, плиз, необходимость... не догоняю.. с моей точки зрения паттерн-матчинг - всего лишь (более менее естественое) расширение оператора выбора.
-
Да взять хоть работу с сетью, с мультимедиа, с двоичными данными и т.д. Сегодня все это решается внешними средствами, ибо встроенных в платформе нет.
нафигассе... если к вашим услугам вся мощь платформы .net...
-
Чегой??? :o
-
Чегой??? :o
Как чегой... :D разве сейчас "одынеска" не под .net?
-
Нет конечно. :)
Одынэска сама себе .net
-
Нет конечно. :)
:o тогда сорри... хорошо , но тогда то что она работает только с MSSQL - тоже миф?
-
Кто вам такое сказал?
Вся информация по платформе тут:
http://v8.1c.ru/overview/Platform.htm
Хранение данных в собственной СУБД или в Microsoft SQL Server, PostgreSQL, IBM DB2 или Oracle Database.
ps Количеству заблуждений на счет 1С нет предела однако... O_o
-
Кто вам такое сказал?
Вся информация по платформе тут:
http://v8.1c.ru/overview/Platform.htm
Хранение данных в собственной СУБД или в Microsoft SQL Server, PostgreSQL, IBM DB2 или Oracle Database.
да лет 5 назад знакомый "одынэсник" пустил слух о том, что одынэску решили полностью интегрировать в инфраструктуру .net ... ой ой ой ,прокол, однако ;D
-
Нет конечно. :)
Одынэска сама себе .net
как же, сами сказали, что сетевых компонент .нет
-
А при чем тут сетевые компоненты? Это ведь не отличительная черта .net
-
На мой взляд массив должен иметь удобный конструктор, обходиться форычем, сам сортироваться и быстро искаться... точка.
Так это же MUMPS! Конструктора удобного правда нет, но и неудобного тоже, вообще нет никакого - не нужен :)
Мне в 1С не хватает такого конструктора:
А = Новый Массив {1,4,5,1,2,3,7,4,2,3}
Сейчас делается так:
А = Новый Массив;
А.Добавить(1);
А.Добавить(4);
А.Добавить(5);
А.Добавить(1);
А.Добавить(2);
А.Добавить(3);
А.Добавить(7);
А.Добавить(4);
А.Добавить(2);
А.Добавить(3);
это дико неудобно.
-
Эта фича необходима в языках с развитыми средствами паттерн-матчинга, типа хаскеля. Там это трактуется как конструирование/деконструирование значений...
Поясните, плиз, необходимость... не догоняю.. с моей точки зрения паттерн-матчинг - всего лишь (более менее естественое) расширение оператора выбора.
Паттерн-матчинг -- это прежде всего разборка (деконструирование) значения. Ну и его можно ещё и для ветвления использовать...
f = (1, 2) -- Конструируем пару (tuple) из двух чисел
(x, y) = f -- Разбираем обратно
main = do
print x
print y
Main> :main
1
2
-
А при чем тут сетевые компоненты? Это ведь не отличительная черта .net
потому, что там как в Греции - есть все! (собственно мне в то время идея интеграции 1с в эту платформу казалась вполне естественной, что я даже не стал проверять.. тем более что мне это было по -пистолету)
-
С помощью web-сервисов 1С прекрасно интегрируется со всем, в т. ч. и с .Net'ом.
-
Эта фича необходима в языках с развитыми средствами паттерн-матчинга, типа хаскеля. Там это трактуется как конструирование/деконструирование значений...
Поясните, плиз, необходимость... не догоняю.. с моей точки зрения паттерн-матчинг - всего лишь (более менее естественое) расширение оператора выбора.
Паттерн-матчинг -- это прежде всего разборка (деконструирование) значения. Ну и его можно ещё и для ветвления использовать...
f = (1, 2) -- Конструируем пару (tuple) из двух чисел
(x, y) = f -- Разбираем обратно
main = do
print x
print y
Main> :main
1
2
блин .. как то не вяжется со смыслом используемых слов... а вот http://en.wikipedia.org/wiki/Pattern_matching (http://en.wikipedia.org/wiki/Pattern_matching) вполне...
-
С помощью web-сервисов 1С прекрасно интегрируется со всем, в т. ч. и с .Net'ом.
это вторая доп. прослойка.. - если считать саму . net первой над системными библиотеками...
-
С помощью web-сервисов 1С прекрасно интегрируется со всем, в т. ч. и с .Net'ом.
Есть и такое:
http://infostart.ru/public/20035/
раз уж речь зашла.
Но это все внешние средства. А с любым внешним средством проблем на порядок больше, чем с родными механизмами.
-
ну да ... а Луа , конечно вами классифицируется как средство внутреннее...
-
Тоже внешнее.
Я какбэ отвечал Петру в контексте этого поста:
http://oberspace.dyndns.org/index.php/topic,366.msg9924.html#msg9924
если что... ;)
-
а... ну Луны. есть Луа -интерфейс. прослойка под дот... меня более смущает ваша идея пулеметом писать на нем СЛОЖНЫЕ (программные ) компоненты и низкоуровневые библиотеки... - мои мозги она выносит почище пулемета... :)
-
СЛОЖНЫЕ (программные ) компоненты и низкоуровневые библиотеки
Ого! Я такое сказал? :o
-
:o http://oberspace.dyndns.org/index.php/topic,366.msg9908.html#msg9908 (http://oberspace.dyndns.org/index.php/topic,366.msg9908.html#msg9908) это конечно были не вы...
-
И хде там мои слова про
СЛОЖНЫЕ (программные ) компоненты и низкоуровневые библиотеки
??? ?
-
;D смущает "низкоуровневые библиотеки" - тык это ваш ответ на вопрос Петра.... (чего нет в 1с) - ссылку давать? ;D
-
Слово "низкоуровневые" я тоже не употреблял...
Короче вы меня неправильно поняли.
Есть задачки (не сложные и не низкоуровневые), для решения которых в 1с нет средств. Например для решения задачи нужны регулярки, а в 1С их тютю. Вот тут и нужно что-то вроде Lua.
Или например языковых средств 1С не хватает (там довольно примитивный язык), тогда можно часть задачи закодить на Lua.
-
Слово "низкоуровневые" я тоже не употреблял...
Короче вы меня неправильно поняли.
Есть задачки (не сложные и не низкоуровневые), для решения которых в 1с нет средств. Например для решения задачи нужны регулярки, а в 1С их тютю. Вот тут и нужно что-то вроде Lua.
Или например языковых средств 1С не хватает (там довольно примитивный язык), тогда можно часть задачи закодить на Lua.
не берите в голову.. просто у нас в Челябинске погода на редкость мерзкая.. ну и скучно...
-
У нас во Владимире тоже :)
-
Есть задачки (не сложные и не низкоуровневые), для решения которых в 1с нет средств. Например для решения задачи нужны регулярки, а в 1С их тютю. Вот тут и нужно что-то вроде Lua.
В Си и С++ тоже как бэ регулярок нет. Но если их там нет, то они там сразу есть, ибо либы пишутся для них элементарно.
Ниужели ни один 1Сник не написал на 1С либу для регулярок? Это же пишется просто и весело.
-
Регулярки на 1С? ;D
ню ню
-
Регулярки на 1С? ;D
ню ню
В смысле? 1С не полон по тьюрингу? У нем нет строк?
-
Думаю, тормозить будет. Один скриптовый язык поверх другого.
-
2 valexey
В смысле в 1с один из самых медленных интерпретаторов:
http://oberspace.dyndns.org/index.php/topic,248.msg6004.html#msg6004
-
2 valexey
В смысле в 1с один из самых медленных интерпретаторов:
http://oberspace.dyndns.org/index.php/topic,248.msg6004.html#msg6004
Эмм.. А как они этого добились? И что в том исходнике означают магические строчки:
MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
MSScriptControl.Language = "javascript";
-
Думаю, тормозить будет. Один скриптовый язык поверх другого.
Язык регулярных выражений не является скриптовым языком.
-
2 valexey
В смысле в 1с один из самых медленных интерпретаторов:
http://oberspace.dyndns.org/index.php/topic,248.msg6004.html#msg6004
Эмм.. А как они этого добились?
Думаю что максимально тупой реализацией в лоб. ;D
И что в том исходнике означают магические строчки:
MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
MSScriptControl.Language = "javascript";
COM-сервер виндозного скриптового движка.
ps Первый раз встречаю программиста не знающего что это ;D
Яблочник...
-
Вот кстати тоже пример чего нельзя сделать средствами 1С - замерять время в миллисекундах :) (заветная функция в последней бета-версии только появилась)
-
Язык регулярных выражений не является скриптовым языком.
Я образно сказал. Шаблон регулярного выражения можно считать текстом программы, а конечный автомат, разбирающий эту строку и сопоставляющий с ней какую-то другую строку - интерпретатором. Если этот автомат реализовать средствами скриптового языка, то и получится, что в одном интерпретаторе запущен скрипт, реализующий работу другого интерпретатора, который в свою очередь выполняет свой скрипт.
-
MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
MSScriptControl.Language = "javascript";
COM-сервер виндозного скриптового движка.
ps Первый раз встречаю программиста не знающего что это ;D
Яблочник...
Не, юниксоид :-)
На самом деле я вижу что это COM-объект, но зачем оно тут? У вас там что? 1С выполняется поверх JS?
-
Там просто юзается жабаскриптовский Date().getTime()
Функция ПолучитьВремяВМиллисекундах()
Возврат MSScriptControl.Eval("new Date().getTime()");
КонецФункции
-
Там просто юзается жабаскриптовский Date().getTime()
Функция ПолучитьВремяВМиллисекундах()
Возврат MSScriptControl.Eval("new Date().getTime()");
КонецФункции
А сколько это будет все выполняться, если выкинуть внутренний цикл? Интересно сколько вся эта толстая обвязка жрет.
-
Запускал по пять раз:
1С:Предприятие 8.3.2.163 (бета-версия) от 28.09.2012
Код
Procedure PressExecuteButton(Button)
Start = CurrentUniversalDateInMilliseconds();
For i = 0 To 2000000 Do
a = 123;
EndDo;
End = CurrentUniversalDateInMilliseconds() - Start;
Message(End);
EndProcedure
Лог:
9 026
9 477
9 166
9 045
9 150
BlackBox Component Builder 1.6-rc6
Красноярская сборка 16 октября 2012
Код:
MODULE MyTime;
IMPORT Log;
PROCEDURE Do*;
VAR
a, i: INTEGER;
BEGIN
FOR i := 0 TO 2000000 DO
a := 123;
END;
END Do;
BEGIN
END MyTime.Do
Лог:
16 миллисек
16 миллисек
15 миллисек
16 миллисек
15 миллисек
Lua for windows v5.1.4-46
http://code.google.com/p/luaforwindows/
Код:
t1 = os.time()
for i = 1, 2000000 do
a = 123
end
print(os.time() - t1)
Лог (в секундах):
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
В BlackBox время замерял с помощью:
меню -> разработка -> засечь время выполнения
Как в Lua мерить миллисекундами так и не нашел.
ps машинка: HP ProBook 4520s (Core i3 M380 2.53GHz)
-
Как в Lua мерить миллисекундами так и не нашел.
http://stackoverflow.com/questions/463101/lua-current-time-in-milliseconds
require "socket"
print("Milliseconds: " .. socket.gettime()*1000)
-
Я уже нашел :) Правда немного иначе:
[os.clock] - gets the approximate number of seconds of CPU time used by the program. This function is implemented in terms of the ANSI C clock [1] function, and the precise meaning of this value is implementation specific. For example, on Linux, clock gives "CPU time" [2][3], which only counts the time in which the process is actively using the CPU and does not count time executing other processes or waiting for I/O. CPU time may be less than the real time ("wall clock time"). On Windows, clock counts real (wall clock) time since the start of the process [4]. On Windows and Linux, the resolution on clock is on the order of milliseconds, which is more precise than the time function, but on other systems it may be only one second resolution. The clock value will also wrap around on overflow, depending on the size of the data type used to represent clock_t. Sometimes this function is more useful than os.time for benchmarking: local clock = os.clock(); local t1 = clock(); dosomething() local dt = clock() - t1 .
http://lua-users.org/wiki/DateAndTime
Код:
t1 = os.clock()
for i = 1, 2000000 do
a = 123
end
print(os.clock() - t1)
Лог:
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.063
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.076
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.072
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.074
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.068
>Exit code: 0
-
Никак не могу сделать в Sublime Text 2 вывод Lua в консоль. :(
В SciTE все замечательно работает по F5, но этот редактор мне не нравится.
У него там похоже какая-то бага. Я такое тоже наблюдал - часть вывода съедается. Возможно какой-то неправильный символ в аутпуте или еще что. Но всегда можно сделать ручками (запуск процесса и вывод его аутпута).
-
Никак не могу сделать в Sublime Text 2 вывод Lua в консоль. :(
В SciTE все замечательно работает по F5, но этот редактор мне не нравится.
У него там похоже какая-то бага. Я такое тоже наблюдал - часть вывода съедается. Возможно какой-то неправильный символ в аутпуте или еще что. Но всегда можно сделать ручками (запуск процесса и вывод его аутпута).
У sublime вообще с аутпутами беда. Вот запустил я прогу, она возьми и выдай 100 мегабайт текста (или там бесконечность - тупо зациклилось), а сублим возьми и грохнись в результате. Особенно этим грешит аддон сублимов который делает вид что он Shell.
-
Запускал по пять раз:
Тесты ни о чем.
Где вызов Lua из 1С?
-
Сейчас делается так:
А = Новый Массив;
А.Добавить(1);
[/quote]
Гы! Это ж самый что ни на есть труЪ оберон-вэй ;)
-
Запускал по пять раз:
Тесты ни о чем.
Где вызов Lua из 1С?
А это тут причем? Я сравнивал скорость интерпретаторов 1С и Lua, ну и компилятора BB.
-
злой вы Vlad, однако - рушите идеал "стильности" у человека :)
-
2 vlad
Ну я и не считаю себя православным оберонщегом ;)
-
Никак не могу сделать в Sublime Text 2 вывод Lua в консоль. :(
В SciTE все замечательно работает по F5, но этот редактор мне не нравится.
У него там похоже какая-то бага.
Вот у меня в точности такая хрень:
http://www.askdev.ru/question/10733/Sublime-Text-2-Building-Python-%D0%BF%D1%83%D1%81%D1%82%D0%BE%D1%82%D0%B0/
-
Победил:
http://postimage.org/image/vkbrpp60b/
Проблема была в том, что у меня каталог пользователя был назван кириллицей.
Как оказалось у меня и package control по той же причине не хотел заводиться.
В общем чтобы кодить на Lua в Sublime Text 2 нужно сделать следующее.
1. Скачать и установить редактор:
http://www.sublimetext.com/2
2. Установить Package Control:
http://wbond.net/sublime_packages/package_control/installation
3. В редакторе нажимаем "ctrl+shift+p", далее в окне поиска пишем "Lua", и выбираем из найденного LuaDev
Можно и ручками установить (там есть readme):
https://github.com/rorydriscoll/LuaSublime
4. Создаем и сохраняем новый файл с расширением *.lua
5. Пишем код и давим F7 (или ctrl+B) чтобы запустить.
-
3. В редакторе нажимаем "ctrl+shift+p", далее в окне поиска пишем "Lua", и выбираем из найденного LuaDev
вернее так:
3. В редакторе нажимаем "ctrl+shift+p", пишем "install", в найденном выбираем "Install Package",
далее в окне поиска пишем "Lua", и выбираем из найденного LuaDev
-
Смешные однако зарплаты у Lua-кодеров ;D
http://www.poisk-rabot.ru/save/Programmist_LUA/9807888/
-
Смешные однако зарплаты у Lua-кодеров ;D
http://www.poisk-rabot.ru/save/Programmist_LUA/9807888/
Дык низкий порог вхождения (опытные не нужны) + на луа обычно ничего сверхсерьезного не пишут (то есть еще и ответственности никакой).
-
Проблема была в том, что у меня каталог пользователя был назван кириллицей.
Как оказалось у меня и package control по той же причине не хотел заводиться.
так, я говорил про нее... у меня из - за этого не компилировались си - программы...
-
Человечий форыч няшка ::)
-
Quine?
for line in io.lines("c:\\test.lua") do
print(line)
end
-
Quine?
for line in io.lines("c:\\test.lua") do
print(line)
end
Вот уж и правда пффф! Аж целый цикл забубенить пришлось! о_О
То ли дело Хаскель:
main = putStrLn =<< readFile "Quine.hs"
))
-
Универсальность табличного подхода впечатляет.
Обход массива форычем:
m = {9,8,7,6,5,4,3,2,1}
for key, value in pairs(m) do
print(key, "-", value)
end
Лог:
1 - 9
2 - 8
3 - 7
4 - 6
5 - 5
6 - 4
7 - 3
8 - 2
9 - 1
Однако такая форма записи для обхода массива слишком громоздка.
Вот в питоне просто и лаконично:
a = [9,8,7,6,5,4,3,2,1]
for i in a:
print(i)
А в Lua лучше обычным for
m = {9,8,7,6,5,4,3,2,1}
for i=1, #m do
print(m[i])
end
-
Забавно что кроме pairs есть еще ipairs, которая больше подходит для массивов.
pairs - Возвращает все пары (ключ, значение) независимо от типа ключа и не гарантируя какого либо порядка обхода.
ipairs - Возвращает все пары (индекс, значение), где индекс - это целочисленный ключ(ключи с другими типами просто пропускаются). При обходе массива следующий элемент получается прибавлением 1 к текущему индексу, и если такого ключа нет в таблице, то цикл прекращается.
пример pairs:
t = {[1] = 200, [2] = 300, [6] = 400, [13] = 500}
for k, v in pairs(t) do
print(k, "-", v)
end
лог:
1 - 200
2 - 300
13 - 500
6 - 400
пример ipairs:
t = {[1] = 200, [2] = 300, [6] = 400, [13] = 500}
for k, v in ipairs(t) do
print(k, "-", v)
end
лог:
1 - 200
2 - 300
Ну и еще примерчик:
t = {[1] = 200, ["АХТУНГ!"] = 300, [2] = 400, [3] = 500}
for i, v in ipairs(t) do
print(i, "-", v)
end
лог:
1 - 200
2 - 400
3 - 500
Чудно... :D
пруфлинк (http://www.luafaq.org/#T1.10)
-
Как и полагается скриптовому языку няшная сортировка в комплекте: 8)
print("Сортируем массив чисел")
a = {9,5,1,3,2,6,7,4,8}
table.sort(a)
for i = 1, #a do
print(a[i])
end
print("Сортируем массив чисел используя свою функцию сравнения")
function comp(a, b)
return a > b
end
a = {9,5,1,3,2,6,7,4,8}
table.sort(a, comp)
for i = 1, #a do
print(a[i])
end
print("Сортируем массив строк используя свою функцию сравнения")
function comp(a, b)
return a < b
end
a = {"З","Д","А","В","Б","Е","Ё","Г","Ж"}
table.sort(a, comp)
for i = 1, #a do
print(a[i])
end
лог:
Сортируем массив чисел
1
2
3
4
5
6
7
8
9
Сортируем массив чисел используя свою функцию сравнения
9
8
7
6
5
4
3
2
1
Сортируем массив строк используя свою функцию сравнения
Ё
А
Б
В
Г
Д
Е
Ж
З
-
-- O_o
function f1(...)
for k, v in pairs{...} do
print(v)
end
end
f1(1,2,3,4,5,6,7,8,9)
--log:
--[[
1
2
3
4
5
6
7
8
9
--]]
--------------------------------
-- O_O
function f2(a, b, c)
print(a)
print(b)
print(c)
end
a = {1,2,3}
f2(unpack(a))
--log:
--[[
1
2
3
--]]
-
Сравнение производительности языковых VM (Universal bytecode VM comparison) (http://a-jelly.livejournal.com/384459.html)
Недавно я задался вопросом сравнения производительности bytecode виртуальных машин (VM). Таких как JVM, LLVM, .Net, etc.
Прямое сравнение трудно было произвести по нескольким причинам. Во-первых, нужен был подходящий набор тестов, который хоть как-то покрывает предоставляемые VM функции. Во-вторых, нужно было найти язык, который бы компилировался в байт-код всех тех VM, которые я хотел протестировать, и наконец - нужно было просто выкроить время. Не прошло и полгода, как я решил эти проблемы, хоть и не в полной мере.
В качестве языка для примеров я выбрал Lua (5.1), т.к. компиляторы в байткод с него существуют для всех интересных мне машин. В качестве же тестов я взял исходники с The Computer Language Benchmarks Game, и кое-где доработал их рашпилем (правда, должен заранее сказать, что не знаю Lua). Предпочтение отдавалось "straightforward" реализациям, не имеющим системных завязок и минимально зависящим от библиотек языка. Понятно, что несложно приделать к любому языку быстродействующую библиотеку (к примеру на С), но тогда сравниваться будет совсем не то, что нам нужно.
-
afxLua - MS Windows API Library (http://luaforge.net/projects/jaslatrix/)
afxLua is an add-on library for Lua on MS Windows System that has this functionality File Management, Manipulate Registry, Console IO function, Windows Manipulation, Mouse Emulation, Clipboard, Dll function loader, System Information & Many more ...
-
LuaForge Project Catalog (http://luaforge.net/projects/)
-
Graphical User Interface Toolkits (http://lua-users.org/wiki/GraphicalUserInterfaceToolkits)
-
Язык программирования Lua. Учебник для начинающих (http://big.vip-zone.su/doc/devel/lua.xml)
Введение
Основным мотивом для написания этого текста стало отстутствие на просторах интернета какого-либо внятного учебника по Lua, для чайников и не только, причем на русском языке. Документация на русском есть, а с чего начать - непонятно. Есть хорошая книжка - "Programming in Lua" (причем нужно именно 2-е издание), но ее почему-то даже в электронном виде нигде нет. Мне удалось найти только препринт 1-го издания, и разумеется на английском. После двухгодичной разработки скриптов для хабов на Lua стало ясно, что уж "для чайников" я и сам руководство сделаю. Через некоторое время после осознания этого факта появился черновик, который долгое время оставался совсем убогим и кратким, и вот только сейчас он становится похож на учебник. Отмечу также, что на просторах интернета много различных статей вида "как на Lua сделать что-то эдакое", но полного подробного учебника пока что не наблюдается. Либо встречаются руководства для продвинутых, которые уже что-то знают и хотят "расшИрить и углУбить" (с) свои знания. Итак, приступим-с...
-
1
-
Попробовал замутить ООП: :)
function new(class, subclass)
local subclass = subclass or {}
setmetatable(subclass, class)
class.__index = class
return subclass
end
function instanceof(object, class)
local mt = getmetatable(object)
while mt ~= nil do
if mt.__index == class then
return true
end
mt = getmetatable(mt.__index)
end
return false
end
--------------------------------------------------------------
-- определяем класс
A = {
field1 = 0, -- поле со значением по умолчанию
get1 = function(self) -- метод
return self.field1
end
}
-- определяем расширение A
B = new(A, {
field2 = 0, -- новое поле
get2 = function(self) -- новый метод
return self.field2
end
})
-- определяем расширение B
C = new(B, {
field3 = 0, -- новое поле
get2 = function(self) -- переопределяем метод
return self.field3
end
})
-- тестируем
a = new(A)
b = new(B)
c = new(C)
-- значения по умолчанию
print("a.field1", a.field1)
print("b.field1", b.field1)
print("b.field2", b.field2)
print("c.field1", c.field1)
print("c.field2", c.field2)
print("c.field3", c.field3)
a.field1 = 1
b.field1 = 2
c.field1 = 3
c.field3 = 4
print("a:get1()", a:get1())
print("b:get1()", b:get1())
print("b:get2()", b:get2())
print("c:get1()", c:get1())
print("c:get2()", c:get2())
print("instanceof(a, A)", instanceof(a, A))
print("instanceof(b, A)", instanceof(b, A))
print("instanceof(c, A)", instanceof(c, A))
print("instanceof(a, C)", instanceof(a, C))
--Log:
--[[
a.field1 0
b.field1 0
b.field2 0
c.field1 0
c.field2 0
c.field3 0
a:get1() 1
b:get1() 2
b:get2() 0
c:get1() 3
c:get2() 4
instanceof(a, A) true
instanceof(b, A) true
instanceof(c, A) true
instanceof(a, C) false
--]]
-
Одни строковые многострочные литералы чего стоят (попробуйте ка написать лексер).
А что сложного то? Тупо сканируешь до соответствующей скобки.
-
Я разочаровался в скриптовых языках до предела. Написал на PHP сканер текста, буферный построитель строк, лексический анализатор для 1С и модуль подсветки. Сделал первый шаблон раскраски по примеру Sublime Text2: Monokai. И что вы думаете? Код на 1С, объёмом 5667 байт красится...0.7 секунд. Занавес.
Причина, как выяснилось сегодня, довольно банальна. Ну нет в PHP человеческих массивов и символов. Есть только упорядоченные словари и строки. Функция count, возвращающая число элементов словаря, как ни странно, но медленная. Функции ord и chr тоже. Изменение символа в строке очень дорогая операция. Теперь понимаю, почему форумные движки предпочитают монструозные циклические очистки и регулярки. Сам PHP (Ruby, вставьте своё) крайне медленный, а вот оптимизированные функции на Си обладают скоростью, которая сглаживает общее впечатление. Только начинка-то остаётся.
Готовый пример (http://bers.heroes35.net/highlight_1c/example.html)
Демо для скармливания 1С кода (http://bers.heroes35.net/highlight_1c/)
P.S. В демо остался ошибочный замер времени, не обращайте внимания.
-
Тык у вас раскраска, а не подсветка..
-
а вот у http://pascalabc.net/WDE/ (http://pascalabc.net/WDE/) - подсветка (жабоскриптовая)...
-
Далее...
Я разочаровался в скриптовых языках до предела. Написал на PHP сканер текста, буферный построитель строк, лексический анализатор для 1С и модуль подсветки. Сделал первый шаблон раскраски по примеру Sublime Text2: Monokai. И что вы думаете? Код на 1С, объёмом 5667 байт красится...0.7 секунд. Занавес.
если вы попробуете запустить на таких обьемах текста скажем модуль подсветки С. Губанова (ББ , слепленный по "классической" схеме) - на вполне высокопроизводительном компилируепмом ЯП (КП) - то производительность ее (подсветки) , вас НЕПРИЯТНО удивит (как удивила меня в свое время...) ;) - так что не торопитесь делать выводы...
-
ЗЫ конечно я рассматриваю код в несколько тысяч строк... - 5 килобайт - это 200 -400 строк.. фигня даже для PABCовой подсветки...
-
Для 1С есть динамическая раскраска (подсветка), но глючная и на регулярках.
P.S. По указанной ссылке раскраска на мой взгляд довольно примитивная и на трёхсотстрочном коде заметны тормоза перерисовки.
если вы попробуете запустить на таких обьемах текста скажем модуль подсветки С. Губанова (ББ , слепленный по "классической" схеме) - на вполне высокопроизводительном компилируепмом ЯП (КП) - то производительность ее (подсветки) , вас НЕПРИЯТНО удивит (как удивила меня в свое время...) - так что не торопитесь делать выводы...
Можно понять сложности, вызванные обновлением DOM или GUI. Тяжело понять сложности, когда генерируешь статичный html. Тут в пример можно привести Delphi, в миг собирающий проекты среднего размера.
-
P.S. По указанной ссылке раскраска на мой взгляд довольно примитивная и на трёхсотстрочном коде заметны тормоза перерисовки.
- тык она и делалась (в лучшем случае, а в худшем адаптировалась) студентамми.... (я намекаю на то, что без оптимизаций на больших обьемах кода вы нормальную производительность не получите, даже в компилируемых языках)
Можно понять сложности, вызванные обновлением DOM или GUI. Тяжело понять сложности, когда генерируешь статичный html. Тут в пример можно привести Delphi, в миг собирающий проекты среднего размера.
... как сказать... я вот например, не смог понять почему большой модуль в исходниках ББ (5-10 т. строк... точно не помню) СТАТИЧЕСКИ раскрашивался (не подсвечивался!!!) у Сергея пару секунд...
-
Чет у меня это демо вот так красит: ???
http://imglink.ru/show-image.php?id=aa2ef05033e46bb4486b240f1a00435d
-
... как сказать... я вот например, не смог понять почему большой модуль в исходниках ББ (5-10 т. строк... точно не помню) СТАТИЧЕСКИ раскрашивался (не подсвечивался!!!) у Сергея пару секунд...
Там проблема в ББ, а не в коде Сергея. Я тоже писал в ББ разукрашку и знаю в чем там проблема. :)
И кстати раскрасить сложнее (по ресурсам) чем подсветить
-
И кстати раскрасить сложнее (по ресурсам) чем подсветить
;) Не знаю на счет ресурсов (как пользователя , меня они не трахают).. но если с раскрашивалками там худо бедно есть варианты, то с динамикой я видел только у Сергея (и тот корявый с точки зрения конечного пользователя).
-
У Сергея там только видимость динамики на сколько я помню :)
Впрочем он сам наверно прокомментирует.
-
вся наша жизнь - реалистичная видимость, по большому счету.. я не против нее (видимости) в данном случая... если не вижу различий. Но мне охота послать на х. мудаков которые утверждают.. дескать "подсветка не нужна ибо многие ее делали но отказались от использования"- потому, что то что они делали , действительно нафиг здалось - обосралось...
-
Я разочаровался в скриптовых языках до предела. Написал на PHP сканер текста, буферный построитель строк, лексический анализатор для 1С и модуль подсветки. Сделал первый шаблон раскраски по примеру Sublime Text2: Monokai. И что вы думаете? Код на 1С, объёмом 5667 байт красится...0.7 секунд. Занавес.
Не знаю PHP, но могу предположить что:
1. Используются сугубо низкоуровневые (а-ля обероновские) приемы при работе с массивами (последовательностями). Например, используется WHILE там, где на самом деле самое место для "встроенной" find/indexOf. И т.п.
2. Что касается конкретно строк, то во всех приличных ЯП они немодифицируемые (потому как их трудно реализовать эффективно в протвном случае). Поэтому даже если ЯП (PHP) позволяет их модифицировать, то скорее всего эффективнее будет использовать что-то другое (например, сначала перегнать строку в массив, совершить все манипуляции, затем обратно перегнать массив в строку).
-
Vlad - ваша оценка... возможно ли на екма скрипте сделать нормально -работающую динамическую подсветку (ЯП уровня оберона) - на текстах обьемом в 3 -5 тыс. строк?
-
Berserker, я вот не совсем понял какая задача решалась.
Сгенерить html с разукрашеным кодом 1С?
Типа этого?:
http://infostart.ru/public/19856/
-
Vlad - ваша оценка... возможно ли на екма скрипте сделать нормально -работающую динамическую подсветку (ЯП уровня оберона) - на текстах обьемом в 3 -5 тыс. строк?
Очень расплывчатая постановка задачи :) Полноценно распарсить (согласно синатксису оберона) - можно за < 100 мс на современном десктопе.
-
ilovb, windows-1251 кодировка отображается как utf-8 почему-то. И можно пример кода, на котором пробовали?
Не знаю PHP, но могу предположить что:
1. Используются сугубо низкоуровневые (а-ля обероновские) приемы при работе с массивами (последовательностями). Например, используется WHILE там, где на самом деле самое место для "встроенной" find/indexOf. И т.п.
2. Что касается конкретно строк, то во всех приличных ЯП они немодифицируемые (потому как их трудно реализовать эффективно в протвном случае). Поэтому даже если ЯП (PHP) позволяет их модифицировать, то скорее всего эффективнее будет использовать что-то другое (например, сначала перегнать строку в массив, совершить все манипуляции, затем обратно перегнать массив в строку).
Я выложу исходники после того, как соптимизирую, что смогу. Сканер текста перенесён с Паскаля, так же как и ряд функций (set для множеств, in - для проверки вхождения в множество). Собственно, была попытка классической ступенчатой разработки. И всё хорошо, за исключение скорости. В остальном Вы, конечно, правы, хотя в PHP строки ANSI-однобайтовые и можно было ряд оптимизаций сделать, в том числе и для односимвольных констант.
Berserker, я вот не совсем понял какая задача решалась.
Сгенерить html с разукрашеным кодом 1С?
Да. Практикум по 1С для студентов генерируется из продвинутого markdown-синтаксиса в html, готовый для загрузки на сервер. Соответственно и подсветка тоже на PHP. Ранее была на highlighter.js.
P.S. Без регистрации скачать разукрашку не удаётся.
-
Vlad - ваша оценка... возможно ли на екма скрипте сделать нормально -работающую динамическую подсветку (ЯП уровня оберона) - на текстах обьемом в 3 -5 тыс. строк?
Очень расплывчатая постановка задачи :) Полноценно распарсить (согласно синатксису оберона) - можно за < 100 мс на современном десктопе.
что же тогда мы будем иметь верхнюю границу реагирования в эти же 0.1 секунды... на 3 -5 тыс. строках... - а что? работать можно вполне комфортно..
-
А у меня вот ST2 разукрашивает 0,5м вообще без тормозов ;D ;D ;D
Но опять же повторюсь. Чтобы подсветить ресурсы не нужны. Если структура данных в памяти выбрана правильно, то редактор знает контекст который вы правите и просто выставляет цвет слова реалтайм. Т.е. когда исходник уже в памяти, то парсинг происходит только на очень маленьких участках в месте правки. Ресурсы нужны только при загрузке исходника.
-
А у меня вот ST2 разукрашивает 0,5м вообще без тормозов ;D ;D ;D
Но опять же повторюсь. Чтобы подсветить ресурсы не нужны. Если структура данных в памяти выбрана правильно, то редактор знает контекст который вы правите и просто выставляет цвет слова реалтайм. Т.е. когда исходник уже в памяти, то парсинг происходит только на очень маленьких участках в месте правки. Ресурсы нужны только при загрузке исходника.
;D а я повторюсь, ИМХО никого эти ресурсы особо не волнуют в современной реальности.... на подобных задачах.
-
ilovb, windows-1251 кодировка отображается как utf-8 почему-то. И можно пример кода, на котором пробовали?
...
Это у меня хром гонит.
Проверил в IE9 - все работает :)
-
Как и полагается скриптовому языку няшная сортировка в комплекте: 8)
print("Сортируем массив чисел")
a = {9,5,1,3,2,6,7,4,8}
table.sort(a)
for i = 1, #a do
print(a[i])
end
print("Сортируем массив чисел используя свою функцию сравнения")
function comp(a, b)
return a > b
end
a = {9,5,1,3,2,6,7,4,8}
table.sort(a, comp)
for i = 1, #a do
print(a[i])
end
print("Сортируем массив строк используя свою функцию сравнения")
function comp(a, b)
return a < b
end
a = {"З","Д","А","В","Б","Е","Ё","Г","Ж"}
table.sort(a, comp)
for i = 1, #a do
print(a[i])
end
Я таки дико извиняюсь, но при чем тут скриптовость? Вообще у скриптовых языков, как раз, функции высшего порядка встречаются не так уж и часто, ибо не нужны (скриптовые задачки мелкие - построение собственных абстракций нафик не нужно).
А то что тут написано, и на плюсах делается элементарно и, тащемто, не менее, а возможно и более, компактно:
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Сортируем массив чисел\n";
vector<int> a = {9,5,1,3,2,6,7,4,8};
sort(a.begin(), a.end());
for (auto i : a)
cout << i << endl;
cout << "Сортируем массив чисел используя свою функцию сравнения\n";
a = {9,5,1,3,2,6,7,4,8};
sort(a.begin(), a.end(), [](int a, int b){return a>b;});
for (auto i : a)
cout << i << endl;
cout << "Сортируем массив строк используя свою функцию сравнения\n";
vector<string> s = {"З","Д","А","В","Б","Е","Ё","Г","Ж"};
sort(s.begin(), s.end(), [](string a, string b){return a<b;});
for (auto i : s)
cout << i << endl;
return 0;
}
-
Сравнение с плюсами не интересно :)
И так понятно что на cpp можно все ;)
Давай на Oberon ;D
Скриптовый язык ценится не наличием фич, а простотой и легкостью их использования.
Мне на изучение Lua хватило 3 дней. А сколько ты изучал cpp? ;)
-
Я таки дико извиняюсь, но при чем тут скриптовость? Вообще у скриптовых языков, как раз, функции высшего порядка встречаются не так уж и часто, ибо не нужны
tcl, python, lua, ruby, js... :P
И вообще:
Сценарный язык (http://ru.wikipedia.org/wiki/%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA)
Мы с тобой кажется о разных вещах говорим. ;)
Я имею в виду не командно-сценарные языки, а прикладные и универсальные (по терминологии wiki)
-
Я таки дико извиняюсь, но при чем тут скриптовость? Вообще у скриптовых языков, как раз, функции высшего порядка встречаются не так уж и часто, ибо не нужны
tcl, python, lua, ruby, js... :P
И вообще:
Сценарный язык (http://ru.wikipedia.org/wiki/%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA)
А универсальные это уже не скриптовые языки, а языки общего назначения. Отличий от того же С++ в общем то и нет.
Мы с тобой кажется о разных вещах говорим. ;)
Я имею в виду не командно-сценарные языки, а прикладные и универсальные (по терминологии wiki)
-
Сравнение с плюсами не интересно :)
И так понятно что на cpp можно все ;)
Давай на Oberon ;D
Скриптовый язык ценится не наличием фич, а простотой и легкостью их использования.
Мне на изучение Lua хватило 3 дней. А сколько ты изучал cpp? ;)
Ну, во-первых не три дня, а во вторых так считать нельзя. :-)
Сколько языком пользуешься столько и изучаешь его. Я например Оберон изучаю чуть менее чем С++. С 2005го года. И постоянно что-то новенькое вылазит. Вот недавно Влад там забавное отковырял очередное...
-
Мне на изучение Lua хватило 3 дней.
Вот именно что три. :) Причем половину этого времени я курил ООП.
-
Мне на изучение Lua хватило 3 дней.
Вот именно что три. :) Причем половину этого времени я курил ООП.
Да, сложно курить то, чего там нет :-)
-
Quine?
for line in io.lines("c:\\test.lua") do
print(line)
end
Это не Quine. По определению.
-
Да, сложно курить то, чего там нет :-)
Ну да. Но там в языке есть поддержка прототипного ООП. Нужно некоторое время чтобы понять как этим пользоваться и как можно организовать классическое ООП. К тому же русские источники не айс. А первоисточник (http://www.lua.org/pil/) на ангельском... хотя как оказалось на довольно простом ангельском.
В общем могу сэкономить кучу времени тому, кто собрался изучать Lua:
НЕ ЧИТАЙТЕ НИЧЕГО КРОМЕ Programming in Lua by Roberto Ierusalimschy ;D
-
Quine?
for line in io.lines("c:\\test.lua") do
print(line)
end
Это не Quine. По определению.
Я в курсе ;D (там вообще-то классическая PFFF шутка ;) )
-
Да, сложно курить то, чего там нет :-)
Ну да. Но там в языке есть поддержка прототипного ООП. Нужно некоторое время чтобы понять как этим пользоваться и как можно организовать классическое ООП.
И как там организовать асинхронную посылку сообщений от объекта к объекту, сообщения содержащие, в том числе, всякие там блоки кода? :-) Мы ведь про классическое ООП, которое в Smalltalk'e? ;-)
-
Не не не... :) Я про то, что в CP, Java, cpp и т.д.
В смолтоке я сам мало что понимаю ;D
-
Не не не... :) Я про то, что в CP, Java, cpp и т.д.
В смолтоке я сам мало что понимаю ;D
А, ну так это и не ООП вовсе ;-)
-
Кстати, valexey, а при чем там функции высших порядков? На Oberon'е ведь тоже можно POINTER передать параметром...
-
Кстати, valexey, а при чем там функции высших порядков? На Oberon'е ведь тоже можно POINTER передать параметром...
POINTER на ЧТО? ;-)
Чтобы сделать полноценную типобезопасную функцию sort, нужно чтобы она принимала в качестве одного из параметров именно функцию (указатель на функцию) определенного типа. А не void*.
-
Ну типа так:
MODULE SmartTest;
IMPORT
Log := StdLog;
TYPE
P = PROCEDURE(a, b: INTEGER): BOOLEAN;
PROCEDURE Comp(a, b: INTEGER): BOOLEAN;
BEGIN
RETURN a < b;
END Comp;
PROCEDURE Sort(func: P);
VAR
a, b: INTEGER;
res: BOOLEAN;
BEGIN
a := 1;
b := 2;
res := func(a, b);
Log.Bool(res);
END Sort;
PROCEDURE Do*();
BEGIN
Sort(Comp)
END Do;
BEGIN
END SmartTest.Do
То же самое что и в луашной сортировке... не? ???
-
Мне на изучение Lua хватило 3 дней. А сколько ты изучал cpp? ;)
КРАЙНЕ не корректное сравнение..
-
Ну типа так:
MODULE SmartTest;
IMPORT
Log := StdLog;
TYPE
P = PROCEDURE(a, b: INTEGER): BOOLEAN;
PROCEDURE Comp(a, b: INTEGER): BOOLEAN;
BEGIN
RETURN a < b;
END Comp;
PROCEDURE Sort(func: P);
VAR
a, b: INTEGER;
res: BOOLEAN;
BEGIN
a := 1;
b := 2;
res := func(a, b);
Log.Bool(res);
END Sort;
PROCEDURE Do*();
BEGIN
Sort(Comp)
END Do;
BEGIN
END SmartTest.Do
То же самое что и в луашной сортировке... не? ???
Не. Луашная функция Table.sort сортирует не только целые числа. Попробуй ка этой же функцией SmartTest.Sort, не изменяя её исходник, отсортировать массив строк.
-
Мне на изучение Lua хватило 3 дней. А сколько ты изучал cpp? ;)
КРАЙНЕ не корректное сравнение..
Почему это? В контексте моего кода на Lua и кода valexey на cpp ИМХО вполне корректное... :P
-
Ну типа так:
MODULE SmartTest;
IMPORT
Log := StdLog;
TYPE
P = PROCEDURE(a, b: INTEGER): BOOLEAN;
PROCEDURE Comp(a, b: INTEGER): BOOLEAN;
BEGIN
RETURN a < b;
END Comp;
PROCEDURE Sort(func: P);
VAR
a, b: INTEGER;
res: BOOLEAN;
BEGIN
a := 1;
b := 2;
res := func(a, b);
Log.Bool(res);
END Sort;
PROCEDURE Do*();
BEGIN
Sort(Comp)
END Do;
BEGIN
END SmartTest.Do
То же самое что и в луашной сортировке... не? ???
Не. Луашная функция Table.sort сортирует не только целые числа. Попробуй ка этой же функцией SmartTest.Sort, не изменяя её исходник, отсортировать массив строк.
Ну так мы все таки про обобщенку или фвп?
ps Я вот если чесна вообще не очень понимаю чем отличается фвп от процедурного типа в паскале...
-
Почему это? В контексте моего кода на Lua и кода valexey на cpp ИМХО вполне корректное... :P
Потому, что если бы ты пользовался Lua со, скажем, 2004 года, то ты бы его к текущему моменту изучал не 3 дня, а 8-9 лет (lua, как и с++, развивается, и тот что был в 2004 году не является тем что сейчас). И исходник ты написал бы для этой задачи в точности такой же.
-
Почему это? В контексте моего кода на Lua и кода valexey на cpp ИМХО вполне корректное... :P
Потому, что если бы ты пользовался Lua со, скажем, 2004 года, то ты бы его к текущему моменту изучал не 3 дня, а 8-9 лет (lua, как и с++, развивается, и тот что был в 2004 году не является тем что сейчас). И исходник ты написал бы для этой задачи в точности такой же.
:D ;)
-
Ну так мы все таки про обобщенку или фвп?
ps Я вот если чесна вообще не очень понимаю чем отличается фвп от процедурного типа в паскале...
А ты видел хоть один язык где декларировались HOF но при этом не было бы обобщенки? ;-) Одно с другим тесно связано.
-
Почему это? В контексте моего кода на Lua и кода valexey на cpp ИМХО вполне корректное... :P
Потому, что если бы ты пользовался Lua со, скажем, 2004 года, то ты бы его к текущему моменту изучал не 3 дня, а 8-9 лет (lua, как и с++, развивается, и тот что был в 2004 году не является тем что сейчас). И исходник ты написал бы для этой задачи в точности такой же.
Не пойму к чему ты клонишь... Неужели CPP вместе с STL можно вкурить за 3 дня и свободно кодить как на Lua? ;)
Пакажи мне чувака за 3 дня курения cpp могущего соорудить код подобный твоему.
-
ps Я вот если чесна вообще не очень понимаю чем отличается фвп от процедурного типа в паскале...
А отличие очень простое - функция высшего порядка это функция которая принимает на вход одну или несколько функций и на выход гонит тоже функцию. Так вот, чтобы это имело смысл, очень желательно иметь для функций не только одну лишь операцию присваивания. Должна быть возможность вернуть новую функцию, которой еще не было в программе. Для этого можно использовать каррирование, замыкания, комбинаторы и так далее.
-
Почему это? В контексте моего кода на Lua и кода valexey на cpp ИМХО вполне корректное... :P
Потому, что если бы ты пользовался Lua со, скажем, 2004 года, то ты бы его к текущему моменту изучал не 3 дня, а 8-9 лет (lua, как и с++, развивается, и тот что был в 2004 году не является тем что сейчас). И исходник ты написал бы для этой задачи в точности такой же.
Не пойму к чему ты клонишь... Неужели CPP вместе с STL можно вкурить за 3 дня и свободно кодить как на Lua? ;)
Пакажи мне чувака за 3 дня курения cpp могущего соорудить код подобный твоему.
На уровне сортировок - можно. Особенно современный C++ (с++11).
У меня же там даже своих шаблонов нет :-) Там вообще ничего сложного не используется. Обычная функция sort (которая мгновенно нагугливается) и обычные лямбды, которые ровно те же (для этой задачи) что и в js например.
-
ps Я вот если чесна вообще не очень понимаю чем отличается фвп от процедурного типа в паскале...
А отличие очень простое - функция высшего порядка это функция которая принимает на вход одну или несколько функций и на выход гонит тоже функцию. Так вот, чтобы это имело смысл, очень желательно иметь для функций не только одну лишь операцию присваивания. Должна быть возможность вернуть новую функцию, которой еще не было в программе. Для этого можно использовать каррирование, замыкания, комбинаторы и так далее.
А я думал что этого достаточно:
Фу́нкция вы́сшего поря́дка (http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_%D0%B2%D1%8B%D1%81%D1%88%D0%B5%D0%B3%D0%BE_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0) — функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных
-
Пакажи мне чувака за 3 дня курения cpp могущего соорудить код подобный твоему.
Вообще, я слабо представляю как можно подтвердить или опровергнуть твое или мое суждение. Оба утверждения, в наших реалиях, не фальсифицируемы. Поэтому не вижу смысла дальше спорить.
-
ps Я вот если чесна вообще не очень понимаю чем отличается фвп от процедурного типа в паскале...
А отличие очень простое - функция высшего порядка это функция которая принимает на вход одну или несколько функций и на выход гонит тоже функцию. Так вот, чтобы это имело смысл, очень желательно иметь для функций не только одну лишь операцию присваивания. Должна быть возможность вернуть новую функцию, которой еще не было в программе. Для этого можно использовать каррирование, замыкания, комбинаторы и так далее.
А я думал что этого достаточно:
Фу́нкция вы́сшего поря́дка (http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_%D0%B2%D1%8B%D1%81%D1%88%D0%B5%D0%B3%D0%BE_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0) — функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных
ok, давай на примерах. Представим себе, что в неком языке "Оo" есть целые числа. Есть как целочисленные литералы, так и целочисленные переменные. Целочисленной переменной можно присваивать целочисленные литералы, также можно присваивать значение одной переменной другой переменной. Все, больше ни одной операции для целых чисел в языке Oo нет (операций сложения, вычитания, умножения и так далее).
Внимание вопрос - можно ли считать, что данный язык полноценно поддерживает концепцию целых чисел?
-
На уровне сортировок - можно. Особенно современный C++ (с++11).
У меня же там даже своих шаблонов нет :-) Там вообще ничего сложного не используется. Обычная функция sort (которая мгновенно нагугливается) и обычные лямбды, которые ровно те же (для этой задачи) что и в js например.
Сдаюсь. Лямбды, шаблоны, JS - куда уж проще.... :)
ps У меня вот JS курить терпения не хватило. Lua на порядок проще.
-
ok, давай на примерах. Представим себе, что в неком языке "Оo" есть целые числа. Есть как целочисленные литералы, так и целочисленные переменные. Целочисленной переменной можно присваивать целочисленные литералы, также можно присваивать значение одной переменной другой переменной. Все, больше ни одной операции для целых чисел в языке Oo нет (операций сложения, вычитания, умножения и так далее).
Внимание вопрос - можно ли считать, что данный язык полноценно поддерживает концепцию целых чисел?
Нет конечно.
Но есть определение фвп которое я привел.
И есть процедурный тип который соответствует этому определению. Вот и все.
Набор операций над функциями вроде приведен в определении ("передавать" и "принимать")...
-
Внимание вопрос - можно ли считать, что данный язык полноценно поддерживает концепцию целых чисел?
;D Огласите свою "концепцию целых чисел" - и мы дадим вам ответ! ;D
-
На уровне сортировок - можно. Особенно современный C++ (с++11).
У меня же там даже своих шаблонов нет :-) Там вообще ничего сложного не используется. Обычная функция sort (которая мгновенно нагугливается) и обычные лямбды, которые ровно те же (для этой задачи) что и в js например.
Сдаюсь. Лямбды, шаблоны, JS - куда уж проще.... :)
ps У меня вот JS курить терпения не хватило. Lua на порядок проще.
Где ты тут шаблоны нашел? :-) В моем коде их нет. Есть только лямбды.
А лямбды и замыкания есть и в Lua. Тут отличий Lua от js пожалуй и нет никаких.
-
:o
А это че?
vector<string> s = {"З","Д","А","В","Б","Е","Ё","Г","Ж"};
Я cpp не знаю... Но в wiki сказано:
vector — это шаблон из стандартной библиотеки C++ (http://ru.wikipedia.org/wiki/Vector_(C%2B%2B))
-
:o
А это че?
vector<string> s = {"З","Д","А","В","Б","Е","Ё","Г","Ж"};
Я cpp не знаю... Но в wiki сказано:
vector — это шаблон из стандартной библиотеки C++ (http://ru.wikipedia.org/wiki/Vector_(C%2B%2B))
std::vector - это шаблонный класс. А вот vector<string> это уже никакой не шаблон, а конкретный тип ;-) Для того чтобы использовать vector не нужно что-либо знать про шаблоны.
-
Ничего не понял. Так шаблон или нет? Понятно что в данном месте это конкретный тип. Но без шаблонов это работать ведь не будет. Или как?
Если там нет ничего специфичного для Cpp&STL, значит можно переписать практически 1:1 на CP. Так? :)
-
Шаблонный класс использует шаблоны, именно так.
-
Если там нет ничего специфичного для 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++ нет (на этом уровне, и на уровне тех моих исходников).
-
Чет ты мне прям мои шаблоны о шаблонах ломаешь ;D
-
Визуально vector не отличается от обычного массива... да...
Но я всегда считал что фишка шаблонов в том и есть, что они так невинно выглядят :D
Вот как "sort()" без шаблонов будет работать?
В CP можно извратиться да... но это будет не 1:1. Нужно будет либо кучу sort_int, sort_string и т.д. наплодить. Либо делать вариантные записи и дальше IF'ы... :)
-
С. Липпман - C++ для начинающих
http://cpp.com.ru/lippman/c10.html (http://cpp.com.ru/lippman/c10.html)
Неее нах... я лучше 10 Lua изучу ;D ;D ;D
-
Визуально 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;
}
-
Ага, только шаблон как был так и остался:
при вызове вышеописанной функции sort необязательно указывать параметр шаблона (если он совпадает с типом элементов аргумента-массива):
-
С. Липпман - C++ для начинающих
http://cpp.com.ru/lippman/c10.html (http://cpp.com.ru/lippman/c10.html)
Неее нах... я лучше 10 Lua изучу ;D ;D ;D
Еще раз - зачем ты читаешь про шаблоны? Ты что, сам их писать собираешься? ;-) Чтение вот док по этим шаблонам (то есть по тому как устроена sort, vector и так далее) эквивалентно чтению исходников и документации по интерпретатору Lua и по компилятору Оберона. Во всех смыслах эквивалентно - и по сложности (хотя шаблоны конечно проще) и по востребованности для озвученного ранее типа программистов.
Просто там, где в Lua и Обероне придется изменять компилятор или интерпретатор (менять язык), там в плюсах обойдется написанием своего шаблона.
-
Ага, только шаблон как был так и остался:
при вызове вышеописанной функции sort необязательно указывать параметр шаблона (если он совпадает с типом элементов аргумента-массива):
И-и? Тебя слово пугает? Или возможность написать самостоятельно такое же?
Еще раз, сложности тут ровно столько же, сколько скажем у шаблонной функции NEW в Обероне.
-
Да не :)
Я просто не могу пользоваться тем, чего не понимаю. ХЗ, может я один такой :)
Моё ИМХО - Lua в 1000 раз проще CPP ;D ;D ;D
-
Да не :)
Я просто не могу пользоваться тем, чего не понимаю. ХЗ, может я один такой :)
Моё ИМХО - Lua в 1000 раз проще CPP ;D ;D ;D
Тогда объясни как именно в Lua работает функция Table.sort :-)
Вот точно и детально. Где там и какая магия, ведь оно работает с разными типами.
Дело в том, что заковыриваться в детали реализации можно почти бесконечно много. Вначале до уровня либы, затем до уровня компилятора, затем до уровня машкода, затем идем на уровень процессора и так далее. Плюсы хороши тем, что не покидая язык ты можешь зарыться достаточно далеко и сделать многое. Если тебе нужно. Если не нужно, можно оставаться на том же уровне что и Lua/Oberon, не заклядывая внутрь. Считай что std::sort - это функция вшитая в язык (аля NEW в Обероне), а std::vector - это тоже конструкт языка с помощью которого делаются конкретные типы. И нет никакой библиотеки, нет никаких шаблонов. Весь stl вшит в язык. (кстати, стандарт на C++ явно указывает, что так оно и может быть, то есть файлов-хедеров iostream, vector, algorithm и так далее может просто не быть).
-
В Lua sort ни разу не магический. Там типы то по пальцам пересчитать.
Предлагаю закончить бесперспективный спор ;)
-
Да не :)
Я просто не могу пользоваться тем, чего не понимаю. ХЗ, может я один такой :)
Моё ИМХО - Lua в 1000 раз проще CPP ;D ;D ;D
Клевещете на себя ;D - авто же вы умеете водить, или пользоваться микроволновкой..., даже одежду на себя из синтетики одеваете и ниче.. живы пока.
-
Собсна вот:
/*
** {======================================================
** Quicksort
** (based on `Algorithms in MODULA-3', Robert Sedgewick;
** Addison-Wesley, 1993.)
** =======================================================
*/
static void set2 (lua_State *L, int i, int j) {
lua_rawseti(L, 1, i);
lua_rawseti(L, 1, j);
}
static int sort_comp (lua_State *L, int a, int b) {
if (!lua_isnil(L, 2)) { /* function? */
int res;
lua_pushvalue(L, 2);
lua_pushvalue(L, a-1); /* -1 to compensate function */
lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */
lua_call(L, 2, 1);
res = lua_toboolean(L, -1);
lua_pop(L, 1);
return res;
}
else /* a < b? */
return lua_compare(L, a, b, LUA_OPLT);
}
static void auxsort (lua_State *L, int l, int u) {
while (l < u) { /* for tail recursion */
int i, j;
/* sort elements a[l], a[(l+u)/2] and a[u] */
lua_rawgeti(L, 1, l);
lua_rawgeti(L, 1, u);
if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */
set2(L, l, u); /* swap a[l] - a[u] */
else
lua_pop(L, 2);
if (u-l == 1) break; /* only 2 elements */
i = (l+u)/2;
lua_rawgeti(L, 1, i);
lua_rawgeti(L, 1, l);
if (sort_comp(L, -2, -1)) /* a[i]<a[l]? */
set2(L, i, l);
else {
lua_pop(L, 1); /* remove a[l] */
lua_rawgeti(L, 1, u);
if (sort_comp(L, -1, -2)) /* a[u]<a[i]? */
set2(L, i, u);
else
lua_pop(L, 2);
}
if (u-l == 2) break; /* only 3 elements */
lua_rawgeti(L, 1, i); /* Pivot */
lua_pushvalue(L, -1);
lua_rawgeti(L, 1, u-1);
set2(L, i, u-1);
/* a[l] <= P == a[u-1] <= a[u], only need to sort from l+1 to u-2 */
i = l; j = u-1;
for (;;) { /* invariant: a[l..i] <= P <= a[j..u] */
/* repeat ++i until a[i] >= P */
while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) {
if (i>=u) luaL_error(L, "invalid order function for sorting");
lua_pop(L, 1); /* remove a[i] */
}
/* repeat --j until a[j] <= P */
while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) {
if (j<=l) luaL_error(L, "invalid order function for sorting");
lua_pop(L, 1); /* remove a[j] */
}
if (j<i) {
lua_pop(L, 3); /* pop pivot, a[i], a[j] */
break;
}
set2(L, i, j);
}
lua_rawgeti(L, 1, u-1);
lua_rawgeti(L, 1, i);
set2(L, u-1, i); /* swap pivot (a[u-1]) with a[i] */
/* a[l..i-1] <= a[i] == P <= a[i+1..u] */
/* adjust so that smaller half is in [j..i] and larger one in [l..u] */
if (i-l < u-i) {
j=l; i=i-1; l=i+2;
}
else {
j=i+1; i=u; u=j-2;
}
auxsort(L, j, i); /* call recursively the smaller one */
} /* repeat the routine for the larger one */
}
static int sort (lua_State *L) {
int n = aux_getn(L, 1);
luaL_checkstack(L, 40, ""); /* assume array is smaller than 2^40 */
if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */
luaL_checktype(L, 2, LUA_TFUNCTION);
lua_settop(L, 2); /* make sure there is two arguments */
auxsort(L, 1, n);
return 0;
}
/* }====================================================== */
На всякий случай:
/******************************************************************************
* Copyright (C) 1994-2012 Lua.org, PUC-Rio.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************/
-
Собсна вот:
/*
** {======================================================
** Quicksort
** (based on `Algorithms in MODULA-3', Robert Sedgewick;
** Addison-Wesley, 1993.)
** =======================================================
*/
static void set2 (lua_State *L, int i, int j) {
lua_rawseti(L, 1, i);
lua_rawseti(L, 1, j);
}
static int sort_comp (lua_State *L, int a, int b) {
if (!lua_isnil(L, 2)) { /* function? */
int res;
lua_pushvalue(L, 2);
lua_pushvalue(L, a-1); /* -1 to compensate function */
lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */
lua_call(L, 2, 1);
res = lua_toboolean(L, -1);
lua_pop(L, 1);
return res;
}
else /* a < b? */
return lua_compare(L, a, b, LUA_OPLT);
}
static void auxsort (lua_State *L, int l, int u) {
while (l < u) { /* for tail recursion */
int i, j;
/* sort elements a[l], a[(l+u)/2] and a[u] */
lua_rawgeti(L, 1, l);
lua_rawgeti(L, 1, u);
if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */
set2(L, l, u); /* swap a[l] - a[u] */
else
lua_pop(L, 2);
if (u-l == 1) break; /* only 2 elements */
i = (l+u)/2;
lua_rawgeti(L, 1, i);
lua_rawgeti(L, 1, l);
if (sort_comp(L, -2, -1)) /* a[i]<a[l]? */
set2(L, i, l);
else {
lua_pop(L, 1); /* remove a[l] */
lua_rawgeti(L, 1, u);
if (sort_comp(L, -1, -2)) /* a[u]<a[i]? */
set2(L, i, u);
else
lua_pop(L, 2);
}
if (u-l == 2) break; /* only 3 elements */
lua_rawgeti(L, 1, i); /* Pivot */
lua_pushvalue(L, -1);
lua_rawgeti(L, 1, u-1);
set2(L, i, u-1);
/* a[l] <= P == a[u-1] <= a[u], only need to sort from l+1 to u-2 */
i = l; j = u-1;
for (;;) { /* invariant: a[l..i] <= P <= a[j..u] */
/* repeat ++i until a[i] >= P */
while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) {
if (i>=u) luaL_error(L, "invalid order function for sorting");
lua_pop(L, 1); /* remove a[i] */
}
/* repeat --j until a[j] <= P */
while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) {
if (j<=l) luaL_error(L, "invalid order function for sorting");
lua_pop(L, 1); /* remove a[j] */
}
if (j<i) {
lua_pop(L, 3); /* pop pivot, a[i], a[j] */
break;
}
set2(L, i, j);
}
lua_rawgeti(L, 1, u-1);
lua_rawgeti(L, 1, i);
set2(L, u-1, i); /* swap pivot (a[u-1]) with a[i] */
/* a[l..i-1] <= a[i] == P <= a[i+1..u] */
/* adjust so that smaller half is in [j..i] and larger one in [l..u] */
if (i-l < u-i) {
j=l; i=i-1; l=i+2;
}
else {
j=i+1; i=u; u=j-2;
}
auxsort(L, j, i); /* call recursively the smaller one */
} /* repeat the routine for the larger one */
}
static int sort (lua_State *L) {
int n = aux_getn(L, 1);
luaL_checkstack(L, 40, ""); /* assume array is smaller than 2^40 */
if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */
luaL_checktype(L, 2, LUA_TFUNCTION);
lua_settop(L, 2); /* make sure there is two arguments */
auxsort(L, 1, n);
return 0;
}
/* }====================================================== */
И как мне, знающему Lua, и не понимающему что такое эти все static, звездочки какие-то и деление точек с запятыми на звездочку (в тексте постоянно встречается нечто вроде ;/* ), разобраться в этом коде? :-) Явно же это явно какой-то жутко извращенный диалект луа!
Который от Lua сильно дальше, чем шаблоны в плюсах от плюсов ;-)
-
Пакажи мне чувака за 3 дня курения cpp могущего соорудить код подобный твоему.
(http://lurkmore.so/images/7/7d/C%2B%2B_prosto.png)
-
valexey, это ж Си! ;D ;D ;D
Это из исходников интерпретатора, реализация того самого table.sort()
-
Вот: http://www.lua.org/source/5.1/ltablib.c.html
-
valexey, это ж Си! ;D ;D ;D
Это из исходников интерпретатора, реализация того самого table.sort()
Дык, да. Но ты полагаешь, что за три дня человек изучающий Луа еще и Си выучит? :-)
-
Нахрена?
Это уже слой ниже Lua. Так можно и до маш кодов дойти.
А шаблоны в cpp - это как раз сам cpp :)
-
Нахрена?
Это уже слой ниже Lua. Так можно и до маш кодов дойти.
А шаблоны в cpp - это как раз сам cpp :)
C++, как и многие другие языки, состоит из нескольких слабо пересекающихся языков (и, между прочим, Оберон не исключение). Язык шаблонов - самый обособленный язык в нем. Можно годами писать на C++ и ни разу шаблоны не видеть. И можно десятилетие писать на C++ не написав ни одного шаблона, не зная как они работают, но при этом активно использовать sort, vector и так далее. Знание этих механизмов - это тот же самый "слой ниже" что и приведенный тобой код в Lua.
-
Я уже потерял нить спора... ;)
-
Я уже потерял нить спора... ;)
Ну, помнится ты утверждал что мой элементарный код-аналог твоего луашного, требует для написания сильно бОльшей квалификации :-)
Я таки утверждаю, что для современного с++ это не обязательно. Вот C++98 - он да, он требовал. Лямбд не было, дофига еще чего не было. Для написание такого кода пришлось бы или использовать адапторы (в которых хрен разберешься), либо написать своих пару классов-компараторов. А вот в современном С++ (c++11) - все ок. Все элементарно просто. И про шаблоны (страшные и ужасные) знать не надо.
-
Хм... Попробовать покурить cpp может... ...еще раз... ;D
А каким компайлером можно поиметь ентот c++11?
-
Хм... Попробовать покурить cpp может... ...еще раз... ;D
А каким компайлером можно поиметь ентот c++11?
gcc 4.7 и выше.
(на самом деле начиная с gcc 4.6 оно начало как-то поддерживаться, но я бы советовал 4.7)
Насколько поддерживает маздай-студия я не знаю. В любом случае у gcc самая полная поддержка стандарта сейчас.
-
Сенкс.
Только еще вопрос в чем кодить. Есть чего нибудь маздайное, простое? К ST2 сложно прикручивать?
-
Сенкс.
Только еще вопрос в чем кодить. Есть чего нибудь маздайное, простое? К ST2 сложно прикручивать?
На счет прикручивания к плюсам ST2 под виндой - это к vlad :-) Он вроде прикручивал и у него вроде как даже заработало как надо (в том числе отладка).
Как альтернатива - Qt Creator. Оно вроде даже c++11 держит теперь. Надо будет на досуге посмотреть как там на тему прикручивания gcc того который не с ним идет искаропки.
-
Но вообще, докури Lua сначала лучше. Пока докуриваешь, поддержка c++11 еще сильнее улучшится :-)
(а я, на досуге, посмотрю что там у MSVS2012 с поддержкой актуальных плюсов)
-
OK :)
-
Да, нашел табличку в плане поддержки компилерами С++11: http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport
Студия оказывается не самый аццтойный компилер имеет. Где-то на третьем месте. :-) Как обычно бесплатные и свободные компиляторы является более качественными и фичастыми ;-)
-
А вот и свежая версия компилятора Lua вышла:
http://www.linux.org.ru/news/opensource/8465577
Вышел компилятор для Lua — LuaJit 2.0.
Основные изменения для релиза были в исправлении багов.
Изменения и улучшения по сравнению с первой версией:
* Возможность использования конверсии исключений C++ для всех платформ с помощью функций-обёрток.
* Обёртки для libm функций.
* Сборка static и shared библиотек на POSIX.
* Компилирование рекурсивного кода.
* Портирование интепретатора и JIT компилятора на x86-64.
* Разметка текущего трейса, даже если компилятор не доступен.
* Оптимизация для and/or операторов.
-
Производительность радует:
http://luajit.org/performance_arm.html
Ну и вообще: http://luajit.org/performance.html
-
Свой словарь Completions в ST2 для Lua делается так:
Создаем и сохраняем в любом месте внутри папки packages файл с расширением .sublime-completions
И наполняем его по образцу:
{
"scope": "source.lua",
"completions":
[
"print(",
"setmetatable(",
{"trigger": "rep", "contents": "string.rep("}
]
}
триггеры имеют след. смысл:
"foo"
# is equivalent to:
{ "trigger": "foo", "contents": "foo" }
Подробности тут:
http://docs.sublimetext.info/en/latest/reference/completions.html
-
Соорудил свой первый рекурсивный итератор:
function tree(t)
local i = 1
local subiter
local function iter()
local v = t[i]
if type(v) == "table" then
subiter = subiter or tree(v)
local v = subiter()
if v then
return v
else
subiter = nil
i = i + 2
v = t[i - 1]
return v
end
else
i = i + 1
return v
end
end
return iter
end
a = {1,2,3,{1,2,{1,2,3},3},4,5,6,7,8,9}
for v in tree(a) do
print(v)
end
Пришлось поломать мозг, т.к. замыканиями раньше не пользовался и итераторы не писал. :)
Кто знает как сделать проще?
-
Что оно должно делать?
-
Просто перебрать все элементы дерева.
Этот мой код выдает такое:
1
2
3
1
2
1
2
3
3
4
5
6
7
8
9
-
http://symmetrica.net/lua/
-
Поигрался немного со строковой либой:
http://www.lua.org/manual/5.1/manual.html#5.4
Работать с ней одно удовольствие (несмотря на скромный набор функций)
-
Поиск парных сбалансированных символов:
s = '2*(10*(x+1)-2)+5'
-- ищем парные скобки
print(s:find("%b()"))
-- log: 3 14
-- ищем парные скобки начиная с 4 символа
print(s:find("%b()", 4))
-- log: 7 11
-
Еще очень понравилось что в функции замены подстроки (string.gsub (s, pattern, repl [, n]))
вместо подстроки замены (repl) можно передать функцию. А так как есть замыкания.... ;)
Пример:
function foo(t)
local i = 0
return function(s)
i = i + 1
t[i] = s
return "#"
end
end
local text = 'sdfsdfsd48sdfsd15dsfsd72dsfs69'
local t = {}
text = text:gsub("%d", foo(t))
print(text)
for i,v in ipairs(t) do
print(i,v)
end
-- log:
--[[
sdfsdfsd##sdfsd##dsfsd##dsfs##
1 4
2 8
3 1
4 5
5 7
6 2
7 6
8 9
--]]
Тут замыкание собирает все циферы в массив t
если поменять паттерн на "%d+" то получим такой лог:
sdfsdfsd#sdfsd#dsfsd#dsfs#
1 48
2 15
3 72
4 69
Йа тащусь :D
-
Запилил себе тулзу, которая выдирает метаданные из буфера обмена 1С.
require'clipboard'
format = {}
for k,v in ipairs(clipboard.getformats() or {}) do
formatname = clipboard.formatname(v)
if formatname then
format[formatname] = v
end
end
data = clipboard.getdata(format["1C:MD8 Data"])
if data then
pattern = '%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x'
data = data:gsub(pattern, "{}"):sub(4)
t = loadstring("return"..data)()
result = ""
t1 = t[1]
for i = 2, t1[1] + 1 do
result = result .. t1[i][2][1][2][2][2][3] .. "\n"
end
print(result:format('%q'))
clipboard.settextu(result:format('%q'))
end
Требует либу:
http://files.luaforge.net/releases/jaslatrix/clipboard/1.0.0
Мануал: :)
1. В пофигураторе нажимаем ctrl+c на реквизитах объекта метаданных (в буфере слово "Реквизиты")
2. Вызываем скрипт
3. Теперь у нас в буфере список реквизитов :)
зы Чтобы скрипт не показывал окно нужно поменять расширение на .wlua (при условии что установлен Lua for windows)
-
http://repl.it/Emx
-
http://repl.it/Emx
Тогда уж лучше так: http://repl.it/Emx#:languages
-
Кувасик так неожиданно в списке ;D
-
Запилил себе тулзу, которая выдирает метаданные из буфера обмена 1С.
...
Опубликовал на инфостарте:
http://infostart.ru/public/163332/
-
Прикольно: :D
http://repl.it/FFp
Чую эти особенности Lua нужно курить основательно, чтоб по граблям потом не гулять...
-
Прикольно: :D
http://repl.it/FFp
Чую эти особенности Lua нужно курить основательно, чтоб по граблям потом не гулять...
А что не так в этом коде:
i = 10
for i in ipairs({1,2,3,4}) do
print(i)
end
print(i)
?
Тут просто в цикле создаётся новая переменная i, которая скрывает внешнюю для цикла переменную i...
Кстати, а в описании Lua этот момент указан хоть?
-
Да все так. В документации конечно описано.
Просто несколько непривычно это :)
-
Да все так. В документации конечно описано.
Просто несколько непривычно это :)
Грабли они не в языках, а в головах.
-
http://www.lua.ru/doc/2.4.5.html
Переменная v является локальной для цикла; вы не сможете использовать ее значение после выхода из цикла for. Если вам необходимо значение этой переменной, присвойте его другой переменной перед выходом из цикла.
-
Да все так. В документации конечно описано.
Просто несколько непривычно это :)
Грабли они не в языках, а в головах.
Не возражаю. :)
Язык только наступить помогает... ;D
-
На самом деле эта луашная особенность была бы очень кстати оберону...
-
На самом деле эта луашная особенность была бы очень кстати оберону...
это какая - вшитый по умолчанию побочный эффект.. с неожиданными исключениями из него в некоторых конструкциях ?- спаси господи... ;D
-
Ну конкретно для FOR объявлять в секции VAR переменную цикла имхо лишнее.
-
Ну конкретно для FOR объявлять в секции VAR переменную цикла имхо лишнее.
может и так.. но есть несомненный плюс в ОБЕРОНЕ , Паскале... НИЧЕГО НЕЛЬЗЯ СДЕЛАТЬ с переменной не объявив ее - имхо проще запомнить одно правило - хочешь использовать переменную - объяви ее... чем запоминать исключения и удивляться неожиданным эффектам следующим из них.
или второе... - хочешь создать локальное окружение.. -у тебя один способ -подпрограмма, вместо бездумного (удобного) создания переменных "где -надо" начинающими поклонниками крутизны.. интеллект которых недостаточно развит для учета эффекта затенения...
-
Это да. Согласен.
В Lua с ее областями видимости наколоться раз плюнуть.
Например забыл указать что переменная локальная в функции и все... приехали.
Мне вообще сначала умолчательная глобальность переменных казалась ересью.
Т.е. здравый смысл подсказывает, что неявно объявленная переменная должна быть локальной для функции. Но в Lua локальность нужно явно указывать...
Вроде логичнее было бы явно наоборот глобальность указывать, но потом я понял что в Lua сделали упор на удобство использования замыканий.
И оно вроде даже нормально если мыслить замыканиями. Но один хрен ощущается изъян в дизайне языка.
-
Это да. Согласен.
В Lua с ее областями видимости наколоться раз плюнуть.
Например забыл указать что переменная локальная в функции и все... приехали.
Мне вообще сначала умолчательная глобальность переменных казалась ересью.
Т.е. здравый смысл подсказывает, что неявно объявленная переменная должна быть локальной для функции. Но в Lua локальность нужно явно указывать...
Вроде логичнее было бы явно наоборот глобальность указывать, но потом я понял что в Lua сделали упор на удобство использования замыканий.
И оно вроде даже нормально если мыслить замыканиями. Но один хрен ощущается изъян в дизайне языка.
Борис, тут дело вот в чем многие забывают, что Луа прежде всего проектировался как DSL - и надо очень осторожно относится к перспективам его использования за ее пределами -
а если он не подходит, то глупо винить в этом создателей (пример - Обезьянка)
-
Lua просто меньшая из зол. ;)
-
Это да. Согласен.
В Lua с ее областями видимости наколоться раз плюнуть.
Например забыл указать что переменная локальная в функции и все... приехали.
Мне вообще сначала умолчательная глобальность переменных казалась ересью.
Т.е. здравый смысл подсказывает, что неявно объявленная переменная должна быть локальной для функции. Но в Lua локальность нужно явно указывать...
Вроде логичнее было бы явно наоборот глобальность указывать, но потом я понял что в Lua сделали упор на удобство использования замыканий.
И оно вроде даже нормально если мыслить замыканиями. Но один хрен ощущается изъян в дизайне языка.
Не в замыканиях дело. Это (по умолчанию все глобальное) растет из древних скриптовых языков, где никаких лямбд не было. Глобальные переменные банально проще реализовывать, равно как и динамическую типизацию вместо статической. Поэтом вначале подобные скриптовыродки имеют только глобальные переменные, затем туда вкорячивают локальные и естественно для них дополнительное ключевое слово, чтобы не сломать обратную совместимость.
-
У меня кстати давно в голове мысль крутится, что большинство неудобств оберона могла бы исключить хорошая IDE.
Например проблема с КАПСОМ элементарно решается специальным сочетанием клавиш.
Например после ключевых слов давить shift+space.
Думаю можно быстро привыкнуть. Я вот в 1С к ctrl+space (контекстная подсказка) быстро привык. Набираю код без напряга.
А в идеале IDE сама может делать капсом в зависимости от контекста.
Проблема с VAR тоже не проблема. Насколько я знаю в делфях есть сочетание клавиш для объявления переменной.
Ну и т.д.
-
У меня кстати давно в голове мысль крутится, что большинство неудобств оберона могла бы исключить хорошая IDE.
Например проблема с КАПСОМ элементарно решается специальным сочетанием клавиш.
Например после ключевых слов давить shift+space.Уже решена в Astrobe. Без специальных сочетаний.
Я бы не занимался обероном если бы не видел у него потенциал для IDE :-)
-
Я бы не занимался обероном если бы не видел у него потенциал для IDE :-)
;) разве.. помнится года три назад в коровнике вы мне говорили другое..
-
Я бы не занимался обероном если бы не видел у него потенциал для IDE :-)
;) разве.. помнится года три назад в коровнике вы мне говорили другое..
А что я говорил?
-
Я бы не занимался обероном если бы не видел у него потенциал для IDE :-)
;) разве.. помнится года три назад в коровнике вы мне говорили другое..
А что я говорил?
что не вижу особых перспектив для него в плане IDE... впрочем, все меняется...
-
Я бы не занимался обероном если бы не видел у него потенциал для IDE :-)
;) разве.. помнится года три назад в коровнике вы мне говорили другое..
А что я говорил?
что не вижу особых перспектив для него в плане IDE... впрочем, все меняется...
Наверно ты меня не правильно понял (либо сейчас, либо тогда, либо и тогда и сейчас).
Сейчас я имел ввиду, что Оберон из за своего сочетания простоты и статической типизации является хорошим объектом для того, чтобы обкатать на нем всякие интересные идеи в плане построения окружения для разработки. То есть может получиться классическая связка - слабый язык + сильные тулзы для разработки. Ровно на этом, кстати, выехала java.
Оберон достаточно приятный подопытный кролик. Вот С++ - не приятный. Как и какой-нибудь D, или Ада. Про всякие динамически типизированные языки я вообще молчу.
PS. Тулзы/IDE вовсе не обязательно писать на самом Обероне.
-
То есть может получиться классическая связка - слабый язык + сильные тулзы для разработки. Ровно на этом, кстати, выехала java.
....
Тулзы/IDE вовсе не обязательно писать на самом Обероне.
1. именно про это я и говорил... а Оберонцы в ответ свою шарманку - нафиг не нужно, если бы было нужно то уже сделали, многие делали но потом отказались в силу ненужности...
2. Это и ежу понятно
-
Например проблема с КАПСОМ элементарно решается специальным сочетанием клавиш.
А какая проблема с КАПСОМ в Обероне? :o
Можно поподробнее, я просто не в курсе.
-
Например проблема с КАПСОМ элементарно решается специальным сочетанием клавиш.
А какая проблема с КАПСОМ в Обероне? :o
Можно поподробнее, я просто не в курсе.
Вы прикалываетесь?
В ОБЕРОНЕ ж все КЛЮЧЕВЫЕ слова КАПСОМ нужно ПИСАТЬ
-
Например проблема с КАПСОМ элементарно решается специальным сочетанием клавиш.
А какая проблема с КАПСОМ в Обероне? :o
Можно поподробнее, я просто не в курсе.
Вы прикалываетесь?
В ОБЕРОНЕ ж все КЛЮЧЕВЫЕ слова КАПСОМ нужно ПИСАТЬ
;D это не проблема.... проблема растяжение мизинца - профессиональная травма , однако - в перспективе, ведущая к инвалидности..
-
Во во ;D
-
В ОБЕРОНЕ ж все КЛЮЧЕВЫЕ слова КАПСОМ нужно ПИСАТЬ
Не вижу проблемы.
-
Странно... если верить Илье с Инфо.. то Оберонщики люди смотрящие в "дальнюю перспективу" -- а возможно дело в том, что у них нет пальца..
-
В ОБЕРОНЕ ж все КЛЮЧЕВЫЕ слова КАПСОМ нужно ПИСАТЬ
Не вижу проблемы.
Я прям ждал эти слова ;D
А как вы код набиваете?
-
С верхним регистром проблемы нет, если используются мало-мальски продуманные текстовые редакторы хотя бы. Я пишу код на Паскале через CTRL+ENTER в Notepadd++. Аналог - сниппеты. Набираешь if - получаешь:
IF ... THEN BEGIN
...[курсор]
END; // .IF
Собственно, блоков то не так уж и много. А отдельные слова можно и вручную набрать на уровне модуля.
P.S. VAR на уровне модуля - руками (ППЦ сложность-то). А у сниппета процедуры секция по умолчанию будет.
-
короче, Ilovb- ответ на ваш вопрос - традиционно (с помощью рук).
-
Berserker, ну понятно что проблема решается хорошим текстовым редактором. Я собсно об этом выше и говорил. Но это не значит что проблемы нет.
Сниппеты например не все любят... Как им быть?
-
Кто не любит - тот хорошо печатаем слепым методом и проблемы не видит. Всё же программист - не машинист. А машинисту "дофига и трошки" приходится жать на shift.
-
А как вы код набиваете?
Если слово целиком состоит из заглавных букв, то я включаю CapsLock. В остальных случаях набираю заглавные буквы, удерживая Shift.
А Вы как-то по-другому набиваете? :)
-
А как вы код набиваете?
Если слово целиком состоит из заглавных букв, то я включаю CapsLock. В остальных случаях набираю заглавные буквы, удерживая Shift.
А Вы как-то по-другому набиваете? :)
CapsLock при наборе кода? Вы профессионально кодите?
-
Berserker, ну понятно что проблема решается хорошим текстовым редактором. Я собсно об этом выше и говорил. Но это не значит что проблемы нет.
Сниппеты например не все любят... Как им быть?
Да и не хорошим в ряде случаев это возможно.. пример - родной редактор ББ + мод от Инфо21 (единственное что сделано нормально) - одна проблема, то ли на контрл спейс не посадишь - благодаря "гениальности фреймворка ББ" - не признает он это сочетание...
-
CapsLock при наборе кода? Вы профессионально кодите?
;D ;D ;D
Shift+Space при наборе кода? Вы профессионально кодите?
-
CapsLock при наборе кода? Вы профессионально кодите?
;D ;D ;D
Shift+Space при наборе кода? Вы профессионально кодите?
разумеется нет.. я же не кодер.. или 1с ник.. какой ... я привык ctrl space .. недоступный ацциким ББ
-
CapsLock при наборе кода? Вы профессионально кодите?
;D ;D ;D
Shift+Space при наборе кода? Вы профессионально кодите?
Shift+Space [SS] не на много сложнее чем один Space.
if[SS]a<2then[SS]a:=2[space]end[SS]
Сравните с CapsLock [CL]
[CL]if[CL][space]a<2[space][CL]then[CL][space]a:=2[space][CL]end[CL]
Да, я профессионально кодю. И отлично знаю что такое боль в кистях рук.
-
В 1С я практически все на шаблонах набираю:
http://hostingkartinok.com/show-image.php?id=203264ce84235515730c8318dad90d29
-
Да, тут ещё привычки, видимо, играют большую роль.
Правила набора заглавных букв, которыми я пользуюсь, хороши тем, что они универсальны. Не важно, это текст программы я набираю или сообщение на форуме строчу. Да, и нет привязки к конкретному редактору, в котором могут быть и не запрограммированы сочетание Shift+Space и тому подобное (F5, например, как оберонщеги любят :)).
-
В Astrobe с капсом разобрались просто - при наборе ключевого слова в любом регистре редактор автоматом заменяет набранное на капс. Ничего дополнительно жать не нужно. Это достаточно удобно (неудобств не испытывал). И всяко лучше чем постоянно мизинец насиловать шифтом, или капслок дергать.
Ну и вариант для тех, у кого нет нормального текстового редактора - жмем капс, и ВСЮ ПРОГРАММУ ПИШЕМ В КАПСОМ.
Но вообще, по моему, всем уже очевидно, что ключевые слова капсом в языке - это проблема (которую каждый решает сторонними средствами с разной степенью успешности).
Выгод от капсовых ключевых слов не видно.
-
Выгод от капсовых ключевых слов не видно.
Ее и не должно быть. Вирт просто зарезервировал капс, чтобы в будущем можно было добавлять ключевые слова в язык безболезненно.
-
В Astrobe с капсом разобрались просто - при наборе ключевого слова в любом регистре редактор автоматом заменяет набранное на капс. Ничего дополнительно жать не нужно. Это достаточно удобно (неудобств не испытывал). И всяко лучше чем постоянно мизинец насиловать шифтом, или капслок дергать.
ну не скажите... вот когда я смотрел на бобисткий код.. часто видел такие вещи как End, Begin - их набрать при таком подходе весьма проблематично :)
-
Выгод от капсовых ключевых слов не видно.
Ее и не должно быть. Вирт просто зарезервировал капс, чтобы в будущем можно было добавлять ключевые слова в язык безболезненно.
В каком месте это добавляет безболезненности? Очень часто скажем идентификаторы констант полностью из капса.
В том то и дело, что Вирт капс НЕ зарезервировал.
-
В Astrobe с капсом разобрались просто - при наборе ключевого слова в любом регистре редактор автоматом заменяет набранное на капс. Ничего дополнительно жать не нужно. Это достаточно удобно (неудобств не испытывал). И всяко лучше чем постоянно мизинец насиловать шифтом, или капслок дергать.
ну не скажите... вот когда я смотрел на бобисткий код.. часто видел такие вещи как End, Begin - их набрать при таком подходе весьма проблематично :)
Какой-какой код ты смотрел?
-
Выгод от капсовых ключевых слов не видно.
Помнится, на Оберонкоре (вроде) выгода от капсовых слов объяснялась тем, что, мол, не нужно их выделять цветом или болдом. Дескать, они и так зрительно выделяются.
Других каких-то выгод и впрямь, видимо, нет.
-
1. Они действительно автоматически выделяются без подсветки или внешнего форматирования.
2. Они лучше читаются и различаются людьми с ослабленным зрением.
Собственно, второе довольно важно. Я сейчас как раз целенаправленно восстанавливаю зрение по Бейтсу, сбросил уже 2.5 диоптрии с августа, так вот проходя путь от -9 до единицы на всех его стадиях, очень ценишь капсовые блоки и ключевые слова. Подсветку это, впрочем, не отменяет.
-
В Astrobe с капсом разобрались просто - при наборе ключевого слова в любом регистре редактор автоматом заменяет набранное на капс. Ничего дополнительно жать не нужно. Это достаточно удобно (неудобств не испытывал). И всяко лучше чем постоянно мизинец насиловать шифтом, или капслок дергать.
ну не скажите... вот когда я смотрел на бобисткий код.. часто видел такие вещи как End, Begin - их набрать при таком подходе весьма проблематично :)
Какой-какой код ты смотрел?
бобисткий.. боюсь "оклеветать" лишний раз , но вроде у Инфо21 было
-
Выгод от капсовых ключевых слов не видно.
Помнится, на Оберонкоре (вроде) выгода от капсовых слов объяснялась тем, что, мол, не нужно их выделять цветом или болдом. Дескать, они и так зрительно выделяются.
Других каких-то выгод и впрямь, видимо, нет.
Угу. Капс в языке больше проблем порождает, чем решает. Это ж экономия на спичках. Кроме того, например я отлично обхожусь в языках без капса и без подсветки синтаксиса/болда. Мне не нужно выделение ключевых слов цветом стилем или капсом по крайней мере в Аде, C,C++, Go, ObjC, D, Java, js. И некоторых других.
-
Как бы то ни было довод, что капсовые ключевые слова в языке создают проблему, потому что их неудобно набирать я нахожу смехотворным.
-
Как бы то ни было довод, что капсовые ключевые слова в языке создают проблему, потому что их неудобно набирать я нахожу смехотворным.
Если нет кошерного текстового редактора, оборудованного костылями для того, чтобы удобней набирать конструкции Оберона, то да, не удобно. И это проблема. Это повышает психологический порог для начала написания кода. Как вспомнишь что руки ломать придется, сразу хочется еще потеоретизировать а не код не писать. Поэтому стиль кодирования принятый в том же ББ столь убог (все в кучу) - потому что хочется как можно быстрее прекратить набирать программу, ибо это банально не приятно, написания кода с капсом вызывает физические страдания :-)
Поэтому современных компиляторов Оберона писаных на Обероне и нет :-)
-
... хочется как можно быстрее прекратить набирать программу, ибо это банально не приятно, написания кода с капсом вызывает физические страдания :-)
Ну, не буду разубеждать... Скажу только, что для программиста написать строчку-другую (с капсом или без) должно быть также просто, как затылок почесать :-)
-
Как бы то ни было довод, что капсовые ключевые слова в языке создают проблему, потому что их неудобно набирать я нахожу смехотворным.
Т.е. если абсолютизировать, то вам и носом по клаве шлепать нормально было бы. ;D
Набили носом строчку и хохочете. Еще строчка и уже слезы текут от радости. И чего там народ негодуэ?!?! ;D ;D ;D
Ну или попроще пример. Были бы ключевые слова такие:
PrOcEdUrE
ну а че норм... Вирт не просто так придумал. И выделяется хорошо - подсветка не нужна.
Программисту ж делать нехер. Вместо того чтоб больше головой думать он с клавой воюет ;D
-
... хочется как можно быстрее прекратить набирать программу, ибо это банально не приятно, написания кода с капсом вызывает физические страдания :-)
Ну, не буду разубеждать... Скажу только, что для программиста написать строчку-другую (с капсом или без) должно быть также просто, как затылок почесать :-)
Ну если строчку-другую то конешна херня.
А если тышу-другую?
-
... хочется как можно быстрее прекратить набирать программу, ибо это банально не приятно, написания кода с капсом вызывает физические страдания :-)
Ну, не буду разубеждать... Скажу только, что для программиста написать строчку-другую (с капсом или без) должно быть также просто, как затылок почесать :-)
Ну, строчку-другую, то проблем нет. А вот 700 строк за день? Причем это полезный выхлоп, а в реальности приходится написать раза в два больше.
С одной стороны, на Обероне писать много кода не приятно из за капса. С другой стороны, Оберон не является достаточно высокоуровневым языком, где можно было бы писать компактно (скажем попробуйте ка в Обероне инициализировать массив константами - придется нарисовать 100500 присваиваний вместо одного присваивания как в других яызках). В результате сидит программист и думает, как бы ему так изловчиться, чтобы эту саму задачку уложить пусть не в пару, но хоть в пару десятков строк кода, вместо нескольких сотен. И придумать не может - Оберон не предоставляет таких возможностей. И код не пишет - думает как избежать физического наказания :-)
Кроме того, бывают просто задачи, где думать не надо, а надо написать МНОГО тупого кода (особенно если у нас язык аля Оберон). Просто писать. 700 строк в день. Я на java такое писал пару раз.
-
А если тышу-другую?
Поменьше на форумах пальцы утомлять надо :)
А вроде ж даже в ББ есть особенность, что можно ключевые слова писать маленькими (либо все маленькие, либо все большие). Привожу на память, может и ошибся
-
А если тышу-другую?
Поменьше на форумах пальцы утомлять надо :)
А вроде ж даже в ББ есть особенность, что можно ключевые слова писать маленькими (либо все маленькие, либо все большие). Привожу на память, может и ошибся
По моему, это в Сириусе.
-
Т.е. если абсолютизировать, то вам и носом по клаве шлепать нормально было бы. ;D
Набили носом строчку и хохочете. Еще строчка и уже слезы текут от радости. И чего там народ негодуэ?!?! ;D ;D ;D
Это Вы о чём сейчас?
-
А если тышу-другую?
Поменьше на форумах пальцы утомлять надо :)
А вроде ж даже в ББ есть особенность, что можно ключевые слова писать маленькими (либо все маленькие, либо все большие). Привожу на память, может и ошибся
На форумах я пишу очень очень мало по сравнению с работой. ;)
-
Т.е. если абсолютизировать, то вам и носом по клаве шлепать нормально было бы. ;D
Набили носом строчку и хохочете. Еще строчка и уже слезы текут от радости. И чего там народ негодуэ?!?! ;D ;D ;D
Это Вы о чём сейчас?
Про то что вам кажутся "смехотворными" проблемы профессиональных кодеров.
"А у хирургов спина болит - вот хохма. Я вот легушек сидя за столом режу и нормально."
Примерно так ваш посыл прозвучал.
ps Ну я фантазер конечно... да. Без обид.
-
На форумах я пишу очень очень мало по сравнению с работой. ;)
Тогда уже наверняка заработал столько, что можешь заказать удобную IDE для оберона (или даже свою наваять, при такой то работоспособности) ;) . И с нами бы ей поделился
-
На форумах я пишу очень очень мало по сравнению с работой. ;)
Тогда уже наверняка заработал столько, что можешь заказать удобную IDE для оберона (или даже свою наваять, при такой то работоспособности) ;) . И с нами бы ей поделился
Эх... если бы платили за количество строк... я б уже купил дом в пендостане и свалил бы из рашки :D
-
ps Ну я фантазер конечно... да. Без обид.
Ладно, проехали.
А по поводу больных запястьев, - с этим лучше не шутить. Может, почаще перерывы делать. Надо же когда-то и логику программы продумывать ;). Да, и ещё может эргономическая клавиатура поможет.
-
Я тут читал на хабре про эргономичные клавы. Круто конечно, но на таких нужно некоторое время ломать свои привычки. Да плюс к тому код бывает приходится писать в самых разных ситуациях и местах. Таскать с собой любимую клаву? Короче я пока себя не убедил на покупку оной. :)
-
ps Ну я фантазер конечно... да. Без обид.
Ладно, проехали.
А по поводу больных запястьев, - с этим лучше не шутить. Может, почаще перерывы делать. Надо же когда-то и логику программы продумывать ;). Да, и ещё может эргономическая клавиатура поможет.
В 1С логика? Да её там не сильно больше чем в нашем законодательстве!
-
ps Ну я фантазер конечно... да. Без обид.
Ладно, проехали.
А по поводу больных запястьев, - с этим лучше не шутить. Может, почаще перерывы делать. Надо же когда-то и логику программы продумывать ;). Да, и ещё может эргономическая клавиатура поможет.
В 1С логика? Да её там не сильно больше чем в нашем законодательстве!
а откуда такая информация.. вы что, имели с ней дело, и .или , являетесь юристом (на худой конец депутатом)?
-
ps Ну я фантазер конечно... да. Без обид.
Ладно, проехали.
А по поводу больных запястьев, - с этим лучше не шутить. Может, почаще перерывы делать. Надо же когда-то и логику программы продумывать ;). Да, и ещё может эргономическая клавиатура поможет.
В 1С логика? Да её там не сильно больше чем в нашем законодательстве!
Я б не сказал что в 1С нужно меньше думать, чем в других языках.
-
а откуда такая информация.. вы что, имели с ней дело, и .или , являетесь юристом (на худой конец депутатом)?
Если взять бух. и нал. законодательство, то до сих пор, несмотря на уже достаточно длительное изменение законов, все равно остается много мест для двоечтений (сам сталкивался неоднократно, когда изучал). Хотя сейчас конечно ситуация получше, чем было раньше. Думаю то же самое касается и других видов законодательства. Такое ощущение, что такие законы принимались специально, чтобы угодных судить так, не угодных иначе.
-
а откуда такая информация.. вы что, имели с ней дело, и .или , являетесь юристом (на худой конец депутатом)?
Я одно время имел дело с нашим законодательством. Пришлось разбираться что там и к чему. Многие места там противоречат друг другу. Некоторые не однозначны. Причем закон это одно, а как на практике выносятся решения в суде - это совсем другое. У нас (официально) не прецедентное право, но есть такая штука как "судебная практика". Грубо говоря, как суд привык выносить решения, так он и выносит, даже если это расходится с законодательством в некоторых местах.
-
Алексей, adva - хотел ответить.. но это сделал в том же духе Борис - на соседней ветке...
-
Ну, строчку-другую, то проблем нет. А вот 700 строк за день? Причем это полезный выхлоп, а в реальности приходится написать раза в два больше.
А что, это много? 1500-2000 строк - обычно для одного дня... (Разумеется, месячная производительность не вычисляется как 2000*20, но когда с нуля хреначится какой-то компонент - то 2000 в день - норм.)
При таком объёме никогда не замечал проблем от клавиатуры. Слепым методом не владеете?
-
Ну, строчку-другую, то проблем нет. А вот 700 строк за день? Причем это полезный выхлоп, а в реальности приходится написать раза в два больше.
А что, это много? 1500-2000 строк - обычно для одного дня... (Разумеется, месячная производительность не вычисляется как 2000*20, но когда с нуля хреначится какой-то компонент - то 2000 в день - норм.)
При таком объёме никогда не замечал проблем от клавиатуры. Слепым методом не владеете?
На клавиатуру не смотрю :-)
У меня действительно банально мизинец начинает болеть если часто до шифта приходится тянуться (капсом писать ключевые слова). Кстати, по подобной же причине я забросил emacs - при обильном кодинге начинает болеть левая рука.
-
Я сейчас как раз целенаправленно восстанавливаю зрение по Бейтсу, сбросил уже 2.5 диоптрии с августа, так вот проходя путь от -9 до единицы на всех его стадиях, очень ценишь капсовые блоки и ключевые слова.
Не по теме конечно, но не мог бы ты подробнее описать свой положительный опыт восстановления зрения? Мне актуально :)
-
Я сейчас как раз целенаправленно восстанавливаю зрение по Бейтсу, сбросил уже 2.5 диоптрии с августа, так вот проходя путь от -9 до единицы на всех его стадиях, очень ценишь капсовые блоки и ключевые слова.
Не по теме конечно, но не мог бы ты подробнее описать свой положительный опыт восстановления зрения? Мне актуально :)
Ага, я бы тоже послушал
-
У меня действительно банально мизинец начинает болеть если часто до шифта приходится тянуться (капсом писать ключевые слова).
Есть у меня одна догадка. Если в детстве тренькал на каких-нибудь музыкальных инструментах, где нужно пальцами играть, то теперь и клава даётся легко. Может быть в моём случае всё дело в этом, и капсовые слова меня не напрягают. В любом случае, боль в руках возникает из-за излишнего напряжения во время игры... простите, набора. Усилия должно быть приложено ровно столько, сколько необходимо для того чтобы ударить пальцем по клавише. А уж запястья стопудово должны быть расслаблены.
-
Ну, строчку-другую, то проблем нет. А вот 700 строк за день? Причем это полезный выхлоп, а в реальности приходится написать раза в два больше.
А что, это много? 1500-2000 строк - обычно для одного дня... (Разумеется, месячная производительность не вычисляется как 2000*20, но когда с нуля хреначится какой-то компонент - то 2000 в день - норм.)
При таком объёме никогда не замечал проблем от клавиатуры. Слепым методом не владеете?
Илья, а как вы КАПСОМ набираете?
У меня на четвертой капсовой тысяче уже руки бы наверно отвалились. :)
ps А при чем тут слепой метод? Чет я связь не уловил...
-
У меня действительно банально мизинец начинает болеть если часто до шифта приходится тянуться (капсом писать ключевые слова).
Есть у меня одна догадка. Если в детстве тренькал на каких-нибудь музыкальных инструментах, где нужно пальцами играть, то теперь и клава даётся легко. Может быть в моём случае всё дело в этом, и капсовые слова меня не напрягают. В любом случае, боль в руках возникает из-за излишнего напряжения во время игры... простите, набора. Усилия должно быть приложено ровно столько, сколько необходимо для того чтобы ударить пальцем по клавише. А уж запястья стопудово должны быть расслаблены.
Я тренькал... и знаю , что у профи.. есть такая профессиональная болезнь - пальцы от частого треньканья теряют чувствительность, суставы подвижность - для музыканта это инвалидность...
-
Я тут читал на хабре про эргономичные клавы. Круто конечно, но на таких нужно некоторое время ломать свои привычки. Да плюс к тому код бывает приходится писать в самых разных ситуациях и местах. Таскать с собой любимую клаву? Короче я пока себя не убедил на покупку оной. :)
Нашел эту статью:
http://habrahabr.ru/post/145084/
и вот еще:
http://habrahabr.ru/post/146353/
-
Илья, а как вы КАПСОМ набираете?
У меня на четвертой капсовой тысяче уже руки бы наверно отвалились. :)
ps А при чем тут слепой метод? Чет я связь не уловил...
Во-первых, почему-то Shift меня не напрягает.
Во-вторых, F5-то есть, так что конструкции вообще не печатаю явно.
-
Илья, а как вы КАПСОМ набираете?
У меня на четвертой капсовой тысяче уже руки бы наверно отвалились. :)
Во-первых, почему-то Shift меня не напрягает.
Во-вторых, F5-то есть, так что конструкции вообще не печатаю явно.
У меня сильно падает скорость набора, если держать Shift. Да и мизинец все время в напряжении...
А F5 вообще не вариант, ибо далеко. По табу разворачивать шаблоны еще терпимо. Но лучше когда это автоматом по пробелу происходит.
-
Илья, а как вы КАПСОМ набираете?
У меня на четвертой капсовой тысяче уже руки бы наверно отвалились. :)
Во-первых, почему-то Shift меня не напрягает.
Во-вторых, F5-то есть, так что конструкции вообще не печатаю явно.
У меня сильно падает скорость набора, если держать Shift. Да и мизинец все время в напряжении...
А F5 вообще не вариант, ибо далеко. По табу разворачивать шаблоны еще терпимо. Но лучше когда это автоматом по пробелу происходит.
в ББ на Shift +space - засадить эту примочку нельзя (Сtrl +space -вроде можно (или наоборот)) - а по пробелу.. как это - через выпадающее окошко ?
-
1. В ББ да косяк с сочетаниями.
2. Никаких окошек. Просто набираем:
IF[space]
и это автоматом разворачивается в:
IF <exp> THEN <stat> END
-
What's a good IDE to use for Lua?
http://stackoverflow.com/questions/143939/whats-a-good-ide-to-use-for-lua
-
У меня сильно падает скорость набора, если держать Shift.
Зачем держать?
<CapsLock> if <CapsLock> ... и дело в шляпе. :)
-
Да просто -- создали новый документ, нажали капс-лок -- и вперёд!!! Добро пожаловать в шестидисятые!!! ))
-
Да просто -- создали новый документ, нажали капс-лок -- и вперёд!!! Добро пожаловать в шестидисятые!!! ))
Тут как раз классный скриншот пробегал:
(http://www.rsdn.ru/article/pl1/15-21-pl1-Pics/pict1.png)
Я прям понастальгировал :)
-
Запилил тулзу для сравнения отчетов по конфигурациям 1С:
local BOM = string.char( 0xef, 0xbb, 0xbf )
local function print_tree(tree, indent)
indent = indent or 0
for _, branch in ipairs(tree.children) do
io.write(string.rep('\t', indent) .. branch.value, '\n')
if branch.children then
print_tree(branch, indent + 1)
end
end
end
local function comp(a, b)
return a.value < b.value
end
local function read(file)
local line = file:read()
if not line then
error('empty file')
return nil
end
local _, indent = line:find('^\t+')
indent = indent or 0
local last = indent
local first = indent
local tree = {children = {}}
local branch
local symbol = ''
while line do
_, indent = line:find('^\t+')
indent = indent or 0
if indent < first then
error('wrong indentation')
return nil
end
if indent > last then
tree = branch
tree.children = {}
last = last + 1
else
while indent < last do
table.sort(tree.children, comp)
tree = tree.parent
last = last - 1
end
end
symbol = line:sub(indent + 1, indent + 1)
if (symbol == ' ' or symbol == '"') then
branch = {parent = tree, value = line:sub(indent + 2, -2)}
else
branch = {parent = tree, value = line:sub(indent + 1)}
end
table.insert(tree.children, branch)
line = file:read()
end
while tree.parent do
table.sort(tree.children, comp)
tree = tree.parent
end
table.sort(tree.children, comp)
return tree
end
local function diff(t1, t2, indent, index, res)
local c1, c2 = t1.children, t2.children
local i, j = 1, 1
local n1, n2 = c1 and c1[i], c2 and c2[j] -- nodes
local temp = 0
while n1 or n2 do
index = index + 1
if not n1 or (n2 and (n1.value > n2.value)) then
j = j + 1
res[index] = '-->' .. string.rep('\t', indent) .. n2.value
elseif not n2 or (n1 and (n1.value < n2.value)) then
i = i + 1
res[index] = '<--' .. string.rep('\t', indent) .. n1.value
else
i = i + 1
j = j + 1
temp = diff(n1, n2, indent + 1, index, res)
if temp > index then
res[index] = ' ' .. string.rep('\t', indent) .. n1.value
index = temp
else
res[index] = nil
index = index - 1
end
end
n1, n2 = c1 and c1[i], c2 and c2[j]
end
return index
end
local function print_diff(t1, t2)
local res = {}
if diff(t1, t2, 1, 0, res) > 0 then
for _, v in pairs(res) do
print(v)
end
end
end
local file1 = arg[1] and io.open(arg[1])
local file2 = arg[2] and io.open(arg[2])
if file1 then
if file2 then
if file1:read(3) == BOM then
assert(file2:read(3) == BOM, arg[2] .. ' not UTF-8 with BOM')
os.execute("chcp 65001 > nul")
io.write(BOM)
else
file1:seek('set')
assert(not (file2:read(3) == BOM), arg[2] .. ' not ANSI')
file2:seek('set')
os.execute("chcp 1251 > nul")
end
local tree1 = read(file1)
local tree2 = read(file2)
if tree1 and tree2 then
print_diff(tree1, tree2)
else
print('epic fail...')
end
else
if file1:read(3) == BOM then
os.execute("chcp 65001 > nul")
io.write(BOM)
else
os.execute("chcp 1251 > nul")
file1:seek('set')
end
local tree = read(file1)
if tree then
print_tree(tree)
end
end
else
print [[
Usage: diff_conf.lua first_file [second_file] [> result_file]
Examples:
c:\>diff_conf.lua conf.txt
c:\>diff_conf.lua conf.txt > conf_sorted.txt
c:\>diff_conf.lua conf1.txt conf2.txt
c:\>diff_conf.lua conf1.txt conf2.txt > conf1_vs_conf2.txt
]]
end
Опубликовал на infostart:
http://infostart.ru/public/165529/
-
Ну, строчку-другую, то проблем нет. А вот 700 строк за день? Причем это полезный выхлоп, а в реальности приходится написать раза в два больше.
А что, это много? 1500-2000 строк - обычно для одного дня... (Разумеется, месячная производительность не вычисляется как 2000*20, но когда с нуля хреначится какой-то компонент - то 2000 в день - норм.)
http://discuss.joelonsoftware.com/default.asp?joel.3.286106.22#discussTopic286976
Wow Sgt Sausage averages 250,000 handwritten lines of code a year. That's quite impressive. Most of the best programmers I know do only 35,000 or so. The industry average has been measured at 3250 lines of code per year.
Art Wilkins
9 января 2006 г.
То есть Илья прямо таки бьёт мировые рекорды по написанию кода! о_О )) У среднего прогаммиста всего-то 13 строк кода в день выходит (3250/(50*5)), а Илья же в год не меньше 400 тыс. строк пишет!!! Это даже больше, чем у какого-то там Сержанта Сосиски!!! )))
-
То есть Илья прямо таки бьёт мировые рекорды по написанию кода! о_О )) У среднего прогаммиста всего-то 13 строк кода в день выходит (3250/(50*5)), а Илья же в год не меньше 400 тыс. строк пишет!!! Это даже больше, чем у какого-то там Сержанта Сосиски!!! )))
:D так и живет он не в Чирчике.. а рядом с цивилизацией (как и Борис)- там темп жизни другой...
-
То есть Илья прямо таки бьёт мировые рекорды по написанию кода! о_О )) У среднего прогаммиста всего-то 13 строк кода в день выходит (3250/(50*5)), а Илья же в год не меньше 400 тыс. строк пишет!!! Это даже больше, чем у какого-то там Сержанта Сосиски!!! )))
:D так и живет он не в Чирчике.. а рядом с цивилизацией (как и Борис)- там темп жизни другой...
Ну я хоть и живу в Чирчике, но работаю в Ташкенте, тут темпы не меньше, чем у Ильи в городе, я думаю ))) Народу уж точно юольше ))
-
То есть Илья прямо таки бьёт мировые рекорды по написанию кода! о_О )) У среднего прогаммиста всего-то 13 строк кода в день выходит (3250/(50*5)), а Илья же в год не меньше 400 тыс. строк пишет!!! Это даже больше, чем у какого-то там Сержанта Сосиски!!! )))
Без generic контейнеров, без LINQ приходится туго.
Каждый раз связный список руками херачить...
Да еще 0 в конце строки искать.
-
думаю что меньше.. я вот живу в Челябинске (тоже народу хватает в сравнении с Орлом) - но разница чувствуется..Впрочем, постойте.. неужели вы намекаете на то что Илья лжет? -- вы ставите под сомнение слова управленца с 10 летним стажем, а программиста - даже страшно подумать с каким (чуть ли не с рождения) -с чего такое недоверие..? сказал полторы тысячи (не ежедневно) - значит так оно и есть. ;)
-
То есть Илья прямо таки бьёт мировые рекорды по написанию кода! о_О )) У среднего прогаммиста всего-то 13 строк кода в день выходит (3250/(50*5)), а Илья же в год не меньше 400 тыс. строк пишет!!! Это даже больше, чем у какого-то там Сержанта Сосиски!!! )))
Без generic контейнеров, без LINQ приходится туго.
Каждый раз связный список руками херачить...
Да еще 0 в конце строки искать.
я полагаю, что все дело в ЦД и светлом пути, осененным Виртом и Сиськиным (других соображений нет).
-
приблизительно вот так.. http://www.youtube.com/watch?v=pk3Qf7l2GSk (http://www.youtube.com/watch?v=pk3Qf7l2GSk)
-
Впрочем, постойте.. неужели вы намекаете на то что Илья лжет? -- вы ставите под сомнение слова управленца с 10 летним стажем, а программиста - даже страшно подумать с каким (чуть ли не с рождения) -с чего такое недоверие..? сказал полторы тысячи (не ежедневно) - значит так оно и есть. ;)
Ну не прямо-таки лжёт, но, возможно, несколько преувеличивает?
"Однажды я поймал ВООООТ такую рыбу!!!" )))
-
Ну, строчку-другую, то проблем нет. А вот 700 строк за день? Причем это полезный выхлоп, а в реальности приходится написать раза в два больше.
А что, это много? 1500-2000 строк - обычно для одного дня... (Разумеется, месячная производительность не вычисляется как 2000*20, но когда с нуля хреначится какой-то компонент - то 2000 в день - норм.)
Я просто взял то, что осталось в памяти и поделил на три, ибо память лжет и склонна преувеличивать собственные заслуги. :-)
-
Я просто взял то, что осталось в памяти и поделил на три, ибо память лжет и склонна преувеличивать собственные заслуги. :-)
Однако, батенька - вы не лишены амбиций... а я просто делю на 10 (отчасти просто потому что это проще чем на 3) ;)
-
1500-2000 каждый день конечно никто не пишет. Так и линух за неделю можно переписать.
Но для одного дня объем вполне нормальный, если это не сложный код. (и не Оберон ;D )
2000 за день не писал, но 1000-1500 бывало.
И кстати что значит "за день"? У меня например фактический рабочий день обычно больше юридического... :)
-
Я кстати однажды пытался прикинуть свою производительность в минутах на строчку.
Измерял на нескольких разработках средней сложности. Вышло около 5 минут на строчку. (включая общение с постановщиком, кодинг и дебаг)
Сложные вещи пишу сильно дольше :D
-
Я кстати однажды пытался прикинуть свою производительность в минутах на строчку.
Измерял на нескольких разработках средней сложности. Вышло около 5 минут на строчку. (включая общение с постановщиком, кодинг и дебаг)
Сложные вещи пишу сильно дольше :D
У меня бывает 50 строк в месяц :-)
-
"Однажды я поймал ВООООТ такую рыбу!!!" )))
https://www.youtube.com/watch?v=TY1ymotP0P0
;D
-
Я кстати однажды пытался прикинуть свою производительность в минутах на строчку.
Измерял на нескольких разработках средней сложности. Вышло около 5 минут на строчку. (включая общение с постановщиком, кодинг и дебаг)
Сложные вещи пишу сильно дольше :D
У меня бывает 50 строк в месяц :-)
а я стараюсь делать так, что бы за меня писали другие... Конечно полностью этой напасти не избежать - в частности, приходится писать честно решения задач у доски - ибо студенты бдительны.. к халтуре (типа презентаций), вполне резонно говоря что такую говень(как код решения типовых задач) можно и отгуглить.
-
Я кстати однажды пытался прикинуть свою производительность в минутах на строчку.
Измерял на нескольких разработках средней сложности. Вышло около 5 минут на строчку. (включая общение с постановщиком, кодинг и дебаг)
Сложные вещи пишу сильно дольше :D
У меня бывает 50 строк в месяц :-)
а я стараюсь делать так, что бы за меня писали другие... Конечно полностью этой напасти не избежать - в частности, приходится писать честно решения задач у доски - ибо студенты бдительны.. к халтуре (типа презентаций), вполне резонно говоря что такую говень(как код решения типовых задач) можно и отгуглить.
Подтверждаю - студенты на лекциях где вместо доски презенташки спят намного слаще.
Причем, по отзывам, это не специально, народ честно пытается не спать, но если презенташка, то вырубает мгновенно вне зависимости от того насколько живо рассказывает докладчик. Это уже что-то на бессознательном уровне и сознанием не контроллируется.
-
А что, это много? 1500-2000 строк - обычно для одного дня... (Разумеется, месячная производительность не вычисляется как 2000*20, но когда с нуля хреначится какой-то компонент - то 2000 в день - норм.)
То есть Илья прямо таки бьёт мировые рекорды по написанию кода! о_О )) У среднего прогаммиста всего-то 13 строк кода в день выходит (3250/(50*5)), а Илья же в год не меньше 400 тыс. строк пишет!!! Это даже больше, чем у какого-то там Сержанта Сосиски!!! )))
А прочитать замечание в скобках, про то, как НЕ надо вычислять месячную производительность по пиковой дневной, в Чирчике не сподобились.
-
А прочитать замечание в скобках, про то, как НЕ надо вычислять месячную производительность по пиковой дневной, в Чирчике не сподобились.
Пиковая производительность -- это фигня, роли не играет никакой.
Ну напишет кто-то за пару дней 3-4к строк, две трети из них придётся выкинуть в течении пары следующих недель...
-
А прочитать замечание в скобках, про то, как НЕ надо вычислять месячную производительность по пиковой дневной, в Чирчике не сподобились.
Пиковая производительность -- это фигня, роли не играет никакой.
Ну напишет кто-то за пару дней 3-4к строк, две трети из них придётся выкинуть в течении пары следующих недель...
кто то - это я полагаю что вы ,Geniepro ... :D
-
кто то - это я полагаю что вы ,Geniepro ... :D
Не, я столько мусора не пишу -- что я, сам себе злобный буратино, что ли? ))
-
Народ, вы вообще забыли
кто то - это я полагаю что вы ,Geniepro ... :D
Не, я столько мусора не пишу -- что я, сам себе злобный буратино, что ли? ))
Народ, вы вообще забыли контекст той реплики Ильи - тогда обсуждалось ФИЗИЧЕСКИЙ комфорт набора текста в синтаксисе Оберона. Про производительность труда/выхлоп никто не говорил вообще. Разовый набор (в день написали 100500 строк кода который не компилируется вообще) в качестве проверки на удобство набора вполне подходит.
-
Народ, вы вообще забыли кто то - это я полагаю что вы ,Geniepro ... :D
Не, я столько мусора не пишу -- что я, сам себе злобный буратино, что ли? ))
Народ, вы вообще забыли контекст той реплики Ильи - тогда обсуждалось ФИЗИЧЕСКИЙ комфорт набора текста в синтаксисе Оберона. Про производительность труда/выхлоп никто не говорил вообще. Разовый набор (в день написали 100500 строк кода который не компилируется вообще) в качестве проверки на удобство набора вполне подходит.
:) :) Никто ничего не забыл.. мы просто развлекаемся - для тех кто на та... из Нижнего - шутка это - кергуду, короче...
-
Народ, вы вообще забыли контекст той реплики Ильи - тогда обсуждалось ФИЗИЧЕСКИЙ комфорт набора текста в синтаксисе Оберона.
А чо там забывать-то?
Что, так уж трудно в верхнем регистре код писать? Десятки лет так код писали, когда ещё кодировки 7-битными были -- и ничего, всё окейно было.
Что мешает оберонщегам продолжать эту славную старинную традицию???
ТОЛЬКО ХАРДКОР, ТОЛЬКО CAPS LOCK!!!
-
Народ, вы вообще забыли контекст той реплики Ильи - тогда обсуждалось ФИЗИЧЕСКИЙ комфорт набора текста в синтаксисе Оберона.
А чо там забывать-то?
Что, так уж трудно в верхнем регистре код писать? Десятки лет так код писали, когда ещё кодировки 7-битными были -- и ничего, всё окейно было.
Что мешает оберонщегам продолжать эту славную старинную традицию???
ТОЛЬКО ХАРДКОР, ТОЛЬКО CAPS LOCK!!!
Сложно писать в смешанном регистре. Причем когда вероятность слова полностю из верхнего регистра и вероятность слова полностью из нижнего регистра примерно равна и они равномерно перемешаны.
-
Сложно писать в смешанном регистре. Причем когда вероятность слова полностю из верхнего регистра и вероятность слова полностью из нижнего регистра примерно равна и они равномерно перемешаны.
А не допускать написания кода в смешанном регистре -- только в верхнем!
Вон у меня есть старая книшка по Аде -- там все примеры программ в верхнем регистре и ничо, намана...
-
Еще один редактор :)
http://www.sourcelair.com/
-
Linq для Lua
http://code.google.com/p/lualinq/
-
Lua вшили в ядро NetBSD:
http://www.linux.org.ru/news/bsd/8878745
Согласно докладу Марка Балмера (Marc Balmer, разработчик NetBSD) на FOSDEM'13, прошедшего 2 и 3 февраля, в ядро NetBSD-current добавлен скриптовый язык lua. Работы в данном направлении ведутся уже, как минимум, с 2010-го года.
Использование языка lua в ядре позволяет ускорить разработку драйверов, изменения функционала ядра, а также его настройку. Более низкий порог вхождения по сравнению с языком C позволит в будущем упростить разработку и ускорить темпы развития проекта, а также увеличить интерес сообщества к проекту NetBSD и привлечь новых людей.
-
Разумно. Не знаю как в Юниксах, но в Окнах драйверы писать — это какой-то БДСМ.
-
Разумно. Не знаю как в Юниксах, но в Окнах драйверы писать — это какой-то БДСМ.
а вот х.з. - Луа оперирует с более высокоуровневыми моделями памяти, данных и операций, абстрагируясь от железа... обеспечить одинаковую эффективность (в смысле производительности кода) будет сложно.
-
Разумно. Не знаю как в Юниксах, но в Окнах драйверы писать — это какой-то БДСМ.
В юниксах, в общем и в целом, везде по разному :-) Но вообще, обычно, там все проще чем в виндах.
-
Довольно любопытная геймдев-студия: http://habrahabr.ru/post/148311/
-
Всякие бинды через LuaJit ffi:
https://code.google.com/p/lua-files/
Заюзал zlib тамошний. Понравилось. Остальное пока не смотрел.
-
Тернарный оператор в Lua: :D
a = 2
b = 1
print(a > b and 'a > b' or 'a <= b')
-
Распаковка CF на Lua (http://infostart.ru/public/178201/)
-
What is Lua OS? :D
http://luaos.net/about.php
-
Недавно вышла новая версия SciTE-ru: https://code.google.com/p/scite-ru/
Редактор на полную катушку использует Lua.
-
Клиентский хук для TortoiseSVN (http://infostart.ru/public/181018/)
-
Питонобразный сахарок для Lua: http://moonscript.org/
-
Запилил лексер (http://www.scintilla.org/ScriptLexer.html) языка 1С для редактора Scite:
function new_set(list)
local set = {}
for _, v in ipairs(list) do set[v] = true end
return set
end
function GetStyler()
os.setlocale('Russian_Russia.1251')
local isident = new_set {
'если','if','тогда','then','иначеесли','elsif','иначе','else',
'конецесли','endif','для','for','каждого','each','из','in','по',
'to','пока','while','цикл', 'do','конеццикла','enddo','процедура',
'procedure','функция','function','конецпроцедуры','endprocedure',
'конецфункции','endfunction','перем','var','перейти','goto','возврат',
'return','продолжить','continue','прервать','break','и','and','или','or','не',
'not','попытка','try','исключение','except','вызватьисключение','raise',
'конецпопытки','endtry','новый','new','выполнить','execute'
}
local isoperator = new_set {'+', '-', '=', '/', '*', '%', '<', '>', ')', '(', ',', ';', '.', ']', '[', '?'}
local isnumber = new_set {'0','1','2','3','4','5','6','7','8','9','.'}
local S_DEFAULT = 0
local S_IDENTIFIER = 1
local S_KEYWORD = 2
local S_COMMENT = 3
local S_STRING = 4
local S_OPERATOR = 5
local S_NUMBER = 6
local S_METOD = 7
local S_DATA = 8
local S_PREPROCESSOR = 9
return function (styler)
if styler.language == "script_1c8" then
styler:StartStyling(styler.startPos, styler.lengthDoc, styler.initStyle)
local state, ch
while styler:More() do
state = styler:State()
ch = styler:Current()
-- Exit state if needed
if state == S_IDENTIFIER then
if not ch:match('[%a%w_]') then
identifier = styler:Token()
if isident[identifier:lower()] then
styler:ChangeState(S_KEYWORD)
end
styler:SetState(S_DEFAULT)
end
elseif state == S_METOD then
if not ch:match('[%a%w_]') then
identifier = styler:Token()
styler:SetState(S_DEFAULT)
end
elseif state == S_COMMENT then
if styler:Match("\n") then
styler:SetState(S_DEFAULT)
end
elseif state == S_STRING then
if ch == '"' then
styler:ForwardSetState(S_DEFAULT)
end
elseif state == S_OPERATOR then
if not isoperator[ch] then
styler:SetState(S_DEFAULT)
end
elseif state == S_NUMBER then
if not isnumber[ch] then
styler:SetState(S_DEFAULT)
end
elseif state == S_DATA then
if ch == "'" then
styler:ForwardSetState(S_DEFAULT)
end
elseif state == S_PREPROCESSOR then
if styler:Match("\n") then
styler:SetState(S_DEFAULT)
end
end
-- Enter state if needed
if styler:State() == S_DEFAULT then
ch = styler:Current()
if styler:Match("//") then
styler:SetState(S_COMMENT)
elseif ch:match('[%a_]') then
styler:SetState(S_IDENTIFIER)
elseif ch == '"' then
styler:SetState(S_STRING)
elseif state == S_IDENTIFIER and ch == '.' and styler:Next():match('[%a_]') then
styler:SetState(S_OPERATOR)
styler:ForwardSetState(S_METOD)
elseif isoperator[ch] then
styler:SetState(S_OPERATOR)
elseif isnumber[ch] then
styler:SetState(S_NUMBER)
elseif ch == "'" then
styler:SetState(S_DATA)
elseif ch == '&' then
styler:SetState(S_PREPROCESSOR)
end
end
styler:Forward()
end
styler:EndStyling()
end
end
end
AddEventHandler("OnStyle", GetStyler())
lexer.*.1c8=script_1c8
style.script_1c8.0=fore:#505050,font:Courier New,size:10
style.script_1c8.1=fore:#000080,font:Courier New,size:10
style.script_1c8.2=fore:#FF0000,font:Courier New,size:10
style.script_1c8.3=fore:#008000,font:Courier New,size:10
style.script_1c8.4=fore:#000000,font:Courier New,size:10
style.script_1c8.5=fore:#FF0000,font:Courier New,size:10
style.script_1c8.6=fore:#309080,font:Courier New,size:10
style.script_1c8.7=fore:#000080,font:Courier New,size:10
style.script_1c8.8=fore:#F08050,font:Courier New,size:10
style.script_1c8.9=fore:#805000,font:Courier New,size:10
-
Если кто-то еще не видел: Lua за 15 минут (http://habrahabr.ru/post/184538/)
-
Клиентский хук для TortoiseSVN (http://infostart.ru/public/181018/)
С момента публикации этот хук трудится в нашем корпоративном SVN
Около 1000 коммитов. Ни одного сбоя.
На этой неделе был пойман первый ассерт (https://code.google.com/p/1c-toolkit/source/browse/lua/cf_tools/cf_inside.lua#94).
Оказалось что платформа не хранит тело формы если на ней нет ни одного элемента.
Случай очень редкий.
Почему коммит невозможен я увидел прямо в окне SVN, т.к. Lua показывает строку со сработавшим ассертом. Благодаря этому проблема была понята и устранена в течении 5 минут.
2 valexey: динамическая типизация, без отладчика.... ;)
-
Клиентский хук для TortoiseSVN (http://infostart.ru/public/181018/)
С момента публикации этот хук трудится в нашем корпоративном SVN
Около 1000 коммитов. Ни одного сбоя.
На этой неделе был пойман первый ассерт (https://code.google.com/p/1c-toolkit/source/browse/lua/cf_tools/cf_inside.lua#94).
Оказалось что платформа не хранит тело формы если на ней нет ни одного элемента.
Случай очень редкий.
Почему коммит невозможен я увидел прямо в окне SVN, т.к. Lua показывает строку со сработавшим ассертом. Благодаря этому проблема была понята и устранена в течении 5 минут.
2 valexey: динамическая типизация, без отладчика.... ;)
Наоборот - Lua тут изначально была запущена под отладчиком. Вообще многие реализации динамически типизированных языков (если не все) работают только под отладчиком, работа без отладчика там не предусмотрена :-)
-
Ну под отладчиком я имел в виду точки останова, пошаговое выполнение, стек вызовов и т.д.
Для луа вообще есть отладчик в базовой поставке, но я писал в ST2 и как там прикрутить его просто не знаю.
-
Ну под отладчиком я имел в виду точки останова, пошаговое выполнение, стек вызовов и т.д.
Для луа вообще есть отладчик в базовой поставке, но я писал в ST2 и как там прикрутить его просто не знаю.
Ну, а я имел именно запуск под отладчиком :-)
$gdb myCoolProg
$run
-
В продаже появился перевод третьего издания (Lua 5.2) книги Programming in Lua (http://www.lua.org/pil/)
Книга посвящена одному из самых популярных встраиваемых языков - Lua. Этот язык использовался во многих играх и большом количестве различных приложений. Язык сочетает небольшой объем занимаемый памяти, высокое быстродействие, простоту использования и большую гибкость. Книга рассматривает практически все аспекты использования Lua, начиная с основ языка и заканчивая тонкостями расширения языка и взаимодействия с С.
Важной особенностью книги является огромный спектр охватываемых тем - практически все, что может понадобиться при использовании Lua, рассказано в одной из глав книги. Также к каждой главе дается небольшое количество упражнений, позволяющих проверить свои знания.
Книга будет полезна широкому кругу программистов и разработчиков игр. Для понимания последних глав книги необходимо знание языка С, но для понимания большинства глав достаточно базовых знаний о программировании.
http://dmkpress.com/catalog/computer/programming/978-5-94074-767-3/
-
http://www.lua.org/wshop14.html
The Lua Workshop 2014 will be held in Moscow, Russia, on September 13–14, 2014.
-
Так а как книга? Сам материал, думаю, подан неплохо, а что насчёт качества перевода?
-
Сам пока не купил. Так что не знаю.
-
Эволюция языка расширений: история Lua (http://habrahabr.ru/post/229269/)
-
Так а как книга? Сам материал, думаю, подан неплохо, а что насчёт качества перевода?
Приехала мне книжка. Перевод на первый взгляд достаточно хороший.