Oberon space
General Category => Общий раздел => Тема начата: valexey_u от Ноябрь 20, 2012, 01:40:38 am
-
Внезапно обнаружился, на первый взгляд, весьма годный ЯП о котором я не знал: Monkey.
Статья про него на хабре: http://habrahabr.ru/post/159377/
Это модульный статически типизированный язык с симула-подобной объектной моделью (ну, то есть с моделью схожей с java/c++/c#/delphi). Внимание! Модуль и класс в этом языке не одно и то же!
Кроме того, в языке имеются пищевые добавки дженерики (чтобы иметь одновременно и статическую типизацию, и 100500 раз один и тот же контейнер для разных типов не писать). Сборщик мусора также в наличии. Обработка ошибок возможна через механизм исключений.
Дока по языку: http://blitz-wiki.appspot.com/Language_reference
Доки по стандартным модулям: http://blitz-wiki.appspot.com/Module_reference
Ну и самое, для меня, вкусное: оно компилируется под кучу платформ: и в js компилируется, и в java и в c++ и в c#, что открывает большие возможности для написания алгоритмов - один раз написал, используешь везде (алгоритм). А не как в жабах всяких, которые не кроссплатформенны нифига.
Язык и компилятор под лицензией public domain, так что свободней (и бесплатней) некуда.
Вообще, автором этот язык преподносится как штука для игроделов (у него и коммерческая версия с тонной игро-заточенных либ имеется). Но я вижу где я мог бы его применять вне игр :-) (у меня постепенно разрабатывается пачка алгоритмов, которые мне, волею судеб, приходится постоянно таскать между сервером/йфоном/браузером/десктопом(причем разными десктопами). И меня несколько достало постоянно переписывать с C/ObjC на Java, а затем на js. Руками. А тут еще и C# нарисовался. Тьху.)
-
Оказывается в вики есть статья (http://ru.wikipedia.org/wiki/Monkey_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)) по этому языку.
-
ну давайте еще бейсик рекламировать...
-
ну давайте еще бейсик рекламировать...
А если объективно? Какие проблемы у этого (Monkey) языка? Чем он собственно хуже того же Оберона?
-
а вы посмотрите внимательно на статью ( в ней кусок кода) - мне лично после анализа его желание взглянуть на описание языка пропало....
-
а вы посмотрите внимательно на статью ( в ней кусок кода) - мне лично после анализа его желание взглянуть на описание языка пропало....
Дык я посмотрел. Ну синтаксис местами диковат и архаичен, но в общем он ничем особым от других подобных языков (та же жаба) не отличается. Также я не обнаружил там потенциально опасных мест.
-
хорошо - можете полную форму оператора IF - установить, или сказать нахрена любая функция содержит return 0, или чем отличается SetUpdateRate 60 от SetUpdateRate (60)...
-
Мне вот так любопытно всегда было... За что так нелюбим васик? ;D ;D ;D
Меня например VBA выручал несколько раз. Вполне себе норм для своих задач.
-
Мне вот так любопытно всегда было... За что так нелюбим васик? ;D ;D ;D
Меня например VBA выручал несколько раз. Вполне себе норм для своих задач.
так надо же одним нормальным людям отличаться от других... нормальных людей...
-
Посмотрел Monkey language reference.
Да... немного измененный (имхо в худшую сторону) VBA у них получился.
-
хорошо - можете полную форму оператора IF - установить
If Expression [ Then ]
Statements...
ElseIf Expression [ Then ]
Statements...
Else
Statements...
EndIf
, или сказать нахрена любая функция содержит return 0,
Затем, что писавший этот пример - либо быдлокодер, либо пользовался старой версией языка. Для void-функций ничего возвращать не нужно. В этом плане лучше смотреть пример из википедии.
или чем отличается SetUpdateRate 60 от SetUpdateRate (60)...
Первое допустимо в non strict mode и используется когда вызов функции это чистый statement (эдакий сахарок, примерно то же, что и в Обероне когда не обязательно явное разименовывание указателя при обращении к полюзаписи), второе - универсально и работает везде.
Strict
Function Main:Int() 'in Strict mode, the :Int type definition is compulsory
Print( "Strict mode is...strict!" ) 'in Strict mode, all function calls require brackets.
Return 0 'in strict mode, we MUST return a value.
End
Собственно я этот язык в режиме non strict и не рассматривал вообще.
Да, и у меня ощущение, что автор постепенно допиливает strict mode, приближает его к человеческим языкам (поэтому примеры и в вики устаревшие).
-
Посмотрел Monkey language reference.
Да... немного измененный (имхо в худшую сторону) VBA у них получился.
А в каком месте оно на VBA похож? Динамической типизации нет (в Monkey), тихо-умолчательных объявлений переменных тоже нет. Зато есть статическая типизация и дженерики.
Ну а главное - это самый кроссплатформенный язык. Сравниться с ним в этом плане пожалуй не может никто. :-)
-
......
Я же говорю говно... мультиплатформенное...
-
Проверил.
Function Foo:Void()
Return 0
End
Радостно ругается:
Error : Void functions may not return a value.
Так что, требую разъяснений, в каком именно место оно говно в случае strict mode :-)
-
Проверил.
Function Foo:Void()
Return 0
End
Радостно ругается:
Error : Void functions may not return a value.
Так что, требую разъяснений, в каком именно место оно говно в случае strict mode :-)
как от нефиг делать - в викишной статье он тоже включен (strict)- однако, что там написано... и endif -нет
-
Проверил.
Function Foo:Void()
Return 0
End
Радостно ругается:
Error : Void functions may not return a value.
Так что, требую разъяснений, в каком именно место оно говно в случае strict mode :-)
как от нефиг делать - в викишной статье он тоже включен (strict)- однако, что там написано... и endif -нет
В примере из вики нет ни одного return'a который был бы не по делу.
-
Посмотрел Monkey language reference.
Да... немного измененный (имхо в худшую сторону) VBA у них получился.
А в каком месте оно на VBA похож? Динамической типизации нет (в Monkey), тихо-умолчательных объявлений переменных тоже нет
Я имел в виду синтаксис. Тихо-умолчательные объявления можно отключить.
-
и endif -нет
If statement
The If statement allows you to conditionally execute a block of statements depending on the result of a series of boolean expressions.
The first boolean expression that evaluates to true will cause the associated block of statements to be executed. No further boolean expressions will be evaluated.
If no boolean expression evaluates to true, then the final else block will be executed if present.
The syntax for the If statement is:
If Expression [ Then ]
Statements...
ElseIf Expression [ Then ]
Statements...
Else
Statements...
EndIf
There may be any number of ElseIf blocks, or none. The final Else block is optional.
End or End If may be used instead of EndIf, and Else If may be used instead of ElseIf.
In addtion, a simple one line version of If is also supported:
If Expression [ Then ] Statement [ Else statement ]
-
Посмотрел Monkey language reference.
Да... немного измененный (имхо в худшую сторону) VBA у них получился.
А в каком месте оно на VBA похож? Динамической типизации нет (в Monkey), тихо-умолчательных объявлений переменных тоже нет
Я имел в виду синтаксис. Тихо-умолчательные объявления можно отключить.
Да синтаксис у них у всех алголоподобный :-) То есть отличия от синтаксиса того же оберона минимальны.
-
В примере из вики нет ни одного return'a который был бы не по делу.
а я не говорю в ДАННОМ случае про ретурн (хотя ни шиша не понятно зачем возвращать 0 в методах)
где endif? и SetUpdateRate 60 - есть в наличии... в общем говно мультиплатформенное... как будто регулярных какашек мало...
-
а тут еще и "End or End If may be used instead of EndIf, and Else If may be used instead of ElseIf"- нафиг, нафиг....
-
В примере из вики нет ни одного return'a который был бы не по делу.
а я не говорю в ДАННОМ случае про ретурн (хотя ни шиша не понятно зачем возвращать 0 в методах)
Методы потому что на кой-то хрен имеют тип int. Вроде такого: Method OnRender:Int()
Ну а коли функция задекларирована как возвращающее целое значение, то в теле функции нужно таки что-то вернуть. C точки зрения языка тут все чисто.
где endif?
С этим также разобрались выше. Тут тоже все четко.
и SetUpdateRate 60 - есть в наличии...
А вот с этим надо еще разобраться. Ощущение что дока врет и наличие/отсутствие strict'а никак не влияет на поведение. Моя догадка, кстати, верна - Foo Arg может использоваться только как statement, в то время как Foo(Arg) может использоваться и как выражение.
в общем говно мультиплатформенное... как будто регулярных какашек мало...
На счет говна таки не уверен - пока по ощущениям оно не хуже всего остального с чем приходилось сталкиваться, и явно лучше чем js например.
А регулярных какашек конечно же мало - ни одна регулярная какашка не может того, что может эта бибизьянка.
-
в общем Алексей.. - спорить на эту тему мне неинтересно.. просто, я стою на такой позиции;
если мы имеем хороший императивный ЯВУ и кусок кода реализующий часть прозрачного алгоритма..- то более менее опытный проггер вполне может разобраться в синтаксисе базовых яп без всякого руководства..- в этом случае это не так.. либо как вариант - крайне неудачно выбран ознакомительный пример а написавший его - ушлепок.
-
в общем Алексей.. - спорить на эту тему мне неинтересно.. просто, я стою на такой позиции;
если мы имеем хороший императивный ЯВУ и кусок кода реализующий часть прозрачного алгоритма..- то более менее опытный проггер вполне может разобраться в синтаксисе базовых яп без всякого руководства..- в этом случае это не так.. либо как вариант - крайне неудачно выбран ознакомительный пример а написавший его - ушлепок.
Ну, с алгоритмом (а где там вообще алгоритм в примере? :-)) разобраться можно без вникания в тонкости синтаксиса (что радует). Все тонкости синтаксиса вывести из конкретного ПРОСТОГО примера - нельзя. В любом языке (пофигу императивный он или нет).
Полностью разоабраться с чем-то без руководства можно только если это нечто ровно то же самое что ты когда-то изучал с руководством :-) Обратных примеров в жизни я не видел вообще (народ который утверждал что с вот этим языком он разобрался без руководства, неизменно сыпался на простейших вопросах по тому же синтаксису и по семантики оного языка + имели ряд очень вредных заблуждений об этом языке (языки были разные, от сей до шарпа и всяких ад-паскалей)). Чем более похож новый язык на тот язык с которым человек уже хорошо знаком, тем СЛОЖНЕЕ ему его узнать (не начать абы как клепать поделия, а именно понять язык). Просто потому, что недостаточно стимула чтобы просто сесть и хотя бы чуточку прочесть доки. Много раз такое видел.
-
Полностью разоабраться ...
и далее по тексту сообщения ... к тому о чем говорил я не относится.
-
Полностью разоабраться ...
и далее по тексту сообщения ... к тому о чем говорил я не относится.
Ну, ты же понимаешь, что придирки к языку на уровне синтаксиса мне не важны, если затрагиваемые в этих придирках не влияет на безопасность. В данном случае все что ты нашел - на безопасность никак не влияет. И код писать также не мешает (думаю любой достаточно опытный кодер не имел бы проблем с модификацией примера из вики). Да и прочесть руководство вообще не проблема - благо референс на язык мелкий, чуть ли не те самые 16ть страниц, причем менее бюрократическим языком нежели у Вирта.
Да, язык не изящен. Синтаксис, как я ранее писал уже, местами диковат и архаичен. Но это все мелочи на фоне того какой класс задач оно позволяет решить. Альтернатив то собственно и нет :-)
-
;) Простые задачи в хорошем ЯВУ должны решаться просто и без различных толкований.. (ибо средства используются стандартные ОБЩИЕ для всех императивных ЯВУ) , а что касается "придирок" - так я нашел их всего за пару минут.. работы с небольшим куском неудачного кода... без всяких описаний... Что касается субьективного восприятия ради бога... мое личное - мультиплатформенность еще не повод копаться в дерьме (и еще не факт что она не такая же корявая как язык)...
-
;) Простые задачи в хорошем ЯВУ должны решаться просто и без различных толкований.. (ибо средства используются стандартные ОБЩИЕ для всех императивных ЯВУ) ,
Дык оно и решается :-) То что накопано тобой не представляет какой-либо проблемы для кодинга и понимания того что накодил кто-то там. То есть вообще гроша выеденного и яйца ломанного не стоит ;-)
Кроме того, у меня смутное ощущение, что под императивными языками ты подразумеваешь лишь языки алгольной группы, что, в общем то, не верно. :-)
а что касается "придирок" - так я нашел их всего за пару минут.. работы с небольшим куском неудачного кода... без всяких описаний... Что касается субьективного восприятия ради бога... мое личное - мультиплатформенность еще не повод копаться в дерьме (и еще не факт что она не такая же корявая как язык)...
У тебя просто нет таких задач, которые реально требовали бы мультиплатформенности. А у меня есть. И немного своеобразный синтаксис (а в каком ЯП оне НЕ своеобразный? у каждого свои особенности к которым привыкать) это такая мелочь по сравнению с теми проблеммами которые он потенциально может решить..
А так да, естественно пробовать надо. По описанию языка никогда не поймешь насколько он работоспособен под разные платформы. Вроде декларируется что он лучше, в плане одинаковости поведения под разными платформами, того же haxe который мне до того некоторые в джаббере рекламировали :-)
PS. Нет, конечно кайфа с написания кода на этом языке не получишь. Не вставляет оно. Вот то ли дело C++ современный... :-)
-
Дык оно и решается :-) То что накопано тобой не представляет какой-либо проблемы для кодинга и понимания того что накодил кто-то там. То есть вообще гроша выеденного и яйца ломанного не стоит ;-)
Кроме того, у меня смутное ощущение, что под императивными языками ты подразумеваешь лишь языки алгольной группы, что, в общем то, не верно. :-)
1. Это просто "грязь" - которой быть не должно.
2. У вас не смутное.. у вас - мутное ощущение.. а я говорю про яп для которых алгоритм определен как конечная детерминированная последовательность действий
, четко определено понятие типа данных, переменной, значений, оператора присваивания, условного оператора, циклического оператора, и подпрограмм..- это базовый набор который позволяет реализовать любой алгоритм..
PS. Нет, конечно кайфа с написания кода на этом языке не получишь. Не вставляет оно. Вот то ли дело C++ современный... :-)
Чужая душа - потемки... я вот никогда не понимал Хаскилеров(рационально).. с моей точки зрения это формазонство чистой воды.
-
1. Это просто "грязь" - которой быть не должно.
Но она есть. В любом языке.
2. У вас не смутное.. у вас - мутное ощущение.. а я говорю про яп для которых алгоритм определен как конечная детерминированная последовательность действий
То есть о не полных по Тьюрингу? :-) Иначе привет задача о останове - проанализировав только код нельзя прийти к выводу завершится программа или нет когда-нибудь (в общем случае).
, четко определено понятие типа данных, переменной, значений, оператора присваивания, условного оператора, циклического оператора, и подпрограмм..- это базовый набор который позволяет реализовать любой алгоритм..
Это сильно избыточный набор. К тому же понятие типа данных к императивщине отношения не имеет. Я ж говорю - у тебя понятия о императивщине исключительно в рамках алгольной группы языков.
-
1. Это просто "грязь" - которой быть не должно.
Но она есть. В любом языке.
2. У вас не смутное.. у вас - мутное ощущение.. а я говорю про яп для которых алгоритм определен как конечная детерминированная последовательность действий
То есть о не полных по Тьюрингу? :-) Иначе привет задача о останове - проанализировав только код нельзя прийти к выводу завершится программа или нет когда-нибудь (в общем случае).
, четко определено понятие типа данных, переменной, значений, оператора присваивания, условного оператора, циклического оператора, и подпрограмм..- это базовый набор который позволяет реализовать любой алгоритм..
Это сильно избыточный набор. К тому же понятие типа данных к императивщине отношения не имеет. Я ж говорю - у тебя понятия о императивщине исключительно в рамках алгольной группы языков.
1. не на простых задачах
2. полнота - на кусках кода не определяется..
3. нет неизбыточный.. без него умозаключения по куску кода нельзя делать(нужно читать описание).. а с каких пор скажем СИ стал относится к алгольной группе?
-
1. не на простых задачах
Ну, скажем в том же обероне я до сих пор спотыкаюсь на точказапятых. Где их надо ставить, а где нет. Куда уж проще то? :-)
2. полнота - на кусках кода не определяется..
Если в этом куске кода торчит while, то все, привет.
3. нет неизбыточный.. без него умозаключения по куску кода нельзя делать(нужно читать описание)..
Описание чего?
а с каких пор скажем СИ стал относится к алгольной группе?
С самых начальных пор. Algol 60->CPL->BCPL->B->C
Собственно в сях стиль объявления переменных вида: "тип идентификатор" (вместо "индетификатор: тип") именно от Алгола пошел.
-
1. не на простых задачах
Ну, скажем в том же обероне я до сих пор спотыкаюсь на точказапятых. Где их надо ставить, а где нет. Куда уж проще то? :-)
2. полнота - на кусках кода не определяется..
Если в этом куске кода торчит while, то все, привет.
3. нет неизбыточный.. без него умозаключения по куску кода нельзя делать(нужно читать описание)..
Описание чего?
а с каких пор скажем СИ стал относится к алгольной группе?
С самых начальных пор. Algol 60->CPL->BCPL->B->C
Собственно в сях стиль объявления переменных вида: "тип идентификатор" (вместо "индетификатор: тип") именно от Алгола пошел.
1.Чему привет?
вот код
...
int a=10, b=15, t;
while (b != 0){
t=a;
a=b;
b=t % a;
}
printf("%i",a);
...
- кого встречаем?
2. Языка естественно.
3. По моей он стоит особняком..
-
Если кому интересно, то вот весьма полная хронология языков программирования (да, все значимые обероны там есть, в том числе и компонентный паскаль) с указанием на чем какой язык базировался: http://en.wikipedia.org/wiki/Timeline_of_programming_languages
Си - дважды потомок Алгола (алгола 60 и алгола 68). И уж тем более С++ (он базируется на сях, a также на Симуле, которая сама по себя является расширением Алгола-60). А про всякие жабы я вообще молчу :-)
-
Си - дважды потомок Алгола (алгола 60 и алгола 68). И уж тем более С++ (он базируется на сях, a также на Симуле, которая сама по себя является расширением Алгола-60). А про всякие жабы я вообще молчу :-)
;D а по ссылке этого не скажешь...
-
Да, и я это все подтверждаю - я таки читал и спеку на Алгол-60 и спеку на BCPL/B и спеки на первые версии Сей - это считай один и тот же язык.
Скажем переменные там объявляются единообразно абсолютно - тип индентификатор, причем все это в едином блоке до тела функции (до первого "begin" или там { ).
Я слабо себе представляю как можно отнести Си к какой-то другой группе языков :-) Ну разве что начать делить алгольную группу на более мелкие подгруппы. (типа вот они все алгольные, но алгольная группа состоит вот из таких вот подгрупп: ... )
-
Си - дважды потомок Алгола (алгола 60 и алгола 68). И уж тем более С++ (он базируется на сях, a также на Симуле, которая сама по себя является расширением Алгола-60). А про всякие жабы я вообще молчу :-)
;D а по ссылке этого не скажешь...
Что это?
1963 CPL Barron, Strachey, et al. ALGOL 60
1967 BCPL Richards CPL
1969 B Ken Thompson, with contributions from Dennis Ritchie BCPL
1972 C Dennis Ritchie B, BCPL, ALGOL 68
По плюсам, думаю сам осилишь.
-
По плюсам, думаю сам осилишь.
не .. не осилю ибо идя по этой дорожке можно уйти далеко.. от того что нужно на практике..
-
Пощупал на практике сий чудо-язык - вполне себе ничего так. Генерируемый код вполне вменяем и даже человекочитаем. Тяжелых либ за собой оно не таскает, что не может не радовать. Hello world в случае выбора платформы stdcpp получается порядка 33 Кб (бинарь нативный). Компилируется быстро. Очень быстро.
В принципе для конкретной платформы можно обвязку элементарно менять - все шаблоны доступны и весьма просты. Ну, то есть полагаю, что без проблем откручу я ему самостийность с незалежность (в том плане что оно норовит сразу приложение собирать) и вкручу библиотечность на уровне исходников - чтобы значится можно было алгоритм писанный на это чуде легко воткнуть и в веб-страничку и в суровый сишный код.
Из замеченного забавного: компилятор ленив. То есть те функции которые не используются он даже и не пытается скомпилировать (единственное что проверяется - синтаксическая корректность). Следовательно в неиспользуемых функциях вполне могут сидеть ошибки типов. До тех пор пока их никто не использует - все будет собираться. Как только напишешь где-то их вызов - будет ошибка компиляции. Замечу, что на безопасность такая странность никак не влияет. Хотя и не привычно конечно.
-
Из замеченного забавного: компилятор ленив. То есть те функции которые не используются он даже и не пытается скомпилировать (единственное что проверяется - синтаксическая корректность). Следовательно в неиспользуемых функциях вполне могут сидеть ошибки типов. До тех пор пока их никто не использует - все будет собираться. Как только напишешь где-то их вызов - будет ошибка компиляции. Замечу, что на безопасность такая странность никак не влияет. Хотя и не привычно конечно.
Не понял,.. а как же модульность типа "модульный статически типизированный язык " - в каком смысле она понимается? - если в обыденном... то что получается сформирую я модуль... скомпилю, отправлю заказчику.. а там кака?
-
equals и assignment один знак "=" :D
Не смущает, valexey?
-
equals и assignment один знак "=" :D
Не смущает, valexey?
В этом языке - нет. Тут четкое разделение на statement и expression, и одно другим быть не может. А вот если в Си или хаскелле equals и assignment сделать одним значком, то получится бардак.
-
Если ты в теме, то объясни плиз безграмотному. Почему в обероне разные знаки? Там ведь тоже вроде чОткое разделение.
-
Если ты в теме, то объясни плиз безграмотному. Почему в обероне разные знаки? Там ведь тоже вроде чОткое разделение.
Чтобы упростить компилятор.
-
Типа чтоб енто еще на уровне лексера разруливалось?
-
Если ты в теме, то объясни плиз безграмотному. Почему в обероне разные знаки? Там ведь тоже вроде чОткое разделение.
Чтобы упростить компилятор.
хе ... а я считал, что он о программистах думал... наивный.
-
Типа чтоб енто еще на уровне лексера разруливалось?
Почти. Сразу после лексера.
-
а насчет "нинужен" - for - нинужен, Сase - нинужен... break. continue...
-
а насчет "нинужен" - for - нинужен, Сase - нинужен... break. continue...
Да и if не нужен, если есть while :-)
-
Если ты в теме, то объясни плиз безграмотному. Почему в обероне разные знаки? Там ведь тоже вроде чОткое разделение.
Чтобы упростить компилятор.
хе ... а я считал, что он о программистах думал... наивный.
Угу. Наивный :-)
PS. Блин. насколько же linux+chrome комфортней чем Win+IE9. Но новом буке дефолтная система с дефолтным браузером - пользоваться на порядок менее удобно, чем на старом.
-
а насчет "нинужен" - for - нинужен, Сase - нинужен... break. continue...
Да и if не нужен, если есть while :-)
и while не нужен если есть if и goto ;D
-
ну ладно посмеялись, а что там реально с модульностью?
-
ну ладно посмеялись, а что там реально с модульностью?
Есть модульность в плане декомпозиции программы для программиста. Но не в плане распространения библиотек. (вообще смешивать в понятии модуля все три сущности "единица компиляции, загрузки, исполнения" довольно глупо).
Поэтому в графе импортов тут могут быть циклы - они ничему не противоречат.
-
ну ладно посмеялись, а что там реально с модульностью?
Есть модульность в плане декомпозиции программы для программиста. Но не в плане распространения библиотек. (вообще смешивать в понятии модуля все три сущности "единица компиляции, загрузки, исполнения" довольно глупо).
Поэтому в графе импортов тут могут быть циклы - они ничему не противоречат.
то есть возможна такая ситуация, когда ты отправляешь модуль (или х.з как это назвать) другому человеку и это дело работает до первого вызова функции с ошибкой которую можно выловить нормальной компиляцией (до отсылки)?
-
ну ладно посмеялись, а что там реально с модульностью?
Есть модульность в плане декомпозиции программы для программиста. Но не в плане распространения библиотек. (вообще смешивать в понятии модуля все три сущности "единица компиляции, загрузки, исполнения" довольно глупо).
Поэтому в графе импортов тут могут быть циклы - они ничему не противоречат.
то есть возможна такая ситуация, когда ты отправляешь модуль (или х.з как это назвать) другому человеку и это дело работает до первого вызова функции с ошибкой которую можно выловить нормальной компиляцией (до отсылки)?
В каком виде ты отправляешь его? Как обычно, в виде файлика-исходника? ;-)
-
ну ладно посмеялись, а что там реально с модульностью?
Есть модульность в плане декомпозиции программы для программиста. Но не в плане распространения библиотек. (вообще смешивать в понятии модуля все три сущности "единица компиляции, загрузки, исполнения" довольно глупо).
Поэтому в графе импортов тут могут быть циклы - они ничему не противоречат.
то есть возможна такая ситуация, когда ты отправляешь модуль (или х.з как это назвать) другому человеку и это дело работает до первого вызова функции с ошибкой которую можно выловить нормальной компиляцией (до отсылки)?
В каком виде ты отправляешь его? Как обычно, в виде файлика-исходника? ;-)
зависит от клиента... (например, нафига конечному пользователю готового продукта исходник... он даже слова компилятор может не знать...) но я в любом случае компилирую отправляемый файл...
-
В каком виде ты отправляешь его? Как обычно, в виде файлика-исходника? ;-)
зависит от клиента... (например, нафига конечному пользователю готового продукта исходник... он даже слова компилятор может не знать...) но я в любом случае компилирую отправляемый файл...
Что именно ты отправишь еще сильно зависит от платформы под которую собираешь. В случае stdcpp платформы - просто соберешь .so'шку и отошлешь. И будет хорошо. В случае js-платформы.. Я хз :-) Наверно тоже какая-то сборка будет подобная вот. Но все это никакого отношения, как понимаешь, к модульности не имеет.
В плане создания либ - там немного допилить надо на самом деле (про что я уже указывал где-то выше. В принципе там это дело пары часов), ибо оно таки as is ориентировано на создание приложений а не либ.
-
В каком виде ты отправляешь его? Как обычно, в виде файлика-исходника? ;-)
зависит от клиента... (например, нафига конечному пользователю готового продукта исходник... он даже слова компилятор может не знать...) но я в любом случае компилирую отправляемый файл...
Что именно ты отправишь еще сильно зависит от платформы под которую собираешь. В случае stdcpp платформы - просто соберешь .so'шку и отошлешь. И будет хорошо. В случае js-платформы.. Я хз :-) Наверно тоже какая-то сборка будет подобная вот. Но все это никакого отношения, как понимаешь, к модульности не имеет.
В плане создания либ - там немного допилить надо на самом деле (про что я уже указывал где-то выше. В принципе там это дело пары часов), ибо оно таки as is ориентировано на создание приложений а не либ.
;D ;) под винду... и, разумеется, я имею ввиду наитив код...
-
;D ;) под винду... и, разумеется, я имею ввиду наитив код...
Какая у тебя фантазия бурная однако! Ну, значит сделаешь dll, фигли. Оно чай от so'шки не сильно отличается (и делать будешь небось какой-нибудь голимой вижуал-штудией).
-
;D ;) под винду... и, разумеется, я имею ввиду наитив код...
Какая у тебя фантазия бурная однако! Ну, значит сделаешь dll, фигли. Оно чай от so'шки не сильно отличается (и делать будешь небось какой-нибудь голимой вижуал-штудией).
тык этот "кроссплатформенный" "компилятор" всего лишь транслирует обезьяньи программы в другие ЯП? и мне нужно для получения исполняемого кода знать еще и особенность других языков... нда... вот радости ну прям вагон и тележка...
-
;D ;) под винду... и, разумеется, я имею ввиду наитив код...
Какая у тебя фантазия бурная однако! Ну, значит сделаешь dll, фигли. Оно чай от so'шки не сильно отличается (и делать будешь небось какой-нибудь голимой вижуал-штудией).
тык этот "кроссплатформенный" "компилятор" всего лишь транслирует обезьяньи программы в другие ЯП? и мне нужно для получения исполняемого кода знать еще и особенность других языков... нда... вот радости ну прям вагон и тележка...
Ну, в случае js ты исполняемый код получаешь сразу :-) В случае stdcpp бинарь по крайней мере под макосью тоже получаешь сразу, для его генерации оно ясное дело сишный компилятор использует. Но делает это абсолютно прозрачно.
В случае же если тебе хочется странного, то в странном придется немного покопаться :-)
Вообще, я же первым же постом написал что оно именно что транслирует в разные ЯП. И это огромный плюс. И еще более огромный плюс, что результат трансляции вполне себе человекочитаем. Это в общем то ровно то, что мне нужно (если бы оно скажем генерило сразу бинарь под винды/макоси, оно бы мне нахрен было бы не нужно).
-
Ну, в случае js ты исполняемый код получаешь сразу :-) В случае stdcpp бинарь по крайней мере под макосью тоже получаешь сразу, для его генерации оно ясное дело сишный компилятор использует. Но делает это абсолютно прозрачно.
Многие языки используют компиляцию в СИ - тот же Эйфель... - но он честно выдает сообщения об ошибках ИМЕННО в терминах ( конструкций) Эйфеля , а не СИ. так что дурачка решившего... а не приручить мне простую Макаку вместо высоСИ = ждет большой облом даже на высокоуровневых задачах - блин , как вводу глядел насчет еще одной какашки..
-
Ну, в случае js ты исполняемый код получаешь сразу :-) В случае stdcpp бинарь по крайней мере под макосью тоже получаешь сразу, для его генерации оно ясное дело сишный компилятор использует. Но делает это абсолютно прозрачно.
Многие языки используют компиляцию в СИ - тот же Эйфель... - но он честно выдает сообщения об ошибках ИМЕННО в терминах ( конструкций) Эйфеля , а не СИ. так что дурачка решившего... а не приручить мне простую Макаку вместо высоСИ = ждет большой облом даже на высокоуровневых задачах - блин , как вводу глядел насчет еще одной какашки..
Оно также выдает ошибки именно на уровне макаки а не Сей, или там Js (на уровне js выдавать ошибки вообще не получится - он же динамически типизированный :-) ). Чтобы после успешной трансляции из макаки в те же си случилась ошибка на уровне компиляции сишного кода в бинарь - такого не бывает (ну или я не видел пока, теоретически, конечно, если разрушить окружение сборки хитрым образом, таки ошибки получить будет возможно, впрочем в Eiffel'е ровно то же самое).
-
Оно также выдает ошибки именно на уровне макаки а не Сей, или там Js (на уровне js выдавать ошибки вообще не получится - он же динамически типизированный :-) ). Чтобы после успешной трансляции из макаки в те же си случилась ошибка на уровне компиляции сишного кода в бинарь - такого не бывает (ну или я не видел пока, теоретически, конечно, если разрушить окружение сборки хитрым образом, таки ошибки получить будет возможно, впрочем в Eiffel'е ровно то же самое).
;D ;D ;D да нет - например, когда я делаю "модуль" состоящий из одних экспортируемых процедур - то, согласно вашим словам, если у меня нет ни одного вызова оных (а с чего бы им взяться?) - транслятор будет халтурить (проверять только соответствие синтаксису)...
-
(дурацкий форумный движок)
-
Думаю, у этой абиззяны своё видение модуля. Если подпрограмма не используется, то она не попадает в состав скомпилированного модуля. И сигнатура её не попадает. А если обращаться к несуществующим ресурсам модуля, то будет выдаваться стандартная (и правильная) ошибка на конкретной платформе. Всё прозрачно, и никаких подводных камней с сигнатурами быть не должно.
-
Думаю, у этой абиззяны своё видение модуля. Если подпрограмма не используется, то она не попадает в состав скомпилированного модуля. И сигнатура её не попадает. А если обращаться к несуществующим ресурсам модуля, то будет выдаваться стандартная (и правильная) ошибка на конкретной платформе. Всё прозрачно, и никаких подводных камней с сигнатурами быть не должно.
Да. По сути в этом трансляторе по умолчанию включена обычная, для современных компиляторов, опция "eliminate dead code". Ну и повторю еще один нюанс - модули, по сути, тут есть на этапе компиляции. В рантайме их вроде как нет. Поэтому если хочется либу под конкретной платформой - модули тут не при чем. Либу надо лепить средствами самой этой платформы по сути. Искаропки тулзы этого языка на создание либ не рассчитаны. Но у меня сложилось впечатление, что допилить довольно просто будет.
-
Думаю, у этой абиззяны своё видение модуля. Если подпрограмма не используется, то она не попадает в состав скомпилированного модуля. И сигнатура её не попадает. А если обращаться к несуществующим ресурсам модуля, то будет выдаваться стандартная (и правильная) ошибка на конкретной платформе. Всё прозрачно, и никаких подводных камней с сигнатурами быть не должно.
Да. По сути в этом трансляторе по умолчанию включена обычная, для современных компиляторов, опция "eliminate dead code". Ну и повторю еще один нюанс - модули, по сути, тут есть на этапе компиляции. В рантайме их вроде как нет. Поэтому если хочется либу под конкретной платформой - модули тут не при чем. Либу надо лепить средствами самой этой платформы по сути. Искаропки тулзы этого языка на создание либ не рассчитаны. Но у меня сложилось впечатление, что допилить довольно просто будет.
Тогда , Алексей, то паскудство которое они называют модулем... нельзя назвать даже библиотекой... - вот вам и ожидаемая какашка для человека который решил инвестировать свое время в обьезьяноведение.. Нормальный продукт для этих целей - даже если и не дает компиляцию в наитивный код -предоставляет виртуальную машину. Но на этом проблемы не закончились - а что там с отладкой?
-
Тогда , Алексей, то паскудство которое они называют модулем... нельзя назвать даже библиотекой... - вот вам и ожидаемая какашка для человека который решил инвестировать свое время в обьезьяноведение..
Да нет. Модуль в общем то ровно тот же что скажем в Модуле или там Обероне.
Нормальный продукт для этих целей - даже если и не дает компиляцию в наитивный код -предоставляет виртуальную машину.
Для каких, этих? :-)
Но на этом проблемы не закончились - а что там с отладкой?
Смотря для какого target. Для stdcpp - все хорошо.
-
Да нет. Модуль в общем то ровно тот же что скажем в Модуле или там Обероне.
да разве? :D
-
Да нет. Модуль в общем то ровно тот же что скажем в Модуле или там Обероне.
да разве? :D
Ну да. В каком месте они расходятся вообще?
-
Да нет. Модуль в общем то ровно тот же что скажем в Модуле или там Обероне.
да разве? :D
Ну да. В каком месте они расходятся вообще?
в прямом - если я суну в модуль Оберона или того же Обьектного Паскаля экспортируемую функцию - то при компиляции модуля (а он там и там единица ее) - то она не может исчезнуть из результирующего кода (вне зависимости тестировал (вызывал) я ее когда -либо или нет).
-
в прямом - если я суну в модуль Оберона или того же Обьектного Паскаля экспортируемую функцию - то при компиляции модуля (а он там и там единица ее) - то она не может исчезнуть из результирующего кода (вне зависимости тестировал (вызывал) я ее когда -либо или нет).
Не обязательно:
A module is a collection of declarations of constants, types, variables, and procedures, and a
sequence of statements for the purpose of assigning initial values to the variables. A module
typically constitutes a text that is compilable as a unit.
Таким образом в Обероне модуль может не быть единицей компиляции.
Да, а теперь скажи мне пожалуйста, как мне "отдать заказчику" скомпилированный модуль в единственной на текущий момент промышленной реализации Оберона-07 - Astrobe?
-
Таким образом в Обероне модуль может не быть единицей компиляции.
Да, а теперь скажи мне пожалуйста, как мне "отдать заказчику" скомпилированный модуль в единственной на текущий момент промышленной реализации Оберона-07 - Astrobe?
Astrobe - а что энто за реализация... случайно не та которая не поддерживает нормально работу с числами двойной точности? ;) там был список ограничений от стандарта.. который РЕЗКО сужал применимость этой "единственной на текущий момент промышленной реализации Оберона-07 " - но эта разумеется шутка... ОТВЕТ - отдавать ТЕКСТ МОДУЛЯ предварительно прошедший компиляцию - если делаете для заказчика библиотеку, или конечный продукт.. т.е. вероятнее всего модульности (как и кое-чего другого) в этом ПОДМНОЖЕСТВЕ Оберона-07 - НЕТ.
-
Таким образом в Обероне модуль может не быть единицей компиляции.
Да, а теперь скажи мне пожалуйста, как мне "отдать заказчику" скомпилированный модуль в единственной на текущий момент промышленной реализации Оберона-07 - Astrobe?
Astrobe - а что энто за реализация... случайно не та которая не поддерживает нормально работу с числами двойной точности? ;) там был список ограничений от стандарта.. который РЕЗКО сужал применимость этой "единственной на текущий момент промышленной реализации Оберона-07 " - но эта разумеется шутка... ОТВЕТ - отдавать ТЕКСТ МОДУЛЯ предварительно прошедший компиляцию - если делаете для заказчика библиотеку, или конечный продукт.. т.е. вероятнее всего модульности (как и кое-чего другого) в этом ПОДМНОЖЕСТВЕ Оберона-07 - НЕТ.
Да нет, это не подмножество. Это Оберон-7 с расширениями :-)
-
Да нет, это не подмножество. Это Оберон-7 с расширениями :-)
:D :D :D :D , зачетно.
Но суть не в этом - а в том, что мы пытаемся расширить область применения этого DLC туда, куда он не планировался создателями.
-
Да нет, это не подмножество. Это Оберон-7 с расширениями :-)
:D :D :D :D , зачетно.
Но суть не в этом - а в том, что мы пытаемся расширить область применения этого DLC туда, куда он не планировался создателями.
Да нет. Именно что планировался :-) Как раз Вирт сейчас всякой встроенкой занимается.
Проблема в том, что термин "модуль" сильно перегружен значениями особенно в Оберон-фэндоме. Модуль играет сразу несколько ортогональных ролей - роль единицы компиляции(1). Роль единицы загрузки/выгрузки (2). Роль логической самодостаточной единицы исходного кода c четко прописанными интерфейсами для взаимодействия с другими подобными единицами (3).
Так вот, в Обероне, как языке, модуль это ровно (3), без 2 и 1 (хотя они и не запрещаются).
В Оберон ОС - модуль это (1) (2) (3).
В каком-нибудь XDS модуль это (1) и (3).
Я предпочитаю не смешивать эти три разные понятия, и предпочитаю иметь разные инструментарий для всех трех. Чтобы при необходимости границы этих трех сущностей не совпадали.
-
...
Да нет. Именно что планировался :-) Как раз Вирт сейчас всякой встроенкой занимается.
А я про Мартышку (как бы между прочим) :)
-
...
Да нет. Именно что планировался :-) Как раз Вирт сейчас всякой встроенкой занимается.
А я про Мартышку (как бы между прочим) :)
А, ну это да. Для либоклепания он не планировался. Мне же собственно нужно его научить выплевывать код (исходный код на целевом языке) годный для вкорячивания в мою прогу.
То есть такие типа либы в виде сгенерированных исходников. Код там сгенерированный, остается вполне читабельным. Так что ни с отладкой (даже если не пользоваться средствами макаки) ни с чтением их проблем не будет.
-
...
Да нет. Именно что планировался :-) Как раз Вирт сейчас всякой встроенкой занимается.
А я про Мартышку (как бы между прочим) :)
А, ну это да. Для либоклепания он не планировался. Мне же собственно нужно его научить выплевывать код (исходный код на целевом языке) годный для вкорячивания в мою прогу.
То есть такие типа либы в виде сгенерированных исходников. Код там сгенерированный, остается вполне читабельным. Так что ни с отладкой (даже если не пользоваться средствами макаки) ни с чтением их проблем не будет.
так понятно.. а я про то что может ждать человека неосторожно вставшего на этот путь.. - статья что в вики, что по ссылкам производит неприятное впечатление.. как пример.. то про что я говорю "наивные" мечты начинающего программиста, решившего найти юбер вафлю на все случаи жизни, клюнувшего на викушную инфу. - тоже по сути самое.. а насчет генерируемого кода.. - блин, не видел еще хорошего в общем случае...
-
...
Да нет. Именно что планировался :-) Как раз Вирт сейчас всякой встроенкой занимается.
А я про Мартышку (как бы между прочим) :)
А, ну это да. Для либоклепания он не планировался. Мне же собственно нужно его научить выплевывать код (исходный код на целевом языке) годный для вкорячивания в мою прогу.
То есть такие типа либы в виде сгенерированных исходников. Код там сгенерированный, остается вполне читабельным. Так что ни с отладкой (даже если не пользоваться средствами макаки) ни с чтением их проблем не будет.
так понятно.. а я про то что может ждать человека неосторожно вставшего на этот путь.. - статья что в вики, что по ссылкам производит неприятное впечатление.. как пример.. то про что я говорю "наивные" мечты начинающего программиста, решившего найти юбер вафлю на все случаи жизни, клюнувшего на викушную инфу. - тоже по сути самое.. а насчет генерируемого кода.. - блин, не видел еще хорошего в общем случае...
Я просто помню какой код генерит oo2c :-) После этого мне ничего не страшно.
А на все случаи жизни.. Не-е. Мне нужно на один случай :-)
-
Я просто помню какой код генерит oo2c :-) После этого мне ничего не страшно.
А на все случаи жизни.. Не-е. Мне нужно на один случай :-)
Вот я не видел какой код генерирует oo2c, но сильно сомневаюсь, что по своей чудовищности он сможет сравниться с сишным кодом, который генерирует ghc -- вот там полный пипец ))
-
Я просто помню какой код генерит oo2c :-) После этого мне ничего не страшно.
А на все случаи жизни.. Не-е. Мне нужно на один случай :-)
Вот я не видел какой код генерирует oo2c, но сильно сомневаюсь, что по своей чудовищности он сможет сравниться с сишным кодом, который генерирует ghc -- вот там полный пипец ))
ну если код генерируемый oo2c чудовищно оптимальный...то да... хотя нет.. я боюсь даже смотреть на код генерируемый Вижуал Эйфелем при компиляции стандартного гуйного шаболона - ибо у меня все это дело длится около 5 минут ,с плачевным результатом в конце этого процесса ..