Контакти

Лістинг - що це таке простими словами: повний розбір поняття. Лістинг програми Що таке листинг у програмуванні

Призначення

Вихідний код або використовується для отримання об'єктного коду або виконується інтерпретатором. Зміни ніколи не виконуються над об'єктним кодом, лише над вихідним, з наступним повторним перетворенням на об'єктний.

Інше важливе призначення вихідного коду - як опис програми. За текстом програми можна поновити логіку її поведінки. Для полегшення розуміння вихідного коду використовуються коментарі. Існують також інструментальні засоби, що дозволяють автоматично отримувати документацію за вихідним кодом – т.з. генератори документації.

Крім того, вихідний код має багато інших застосувань. Він може використовуватись як інструмент навчання; програмістам-початківцям буває корисно досліджувати існуючий вихідний код для вивчення техніки та методології програмування. Він також використовується як інструмент спілкування між досвідченими програмістами, завдяки своїй (ідеально) лаконічній та недвозначній природі. Спільне використання коду розробниками часто згадується як фактор, що сприяє покращенню досвіду програмістів.

Програмісти часто переносять вихідний код з одного проекту до іншого, що називається повторного використання коду ( Software reusability).

Вихідний код - найважливіший компонент процесу портування програмного забезпечення інші платформи. Без вихідного коду будь-якої частини ПЗ, портування або дуже складно, або взагалі неможливе.

Організація

Вихідний код певної частини програмного забезпечення (модуля, компонента) може складатися з одного або декількох файлів . Код програми не обов'язково пишеться лише однією мовою програмування. Наприклад, часто програми, написані мовою Сі з метою оптимізації, містять вставки коду мовою асемблера . Також можливі ситуації, коли деякі компоненти або частини програми пишуться різними мовами, з наступним складанням в єдиний модуль, що виконується за допомогою технології відомої як компонування бібліотек ( library linking).

Складне програмне забезпечення при збиранні вимагає використання десятків, або навіть сотень файлів із вихідним кодом. У таких випадках для спрощення складання зазвичай використовуються файли проектів, що містять опис залежностей між файлами з вихідним кодом і описують процес складання. Ці файли також можуть містити інші параметри компілятора і середовища проектування. Для різних середовищ проектування можуть застосовуватися різні файли проекту, причому в деяких середовищах ці файли можуть бути в текстовому форматі, придатному для безпосереднього редагування програмістом за допомогою універсальних текстових редакторів, в інших середовищах підтримуються спеціальні формати, а створення та зміни файлів здійснюється за допомогою спеціальних інструментальних програм. Файли проектів зазвичай включають у поняття вихідний код. Переважна більшість сучасних мовних середовищ обов'язково використовуються файли проектів незалежно від складності іншого вихідного коду, що входить у цей проект. Часто під вихідним кодом мають на увазі і файли ресурсів, що містять різні дані, наприклад, графічні зображення, потрібні для збирання програми.

Для полегшення роботи з вихідним кодом для спільної роботи над кодом командою програмістів використовуються системи управління версіями .

Якість

На відміну від людини, для комп'ютера немає "добре написаного" або "погано написаного" коду. Але те, як написаний код, може сильно впливати на процес супроводу ПЗ. Про якість вихідного коду можна судити за такими параметрами:

  • читання коду (у тому числі наявність або відсутність коментарів до коду);
  • легкість у підтримці, тестуванні, налагодженні та усуненні помилок, модифікації та портуванні;
  • низька складність;
  • низьке використання ресурсів – пам'яті, процесора, дискового простору;
  • відсутність зауважень, що виводяться компілятором;
  • відсутність «сміття» - змінних, недосяжних блоків коду, непотрібних застарілих коментарів і т.д.

Лістинг програми "demol.c" показаний на Рис. 6.7. Ім'я програмі вигадає програміст. Розширення ".с" обов'язкове. Текст набирається в редакторі "Programmer's Notepad 2" (скорочено PN2), який входить у пакет WinAVR замість графічної оболонки. Через нього також виробляється проект, виправлення помилок, компіляція програми і навіть програмування MK.

Рис. 6.7. Лістинг програми "demol.c".

Рис. 6.8. Зовнішній вигляд програми PN2.

Редактор PN2 є самостійним проектом зі своїм інтернет-сайтом. Зовнішній вигляд головного меню PN2 показано на мал. 6.8.

Порядок дій.

1.3опустити на виконання файл «WlnAVR-20100110-install.exe» (29 Мбайт), що знаходиться на компакт-диску, що додається. Цей файл за необхідності можна вільно завантажити з Інтернету. Інсталювати WlnAVR за замовчуванням до папки C:\WinAVR-20100110\.

2. Відкрити редактор PN2: «Пуск – Програми – WinAVR-20100110 – Programmers Notepad». Включити нумерацію рядків: «Tools – Options – General – Default –<поставить «галочку» возле «Show Line Numbers»>- ОК».

3. Створити у редакторі PN2 новий Сі-файл: "File - New - С/С++". Ввести текст програми з клавіатури згідно Мал. 6.7 та зберегти його на жорсткому диску: «File - Save As… -<ввести путь и имя файла, например, для однозначности C:\1001\demol.c>- ОК».

Тут і далі знімки екранів (скриншоти) для економії місця будуть відображатися лише у найважливіших точках дій. Інші скріншоти в покроковому режимі можна подивитися на відеоуроках в компакт-диску, що додається.

Пояснення до лістингу.

Рядок 1 починається з коментарів, які обмежуються зліва двома похилими лініями «прямий сліш». Весь текст після знаків «//» може бути будь-чим, будь-якою мовою, з будь-якими вольностями і скороченнями. Це довільна інформація, яку програміст пише для себе, коханого, щоб через місяць-другий згадати, про що, власне, йшлося. Зазвичай вказується коротка назва програми та авторство.

Рядок 2 також містить коментарі, але вже технічного плану. Тут розписано електричну схему підключення індикатора HL1 і кнопки SB1 до конкретних ліній портів MK. Назви сигналів відповідають розкладці з дашиту MHKpocxeMyATmega48A (Рис. 6.9) .

Рис. 6.9. Розклад сигналів MKATmega48A.

Практика текстового опису нескладних схем у «шапці» програми широко поширена у співтоваристві програмістів, які лінуються малювати та прикладати графічні схеми, вважаючи, що «і так усе зрозуміло».

Рядок 3 вказує параметри "мейкфайлу" ("makefile"). Для довідки нормальна робота компілятора AVR-GCC можлива за наявності двох обов'язкових файлів. Перший - файл листингу з розширенням «.с», другий - файл системних вказівок «makefile» без розширення. "Makefile" створюється утилітою "MFile" (Мал. 6.10, автор JoergWunsch, Німеччина), що входить у WinAVR.

Рис. 6.10. Зовнішній вигляд програми MFile.

Порядок дій.

1. Запустити виконання утиліту «MFile»: «Пуск - Програми - WinAVR- 2010010 – MFile ».

2. Заповнити поля шаблону наступним чином (Мал. 6.11):

У пункті «Makefile - Main file name… - Main file» ввести ім'я проекту «demol», що розробляється, і натиснути OK;

У пункті «Makefile – MCU type – ATmega» вибрати MK «atmega48a»;

У пункті Makefile - Optimization level задати рівень оптимізації «2». Інші можливості: "0" - без оптимізації, "s" - мінімальна довжина кодів, цифри "1" ... "3" - це три різні методи оптимізації, причому цифра "3" не означає найкращий варіант, все залежить від конкретної Сі-програми .

Інші пункти шаблону «makefile» коригувати не обов'язково, нехай залишаються прийнятими за умовчанням.

Рис. 6.11. Заповнення полів у програмі MFile.

Для кожного нового проекту та нового типу МК треба складати свій «makefile», при цьому змінюватиметься ім'я проекту та тип MK.

Рядок 4 містить коментарі, що визначають шістнадцяткові числа молодшого (Low), старшого (High) та розширеного (Ext) байтів конфігурації. Ці значення знадобляться надалі під час програмування «фьюзів» MK.

З« ктг5інформаційно порожня. Вона візуально відокремлює текст коментарів від решти програми. Замість одного можна вставити два порожні рядки, що не важливо. Головний сенс полягає у покращенні наочності. На довжину кодів мікропрограми MK це не впливає.

Зовнішнє оформлення лістингу вигадує сам програміст, виходячи зі своїх уявлень про красу картинки та зручність подачі інформації. Часто за стилем оформлення «шапки», рядків лістингу та коментарів можна впізнати автора програми або скласти психологічний портрет. Цікаві нотатки з цього приводу наведені в монографії Олена Голуба.

Рядок 6 обслуговується препроцесором компілятора. Це не оператор мови Сі та не коментар. Назва складна, а сенс простий. Препроцесор (попередній ПРОЦЕСОР) шукає у програмі рядки, що починаються із символу «#». Далі, залежно від ключового слова, він виконує певну дію, наприклад, "define" - надає значення константам, "if defined" - перевіряє умову, "inC1ude" - підключає бібліотеку функцій і т.д.

Для першого знайомства досить знати, що бібліотека функцій є набором файлів, в які поміщаються тексти стандартних або часто повторюваних процедур. В даному випадку директива #inC1ude (у перекладі з англ. «включати») активізує системну бібліотеку avr/io.h, яка відповідає за роботу портів введення/виводу. Ця бібліотека у різних компіляторах має різну назву, але суть незмінна, без неї не можна керувати жодною лінією портів MK. Отже, підключення бібліотеки вводу/виводу є обов'язковим для всіх мікроконтролерних Сі-програм.

Рядок 7 також обробляється препроцесором компілятора, але має ключове слово "define" (у перекладі з англ. "визначати"). Отже, вона оголошує константу INI і надає їй постійне значення 255. У коментарях вказується переведення числа 255 у шістнадцяткову 0xFF та двійкову 0bl 1111111 форму числення. Різниця між ними полягає у літерах «х» та «Ь» після обов'язкової цифри «0». Відповідність чисел у різних системах наведено у Табл. 6.3.

Таблиця 6.3. Переведення чисел з шістнадцяткової форми в двійкову і назад

Якщо десь у «тілі» програми зустрічається константа INI, то компілятор без роздумів підставляє замість неї числове значення, вказане у рядку 7, тобто. 255. Це дуже зручно для програмістів при корекції великих за обсягом лістингів, коли константи розкидані по всьому тексту. Крім того, сама назва константи може нести смислове навантаження і служити словесною підказкою. Зокрема, INI - це скорочення від англійського слова "іnitіalization" (ініціалізація), що означає деяке початкове значення.

Важливість розміщення константи саме в «шапці» програми полягає у простоті її пошуку та швидкості внесення змін. Наприклад, один раз відкоригувавши число "255", можна бути впевненим у тому, що скрізь по тексту воно буде автоматично (і безпомилково!) проставлено через константу lNI.

Ім'я для константи вигадує програміст, виходячи зі здорового глузду та людських уподобань. За давньою традицією назви констант пишуться великими символами. Першою в імені обов'язково має йти буква, наприклад, I2CBUS, T34. Вживання кирилиці не допускається.

Оголошення константи INI можна було записати ще двома рівнозначними способами: "#define INI OxFF" або "#define INI Obl 1111111".

Рядок 8 містить оператор опису змінної «а». Змінну можна образно представити у вигляді скриньки (ящика, коробки, пеналу), де зберігається кілька предметів (намистинок, зерен, сірників). Щоб "скриньки" відрізнялися один від одного, їх маркують різними написами на корпусі, в даному випадку буквою "а". Якщо в описі змінної не вказано початкове число, то вважається, що "скринька" порожня і вона ініціалізується нулем (а = 0). По ходу роботи програми в «скриньку» можна додавати і з неї можна видаляти предмети, тобто. збільшувати та зменшувати значення змінної.

Обсяг «скриньки» залежить від її вихідного оголошення. У Табл. 6.4 вказані межі, прийняті у компіляторі AVR-GCC. Як видно, оголошення "unsigned char" дозволяє покласти в "скриньку" 255 предметів. Разом з нульовим значенням (порожня «скринька») всього буде 256 станів або 256 байтів. Змінна з оголошенням «unsigned long» вже більше схожа не на скриньку, а на залізничний склад, який розрахований на 4.2 млрд предметів.

Таблиця 6.4. Розмірності змінних, прийнятих АУК-ВСС

Оскільки MK немає розвинених коштів до роботи з негативними числами, то спочатку, ніж заплутатися, краще у програмах використовувати лише позитивні числа, тобто. містять оголошення «unsigned».

«Батьки-командири» мови З давніх-давен встановили негласний порядок, згідно з яким назва змінної має складатися не більше, ніж з 8 символів. У компіляторі AVR-GCC це правило ігнорується і змінна може містити стільки символів скільки хочеться, але без фанатизму. Єдине, що першою в назві обов'язково має стояти буква латинського алфавіту, за нею можуть наслідувати букви, цифри, символи. Кирила не допускається.

Змінна, на відміну константи, містить деяке змінне (а чи не постійне) число. Щоб змінні відрізнялися від констант їх записують малими літерами. Зазвичай намагаються, щоб назва відповідала сенсу, наприклад, count для лічильника, data для даних, delay для затримки. Хоча іноді простіше, звичніше і компактніше виглядають однолітерні змінні, добре знайомі зі шкільною алгебри, - а, b, с, d, i, j, k, x, у, z.

Яку розмірність вказувати на конкретну змінну, визначає програміст. Оскільки змінна «а» у цьому лістингу є сховищем збору інформації з цифрового 8-битного порту «З», отже, у неї має вміщуватися «два у восьмий ступеня» байтів, тобто. від 0 до 255.

Цікаво, що компілятор не видає помилку, якщо перестрахуватися та оголосити змінну із запасом як "unsigned long а;". Щоправда, це призводить до марного збільшення обсягу коду з 114 до 126 байтів і, відповідно, невеликого зменшення швидкості виконання програми.

Інша крайність - недооцінка розмірності, коли, наприклад, замість оголошення unsigned int застосовується unsigned char. Якщо в таку змінну занести число, більше 255, то збережеться лише залишок від розподілу на 256, а старша частина безповоротно загубиться. Образно кажучи, предмети повисипаються зі «скриньки» назовні. Компілятор не реагує на такі помилки, вважаючи, що програміст перебуває в адекватному стані та розуміє, що він робить. Правильне та безпомилкове визначення розмірності змінних зазвичай приходить із досвідом.

Рядок 9 інформаційно порожній аналогічно рядку 5. Чи вставляти його в лістинг, залежить від волі програміста.

Рядок 10 заповнюється коментарями, але для різноманітності вони представлені в іншому форматі. Зокрема, текст викреслюється з лівого боку знаками «/*», а з правого боку – знаками «*/». Такий стиль бере початок з найдавніших версій мови Сі. Пізніше у коментарях стали застосовувати символи «//», що притаманно мови С++. У WinAVR обидва варіанти мають рівне право на існування. «Нове» написання простіше і наочніше, а «старе» подекуди є єдиним можливим, якщо потрібно прокоментувати початок оператора.

Рядок 11 містить типовий виклик функції "main" згідно з правилами Американського інституту стандартів ANSI (American National Standards Institute). Допускаються, але не рекомендуються, скорочені вирази: int main (), main (), main (void). Іноді навіть пишуть «void main (void)», підкреслюючи повну відсутність параметрів, що приймаються і передаються. Для простих MK, які не підтримують операційні системи реального часу, негативних наслідків не буде. Однак, якщо думати про майбутнє, то краще відразу завчити повну форму написання, що полегшить надалі перенесення Сі-програм на сучасніші мікроконтролерні платформи.

Рядок 12 повністю відводиться під першу фігурну дужку, що відкриває. Такої честі вона удостоєна невипадково. Компілятор мови Сі при виконанні рядка 12 проводить початкову ініціалізацію регістрів MK, установку стека, розподіл адресного простору. Механіку цього ювелірного процесу вивчати не треба (на відміну від програм на Ассемблері!).

Для програміста, головне, правильно засвоїти дві речі, які автоматично виготовляє компілятор, що входить до WinAVR:

При старті програми забороняються усі переривання;

Лінії всіх портів MK налаштовуються як входи без pull-up резисторів.

Рядок 13. Нарешті, з'явилася перша команда програми, що виконується, у вигляді оператора привласнення. Розшифровка символів:

"DDRB" - умовне ім'я восьмирозрядного регістру DDR ​​порту "В";

«=» - знак запису даних у регістр DDRB;

«ОЬ» - вказівку те, що наступні 8 цифр будуть у двійковому коді;

"11111111" - біти записуваного в регістр DDRB двійкового числа, розташовані в порядку 7, 6, 5, 4, 3, 2, 1, 0 (ліворуч старший біт, праворуч молодший біт).

В результаті виконання даного оператора всі лінії порту "В" встановлюються в режим виходу, оскільки в усіх розрядах вказані одиниці.

Оператор у рядку 13 має відступ у два пробіли зліва. Це умовність форматування тексту, якою дотримуються багато програмістів. Компілятор «промовчить», якщо почати текст у першому чи сьомому стовпці ліворуч, кому як подобається. Існує лише одна рекомендація: «Лістинг Сі-програми має бути зручним для перегляду». Наслідуючи йому, надалі всі тексти форматуватимуться так, щоб фігурні дужки розташовувалися в непарних стовпцях по вертикалі (1, 3, 5 і т.д.), причому в кожному стовпці будуть знаходитися тільки одна, що відкриває вгорі і одна, що закриває внизу фігурні дужки.

Зазначений порядок не догма, а спосіб скорочення лістингу за шириною та довжиною без втрати інформативності. Програміст «у себе вдома», у своїх лістингах, має право вводити будь-яку кількість прогалин, порожніх рядків тощо.

Рядок /4діє спільно з рядком 13, оскільки конкретний стан лінії порту в AVR-контролерах визначається зв'язкою двох регістрів DDRx і PORTx, де "х" - порядкова літера порту, наприклад, В, С або D. Якщо врахувати, що в кожному регістрі є 8 біт з номерами від 0 до 7 (умовно «z»), то загальний розклад по лініях портів виглядає так:

DDRx.z = 1, PORTx.z = 1 - вихід із ВИСОКИМ рівнем;

DDRx.z = 1, PORTx.z = 0 - вихід із низьким рівнем;

DDRx.z = 0, PORTx.z = 1 - вхід з "pull-up" резистором;

DDRx.z=0, PORTx.z=0 – вхід без «pull-up» резистора.

Узагальнення рядків 13 і 14: DDRB.0…DDRB.7 = 1, PORTB.O = 0, PORTB.l = 1, PORTB.2…PORTB.7 = 0, отже, лінії 0, 2…7 порту «В» будуть налаштовані як виходи з низькими рівнями, а лінія 1 - як вихід із високим рівнем. Оскільки до лінії PB1 (виведення 15 мікросхеми DD1 на Рис. 6.3) підключається індикатор HL1, він буде погашений. Виходить, що початкова частина технічного завдання успішно виконана.

Рядки 15, 16 аналогічні рядкам 13, 14, але для порту "С". Для різноманітності застосовується підстановка константи lNI. Після виконання рядків 15 та 16 усі лінії порту «С», навіть ті, які не беруть участь безпосередньо в роботі, будуть налаштовані як входи з «pull-up» резисторами. Це стандартний прийом початкової ініціалізації портів, щоб активізувати внутрішні підтягуючі резистори, які не дають «висіти в повітрі» КМОП-входам ліній МК та усувають шляхи проникнення різноманітних перешкод та наведень.

Рядок 17 аналогічний рядкам 13, 14 і 15, 16, але для порту «D». Він в електричній схемі взагалі не задіяний, проте слід взяти собі за правило - ініціалізувати на початку програми всі порти без винятку. Їхні вільні лінії мають бути налаштовані як входи з "pull-up" резисторами або як виходи з ВИСОКИМ/НИЗЬКИМ рівнем. У майбутньому такий автоматизм дозволить уникнути колізій та непорозумінь.

Особливістю є привласнення регістру PORTD значення, раніше наданого у рядку 13 регістру DDRB, тобто. двійкового числа Obl 1111111. Зроблено це у навчальних цілях, адже можна було б зробити простіше: «PORTD = OxFF;».

Ще одна деталь полягає у відсутності запису регістру DDRD. Це не друкарська помилка, а свідоме скорочення лістингу на один рядок, оскільки при включенні живлення згідно з даташитом у всі регістри DDRx, PORTx автоматично заносяться «нулі», тобто. додатково обнулювати регістр DDRD необов'язково.

Рядок 18 містить оператор циклу «while». Для першого знайомства досить запам'ятати, що вираз «while (1)» означає послідовне виконання операторів у рядках 19…21 у безкінечному циклі.

Рядок 19 містить дужку, що відкриває, і оператор привласнення. Таке поєднання допускається правилами мови Сі, що дозволяє зробити лістинг компактнішим за висотою.

Після виконання рядка 19 змінної «а» зберігатиметься байт стану восьми ліній порту «З», який був прочитаний з регістру PINC. Якщо кнопка SB1 не натиснута, то а = OxFF, а якщо натиснута, то а = OxFE.

Рядок 20сдвигает на один розряд вліво вміст змінної «а». Можливі два варіанти: якщо а раніше було OxFF, то стане OxFE, а якщо було OxFE, то стане OxFD. Навіщо це робиться, підкаже наступний рядок програми.

Рядок 21 містить оператор присвоювання, але, порівняно з рядком 19, змінна "а" та регістр порту помінялися місцями. У мові Сі така рокіровка призводить до заміни операції читання з порту операцією запису в порт. У порт «В» буде виведений код 0xFE (якщо кнопка SB1 не натиснута) або код 0xFD (якщо кнопка SB1 натиснута). У першому випадку індикатор HL1 буде погашено, у другому - світитиметься, чого й вимагалося досягти згідно з технічним завданням.

Рядки 22, 23 містять закривають фігурні дужки. Якщо подумки провести від них дві вертикальні лінії «знизу-вгору», то вони вкажуть прямо на дужки, що відкривають, в рядках 19 і 12. Дужка в рядку 22 вказує на повтор циклу в рядках 19…21. Скобка в рядку 23 починається в першій зліва позиції, отже, досягнуто кінця функції «main», а значить і основний програми.

Рядок 24 містить коментарі про номер версії WinAVR і довжину кодів прошивки, що дуже корисно при компіляції програми іншими користувачами. Відомо, що версії WinAVR сумісні між собою не так на 100%, чому є наочні приклади. Отже, довжина скомпилированного коду одного й того ж лістингу може відрізнятись від релізу до релізу. Практичний висновок - компілювати програму треба спочатку тим пакетом WinAVR, який вказаний у рядку 24, а вже потім на більш старій або новішій версії, звіряючись з отриманою довжиною кодів як з перевірочною контрольною сумою.

Уважний читач має право зауважити, що на етапі складання лістингу Сі-програми неможливо було заздалегідь розрахувати, який обсяг займають коди пам'яті MK. Чесно кажучи, напис «114 байти (2.8%)» було дописано пізніше, після компіляції програми. В наявності наочний приклад тієї самої зворотний зв'язок, що у структурної схемою на Рис. 6.1 була позначена пунктиром між блоками "К" і "Л".

Рядок 25 повністю порожній, але на відміну від рядків 5 і 9, він означає фізичне закінчення лістингу. Без цього завершального рядка компілятор видає м'яке, але все-таки попередження: Warning: no newline at end of file (Увага: відсутня нова лінія в кінці файлу).

Перш ніж цінні папери або криптовалютні монети стануть доступними трейдерам на торгових майданчиках, вони повинні пройти складний процес відбору та бути включені до лістингу. Розбираємо простими словами, що таке лістинг на біржі – як на фондовій, так і криптовалютній, які головні етапи необхідно пройти, щоб опинитись у списку, основні вигоди, які отримує при цьому компанія, у чому суть делістингу.

Що таке листинг

Поняття лістингу зустрічається в різних сферах нашого життя:

  • Фондові та криптовалютні біржі- Вони і будуть темою цієї статті. Тут йдеться про додавання цінних паперів або криптомонет у списки торгових платформ.
  • В торгівлі- Це передбачає додавання продукції того чи іншого виробника в асортимент магазину.
  • У програмуванні– це вихідний код (текст) програми, який з допомогою компілятора перетворюється на виконуваний код.
  • У нерухомості– тут підписуються договори на лістинг між власником нерухомості та торговим агентом, який займається її продажем за комісійні.

Дві останні галузі ми не розглядатимемо. Нас цікавить лістинг на , а також криптовалютний.

Лістинг та делістінг цінних паперів

Лістинг з'явився у нашому лексиконі від слова list, що з англійської перекладається як «список». Лістинг цінних паперів на фондовій біржі – це і є процедура додавання акцій, облігацій компаній до списку інструментів, що котируються на платформі. Після цього вони стають доступні для купівлі та продажу на ній.

Пройшовши процедуру лістингу, цінні папери потрапляють до торгового списку біржі

Часто лістингом учасники ринку називають сам список. При цьому у кожного майданчика цей список свій.

Ініціатором лістингу найчастіше виступає компанія-емітент, однак у поодиноких випадках виявити бажання включити ті чи інші цінні папери до свого списку, якщо вони вже мають великий попит серед трейдерів по неформальних каналах, може й сама біржа.

Для компаній лістинг на біржі має велику кількість переваг, тому не дивно, що підприємства докладають чимало зусиль, щоб пройти цю процедуру.

Біржовий лістинг важливо не плутати з IPO. У першому випадку компанія прагне потрапити до котирувального списку певного торгового майданчика. А IPO передбачає, що компанія перетворюється на публічну та її цінні папери стають доступні інвесторам не тільки через , але й інші канали, наприклад, через свої відділення.

Етапи лістингу

Процедура лістингу передбачає кілька етапів, які необхідно пройти компанії-емітенту, перш ніж папери стануть доступні інвесторам.

  1. Починається все з подання заяви. Зробити це може як сам емітент, і особа, що представляє інтереси компанії.
  2. Далі настає стадія експертиз. Представники біржі аналізують як цінних паперів, і всі доступні дані компанії. Досліджується рентабельність підприємства, ліквідність його активів. Компанія зобов'язана надати всю фінансову звітність, зібрану останні кілька років.
  3. Спеціальна комісія розглядає результати експертиз та вирішує додавати цінні папери у свій лістинг або відхилити заявку.
  4. Якщо рішення позитивне, обидві сторони – компанія та біржа, укладають угоду.

Процедура в середньому займає близько 1-2 місяців. Щоб залишатися у списку, емітенту потрібно, як правило, раз на квартал, подавати потрібні дані біржі.

Правила лістингу, які пред'являються торговими майданчиками до компаній, відрізняються. Одні можуть допускати до лістингу лише підприємства, капіталізація яких становить щонайменше 50 мільйонів доларів, час присутності над ринком – від трьох років. Інші можуть як підвищувати, і знижувати планку цих та інших вимог.

Якщо виконані не всі умови, проте папери цікаві біржі, вони потрапляють на попередній список паперів – його ще називають предлистінг. Цими акціями інвестори також можуть торгувати, проте поза стінами біржі та торговим майданчиком відповідальності за них не несе.

Рівні лістингу

Переважно на біржах представлено кілька рівнів лістингу. В перший преміальнийпотрапляють найбільш ліквідні папери із високим рівнем надійності.

До компаній другого рівняпред'являються не такі високі вимоги. І найнижчі для підприємств, які претендують на третій, так званий некотирувальний список. Інвестори, які купують папери компаній цього рівня, варто самостійно ретельно аналізувати їхню благонадійність.

Наприклад, на діє Основний та Альтернативний майданчики. Перша ділиться на два рівні: «Стандарт» та «Преміум». Альтернативний ринок призначений для дрібних і середніх підприємств, що розвиваються, які допускаються сюди за спрощеною процедурою.

Періодично майданчики можуть підвищувати або навпаки знижувати рівні лістингу облігацій, акцій, а то й взагалі проводити їх делістінг.

Види лістингу

Розрізняють первинний та вторинний лістинг.

Первинний лістингпередбачає, що акції доступні інвесторам на біржовому майданчику всередині країни, де зареєстровано компанію.

При вторинний лістингпапери виводяться на міжнародні ринки та потрапляння до списків зарубіжних платформ. Зробити це можна лише якщо пройдено етап первинного лістингу.

Існує ще подвійний лістинг,при якому компанія послідовно прагне потрапити до списків котирування кількох торгових майданчиків рідної країни.

А також крос-листинг– у цьому випадку підприємство надсилає заявки на додавання до списків кількох біржових платформ у різних країнах. При цьому якщо одна з них схвалює додавання цінних паперів, на інших компанія має можливість завершити процедуру лістингу за спрощеною схемою. Це скорочує як матеріальні витрати, а й час розгляду заявки.

У чому переваги емітента

Компанії недарма докладають зусиль, щоб потрапити до біржових лістингів, оскільки це обіцяє їм низку вигод. По-перше, підвищується їхня інвестиційна привабливість, а в результаті легше залучати кошти для подальшого розвитку. До плюсів також віднесемо:

  • зростання капіталізації підприємства зі збільшенням попиту випущені папери;
  • підвищення популярності та довіри у ділових колах;
  • збільшення ліквідності акцій, облігацій;
  • можливість додавання до списків зарубіжних бірж;
  • в окремих випадках можна на податкові пільги.

Проте не варто забувати, що відтепер до діяльності компанії буде висувати підвищена увага, а будь-які дії будуть моментально позначатися на вартості акцій. Крім того, процедура лістингу не є безкоштовною. Всі експертизи, що проводяться, коштують грошей.

Що це дає інвесторам

Головне – упевненість. Інвестори, вкладаючи гроші в акції компанії, знають, що її благонадійність перевірено фахівцями. Присутність у біржовому лістингу позбавляє їх самостійних перевірок благонадійності підприємства.

Що таке делістінг

Якщо цінні папери і потрапили до котирувального листа біржі, немає гарантії, що вони залишаться назавжди. За певних умов майданчик може викреслити їх із нього. Відбувається це у разі, наприклад, якщо емітент перестає відповідати умовам біржі, не виконав взяті зобов'язання, оголошує себе банкрутом тощо.

Також призвести до делістінгу може і вартість акцій, яка не зростає з часом, що свідчить про низький попит. Трапляється, що ініціатором делістингу виступає сама компанія, наприклад, при злитті підприємств.

Лістинг криптовалют

Про лістинг часто йдеться і в криптовалютному середовищі. Тут у торговому списку біржових майданчиків прагнуть опинитися цифрові монети або токени.

Криптовалютні проекти прагнуть потрапити в лістинги популярних бірж

Вимоги до лістингу на криптобірж різняться. Потрапити на великі відомі майданчики набагато складніше, ніж дрібні. Тому більшість проектів починають з невеликих торгових платформ.

Ціна запитання

Одне з головних питань – вартість . Маловідомі біржі можуть додати криптовалюти в лістинг взагалі безкоштовно. Потрапляння до списків відомих платформ може коштувати тисячі, а то й десятки тисяч доларів – гроші беруть за аналіз монети перед лістингом. Хоча бувають і винятки.

Біржа Binance, наприклад, повідомила цієї осені, що комісії, які стягуються за лістинг, підуть на фінансування благодійних проектів. При цьому фіксованих цін не існує - розробники самі визначають скільки хочуть заплатити за лістинг. Керівництво Poloniex стверджує, що грошей за лістинг не бере.

На початку року журналісти Business Insider опублікували статтю, згідно з якою мінімальний поріг для входження в лістинг криптобірж для ICO-проектів становить 50 тисяч доларів, а в окремих випадках може сягати 1 мільйона доларів.

Також були випадки, коли керівництво бірж траплялося на хабарі за включення монет у лістинг. Як приклад можна навести біржу Coinnest – її операційному та технічному директорам заплатили близько 890 тисяч доларів за додавання до торгового списку криптовалюти S-coin.

Як це працює

Щоб токен потрапив у лістинг, найчастіше на вибраному майданчику необхідно подати заявку та заповнити анкету. Однак, популярні монети біржі можуть включати в лістинг і самостійно, не чекаючи, поки команда проекту запропонує зробити це. Наприклад, кожної біржі обов'язково присутній биткоин (BTC), і, зазвичай, Ethereum (ETH).

Які питання найчастіше зустрічаються в анкеті:

  • назва та опис монети;
  • дата запуску основної мережі, а також самої платформи;
  • посилання на Github;
  • посилання на Білу книгу проекту;
  • посилання на соціальні мережі;
  • чи є майнінг у мережі та чи був премайнінг;
  • максимальна емісія монет тощо.

Нерідко біржі проводять також конкурси серед своїх користувачів – ті голосують за запропоновані криптовалюти, і монету, що перемогла, додають з котирувального списку.

Huobi Global наприкінці літа 2018 запустила майданчик для автоматичного лістингу криптовалют. З її допомогою біржа має намір прискорити процес додавання токенів до торгового списку та зробити його прозорим.

Важливі нюанси

Перше, на що дивляться біржі – це цінність монети, її корисність для спільноти. На другому місці – безпека проекту, оскільки якщо криптомережа буде зламана, постраждає також і біржа. Обов'язково цікавляться професіоналізмом та репутацією команди.

Наприклад, на Bittrex існує попередній етап розгляду заявки та поглиблений. Якщо фахівці компанії вважають на попередньому етапі, що монета гідна потрапити до лістингу біржі, починається ретельне вивчення її технічних характеристик, інноваційних можливостей, відповідності вимогам платформи.

Монети, які можуть бути визнані цінними паперами, біржі намагаються не додавати. Наприклад, Poloniex відразу пропонує розробникам ознайомитися з тестом Хоуї, щоб визначитись може токен підпасти під ці критерії чи ні.

Винятком серед великих платформ є біржа Coinbase, яка отримала відповідне схвалення регуляторів і може офіційно оперувати токенами, що мають властивості цінних паперів.

Що цікаво, якщо актив суперечитиме законодавству окремої країни, він може бути недоступним для користувачів із певних юрисдикцій.

«Ефект бірж»

Після додавання в лістинги популярних криптобірж, вартість монет зазвичай різко зростає - в середньому на 25-30%. Ця закономірність навіть отримала назву ефект бірж. Відбувається це завдяки тому, що про монету дізнається більше користувачів, вона стає відомою, підвищує на неї попит. Однак найчастіше цей зліт короткочасний і незабаром вартість починає знижуватися.

Трапляються і ситуації, коли ціна токенів після потрапляння до торгових списків бірж, навпаки, падає. Відбувається це найчастіше тоді, коли проект потрапляє в лістинг відразу після того, як інвестори, що вклалися під час токенсейлу, прагнуть швидше підзаробити на монеті, активно зливаючи її на біржі.

Делістинг криптомонет виробляють з низки причин:

  • низький інтерес із боку трейдерів;
  • зміни у законодавстві;
  • злом блокчейна криптомережі;
  • відмова розробників від подальшої підтримки монети;
  • скарги користувачів.

Видаляються токени, як правило, не відразу – біржа пропонує кілька тижнів трейдерам на закриття позицій і виведення коштів на власні гаманці.

Лістинг у торгівлі

Поняття лістингу є також у торгівельній сфері. Коли постачальник хоче, щоб його продукція продавалася, наприклад, на полицях великої торгової мережі, спочатку необхідно домовитися з керівництвом компанії про додавання свого товару в лістинг.

Якщо товар не має попиту у покупців, він також може пройти процедуру делістингу, і в цьому випадку зникає з прилавків магазину.

При компіляції програми можна встановити параметр "l" (listing):

Тоді окрім файлу з об'єктним кодом sum. objбуде створений файл з лістингомsum. lst:

  • 1; sum. asm - програма, що обчислює S = A + B
  • 2 0000 data segment
  • 3 0000 0001 a dw 01h
  • 4 0002 0002 b dw 02h
  • 5 0004 ???? s dw?
  • 6 0006 data ends
  • 7 0000 code segment
  • 8 assume ds:data
  • 9 0000 BA 0000 begin: mov dx, data
  • 10 0003 8E DA mov ds, dx
  • 11 0005 A1 0000r mov ax, a
  • 12 0008 03 06 0002r add ax, b
  • 13 000C A3 0004r mov s, ax
  • 14 000F B8 4C00 mov ax, 4C00h
  • 15 0012 CD 21 int 21h
  • 16 0014 codeends
  • 17 endbegin

Лістинг - це таблиця, що містить чотири стовпці:

    Номер рядка.

    Адреса всередині сегмента, тобто від початку (зміщення).

    Вміст пам'яті за адресами. У сегменті даних – це значення змінних, у сегменті коду – це машинні коди команд.

    Асемблерний код.

Коментарі в лістингу також зберігаються, просто тут для економії місця опущені.

З лістингу видно, що командам процесора відповідають лише рядки 9-15. Інші рядки відповідають т.з. директивам асемблера.

У будь-якій справі фігурує інформація різних рівнів. Є інформація безпосередньо про завдання, а є інформація про інформацію – метаінформація. Це, наприклад, різні пояснення, вказівки тощо. У вихідному коді мовою асемблера є інформація двох типів:

    команди – інформація для процесора;

    директиви - інформація для самого асемблера, як скомпілювати програму: як перевести команди машинною мовою і як розмістити дані.

Тут є аналогія із виділенням типів команд. Команди передачі, передачі управління та арифметично-логічні команди несуть інформацію про завдання, а команди машинного управління - про умови її виконання, тобто. теж є метаінформацію.

У програмі є такі директиви:

    segment – ​​директива оголошення початку сегмента;

    dw (define word) - директива визначення даних (виділення та ініціалізації області пам'яті) розміром 16 біт;

    ends (end segment) – директива оголошення кінця сегмента;

    assume – директива призначення сегменту сегментного регістру;

    end - директива вказівки кінця програми, її аргументом має бути позначка першої команди програми - точки входу в програму.

Є також такі директиви визначення даних:

    db (define byte) - директива визначення області пам'яті 8 біт;

    dd (define double word) - директива визначення області пам'яті 32 біта.

Існують директиви, перед назвою яких ставиться крапка. З такого роду директив нам потрібні лише директиви вказівки використовуваного набору команд тієї чи іншої моделі процесора, наприклад:

    386 – використовуються несистемні команди процесора i80386;

    386p- використовуються всі команди процесораi80386, у тому числі системні.

Рядки 3-5 містять директиви визначення змінних A, BіS. У сукупності рядки 3-5 та 9-15 містять інформацію для процесора - програму, що включає команди та дані. Вони безпосередньо відображаються на згадку про комп'ютер.

Який може бути прочитаний людиною. В узагальненому сенсі – будь-які вхідні дані для транслятора. Вихідний код транслюється в виконуваний кодцілком до запуску програми за допомогою компілятора або може виконуватися відразу за допомогою інтерпретатора.

Призначення

Вихідний код або використовується для отримання об'єктного коду або виконується інтерпретатором. Зміни виконуються лише над вихідним, з наступним повторним перетворенням на об'єктний.

Інше важливе призначення вихідного коду - як опис програми. За текстом програми можна поновити логіку її поведінки. Для полегшення розуміння вихідного коду використовуються коментарі. Існують також інструментальні засоби, що дозволяють автоматично отримувати документацію за вихідним кодом – т.з. генератори документації.

Крім того, вихідний код має багато інших застосувань. Він може використовуватись як інструмент навчання; програмістам-початківцям буває корисно досліджувати існуючий вихідний код для вивчення техніки та методології програмування. Він також використовується як інструмент спілкування між досвідченими програмістами завдяки своїй лаконічній та недвозначній природі. Спільне використання коду розробниками часто згадується як фактор, що сприяє покращенню досвіду програмістів.

Програмісти часто переносять вихідний код (у вигляді модулів, у наявному вигляді або з адаптацією) з одного проекту до іншого. Це називається повторним використанням коду.

Вихідний код - найважливіший компонент процесу портування програмного забезпечення інші платформи. Без вихідного коду будь-якої частини програмування або занадто складно, або взагалі неможливо.

Організація

Вихідний код певної частини програмного забезпечення (модуля, компонента) може складатися з одного або декількох файлів . Код програми не обов'язково пишеться лише однією мовою програмування. Наприклад, часто програми, написані мовою Сі, з міркувань оптимізації містять вставки коду мовою асемблера. Також можливі ситуації, коли деякі компоненти або частини програми пишуться різними мовами, з наступним складанням в єдиний модуль, що виконується за допомогою технології, відомої як компонування бібліотек ( library linking).

Складне програмне забезпечення при збиранні вимагає використання десятків або навіть сотень файлів із вихідним кодом. У таких випадках для спрощення збирання зазвичай використовуються файли проектів, що містять опис залежностей між файлами з вихідним кодом і описують процес збирання. Ці файли також можуть містити параметри компілятора та середовища проектування. Для різних середовищ проектування можуть застосовуватися різні файли проекту, причому в деяких середовищах ці файли можуть бути в текстовому форматі, придатному для безпосереднього редагування програмістом за допомогою універсальних текстових редакторів, в інших середовищах підтримуються спеціальні формати, а створення та зміни файлів здійснюється за допомогою спеціальних інструментальних програм. Файли проектів зазвичай включають у поняття вихідний код. Часто під вихідним кодом мають на увазі і файли ресурсів, що містять різні дані, наприклад, графічні зображення, потрібні для збирання програми.

Для полегшення роботи з вихідним кодом та для спільної роботи над кодом командою програмістів використовуються системи управління версіями.

Якість

На відміну від людини, для комп'ютера немає "добре написаного" або "погано написаного" коду. Але те, як написаний код, може сильно впливати на процес супроводу ПЗ. Про якість вихідного коду можна судити за такими параметрами:

  • читання коду (у тому числі наявність коментарів до коду);
  • легкість у підтримці, тестуванні, налагодженні та усуненні помилок, модифікації та портуванні;
  • економне використання ресурсів: пам'яті, процесора, дискового простору;
  • відсутність зауважень, що виводяться компілятором;
  • відсутність «сміття» - змінних, недосяжних блоків коду, непотрібних застарілих коментарів і т. д.;
  • адекватна обробка помилок;
  • можливість інтернаціоналізації інтерфейсу.

Невиконуваний вихідний код

Копілефтні ліцензії для вільного програмного забезпечення вимагають поширення вихідного коду. Ці ліцензії часто використовуються також для робіт, які не є програмами, наприклад, документації, зображень, файлів даних для комп'ютерних ігор.

У разі вихідним кодом вважається форма даної роботи, переважна її редагування. У ліцензіях, призначених не тільки для програмного забезпечення, вона також може називатися версією в «прозорому форматі». Це може бути, наприклад:

  • для файлу, стисненого із втратою даних – версія без втрат;
  • для рендеру векторного зображення або тривимірної моделі - відповідно, векторна версія та модель;
  • для зображення тексту - такий самий текст у текстовому форматі;
  • для музики - файл у внутрішньому форматі музичного редактора;
  • і нарешті, сам файл, якщо він задовольняє зазначеним умовам, або якщо зручнішої версії просто не існувало.

Див. також



Сподобалась стаття? Поділіться їй