Eiffel
  • welcome
  • documentation
  • resources
  • contribute
  • blogs
  • download
  • Sign in
  • Eiffel
    • Overview
      • Two-Minute fact sheet
      • Your next project in Eiffel
      • Learning Eiffel
      • Common myths and misconceptions about Eiffel
    • Tutorials
      • Invitation to Eiffel
        • I2E: What Must I Know First
        • I2E: Design Principles
        • I2E: Object-Oriented Design
        • I2E: Classes
        • I2E: Types
        • I2E: Design by Contract and Assertions
        • I2E: Exceptions
        • I2E: Event-Driven Programming and Agents
        • I2E: Genericity
        • I2E: Inheritance
        • I2E: Polymorphism and Dynamic Binding
        • I2E: Combining Genericity and Inheritance
        • I2E: Deferred Classes and Seamless Development
        • I2E: Putting a System Together
        • I2E: Invitation to Eiffel Copyright
      • Mini How-tos
        • NUMERIC to STRING
        • Iterating on a LIST
        • Removing object while iterating on a LIST
        • Managing CTRL+C in console application
      • Tutorial
        • ET: Overview
        • ET: General Properties
        • ET: The Software Process in Eiffel
        • ET: Hello World
        • ET: The Static Picture: System Organization
        • ET: The Dynamic Structure: Execution Model
        • ET: Genericity and Arrays
        • ET: Design by Contract (tm), Assertions and Exceptions
        • ET: Inheritance
        • ET: Instructions
        • ET: Once routines and shared objects
        • ET: Other Mechanisms
        • ET: Agents
        • ET: Lexical Conventions and Style Rules
        • ET: To Learn More
        • ET: Eiffel Tutorial Copyright
    • Language
      • Quick Reference
        • Syntax
        • Expressions
          • Conditional
          • Manifest array
        • Types
        • Reserved words
      • Void-safe programming
        • Background and tools
        • New void-safe project
        • Converting existing software to void-safety
          • Void-safe changes to Eiffel libraries
          • Mixing void-safe and void-unsafe software
        • What makes a Certified Attachment Pattern
    • Papers
      • Eiffel as an expression language
      • Void-safety: how Eiffel removes null-pointer dereferencing
      • Books
        • Touch of Class
        • OOSC2
        • ECMA Standard 367
        • Eiffel: The Language
        • OO Component Libraries
        • SOOSA
        • EiffelStudio Guided Tour
    • Coding Standards
      • Eiffel Code Comments
      • Eiffel Coding Standard
      • Local Declaration Guidelines
      • Style Guidelines
    • Examples
      • Introduction to the Examples Book
      • Example: Command line arguments
      • Example: Environment variables
      • Example: File IO
      • Example: Polymorphism
      • Example: Reverse a string
      • Example: Self-initializing attributes and assigner commands
      • Example: Sieve of Eratosthenes
      • Example: Sleep
  • EiffelStudio
    • Getting started
      • Setup and installation
        • Software Installation for EiffelStudio
          • FreeBSD
          • HP OpenVMS
          • HP Tru64 UNIX
          • HP-UX
          • Linux
          • Mac OS X
          • OpenBSD
          • SGI Irix
          • Solaris
          • Windows
            • MS C compiler
        • Third Party Tools Installation Help
      • Introducing EiffelStudio
    • Tutorials
      • Copying the Example Files
      • Starting EiffelStudio and Opening a Project
      • Compiling and Executing a System
      • A Look at the Project Directory
      • Starting To Browse
      • Viewing Classes
      • Customizing the tools layout and toolbars
      • Producing and Exporting Documentation
      • Browsing Features
      • Retargeting Through Pick-and-Drop
      • Recompiling and Editing
      • Handling Syntax and Validity Errors
      • Debugging and Run-time Monitoring
      • Using AutoTest
        • Testing: Background and basics
        • Create a manual test
        • Execute tests
        • Using extracted tests
        • Using generated tests
        • Managing tests
      • Computing Project Metrics
      • Graphics-based Design
      • Using automatic class licensing
      • How EiffelStudio Compiles
      • Papers
      • The Command-Line Compiler
      • Executing a System Within and Without EiffelStudio
      • Writing Filters with EFF
      • Manual identification and copyright
    • Reference
      • Release Notes
        • 25.12
        • 25.02
        • 24.05
        • 23.09
        • 22.12
          • 22.12 - macosx
        • 22.05
        • 21.11
        • 20.11
        • 20.05
        • 19.12
        • 19.05
        • 18.11
        • 18.07
        • 18.01
        • 17.05
        • 17.01
        • 16.05
        • 15.12
        • 15.08
        • 15.01
        • 14.05
        • 13.11
        • 7.x
          • 7.3
          • 7.2
          • 7.1
          • 7.0
        • 6.x
          • 6.8
          • 6.7
          • 6.6
          • 6.5
          • 6.4
          • 6.3
          • 6.2
          • 6.1
          • 6.0
        • 5.x
          • 5.7
          • 5.6
          • 5.5
          • 5.4
          • 5.3
          • 5.2
          • 5.1
          • 5.0
      • General Description
        • EiffelStudio interface mechanisms
          • Pick-and-drop mechanism
          • Pick-and-drop shortcut
          • Toolbar customization
        • EiffelStudio: All shortcuts
        • EiffelStudio window overview
        • Main toolbars
        • EiffelStudio: Key shortcuts
      • Browsing tools
        • Address bars
          • Main address bar
          • Context tool address bar
          • Change data share mode
        • Groups tool
          • System tree representation
          • New cluster command
          • New class command
          • Locate command
        • Features tool
          • Feature tree
          • New feature command
        • Favorites tool
          • Favorites tree
          • Favorites menu
          • Organize Favorites dialog
            • New favorite class command
            • Create favorite folder command
            • Move to Folder command
            • Remove favorite command
        • Windows tool
          • Window list
          • Window menu
          • Window related commands
        • Search tool
      • Editor
        • Cursor moves
        • Selection
        • Clipboard functionality
        • History functionality
        • Search functionality
        • Automatic completion
          • Syntax auto complete
          • Feature call auto complete
          • Class name auto complete
        • Code Templates
        • Operations on text blocks
          • Comment and uncomment lines
          • Indent and unindent selection
          • Embed lines in 'if then...end' or in 'debug...end'
        • Edit menu commands
        • Editor customization
      • Contract Editor tool
      • Project Settings
        • System Options
        • General Target Options
          • Language and Capabilities
          • Assertion Options
          • Group Options
          • Advanced Options
            • Warning Options
            • Debug Options
            • Externals Options
            • Tasks Options
            • Variables
            • Type mapping
      • Compiler
        • Melting Ice Technology
        • Supported C compilers
        • Command line
          • Eiffel compatibility options
          • Using command line options
          • Batch compilation
          • Command line interactive mode
            • Compile (and run) menu
            • Class menu
            • Feature menu
            • System menu
            • Testing menu
            • Profile menu
            • Documentation menu
          • finish_freezing utility
        • Dynamic library generation
          • Dynamic library builder
          • Definition file
          • Dynamic library: Generated files
        • Syntax level variant settings by version
        • ECMA-367 vs implementation
        • ETL 2nd printing vs implementation
        • Compiler History
          • 18.07
          • 16.05
          • 15.12
          • 15.08
          • 14.05
          • 13.11
          • 7.3
          • 7.2
          • 7.1
          • 7.0
          • 6.x
            • 6.8
            • 6.7
            • 6.6
            • 6.5
            • 6.4
            • 6.3
            • 6.2
            • 6.1
            • 6.0
          • 5.x
            • 5.7
            • 5.6
            • 5.5
            • 5..4
            • 5.3
            • 5.2
            • 5.1
            • 5.0
              • Assertions checking configuration changes
              • EiffelThread differences from 4.5 to 5.0
              • Compiler differences from 4.5 to 5.0
        • Errors, warnings
          • Legacy code
            • VD81
            • VWMA(1)
      • Code Analyzer
        • Getting Started
        • Running the Analyzer
        • Interpreting Results
        • Customization
        • Rules
          • CA001
          • CA002
          • CA003
          • CA004
          • CA005
          • CA006
          • CA010
          • CA011
          • CA013
          • CA017
          • CA020
          • CA023
          • CA024
          • CA025
          • CA028
          • CA032
          • CA033
          • CA034
          • CA071
      • Debugger
        • Execution commands
          • Run and stop at breakpoints
          • Run with arguments
          • Execution profiles
          • Run without breakpoints
          • Run a finalized executable
          • Step into a feature
          • Execute one line at a time
          • Step out of a feature
          • Pause an application
          • Stop a debugged application
          • Attach application
          • Detach application
        • Breakpoints
          • Breakpoint editing
          • Breakpoint commands
          • Breakpoint information command
          • Breakpoint menu
        • Call stack tool
          • Call stack tool: Interface
          • Information relative to a stack element
          • Supported exceptions
          • Save call stack
        • Execution record and replay
          • Record execution
          • Replay (recorded) execution
        • Object tool
          • Attribute symbols
          • Debug output
          • Set slice size command
          • Object Viewer (also known as Expanded display)
          • Remove object command
        • Expression evaluation
          • Evaluation tool or Watch tool
          • New expression dialog
        • Debuggee's Object Storage
        • Threads tool
        • Exceptions handling tool
        • Stack overflow prevention
        • Debugging tips with the objects grid view
        • Debugging preferences
        • Command line debugger
        • Debugging limitations
      • Error List Tool
      • Diagram tool
        • Notation
        • Diagram toolbar
        • Views
        • Contexts
        • Diagram tool: Code generation
      • Metrics tool
        • Requirements
        • Definitions
          • Attributes, metrics and measures
          • Units
          • Metric framework and theory
          • Elementary and composite metrics
          • Raw metrics and selection criteria
          • Selection Criteria
          • Predefined raw metrics
          • Scopes
          • Domains
          • Measurement archive
          • Under the Hood - How metrics work
          • Criterion References
        • User interface basics
          • Metric Evaluation Panel
          • Detailed Result Panel
          • Metric Definition Panel
          • Metric History Panel
          • Metric Archive Panel
      • Console tool
      • Outputs tool
        • General output pane
        • External compilation pane
      • Eiffel Information System
        • EIS: Outgoing
          • Information Tool
            • Browsing Information
            • Change Analysis
            • Annotation Management
            • Protocols
            • Variable Definition
        • EIS: Incoming
          • Eiffel Scheme Syntax
          • EIS incoming Examples
      • AutoTest
        • The AutoTest Interface
        • The Eiffel Test Wizard
      • Source Control
      • Wizards and dialogs
        • Profiler Wizard
          • Profiler wizard guided tour
            • Select the Compilation mode
            • Reuse or Generate an Execution Profile
            • Select a Run-time information record to generate the Execution Profile
            • Select the information you need and formulate your query
            • Profile query window
          • Profiler How To's
            • How to set up a Profiler Configuration File
        • Dialogs
          • New feature dialog
            • New feature dialog overview
            • New procedure layout
            • New function layout
            • New attribute layout
            • New feature dialog: feature properties modification
              • Feature clauses
              • Name field
              • Argument list
              • Header comment
              • Precondition
              • Local variable
              • Feature body
              • Postcondition
              • Type selection
              • Invariant field
              • Set-procedure
          • Error wizard
          • External commands editor dialog
      • EiffelStudio Preferences
        • Preference window overview
        • Preferences Reference
          • General Preferences
          • Interface
            • Development Window Preferences
            • Discardable dialogs
          • EiffelStudio Tools Preferences
            • Context Tools
            • EiffelStudio Diagram Tool Preferences
          • Editor Preferences
            • General Editor Preferences
            • Eiffel Editor Preferences
              • Syntax automatic completion preferences
                • Keywords automatic completion preferences
                • Keyword completion customization
                • Default values for keyword completion preferences
            • Keyboard shortcuts preferences
          • Debugger Preferences
          • Recent Project Preferences
      • Formatted information about compiled classes and features
        • Class views
          • Class formatters: Basic text view
          • Clickable view
          • Class formatters: Flat view
          • Contract view
          • Flat Contract view
          • Ancestors
          • Descendants
          • Clients
          • Suppliers
          • Attributes
          • Routines
          • Invariants
          • Creators
          • Deferred features
          • Once routines and constants
          • Class formatters: External features
          • Exported features
        • Feature views
          • Feature formatters: Basic text view
          • Feature formatters: Flat view
          • Feature formatters: Callers
          • Feature formatters: Assigners
          • Feature formatters: Creators
          • Feature formatters: Callees
          • Feature formatters: Assignees
          • Feature formatters: Creations
          • Feature formatters: Implementers
          • Feature formatters: Ancestor versions
          • Feature formatters: Descendant versions
          • Feature formatters: Homonyms
    • EiffelStudio How To's
      • EiffelStudio: Starting a project
        • EiffelStudio: Creating a new project
        • Retrieving a project from a configuration file
      • Browsing
        • Searching
          • Looking for a cluster
          • Looking for a class
          • Looking for a feature
          • Looking for an expression in text
        • Viewing information about a component
          • Centering tools on a component
          • Viewing information about a cluster
          • Viewing information about a class
          • Viewing information about a feature
        • Opening new windows
      • Editing a project
        • Adding a cluster
        • Adding a library
        • Adding a class
        • Adding a feature
          • Opening the new feature dialog
          • Adding a procedure
          • Adding a function
          • Adding an attribute
        • Removing a cluster
        • Removing a class
        • Removing a feature
        • Moving a class
        • Changing project parameters
      • Compiling
        • Generating executables
        • Generating libraries
        • Setting the assertion level
        • Setting the syntax variant
        • Enabling the profiler
        • Using libraries
        • Tuning a program
        • Using threads
        • Clean compile
      • Running and debugging
        • Running an application
        • Interrupting an application
        • Exploring an application dynamic state
        • Using breakpoints
        • Handling exceptions
        • Using debug clauses
        • Setting the command line arguments
        • Profiling
        • Tracing
      • Designing a project
        • Switching to the diagram tool
        • Undoing and redoing
        • Altering the system
          • Creating a new class
          • Creating a new feature
          • Refactoring
            • Rename Class
            • Rename Feature
            • Pull up Feature
          • Deleting items
        • Managing links
          • Creating inheritance links
          • Creating client-supplier links
          • Creating aggregate client-supplier links
          • Using the link tool
          • Creating handles
        • Modifying the display
          • Showing or hiding links and labels
          • Changing system exploration depth
          • Removing items from a view
          • Changing colors of classes
          • Zooming a diagram
          • Retrieving all classes into a cluster
          • Iconifying and restoring a cluster
          • Change the Display Quality
          • Turn on Physics Mode
          • Switching between BON and UML View
          • Anchoring
          • Adjusting Physics Settings
          • Using the Cluster Legend
        • Managing views
          • Adding a view
          • Deleting a view
        • Exporting a diagram to PNG image file
      • How to analyze a project
        • Computing a measure
          • Evaluating a measure
          • Saving a measure
          • Viewing measure details
        • Handling new metrics
          • Defining new metrics
            • Defining derived metrics
            • Defining linear metrics
            • Defining ratio metrics
          • Managing new metrics
        • Handling archives
          • Creating an archive
          • Comparing to an archive
      • Generating documentation
        • Generating multi-format documentation
        • Generating XMI documentation
      • Customizing EiffelStudio
        • Setting the editor behavior
        • Changing texts display
        • Customizing toolbars
        • Making the context tool independent from the editor
        • Changing the default history size
        • Choosing classes to be ignored in BON diagrams
        • Customizing class text views
        • Configuring an external editor
        • Customizing EiffelStudio for Subversion commands
  • Solutions and Libraries
    • IRON Eiffel repository
    • .NET
      • .NET Installation instructions
      • Building a .NET application
      • The Eiffel for .NET language
        • Conventions
          • Eiffel for .NET Terminology
          • Eiffel Class and Feature Names
          • Type Organization
          • Constructors and Creation Procedures
          • Similar Types Occurring in Both Libraries
          • Eiffel reserved words
        • Eiffel for .NET
          • Eiffel Classes
          • Adding Class Features
          • Inheritance
          • Genericity
          • Design by Contract and Assertions
          • Exception Mechanism
          • Event Programming with Agents
          • Using Referenced Assemblies
          • Eiffel for .NET Compliance
          • Referenced Assembly Type and Feature Name Conversion
        • Eiffel for .NET Integration
          • Workarounds
          • NETCore execution
        • Known issues
      • Eiffel .NET samples
        • ADO .NET Samples
          • ADO.NET Sample
        • Console Samples
          • Calculator: console
        • Threads Samples
          • Pools
          • Timers
        • Winform Samples
          • Simple Hello world form sample
          • Message Box
          • Menus
            • Menu Details
          • MDI
            • MDI Details
          • Calculator: winform
          • GDI plus - text
          • Date Time Picker
          • Progress bar sample
          • Simple data binding
          • Tree view
      • Eiffel for ASP.NET Documentation
        • Writing ASP.NET pages in Eiffel
          • Eiffel for ASP.NET Installation
          • CodeDom: Getting Started
          • Using Eiffel (to write ASP.NET pages)
          • Names Mappings
        • The Eiffel CodeDom Provider
          • About the Code Document Object Model (CodeDom)
          • Installation
          • Supported Constructs
          • Configuration
          • Logging
          • Required Permissions
          • Common Scenarios
          • Eiffel Implementation
          • Limitations
        • Eiffel for ASP.NET Tools and Administration
          • Eiffel CodeDom Provider Manager
          • eSplitter
          • Name Mapper
    • Basic computing
      • External processes
      • EiffelBase
        • EiffelBase Tutorial
          • EiffelBase, The Kernel
            • Universal class and its features
            • Language-related facilities
            • Files, input, output
            • Persistence, storage, and retrieval
            • Access to internal properties
          • EiffelBase Data Structures Overview
            • EiffelBase, Abstract Container Structures: The Taxonomy
            • EiffelBase Data Structures, Lists
            • EiffelBase, Dispensers
            • EiffelBase, Trees
            • EiffelBase, Sets
            • EiffelBase, Tables
            • EiffelBase, Iteration
          • EiffelBase Support Cluster
        • EiffelBase Class Reference
        • EiffelBase Samples
          • EiffelBase Sample: Calculator
        • Free Eiffel Library License